DSP的PWM信号
-
简介
DSP28335共12路16位的ePWM,能进行频率和占空比控制。
ePWM的时钟TBCLK=SYSCLKOUT/(HSPCLKDIV×CLKDIV):
PWM信号频率由时基周期寄存器TBPDR和时基计数器的计数模式决定。初始化程序采用的计数模式为递增计数模式。在递增计数模式下,时基计数器从零开始增加,直到达到周期寄存器值(TBPDR)。然后时基计数器复位到零,再次开始增加。
PWM信号周期与频率的计算如下:
-
端口对应关系
3初始化程序注释
void InitPwm1AB(float32 f)
{
Uint16 T= 2343750/f-1.0;
//系统时钟SYSCLKOUT=150MHz,TBCLK=6.6666667ns,在连续增计数模式下,
//f=150000000/(TBPDR+1)
EALLOW;
//先初始化通用输入输出口//
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;
EPwm1Regs.TBPHS.half.TBPHS = 0; // 在相位寄存器中设置计数器的起始计数位置
//下面两条语句组合对PWM的时钟进行分频
EPwm1Regs.TBCTL.bit.CLKDIV = 6;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;
EPwm1Regs.TBPRD = T; //在周期寄存器中设置计数器的计数周期
//TBCTL为定时器控制寄存器
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; //设置计数模式位为连续增计数模式,产生对称方波
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // 将定时器相位使能位关闭
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;//映射寄存器SHADOW使能并配置映射寄存器为自动读写
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // 定时器时钟源选择,一共有四种时钟源
EPwm1Regs.CMPA.half.CMPA= 0.0001T;// 设置EPWM1A比较值寄存器的比较值,即体现EPWM1A的占空比
EPwm1Regs.CMPB= 0.0001T;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;//A模块比较模式
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;//B模块比较模式
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // A模块比较使能,通过写0来清除SHDWAMODE位来使能load on CTR=Zero
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // B模块比较使能,通过写0来清除SHDWBMODE位来使能load on CTR=Zero
//AQCTLA为输出A比较方式控制寄存器
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // TBCTR(计数器)计到零时使输出为反向
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;//TBCTR(计数器)与CMPA在up计数时相等使输出为high,这关系的输出的占空比
EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;
EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;
EDIS;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)