【STM32F429】HAL库的PWM中断,精确控制脉冲数,控制步进电机

这两天在调步进电机,希望是使得步进电机每次都达到期望的高度。在查了一天的资料,发现大部分上传的资料都是使用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点的理解出了偏差,这是我踩得最大的坑!!!没有之一!!!

  • 41
    点赞
  • 141
    收藏
    觉得还不错? 一键收藏
  • 31
    评论
在使用STM32控制步进电机时,可以使用HAL库提供的函数来实现。根据引用\[1\]中的描述,原子哥的例程中已经封装好了精确控制步进电机前进距离的函数。然而,由于例程使用了高级定时器TIM8,而TIM8需要复用的引脚会影响到CAN的通讯,所以需要自行研究其他方法。 根据引用\[2\]中的描述,第一次选择了定时器4的通道2作为PWM输出口,但发现TIM4_CHANNEL2对应的引脚是PD13,使用PD13作为PWM输出口后,步进电机出现了上下乱移,不受程序控制的情况。因此,需要选择其他引脚作为PWM输出口。 最后,根据引用\[3\]中的描述,还有一个小问题是在初始化时调用了HAL_TIM_PWM_Start_IT函数,导致一打开板子就会使得步进电机前进。可以在TIM4_PWM_INIT函数中注释掉这个函数,或者在main函数中先调用一次HAL_TIM_PWM_Stop_IT函数,停止PWM输出。 综上所述,使用HAL库控制步进电机时,需要注意选择合适的定时器和引脚作为PWM输出口,并根据需要调用相应的HAL库函数来实现精确控制步进电机的步距角。 #### 引用[.reference_title] - *1* *2* *3* [【STM32F429HAL库PWM中断精确控制脉冲数控制步进电机](https://blog.csdn.net/Averus/article/details/124677194)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值