1. 边沿对齐模式 在边沿对齐模式EPWM下,周期取决于(MOD-CNTIN+1),占空比取决于(CnV一CNTIN)。脉冲宽度在计数器溢出重新加载CNTIN 初值时开始,在计数值与CnV匹配时结束,此后为低电平持续时间,直到计数器溢出,如下图所示。 2. 居中对齐模式 在居中对齐模式CPWM下,周期取决于2×(MOD-CNTIN),占空比取决于2×(CnV-CNTIN),FTM计数器为增减计数模式。计数器溢出时TOF置位,计数器进行递减计数,直到计数值为CnV时与通道n匹配,开始输出脉冲,接着计数值减到CNTIN时改为进行累加计数,直到计数值为CnV时与通道n 匹配,结束输出脉冲,然后计数溢出,如此循环。请概括
时间: 2023-07-14 11:13:30 浏览: 67
这段文字讲述了两种不同的PWM模式:边沿对齐模式和居中对齐模式。在边沿对齐模式下,周期和占空比分别取决于MOD、CNTIN和CnV的值,脉冲宽度从CNTIN开始,在CnV匹配时结束,并持续低电平直到计数器溢出。在居中对齐模式下,周期和占空比分别取决于2倍的MOD、CNTIN和CnV的值,计数器为增减计数模式,计数器溢出时进行递减计数,直到计数值与通道n匹配开始输出脉冲,接着计数值减到CNTIN时改为进行累加计数,直到计数值与通道n匹配结束输出脉冲,然后计数溢出,如此循环。
相关问题
dsp 28335 epwm 中心对齐模式demo
以下是DSP 28335 EPWM中心对齐模式的Demo代码,可以用来生成中心对齐PWM波形:
```c
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
void epwm_init(void);
void main()
{
InitSysCtrl(); // 初始化系统控制寄存器
InitPieCtrl(); // 初始化中断控制器
IER = 0x0000; // 禁用中断
IFR = 0x0000;
InitPieVectTable(); // 初始化 PIE 向量表
epwm_init(); // 初始化 EPWM 模块
EINT; // 使能全局中断
ERTM; // 使能全局中断响应
while(1);
}
void epwm_init(void)
{
EPwm1Regs.TBPRD = 15000; // 设置 PWM 周期为 15000
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // 设置计数器为上升下降模式
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // 禁用相位补偿
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW; // 开启周期寄存器的阴影寄存器功能
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE; // 禁用同步
EPwm1Regs.CMPA.half.CMPA = 7500; // 设置占空比的一半为 50%
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // 开启比较器寄存器 A 的阴影寄存器功能
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // 在计数器为 0 时加载比较器寄存器 A
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // 当计数器向上计数到 CMPA 时,设置 EPWM1A 为高电平
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // 当计数器向下计数到 CMPA 时,设置 EPWM1A 为低电平
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET; // 当计数器向上计数到 CMPB 时,设置 EPWM1B 为高电平
EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR; // 当计数器向下计数到 CMPB 时,设置 EPWM1B 为低电平
EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL; // 在 A 端口上启用死区
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // 死区时间为高电平
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // 在 A 和 B 端口上启用死区
EPwm1Regs.DBRED = 50; // 设置死区时间为 50 个时钟周期
EPwm1Regs.DBFED = 50;
EPwm1Regs.TZSEL.bit.OSHT1 = 1; // 在允许的情况下禁用输出保护
EPwm1Regs.TZCTL.bit.TZA = TZ_NO_CHANGE;
EPwm1Regs.TZCTL.bit.TZB = TZ_NO_CHANGE;
EPwm1Regs.TBCTR = 0; // 将计数器清零
}
```
在这个Demo代码中,我们使用EPwm1模块来生成中心对齐PWM波形。我们将PWM周期设置为15000个时钟周期,并将计数器设置为上升下降模式。然后,我们将占空比的一半设置为7500,并在计数器为0时加载比较器寄存器A。最后,我们在AQCTLA和AQCTLB寄存器中设置了相应的动作,以使EPWM1A和EPWM1B输出中心对齐PWM波形。
EPwm1Regs.CMPA.half.CMPA =PWMPRD-cmp1;在DSP中是不是对应GPIO0/EPWM1A
这行代码是将 `PWMPRD-cmp1` 的值赋值给了 `EPwm1Regs.CMPA.half.CMPA`。其中 `EPwm1Regs.CMPA.half.CMPA` 是一个寄存器,用于控制 EPWM1A 的输出,而 `PWMPRD` 和 `cmp1` 是两个变量,分别表示 PWM 的周期和占空比。
根据这段代码无法确定它在 DSP 中是否对应 GPIO0/EPWM1A。这取决于具体的硬件配置和代码实现。如果在 DSP 中 GPIO0/EPWM1A 对应的是 `EPwm1Regs.CMPA.half.CMPA` 寄存器,那么这行代码就是用来控制 GPIO0/EPWM1A 输出的。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)