在研究生期间,有一节关于机电的实验课让我体验了集成嵌入式硬件改造后的遥控车进行巡线的简单自动驾驶。当然巡线能不能算自动驾驶还是两说,因为这个功能实在是太简单了。不过类似的想法在本科就已经有了,不过由于拖延症加其他原因,一直没有去实现。
最近,有了一定的资金与时间,我又开始了RC车改造与控制的个人项目。在某海鲜二手市场淘了一个二手的Traxxas Rally 1/18的遥控车后,我开始了我的初步改造工程。淘来的二手遥控车的品质不错,基本是全新的。本文主要介绍如何利用STM32控制遥控车,以及通过串口传输控制指令到STM32进行控制。
CE24CA6F-FA6B-4554-889B-F82DD2E49E75-scaled
遥控车前轮通过舵机控制,后轮通过电调控制有刷电机完成,两个控制部分均是通过PWM控制,因此通过STM32控制遥控车的关键就是PWM的生成。PWM的定义如下图所示:
46E4BB4E-38DD-4551-A23A-4AE9C141315B
舵机与电调控制使用的PWM频率为50Hz,PWM的有效占空比范围为1ms-2ms。当且仅当在这个范围中时,才可以有效的控制舵机与电调。电调的中位代表停止,最大最小值分别代表前进与后退。舵机的中位代表转向的中间,即直行方向,最大最小值分别代表左转与右转。
本文选择的STM32控制器是大疆的RoboMaster开发版B型与C型。通过CubeMX配置完基本的项目属性后,生成Keil的工程项目。在代码里这里面补充主循环的电机与舵机控制指令与串口接收部分后,即可完成基本的STM32对RC遥控车的控制程序。为了安全起见,主循环中设置了接收串口指令的超时时间,若接收指令的间隔过大,就停止车辆的一切动作,尽可能保证安全。
ECA8CD7F-3247-44C5-B908-76AFCFEB0DD9
具体的实现代码在我的GitHub仓库中。