前言
在电机控制、逆变器、半桥/全桥驱动、BUCK/BOOST 电源等场合中,ePWM 输出的两路互补 PWM 信号通常不能同时导通。否则上下桥臂可能发生直通,轻则发热,重则烧毁功率器件。
TI 的 TMS320F2837xD 系列 DSP 在 ePWM 模块中提供了 Dead-Band Generator,也就是 DB 死区模块。它可以在 ePWMxA 和 ePWMxB 输出之间自动插入死区时间,从而减少 CPU 软件干预。
本文结合 TMS320F2837xD Technical Reference Manual 中 ePWM 的图 15-33、图 15-34 以及 DBCTL 相关表格,系统整理 DB 模块的信号流向、OUT_MODE、POLSEL、IN_MODE 的作用,并重点讲清楚 AH、AL、AHC、ALC 四种模式的区别。手册中说明,DB 模块的核心功能包括:从单路 EPWMxA 输入生成带死区关系的 EPWMxA/EPWMxB 信号对,支持 AH、AL、AHC、ALC 等极性模式,并可分别添加上升沿延时 RED 和下降沿延时 FED。



在这里插入图片描述!](https://i-blog.csdnimg.cn/direct/381083be6fea43dc8073ce4b73f48400.png)
一、DB 死区模块在 ePWM 中的位置
ePWM 的基本信号链路可以简单理解为:
text
TB 时基模块
↓
CC 比较模块
↓
AQ 动作限定模块
↓
DB 死区模块
↓
TZ / PC / GPIO MUX
↓
EPWMxA / EPWMxB 引脚输出
其中 AQ 模块负责根据 CMPA、CMPB、CTR=ZERO、CTR=PRD 等事件生成原始 PWM 波形。DB 模块位于 AQ 后面,它不负责产生 PWM 占空比,而是在已有 PWM 波形基础上增加边沿延时和极性处理。
可以把 DB 模块理解成:
text
AQ 产生原始 PWM
↓
DB 对上升沿、下降沿进行延时
↓
根据极性模式决定是否反相
↓
输出 ePWMxA / ePWMxB
二、DB 模块的两个核心延时:RED 和 FED
DB 模块中最重要的两个延时是:
| 名称 | 全称 | 作用 |
|---|---|---|
| RED | Rising Edge Delay | 上升沿延时 |
| FED | Falling Edge Delay | 下降沿延时 |
1. RED:上升沿延时
RED 由 DBRED 寄存器控制。它会把指定输入信号的上升沿向后推迟一段时间。
text
原始信号:____|‾‾‾‾‾‾‾
RED 后:______|‾‾‾‾‾‾
2. FED:下降沿延时
FED 由 DBFED 寄存器控制。它会把指定输入信号的下降沿向后推迟一段时间。
text
原始信号:‾‾‾‾‾‾|____
FED 后: ‾‾‾‾‾‾‾‾|__
DBRED 和 DBFED 的数值本质上是计数值。若 HALFCYCLE=0,DB 计数器按 TBCLK 计数;若 HALFCYCLE=1,DB 计数器按 2 倍 TBCLK 计数,死区分辨率更高。手册中 DBCTL 的 HALFCYCLE 位说明了这两种计数时钟选择。
常用计算公式如下:
c
DeadBandTime = DBRED * TBCLK_period; // HALFCYCLE = 0
DeadBandTime = DBRED * TBCLK_period / 2; // HALFCYCLE = 1
例如 TBCLK = 100 MHz,则 TBCLK_period = 10 ns。
如果 HALFCYCLE=0,DBRED=100,则死区时间为:
text
100 × 10 ns = 1000 ns = 1 us
如果 HALFCYCLE=1,DBRED=100,则死区时间为:
text
100 × 5 ns = 500 ns
三、图 15-34 的核心信号流向理解
图 15-34 看起来比较复杂,但核心就是几个选择开关:
| 控制位 | 作用 |
|---|---|
| DBCTLIN_MODE | 选择 RED/FED 的输入来自 ePWMxA 还是 ePWMxB |
| DBCTLOUT_MODE | 选择是否启用 RED、FED |
| DBCTLPOLSEL | 选择 A 路、B 路是否反相 |
| DBCTLOUTSWAP | 选择是否交换 A/B 输出 |
| DBCTLDEDB_MODE | 双边沿 B 模式,可让 RED 和 FED 同时作用到 B 路 |
| DBCTLHALFCYCLE | 选择死区计数器时钟为 TBCLK 或 2×TBCLK |
手册图 15-34 展示了 DB 子模块的配置路径,S4/S5 用于选择输入源,RED/FED 分别进入上升沿延时和下降沿延时计数器,S2/S3 用于极性选择,S1/S0 用于选择 OUT_MODE,S6/S7 用于输出交换。
四、IN_MODE:RED 和 FED 的输入源选择
DBCTLIN_MODE 决定 RED 和 FED 的输入来自哪里。
| IN_MODE | RED 输入 | FED 输入 | 说明 |
|---|---|---|---|
| 00 | ePWMxA | ePWMxA | 最常用,A 路作为唯一输入源 |
| 01 | ePWMxB | ePWMxA | RED 来自 B,FED 来自 A |
| 10 | ePWMxA | ePWMxB | RED 来自 A,FED 来自 B |
| 11 | ePWMxB | ePWMxB | B 路作为唯一输入源 |
实际应用中,最常见配置是:
c
EPwm1Regs.DBCTL.bit.IN_MODE = 0; // 00:RED 和 FED 都使用 ePWMxA 作为输入源
也就是用 AQ 模块产生一路 ePWMxA 原始 PWM,然后 DB 模块自动生成两路带死区的 ePWMxA/ePWMxB 输出。
五、OUT_MODE:是否启用 RED 和 FED
OUT_MODE 是 DB 模块是否真正参与输出的关键。
| OUT_MODE | A path | B path | 含义 |
|---|---|---|---|
| 00 | InA | InB | DB 完全旁路,RED/FED 不起作用 |
| 01 | InA | FED | A 路旁路,B 路使用 FED |
| 10 | RED | InB | A 路使用 RED,B 路旁路 |
| 11 | RED | FED | RED 和 FED 全部启用,最常用 |
手册中说明,OUT_MODE=00 时 DB 模块被完全旁路,此时 POLSEL 和 IN_MODE 不起作用;OUT_MODE=11 时 DB 模块完全启用,即 RED 和 FED 都参与输出。
典型互补 PWM 死区配置一般使用:
c
EPwm1Regs.DBCTL.bit.OUT_MODE = 3; // 11:RED 和 FED 全部启用
六、POLSEL:AH、AL、AHC、ALC 的关键
POLSEL 是理解 AH、AL、AHC、ALC 的关键。
在典型配置下:
c
IN_MODE = 00; // ePWMxA 同时作为 RED 和 FED 输入
OUT_MODE = 11; // RED 和 FED 都启用
OUTSWAP = 00; // 不交换 A/B 输出
此时 POLSEL 的含义如下:
| POLSEL | 模式 | A 路是否反相 | B 路是否反相 | 模式名称 |
|---|---|---|---|---|
| 00 | AH | 不反相 | 不反相 | Active High |
| 01 | ALC | A 路反相 | B 路不反相 | Active Low Complementary |
| 10 | AHC | A 路不反相 | B 路反相 | Active High Complementary |
| 11 | AL | A 路反相 | B 路反相 | Active Low |
手册 DBCTL 的 POLSEL 位明确给出了这四种模式:00 为 AH,01 为 ALC,10 为 AHC,11 为 AL。
七、四种经典模式的通道流向
下面默认采用最常见配置:
c
IN_MODE = 00; // RED 和 FED 都来自 ePWMxA
OUT_MODE = 11; // RED 和 FED 全部启用
OUTSWAP = 00; // 不交换输出
DEDB_MODE = 0; // 普通 DB 模式
也就是:
text
ePWMxA 原始输入
├──> RED 上升沿延时 ──> A path ──> OutA
└──> FED 下降沿延时 ──> B path ──> OutB
1. AH 模式:Active High
AH 模式配置:
c
EPwm1Regs.DBCTL.bit.POLSEL = 0; // 00:AH
信号流向
#mermaid-svg-EPvJsS3WuH9JtASa{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-EPvJsS3WuH9JtASa .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-EPvJsS3WuH9JtASa .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-EPvJsS3WuH9JtASa .error-icon{fill:#552222;}#mermaid-svg-EPvJsS3WuH9JtASa .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-EPvJsS3WuH9JtASa .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-EPvJsS3WuH9JtASa .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-EPvJsS3WuH9JtASa .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-EPvJsS3WuH9JtASa .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-EPvJsS3WuH9JtASa .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-EPvJsS3WuH9JtASa .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-EPvJsS3WuH9JtASa .marker{fill:#333333;stroke:#333333;}#mermaid-svg-EPvJsS3WuH9JtASa .marker.cross{stroke:#333333;}#mermaid-svg-EPvJsS3WuH9JtASa svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-EPvJsS3WuH9JtASa p{margin:0;}#mermaid-svg-EPvJsS3WuH9JtASa .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-EPvJsS3WuH9JtASa .cluster-label text{fill:#333;}#mermaid-svg-EPvJsS3WuH9JtASa .cluster-label span{color:#333;}#mermaid-svg-EPvJsS3WuH9JtASa .cluster-label span p{background-color:transparent;}#mermaid-svg-EPvJsS3WuH9JtASa .label text,#mermaid-svg-EPvJsS3WuH9JtASa span{fill:#333;color:#333;}#mermaid-svg-EPvJsS3WuH9JtASa .node rect,#mermaid-svg-EPvJsS3WuH9JtASa .node circle,#mermaid-svg-EPvJsS3WuH9JtASa .node ellipse,#mermaid-svg-EPvJsS3WuH9JtASa .node polygon,#mermaid-svg-EPvJsS3WuH9JtASa .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-EPvJsS3WuH9JtASa .rough-node .label text,#mermaid-svg-EPvJsS3WuH9JtASa .node .label text,#mermaid-svg-EPvJsS3WuH9JtASa .image-shape .label,#mermaid-svg-EPvJsS3WuH9JtASa .icon-shape .label{text-anchor:middle;}#mermaid-svg-EPvJsS3WuH9JtASa .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-EPvJsS3WuH9JtASa .rough-node .label,#mermaid-svg-EPvJsS3WuH9JtASa .node .label,#mermaid-svg-EPvJsS3WuH9JtASa .image-shape .label,#mermaid-svg-EPvJsS3WuH9JtASa .icon-shape .label{text-align:center;}#mermaid-svg-EPvJsS3WuH9JtASa .node.clickable{cursor:pointer;}#mermaid-svg-EPvJsS3WuH9JtASa .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-EPvJsS3WuH9JtASa .arrowheadPath{fill:#333333;}#mermaid-svg-EPvJsS3WuH9JtASa .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-EPvJsS3WuH9JtASa .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-EPvJsS3WuH9JtASa .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EPvJsS3WuH9JtASa .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-EPvJsS3WuH9JtASa .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EPvJsS3WuH9JtASa .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-EPvJsS3WuH9JtASa .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-EPvJsS3WuH9JtASa .cluster text{fill:#333;}#mermaid-svg-EPvJsS3WuH9JtASa .cluster span{color:#333;}#mermaid-svg-EPvJsS3WuH9JtASa div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-EPvJsS3WuH9JtASa .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-EPvJsS3WuH9JtASa rect.text{fill:none;stroke-width:0;}#mermaid-svg-EPvJsS3WuH9JtASa .icon-shape,#mermaid-svg-EPvJsS3WuH9JtASa .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-EPvJsS3WuH9JtASa .icon-shape p,#mermaid-svg-EPvJsS3WuH9JtASa .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-EPvJsS3WuH9JtASa .icon-shape .label rect,#mermaid-svg-EPvJsS3WuH9JtASa .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-EPvJsS3WuH9JtASa .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-EPvJsS3WuH9JtASa .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-EPvJsS3WuH9JtASa :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ePWMxA 原始 PWM
RED 上升沿延时
FED 下降沿延时
A path 不反相
B path 不反相
OutA / ePWMxA
OutB / ePWMxB
特点
AH 模式下,A 路和 B 路都不反相。
text
OutA = RED 后的信号
OutB = FED 后的信号
它的含义是:两路输出都是高电平有效。A 路使用上升沿延时,B 路使用下降沿延时。
这种模式不一定是最常用的半桥互补输出方式,因为 A/B 两路不是通过 DB 内部反相得到的互补波形。它更适合某些外部驱动器内部已经做了极性处理的场合。
2. AHC 模式:Active High Complementary
AHC 是电机控制、逆变器、半桥驱动中最常见的模式之一。
配置:
c
EPwm1Regs.DBCTL.bit.POLSEL = 2; // 10:AHC
信号流向
#mermaid-svg-8D1NwaNFuQXPTzzy{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-8D1NwaNFuQXPTzzy .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-8D1NwaNFuQXPTzzy .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-8D1NwaNFuQXPTzzy .error-icon{fill:#552222;}#mermaid-svg-8D1NwaNFuQXPTzzy .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8D1NwaNFuQXPTzzy .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-8D1NwaNFuQXPTzzy .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8D1NwaNFuQXPTzzy .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8D1NwaNFuQXPTzzy .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-8D1NwaNFuQXPTzzy .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8D1NwaNFuQXPTzzy .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8D1NwaNFuQXPTzzy .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8D1NwaNFuQXPTzzy .marker.cross{stroke:#333333;}#mermaid-svg-8D1NwaNFuQXPTzzy svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8D1NwaNFuQXPTzzy p{margin:0;}#mermaid-svg-8D1NwaNFuQXPTzzy .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-8D1NwaNFuQXPTzzy .cluster-label text{fill:#333;}#mermaid-svg-8D1NwaNFuQXPTzzy .cluster-label span{color:#333;}#mermaid-svg-8D1NwaNFuQXPTzzy .cluster-label span p{background-color:transparent;}#mermaid-svg-8D1NwaNFuQXPTzzy .label text,#mermaid-svg-8D1NwaNFuQXPTzzy span{fill:#333;color:#333;}#mermaid-svg-8D1NwaNFuQXPTzzy .node rect,#mermaid-svg-8D1NwaNFuQXPTzzy .node circle,#mermaid-svg-8D1NwaNFuQXPTzzy .node ellipse,#mermaid-svg-8D1NwaNFuQXPTzzy .node polygon,#mermaid-svg-8D1NwaNFuQXPTzzy .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8D1NwaNFuQXPTzzy .rough-node .label text,#mermaid-svg-8D1NwaNFuQXPTzzy .node .label text,#mermaid-svg-8D1NwaNFuQXPTzzy .image-shape .label,#mermaid-svg-8D1NwaNFuQXPTzzy .icon-shape .label{text-anchor:middle;}#mermaid-svg-8D1NwaNFuQXPTzzy .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-8D1NwaNFuQXPTzzy .rough-node .label,#mermaid-svg-8D1NwaNFuQXPTzzy .node .label,#mermaid-svg-8D1NwaNFuQXPTzzy .image-shape .label,#mermaid-svg-8D1NwaNFuQXPTzzy .icon-shape .label{text-align:center;}#mermaid-svg-8D1NwaNFuQXPTzzy .node.clickable{cursor:pointer;}#mermaid-svg-8D1NwaNFuQXPTzzy .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-8D1NwaNFuQXPTzzy .arrowheadPath{fill:#333333;}#mermaid-svg-8D1NwaNFuQXPTzzy .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-8D1NwaNFuQXPTzzy .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-8D1NwaNFuQXPTzzy .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8D1NwaNFuQXPTzzy .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-8D1NwaNFuQXPTzzy .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8D1NwaNFuQXPTzzy .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-8D1NwaNFuQXPTzzy .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-8D1NwaNFuQXPTzzy .cluster text{fill:#333;}#mermaid-svg-8D1NwaNFuQXPTzzy .cluster span{color:#333;}#mermaid-svg-8D1NwaNFuQXPTzzy div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-8D1NwaNFuQXPTzzy .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-8D1NwaNFuQXPTzzy rect.text{fill:none;stroke-width:0;}#mermaid-svg-8D1NwaNFuQXPTzzy .icon-shape,#mermaid-svg-8D1NwaNFuQXPTzzy .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8D1NwaNFuQXPTzzy .icon-shape p,#mermaid-svg-8D1NwaNFuQXPTzzy .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-8D1NwaNFuQXPTzzy .icon-shape .label rect,#mermaid-svg-8D1NwaNFuQXPTzzy .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8D1NwaNFuQXPTzzy .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-8D1NwaNFuQXPTzzy .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-8D1NwaNFuQXPTzzy :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ePWMxA 原始 PWM
RED 上升沿延时
FED 下降沿延时
A path 不反相
B path 反相
OutA / ePWMxA
OutB / ePWMxB
特点
AHC 的核心是:
text
OutA = RED 后的信号
OutB = FED 后的信号取反
也就是 A 路不反相,B 路反相。
由于 B 路被反相,所以 OutA 和 OutB 形成互补输出,同时 RED 和 FED 在上下管切换时插入死区。
适用场景
AHC 通常用于上下桥臂驱动信号都是高电平有效的情况。例如:
text
OutA 高电平 → 上管导通
OutB 高电平 → 下管导通
由于上下管都是高电平有效,因此需要两路 PWM 在逻辑上互补。AHC 就是典型的"高有效互补"模式。
简单理解
text
AHC = Active High Complementary
= 高电平有效 + 互补输出
3. ALC 模式:Active Low Complementary
ALC 也是互补模式,但它和 AHC 的反相位置相反。
配置:
c
EPwm1Regs.DBCTL.bit.POLSEL = 1; // 01:ALC
信号流向
#mermaid-svg-1s08BhQcTL6ZJ2Yr{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-1s08BhQcTL6ZJ2Yr .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .error-icon{fill:#552222;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .marker.cross{stroke:#333333;}#mermaid-svg-1s08BhQcTL6ZJ2Yr svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1s08BhQcTL6ZJ2Yr p{margin:0;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .cluster-label text{fill:#333;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .cluster-label span{color:#333;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .cluster-label span p{background-color:transparent;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .label text,#mermaid-svg-1s08BhQcTL6ZJ2Yr span{fill:#333;color:#333;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .node rect,#mermaid-svg-1s08BhQcTL6ZJ2Yr .node circle,#mermaid-svg-1s08BhQcTL6ZJ2Yr .node ellipse,#mermaid-svg-1s08BhQcTL6ZJ2Yr .node polygon,#mermaid-svg-1s08BhQcTL6ZJ2Yr .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .rough-node .label text,#mermaid-svg-1s08BhQcTL6ZJ2Yr .node .label text,#mermaid-svg-1s08BhQcTL6ZJ2Yr .image-shape .label,#mermaid-svg-1s08BhQcTL6ZJ2Yr .icon-shape .label{text-anchor:middle;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .rough-node .label,#mermaid-svg-1s08BhQcTL6ZJ2Yr .node .label,#mermaid-svg-1s08BhQcTL6ZJ2Yr .image-shape .label,#mermaid-svg-1s08BhQcTL6ZJ2Yr .icon-shape .label{text-align:center;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .node.clickable{cursor:pointer;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .arrowheadPath{fill:#333333;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-1s08BhQcTL6ZJ2Yr .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1s08BhQcTL6ZJ2Yr .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-1s08BhQcTL6ZJ2Yr .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .cluster text{fill:#333;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .cluster span{color:#333;}#mermaid-svg-1s08BhQcTL6ZJ2Yr div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-1s08BhQcTL6ZJ2Yr rect.text{fill:none;stroke-width:0;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .icon-shape,#mermaid-svg-1s08BhQcTL6ZJ2Yr .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .icon-shape p,#mermaid-svg-1s08BhQcTL6ZJ2Yr .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .icon-shape .label rect,#mermaid-svg-1s08BhQcTL6ZJ2Yr .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1s08BhQcTL6ZJ2Yr .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-1s08BhQcTL6ZJ2Yr .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-1s08BhQcTL6ZJ2Yr :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ePWMxA 原始 PWM
RED 上升沿延时
FED 下降沿延时
A path 反相
B path 不反相
OutA / ePWMxA
OutB / ePWMxB
特点
ALC 的核心是:
text
OutA = RED 后的信号取反
OutB = FED 后的信号
也就是 A 路反相,B 路不反相。
适用场景
ALC 适合某些低电平有效驱动逻辑的功率驱动器。
例如某些驱动芯片可能是:
text
输入低电平 → 开通
输入高电平 → 关断
这种情况下,如果仍然需要互补输出,就可以选择 ALC。
简单理解
text
ALC = Active Low Complementary
= 低电平有效 + 互补输出
4. AL 模式:Active Low
AL 模式配置:
c
EPwm1Regs.DBCTL.bit.POLSEL = 3; // 11:AL
信号流向
#mermaid-svg-1KKjMAxQCwiGIXkq{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-1KKjMAxQCwiGIXkq .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-1KKjMAxQCwiGIXkq .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-1KKjMAxQCwiGIXkq .error-icon{fill:#552222;}#mermaid-svg-1KKjMAxQCwiGIXkq .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1KKjMAxQCwiGIXkq .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-1KKjMAxQCwiGIXkq .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1KKjMAxQCwiGIXkq .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1KKjMAxQCwiGIXkq .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-1KKjMAxQCwiGIXkq .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1KKjMAxQCwiGIXkq .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1KKjMAxQCwiGIXkq .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1KKjMAxQCwiGIXkq .marker.cross{stroke:#333333;}#mermaid-svg-1KKjMAxQCwiGIXkq svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1KKjMAxQCwiGIXkq p{margin:0;}#mermaid-svg-1KKjMAxQCwiGIXkq .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-1KKjMAxQCwiGIXkq .cluster-label text{fill:#333;}#mermaid-svg-1KKjMAxQCwiGIXkq .cluster-label span{color:#333;}#mermaid-svg-1KKjMAxQCwiGIXkq .cluster-label span p{background-color:transparent;}#mermaid-svg-1KKjMAxQCwiGIXkq .label text,#mermaid-svg-1KKjMAxQCwiGIXkq span{fill:#333;color:#333;}#mermaid-svg-1KKjMAxQCwiGIXkq .node rect,#mermaid-svg-1KKjMAxQCwiGIXkq .node circle,#mermaid-svg-1KKjMAxQCwiGIXkq .node ellipse,#mermaid-svg-1KKjMAxQCwiGIXkq .node polygon,#mermaid-svg-1KKjMAxQCwiGIXkq .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1KKjMAxQCwiGIXkq .rough-node .label text,#mermaid-svg-1KKjMAxQCwiGIXkq .node .label text,#mermaid-svg-1KKjMAxQCwiGIXkq .image-shape .label,#mermaid-svg-1KKjMAxQCwiGIXkq .icon-shape .label{text-anchor:middle;}#mermaid-svg-1KKjMAxQCwiGIXkq .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-1KKjMAxQCwiGIXkq .rough-node .label,#mermaid-svg-1KKjMAxQCwiGIXkq .node .label,#mermaid-svg-1KKjMAxQCwiGIXkq .image-shape .label,#mermaid-svg-1KKjMAxQCwiGIXkq .icon-shape .label{text-align:center;}#mermaid-svg-1KKjMAxQCwiGIXkq .node.clickable{cursor:pointer;}#mermaid-svg-1KKjMAxQCwiGIXkq .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-1KKjMAxQCwiGIXkq .arrowheadPath{fill:#333333;}#mermaid-svg-1KKjMAxQCwiGIXkq .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1KKjMAxQCwiGIXkq .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1KKjMAxQCwiGIXkq .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1KKjMAxQCwiGIXkq .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-1KKjMAxQCwiGIXkq .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1KKjMAxQCwiGIXkq .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-1KKjMAxQCwiGIXkq .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1KKjMAxQCwiGIXkq .cluster text{fill:#333;}#mermaid-svg-1KKjMAxQCwiGIXkq .cluster span{color:#333;}#mermaid-svg-1KKjMAxQCwiGIXkq div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1KKjMAxQCwiGIXkq .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-1KKjMAxQCwiGIXkq rect.text{fill:none;stroke-width:0;}#mermaid-svg-1KKjMAxQCwiGIXkq .icon-shape,#mermaid-svg-1KKjMAxQCwiGIXkq .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-1KKjMAxQCwiGIXkq .icon-shape p,#mermaid-svg-1KKjMAxQCwiGIXkq .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-1KKjMAxQCwiGIXkq .icon-shape .label rect,#mermaid-svg-1KKjMAxQCwiGIXkq .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-1KKjMAxQCwiGIXkq .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-1KKjMAxQCwiGIXkq .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-1KKjMAxQCwiGIXkq :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ePWMxA 原始 PWM
RED 上升沿延时
FED 下降沿延时
A path 反相
B path 反相
OutA / ePWMxA
OutB / ePWMxB
特点
AL 模式下,A 路和 B 路都反相:
text
OutA = RED 后的信号取反
OutB = FED 后的信号取反
它对应的是 Active Low,即低电平有效。
适用场景
AL 模式通常用于外部驱动器输入为低有效的场合。与 AH 类似,它不是最常见的半桥互补配置,但在某些驱动电路中很有用。
八、AH、AL、AHC、ALC 的本质区别总结
四个模式可以拆成两个维度理解:
text
A / L:有效电平
C:是否互补
| 模式 | 英文 | 有效电平 | 是否互补 | 反相关系 |
|---|---|---|---|---|
| AH | Active High | 高有效 | 不强调互补 | A、B 都不反相 |
| AL | Active Low | 低有效 | 不强调互补 | A、B 都反相 |
| AHC | Active High Complementary | 高有效 | 互补 | B 路反相 |
| ALC | Active Low Complementary | 低有效 | 互补 | A 路反相 |
最常用的是:
text
AHC:高电平有效互补输出
ALC:低电平有效互补输出
在实际半桥/全桥功率驱动中,如果你的驱动芯片输入是高电平有效,一般优先考虑 AHC;如果驱动芯片输入是低电平有效,则考虑 ALC。
九、典型 AHC 死区输出波形理解
假设 AQ 产生的原始 ePWMxA 波形如下:
text
原始 ePWMxA:
____|‾‾‾‾‾‾‾‾‾|____
在 AHC 模式下:
text
OutA = RED
OutB = 反相后的 FED
可以理解成:
text
OutA:
______|‾‾‾‾‾‾‾|____
OutB:
‾‾‾‾|___________|‾‾
在 OutA 打开之前,OutB 已经先关断;在 OutB 打开之前,OutA 也已经先关断。中间这一小段两路都关闭的时间,就是死区时间。
这正是半桥驱动最需要的效果:
text
上管关断
↓
等待死区时间
↓
下管导通
或者:
text
下管关断
↓
等待死区时间
↓
上管导通
十、常用寄存器配置总结
1. DBRED 和 DBFED
c
EPwm1Regs.DBRED.bit.DBRED = 100; // 上升沿死区计数
EPwm1Regs.DBFED.bit.DBFED = 100; // 下降沿死区计数
一般情况下,DBRED 和 DBFED 可以设置相同值。
如果功率器件开通、关断速度不同,也可以设置不同值:
c
EPwm1Regs.DBRED.bit.DBRED = 80;
EPwm1Regs.DBFED.bit.DBFED = 120;
2. 最常见 AHC 配置
c
// 1. RED 和 FED 都使用 ePWMxA 作为输入源
EPwm1Regs.DBCTL.bit.IN_MODE = 0; // 00
// 2. RED 和 FED 全部启用
EPwm1Regs.DBCTL.bit.OUT_MODE = 3; // 11
// 3. AHC:A 路不反相,B 路反相
EPwm1Regs.DBCTL.bit.POLSEL = 2; // 10
// 4. 不交换 A/B 输出
EPwm1Regs.DBCTL.bit.OUTSWAP = 0; // 00
// 5. 普通 DB 模式
EPwm1Regs.DBCTL.bit.DEDB_MODE = 0;
// 6. 设置死区时间
EPwm1Regs.DBRED.bit.DBRED = 100;
EPwm1Regs.DBFED.bit.DBFED = 100;
3. ALC 配置
c
EPwm1Regs.DBCTL.bit.IN_MODE = 0; // ePWMxA 作为 RED/FED 输入
EPwm1Regs.DBCTL.bit.OUT_MODE = 3; // RED/FED 全启用
EPwm1Regs.DBCTL.bit.POLSEL = 1; // ALC
EPwm1Regs.DBCTL.bit.OUTSWAP = 0;
EPwm1Regs.DBRED.bit.DBRED = 100;
EPwm1Regs.DBFED.bit.DBFED = 100;
4. AH 配置
c
EPwm1Regs.DBCTL.bit.IN_MODE = 0;
EPwm1Regs.DBCTL.bit.OUT_MODE = 3;
EPwm1Regs.DBCTL.bit.POLSEL = 0; // AH
EPwm1Regs.DBCTL.bit.OUTSWAP = 0;
EPwm1Regs.DBRED.bit.DBRED = 100;
EPwm1Regs.DBFED.bit.DBFED = 100;
5. AL 配置
c
EPwm1Regs.DBCTL.bit.IN_MODE = 0;
EPwm1Regs.DBCTL.bit.OUT_MODE = 3;
EPwm1Regs.DBCTL.bit.POLSEL = 3; // AL
EPwm1Regs.DBCTL.bit.OUTSWAP = 0;
EPwm1Regs.DBRED.bit.DBRED = 100;
EPwm1Regs.DBFED.bit.DBFED = 100;
十一、完整 ePWM + DB 配置示例
下面给出一个比较典型的 ePWM1 配置示例,产生 AHC 互补 PWM 输出。
c
void EPWM1_DB_Init(void)
{
EALLOW;
/*
* 假设前面已经完成:
* 1. GPIO0 配置为 EPWM1A
* 2. GPIO1 配置为 EPWM1B
* 3. ePWM 时钟已经打开
*/
//==============================
// 1. Time-Base 配置
//==============================
EPwm1Regs.TBCTL.bit.CTRMODE = 2; // Up-Down count mode
EPwm1Regs.TBPRD = 5000; // PWM 周期
EPwm1Regs.TBCTR = 0;
EPwm1Regs.TBCTL.bit.PHSEN = 0; // 禁用相位加载
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0; // 高速时钟分频
EPwm1Regs.TBCTL.bit.CLKDIV = 0; // 时钟分频
//==============================
// 2. Counter-Compare 配置
//==============================
EPwm1Regs.CMPA.bit.CMPA = 2500; // 50% 占空比
//==============================
// 3. AQ 配置:先产生原始 PWM
//==============================
EPwm1Regs.AQCTLA.bit.CAU = 1; // CTR = CMPA 且向上计数时,A 置低
EPwm1Regs.AQCTLA.bit.CAD = 2; // CTR = CMPA 且向下计数时,A 置高
/*
* 注意:
* 这里主要使用 ePWMxA 作为 DB 输入源。
* ePWMxB 可以不由 AQ 直接生成,而由 DB 模块生成。
*/
//==============================
// 4. DB 死区配置
//==============================
// RED 和 FED 都来自 ePWMxA
EPwm1Regs.DBCTL.bit.IN_MODE = 0; // 00
// RED 和 FED 全部启用
EPwm1Regs.DBCTL.bit.OUT_MODE = 3; // 11
// AHC:高有效互补模式
EPwm1Regs.DBCTL.bit.POLSEL = 2; // 10
// 不交换 A/B 输出
EPwm1Regs.DBCTL.bit.OUTSWAP = 0; // 00
// 普通 DB 模式
EPwm1Regs.DBCTL.bit.DEDB_MODE = 0;
// 是否半周期计数
EPwm1Regs.DBCTL.bit.HALFCYCLE = 0; // 0:TBCLK 计数;1:2*TBCLK 计数
// 设置死区计数
EPwm1Regs.DBRED.bit.DBRED = 100;
EPwm1Regs.DBFED.bit.DBFED = 100;
EDIS;
}
十二、配置时最容易踩的坑
1. 只配置了 DBRED/DBFED,但 OUT_MODE 没开
很多初学者只写了:
c
EPwm1Regs.DBRED.bit.DBRED = 100;
EPwm1Regs.DBFED.bit.DBFED = 100;
但是忘记配置:
c
EPwm1Regs.DBCTL.bit.OUT_MODE = 3;
此时 DB 模块可能没有真正参与输出。
2. POLSEL 配错,导致上下管逻辑反了
如果驱动芯片是高电平有效,一般要用 AHC:
c
EPwm1Regs.DBCTL.bit.POLSEL = 2;
如果误写成 ALC:
c
EPwm1Regs.DBCTL.bit.POLSEL = 1;
就可能导致输出极性和预期完全相反。
3. IN_MODE 不小心改成了 01、10、11
最常用的是:
c
EPwm1Regs.DBCTL.bit.IN_MODE = 0;
也就是 RED 和 FED 都来自 ePWMxA。
如果改成其他值,RED 和 FED 的输入源会变成 ePWMxA/ePWMxB 的组合,波形可能和想象不一样。
4. OUTSWAP 导致 A/B 输出被交换
OUTSWAP 可以交换 A path 和 B path。如果你发现示波器上 ePWMxA 和 ePWMxB 正好反了,可以检查:
c
EPwm1Regs.DBCTL.bit.OUTSWAP
通常初学阶段建议先设置为:
c
EPwm1Regs.DBCTL.bit.OUTSWAP = 0;
5. 死区时间太大导致占空比异常
死区时间不能随便设置过大。
例如 PWM 周期很短,而 DBRED/DBFED 设置得很大,就可能导致有效脉宽被严重压缩,甚至出现输出异常。
一般建议:
text
DBRED + DBFED 不要接近 PWM 有效导通时间
尤其在高频 PWM、小占空比情况下要特别注意。
十三、一句话记忆
text
OUT_MODE 决定 DB 是否参与输出;
IN_MODE 决定 RED/FED 从哪里取输入;
POLSEL 决定 AH、AL、AHC、ALC;
DBRED 控制上升沿死区;
DBFED 控制下降沿死区;
AHC 是最常用的高电平有效互补输出模式。
十四、总结
TMS320F2837xD 的 ePWM DB 死区模块本质上是一个"边沿延时 + 极性选择 + 通道选择"的硬件模块。它的核心不是重新产生 PWM,而是在 AQ 产生的原始 PWM 基础上,对上升沿和下降沿进行延时处理。
在实际工程中,最常用配置通常是:
c
IN_MODE = 00; // ePWMxA 同时作为 RED 和 FED 输入
OUT_MODE = 11; // RED 和 FED 全部启用
POLSEL = 10; // AHC,高有效互补
OUTSWAP = 00; // 不交换输出
也就是:
text
ePWMxA 原始 PWM
├── RED → OutA
└── FED → 反相 → OutB
AH、AL、AHC、ALC 的区别不要死记硬背,可以从两个角度理解:
text
H / L:有效电平是高还是低
C:是否互补
其中 AHC 表示高电平有效互补输出,是半桥、全桥、逆变器、电机控制中最常见的 DB 配置模式。
参考资料
- Texas Instruments, TMS320F2837xD Dual-Core Real-Time Microcontrollers Technical Reference Manual, SPRUHM8K, ePWM Dead-Band Generator Submodule(手册)