目 录CONTENT

文章目录

基于STM32的四轴飞行器-电机驱动篇

成培培
2026-02-05 / 0 评论 / 0 点赞 / 4 阅读 / 0 字

准备好了所有需要的硬件后,可以开始组装以及编写相关的驱动代码了,优先级最高的当然是电机电调的驱动

电机接线

无刷电机是三相供电,电机和电调的连接可以随意,如果需要旋转反向更换任意两根线就可以了,电调到主控这边会有四根线:红黑黄蓝,红黑当然是供电线,这里需要接到电池的两端,提供大电流供电我这里是接到25C 3.7v的锂电池上了,黄色线是信号线,用于接收PWM信号控制电机转速的,蓝色线我本来以为是GND,不过看卖家描述是一个LED,那应该不接也行,供电这边接到电池负极了,其实已经公地了。

电机驱动程序

PWN配置

查看无刷电机电调的使用说明,驱动信号这边需要提供50Hz的PWN信号,也就是周期为20ms的脉冲信号,高电平占比1ms时为停止,占比2ms时为最高速度。
这里为了产生50Hz的PWN信号,我才用了STM32的TIM3外设,配置四路PWN通道使用:
https://www.chengpei.top/upload/cube_tim3_pwm.png
这样配置我们效果如下:

  • 每个计数周期 = 1 / 1 MHz = 1 µs
  • PWM频率 = 1 / 0.02 s = 50 Hz
  • 高电平时间 = Pulse × 计数器时钟周期 = 1000 × 1 µs = 1000 µs = 1 ms

驱动代码

这样初始就是停止信号,后面可以使用以下函数控制占空比来控制电机转速:

void Motor_SetAll(uint16_t us)  
{  
    us = motor_limit(us);  
    __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, us);  
    __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, us);  
    __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_3, us);  
    __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_4, us);  
}

us的范围为1000~2000,控制从停止到最高转速
不过上电后要开启PWN通道:

HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);  
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);  
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);  
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4);
0

评论区