有这个需求主要是用来对步进电机进行控制,步进电机根据输入的脉冲数量移动对应的步数。
如果利用IO口进行模式PWM,这种方法输出PWM频率误差大,并且对系统实时性有影响。
如果利用一个定时器配合中断进行处理呢?在PWM中断中计数,当累加到设定数值之后停止PWM输出。但是当PWM频率高时,频繁的中断会影响程序运行的效率。为了解决这个问题,引入主从定时器来实现。即利用主定时器作为触发源,通过主定时器触发从定时器来工作。
主从定时器产生固定PWM脉冲数配置步骤
主控芯片为STM32H743IIT6,项目中需要对步进电机进行较为精准的控制。经过查找资料,可以通过对STM32的定时器采用主从定时器的模式。由主定时器输出方波信号,从定时器TIM8对主定时器TIM1输出的脉冲进行计数,溢出时触发从定时器的中断服务函数。以此达到控制步进电机转动的圈数的目的。
主定时器产生PWM
主定时器为TIM1,通道3配置为PWM输出,使能主从模式,触发事件选择为更新事件,不需要开启中断。
主定时器为TIM1,其中通道3配置为PWM输出,主模式的更新事件选为触发输入
TRGO 选择 Compare Pulse,也就是 OC1 的比较匹配事件(CNT==CCR1)作为触发输出源;
设置Pulse为50,该值和计数器周期共同控制PWM的占空比,此处为50%。使能主从模式,触发事件选择Update Event。禁用输出比较预加载。输出极性Low。
从定时器TIM8
同时我们开启第二个定时器。 TIM8。触发源的选择需要查看数据手册中进行选择,TIM8为从定时器、TIM1为主定时器时选择ITR0。
触发源选择ITR0(根据自己使用的定时器选择),时钟源选择内部时钟。
参数设置基本是保持默认。
使能从定时器的中断。此处我使用的是高级定时器作为Slave,如果是通用定时器,只需使能定时器全局中断即可。
基于STM32F429+HAL库编写的定时器主从门控模式级联输出固定个数PWM脉冲的程序 - 走看看 (zoukankan.com)