这两天在调步进电机,希望是使得步进电机每次都达到期望的高度。在查了一天的资料,发现大部分上传的资料都是使用CubeMX生成的,可复制性很高,但未免有失可读性,故上传我的心得经验。
本来原子哥的例程里有整合度很高的,已经封装好的精确控制步进电机前进距离的函数。无奈例程使用了高级定时器TIM8,TIM8需要复用的引脚会影响到CAN的通讯,无奈自行研究,最终决定通过PWM中断,计数脉冲数,以此实现精确控制步进电机的步距角。
话不多说,先谈谈我遇到的坑吧,我个人算是新手,所以在一开始调步进电机时,连初始化和基本步骤都不是很明白,所以下文会从最基础的地方开始。
第一次我选择了定时器4的通道2作为PWM的输出口,然而很快我就发现了TIM4_ CHANNEL2的对应引脚是PD13,复用了PD13 作为PWM输出口后,步进电机出现了上下乱移,不受程序控制的情况,无奈作罢。
第二次,我选择了定时器4通道1,引脚是PD12。于是进入了正常设置环节,
第一个Driverinit,初始化了PF7,PF9作为编码器的DIR+,和DIR-来控制方向。具体可参见备注。
第二个是定时器中断处理函数,调用的是TIM4的句柄。
第三个是TIM4的PWM波初始化。
其中关于2,3点的理解出了偏差,这是我踩得最大的坑!!!没有之一!!!