有网友咨询是否能够使用STM32的TIM1产生两路相位互为180度的PWM输出波形,我考虑了一下,得出结论和具体设置方法,使用STM32 的任意一个定时器都可以实现楼主的要求。
这是要求的波形
基本设置如下:
1)配置定时器的计数器为中间对齐计数,即先向上计数再向下计数。
2)在该定时器上选择2个通道,并分别配置为输出比较模式,并配置在比较成功时翻转对应的引脚输出。
3)配置自动重装载寄存器TIMx_ARR为要求输出频率的一半。
4)假定CC1为第一个输出信号的通道,再假定第一个信号的正脉冲宽度对应为W1,则配置TIMx_CCR1为TIMx_ARR-W1/2。
5) 同4),假定CC2为第二个输出信号的通道,正脉冲宽度对应为W2,配置TIMx_CCR2为W2/2。
----------------------------------------------
下面以一个例子说明:
假设要求输出的信号频率为10kHz,占空比为1:3。
再假设定时器的输入时钟为72MHz。
输出信号的频率10kHz,换算为计数器的数值为7200。
按照上述3),设置TIMx_ARR=3600
输出信号1的高电平时间W1,换算为计数器的数值为W1=7200/4=1800
按照上述4),设置TIMx_CC1=3600 - W1/2=2700
输出信号2的高电平时间W2,换算为计数器的数值为W2=7200/4=1800
按照上述5),设置TIMx_CC2=W2/2=450
参照下图,图中红线表示计数器的数值变化:
①当计数器的数值从0向上计数,达到TIMx_CC1时,CC1匹配成功,CC1的输出电平翻转;
②计数器继续向上计数,达到TIMx_ARR时开始调头向下计数;当计数器的数值下降到TIMx_CC1时,CC1再次匹配成功,CC1的输出电平再次翻转;
③计数器继续向下计数,达到到TIMx_CC2时,CC2匹配成功,CC2的输出电平翻转;
④计数器继续向下计数,减到0时开始调头向上计数;当计数器的数值上升到TIMx_CC2时,CC2再次匹配成功,CC2的输出电平再次翻转;
如此循环,得到连续的相位互为180度的两路输出波形。
注意:上述描述是一个原理性的说明,但能够输出要求的波形并且占空比可调,实际编程计算中可能需要对某些数值加1或者减1,以达到准确的输出。
下面是一个占空比大于50%的示意图:
----------------------------
21IC上的网友lxyppc提议使用PWM1和PWM2模式代替本文所使用的比较匹配后的翻转模式,这是更好的方法;这位网友还给出了具体例程,详见:http://bbs.21ic.com/icview-150646-1-1.html
用户377235 2015-5-22 16:04