EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
平台:STM32
' s: ?/ ]; A3 c+ h1 N功能:多个定时器输出多路PWM波。
$ R& W) E; h0 E. Z现象:相同ARR及CCR,输出PWM波频率不同。
/ h; H4 |) {3 ^0 j4 Y& b4 z 分析:这类问题通常涉及到定时器时钟源的问题,STM32F4的tiM1与其他定时器不同,不在同一条总线上,所以要注意总线频率的问题。 1、例如如果定时器1的输出频率是其他定时器的两倍,那么主要检查设置分频的时候,TIM1的分频要是否其他定时器的两倍。 2、例如如果定时器1的输出频率与其他定时器有差距,但是差距很小,那么检查,是不是分频参数是其他定时器的参数简单乘以2了。例如主频168,普通定时器分频83(168/2-1),定时器时钟频率1M,那么如果定时器1简单乘以2的话,参数就错了,应该是167,而不是83*2=166
% s% t+ ?0 E, L/ {! O/ U8 v; ?! X$ p. ?: f6 ^+ D5 ^0 E I+ P
发现F7开发板(至少是我买的这块)在配置同一定时器多路PWM波输出的时候,各个通道之间存在相互影响,具体表现为TIM3和TIM4两个定时器的CH1和CH2,CH3和CH4之间并不相互独立。
, w3 r a7 c( G5 x: ]8 {3 I' W解决思路: 怀疑过是自己修改CCRx值的方式的问题,于是参照正点原子给的方式,单独对通道进行配置,未能解决。+ l( t' Q8 O. F( b3 c G
然后考虑是串口通信影响了,就是先关闭在main中使用 USART1_PWM() 函数,不使用串口修改占空比,而是直接在程序中修改占空比。在测试之后发现问题仍然存在。
$ |& g9 h5 i6 h2 M2 x0 N/ |1 T最后是单独调试一个定时器,我首先把其他3路的PWM波都给关闭了,仅剩下一条通道输出,此时关键来了!发现在这种情况下是可以通过串口进行控制的,也可以在程序内部直接进行修改,也就是说可以在1.5ms以下进行调节。
) j$ \- X% a* I* |, q4 _" x( o直到后来猜想到,如果CH1和CH2之间是会相互影响的话,那么CH3和CH4呢?然后一顿操作之后惊奇地发现:CH1和CH2之间是相互影响的,CH3和CH4之间也是相互影响。
) j2 \' _9 g& G! b8 j具体表现为,当你在使用SetCompare这种方式初始化配置完同一个定时器的四个通道的时候(假定均为1.5ms),那么CH1的脉宽变化会受到另一条通道CH2的影响,哪条通道的脉宽较大,那么另一条通道脉宽就不能小于这条通道的脉宽,假定CH2脉宽被配置到了2ms,那么CH1也会跟着变化到2ms,并且只能在≥2ms范围内进行调节。CH3和CH4之间也是如此。当然,也有可能是我自身缘故导致的问题,欢迎大佬批评指正。 - q& C" H( U% k* y
|