EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
平台:STM32# _: r# Y. T$ U; N; d
功能:多个定时器输出多路PWM波。
$ t4 }6 Q `3 i) O现象:相同ARR及CCR,输出PWM波频率不同。
/ m1 c: {, m8 `* g7 Q4 U 分析:这类问题通常涉及到定时器时钟源的问题,STM32F4的tiM1与其他定时器不同,不在同一条总线上,所以要注意总线频率的问题。 1、例如如果定时器1的输出频率是其他定时器的两倍,那么主要检查设置分频的时候,TIM1的分频要是否其他定时器的两倍。 2、例如如果定时器1的输出频率与其他定时器有差距,但是差距很小,那么检查,是不是分频参数是其他定时器的参数简单乘以2了。例如主频168,普通定时器分频83(168/2-1),定时器时钟频率1M,那么如果定时器1简单乘以2的话,参数就错了,应该是167,而不是83*2=166 1 s" x; v# M# h3 @8 [/ V
% ^: n0 k1 Y( U9 {0 }
发现F7开发板(至少是我买的这块)在配置同一定时器多路PWM波输出的时候,各个通道之间存在相互影响,具体表现为TIM3和TIM4两个定时器的CH1和CH2,CH3和CH4之间并不相互独立。
8 ^. Y4 i' |/ p1 s解决思路: 怀疑过是自己修改CCRx值的方式的问题,于是参照正点原子给的方式,单独对通道进行配置,未能解决。 ^# O* P6 S: ?! {" I
然后考虑是串口通信影响了,就是先关闭在main中使用 USART1_PWM() 函数,不使用串口修改占空比,而是直接在程序中修改占空比。在测试之后发现问题仍然存在。/ N& i; y( d3 @/ m
最后是单独调试一个定时器,我首先把其他3路的PWM波都给关闭了,仅剩下一条通道输出,此时关键来了!发现在这种情况下是可以通过串口进行控制的,也可以在程序内部直接进行修改,也就是说可以在1.5ms以下进行调节。
5 s- D2 k( @! s! C) }直到后来猜想到,如果CH1和CH2之间是会相互影响的话,那么CH3和CH4呢?然后一顿操作之后惊奇地发现:CH1和CH2之间是相互影响的,CH3和CH4之间也是相互影响。
; _; {* I7 u) B7 u5 p2 f具体表现为,当你在使用SetCompare这种方式初始化配置完同一个定时器的四个通道的时候(假定均为1.5ms),那么CH1的脉宽变化会受到另一条通道CH2的影响,哪条通道的脉宽较大,那么另一条通道脉宽就不能小于这条通道的脉宽,假定CH2脉宽被配置到了2ms,那么CH1也会跟着变化到2ms,并且只能在≥2ms范围内进行调节。CH3和CH4之间也是如此。当然,也有可能是我自身缘故导致的问题,欢迎大佬批评指正。 0 j% ~: C3 ~+ d. @9 q
|