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