准备好了所有需要的硬件后,可以开始组装以及编写相关的驱动代码了,优先级最高的当然是电机电调的驱动
电机接线
无刷电机是三相供电,电机和电调的连接可以随意,如果需要旋转反向更换任意两根线就可以了,电调到主控这边会有四根线:红黑黄蓝,红黑当然是供电线,这里需要接到电池的两端,提供大电流供电我这里是接到25C 3.7v的锂电池上了,黄色线是信号线,用于接收PWM信号控制电机转速的,蓝色线我本来以为是GND,不过看卖家描述是一个LED,那应该不接也行,供电这边接到电池负极了,其实已经公地了。
电机驱动程序
PWN配置
查看无刷电机电调的使用说明,驱动信号这边需要提供50Hz的PWN信号,也就是周期为20ms的脉冲信号,高电平占比1ms时为停止,占比2ms时为最高速度。
这里为了产生50Hz的PWN信号,我才用了STM32的TIM3外设,配置四路PWN通道使用:

这样配置我们效果如下:
- 每个计数周期 = 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);
评论区