STM32F407电机控制设计

最近有项目涉及用PWM做电机调试控制。因为时间关系直接选择现成的控制板和驱动板,自己做集成然后写程序实现功能。根据后续运行情况,感觉本次选型、程序设计比较成功,因此做一个记录。

1:硬件选型
要控制的电机为24V直流电机,要在正反转,调试控制。
选用一款主控芯片为stm32f407的控制板,控制板电机控制部分电路做了输出隔离,隔离后做了差分信号。
在这里插入图片描述
在这里插入图片描述
根据待控制电机特性,驱动板选择这块板子,该板子支持电压7到24V 7A电路。
在这里插入图片描述
驱动板信号电压范围3~6.5V,控制逻辑:
在这里插入图片描述
用PC9通过隔离差分后的CLK1+引脚连接驱动板的ENA1引脚
用PD15通过隔离差分后的DIR+引脚连接IN1、DIR-引脚连接IN2.
因为PD15差分信号连接在IN1、IN2引脚上,所以控制电机运行与否就靠ENA1信号,即PC9引脚。
2:固件配置
选型完毕后,在stm32cubeMX中配置端口和PWM功能,当然别的一些辅助功能也要配置。
选择TIM8作为PWM控制定时器,根据电路图,配置选项如下:
在这里插入图片描述
根据硬件情况,选择设置PWM频率为8KHz。TIM8在APB2总线上,APB2总线频率为168MHz。
168MHz/(41+1)/500 = 8KHz
所以设置参数:
htim8.Init.Prescaler = 41;
htim8.Init.Period = 500;
根据上边硬件连接情况,在空闲情况下,需要保证CH4输出为低电平,这样才能保证电机无驱动。配置如下
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
设置一个占空比为50%的PWM波形
sConfigOC.Pulse = 250;
要使得CH4输出波形,需要在启动的地方执行如下函数
HAL_TIM_PWM_Start(&htim8,TIM_CHANNEL_4);
运行一些,经测试正常,示波器显示占空比为50%,此处需要贴图,可惜没有保留呀。
3:程序设计
电机控制结构体
typedef struct MSTATUS
{
U8 run; //运行状态
U8 dir; //运行方向
U8 place; //运行位置
U32 delay; //极限运行时间,
} MSTATUS;
电机控制对外提供控制函数
Mtx_start(int dir, int place)
电机启动函数,
参数dir设置电机运行方向;
参数place设置电机运行目标位置;
在该函数中,在电机已经在前限位置时,dir设置为前进时,电机不能运行;同样,在电机已经在后限位位置时,dir设置为后退时,电机不能运行。
Mtx_stop()
电机停止运行函数,执行该函数,直接停止电机运行。
Mtx_limitstop()
电机极限情况下停止运行函数。
电机在执行前进运行时,触发到前限位,该停止电机。
电机在执行后退运行时,触发到后限位,该停止电机。
电机每次启动后会设置本地最大运行时间MSTATUS.delay,在定时器中如果该时间不为“0”,一直消减该值,直到为“0”。在该函数中判断如果MSTATUS.delay为零,停止电机执行。
该函数在主程序循环中调用,确保极限情况时,直接停止电机运行。
程序结构
在这里插入图片描述

  • 3
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cetclyb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值