Stm32产生两路相位差为180度的pwm

Stm32产生两路相位差为180度的pwm

By derrick wang

    由于上次用高级定时器产生的两路互补带死区的pwm信号不能满足应用需求。如标题所示需要的是两路相位差为180度的pwm信号,占空比和频率都是相同的,只是相位不同。仔细重读高级定时器的数据手册,发现产生的两路互补信号达不到这个要求。然后必然要考虑用两个通道产生了(两路互补属于一个通道)。仔细搜罗最终确定了两种发案可以实现,这两种方式具有异曲同工之妙但也有各自的不同。相同之处在于同采用定时器计数的中央对齐模式,不同就在于输出选择的模式不同(对TIM_CCMRX寄存器中OCXM位进行配置)。 下面待我一一详解。生成的波形图如下:

方案一:定时器计数采用中央对齐模式,两路输出配置为pwm的输出比较模式。
1)配置定时器的计数器为中间对齐计数,即先向上计数再向下计数。
2)在该定时器上选择2个通道,并分别配置为输出比较模式,要输出如上图波形须把两路输出极性设置为不同。

3)配置自动重装载寄存器TIMx_ARR为要求输出频率的一半。
4)假定CC1为第一个输出信号的通道,再假定第一个信号的正脉冲宽度对应为W1,则配置TIMx_CCR1为TIMx_ARR-W1/2。
5) 同4),假定CC2为第二个输出信号的通道,正脉冲宽度对应为W2,配置TIMx_CCR2为W2/2。

下面我要产生频率为50khz,占空比为20%的两路pwm信号。TIMx_ARR=72000/50/2=720;

TIMx_CCR1=720-720*0.2=576;TIMx_CCR2=720*0.2=144;

为什么这样算请看下图:

①和②对应得值就是576. ③和④对应得值就是144。但是他们之间的距离是相等的,也就保证了两路pwm产生的占空比是一样的。

具体配置代码如下所示:

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注