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