STM32 遥控坦克 拥有一辆属于自己的遥控坦克是很多人的梦想,能亲自动手制作一辆遥控坦克那就更棒了,年少时做不到的事,终于在成为硬件工程师后如愿以偿! 项目概述 坦克不同于一般的车辆,没有像汽车一样可以转向的车轮,其前进和转向都是通过左右两侧的两个履带实现,这就需要左右两侧的履带能够以不同的速度和方向转动。为了简化机械结构,我使用两个独立的电机来驱动左右两侧的履带。然后使用两个舵机制作一个 2 自由度的云台,安装到履带底盘上,用来模拟坦克炮塔的转动。 控制系统是我自己设计的一块 STM32开发板,搭载电机驱动模块、陀螺仪模块、无线通信模块和舵机驱动电路,通过OLED 显示屏显示基本的参数。遥控装置是一个无线手柄,外壳采用游戏手柄的外壳,内部是我自己设计的另外一个 STM32开发板。STM32 遥控坦克如图 1 所示。 ( i) r8 j8 S% N 图1 STM32 遥控坦克 ) }- c1 u( G$ G 机械结构 . ^; ~" H( Y* v/ g% r 履带底盘 先绘制好底盘结构件的图纸,如图2所示,然后使用 6061 铝合金板,通过激光切割、折弯、攻丝等工艺加工成我们需要的结构件。
图2 底盘结构件图纸 拿到加工好的结构件后,我们使用螺丝、螺母、弹簧、铜柱等进行固定,把底盘组装起来,底盘如图3 所示。 ; K2 \# @ a# a9 `) x图3 底盘 ( q. Y) q$ C# K8 Z 然后将电机和舵机直接装上去,履带采用通用的工程塑料履带即可,图4 所示为底盘安装好履带的效果。1 @0 ]6 X( E2 |9 o% J N; ~, c0 ?4 n2 e4 V8 ^3 T$ S( S 图4 底盘安装好履带的效果 3 f4 o: I8 [5 _4 q编码器电机 驱动履带车需要比较大的动力,常见电机一般转速较高,但扭矩较小,因此需要使用减速齿轮箱(见图5)对电机进行减速,同时大幅增大扭矩。这里使用的是减速比为1:30 的直流减速电机,如图6 所示,其额定电压下测试参数如附表所示。 7 L, `2 ?& m" `& R8 r9 B图5 减速齿轮箱 图6 直流减速电机 电机的尾部有霍尔正交编码器,如图7 所示,可以用来测量电机的转速,反馈给控制系统。
图7 霍尔正交编码器 , S# o2 q& [' J7 Y1 Z: Y" F0 i 正交编码器是一种用于测量旋转速度和方向的传感器,通过积分(累加)运算后,还可以用来计算距离。正交编码器工作原理示意图如图 8 所示,有两个输出信号:A 相和 B 相。正交来源于 A、B 两个信号的特征,一般情况下 A 相和 B 相的输出信号总是有 π/2 的相位差。
图8 正交编码器工作原理示意图
图 8 中 A 和 B 分别连接到两个传感器上,黑白相间的圆环称为栅格。图 9 所示为电机正转、反转时分别产生的脉冲波形。 % c9 f( |) X! A; a3 [ 图9 电机正转、反转时分别产生的脉冲波形 ( e6 O$ T0 O z, e( U0 @7 F; B5 N% \% L" z3 u( S7 R" Q9 H4 { 电机正转的时候,信道 A 先输出信号,信道 B 后输出,A 相超前 B 相 90°。也可以看作 A 上升沿时,B 低电平;A 下降图 11 开发板接口 图 9 电机正转、反转时分别产生的脉冲波形沿时,B 高电平。 电机反转的时候,信道 B 先输出信号,信道 A 后输出,B 相超前 A 相 90°。也可以看作 A 上升沿时,B 高电平,A 下降沿时,B 低电平。 读取编码器的数据一般有 3 种方式:专用硬件模块、I/O 接口中断处理和普通 I/O 接口读取并处理。这 3 种方式占用的计算资源依次增大,通用性也依次增强。在 STM32 中常用第一种方式处理,使用定时器的编码器模式。 6 Z6 L* {3 O: W& U" Z7 N3 j2 D 舵机云台如图 10 所示,由两个舵机驱动,水平方向可以转动 270°,垂直方向可以转动 180°。我们把云台嵌入履带底盘,用来模拟坦克的炮塔转动。 7 `* J8 T) g" Z) h( q1 x/ X$ w图10 舵机云台 主控STM32开发板 我使用STM32开发板控制坦克。为了便于这个开发板用于更多的项目,设计时需要尽可能多地增加它的功能。最终确定需要实现的功能包括:可以同时控制 8 个舵机和 2 个编码器电机,搭载 MPU9250 姿态传感器,自带功率为100mW 的无线模块,可实现远距离遥控、通信,支持 CAN 通信、USB 烧录 / 通信、串口通信等。稳压输出可以对外给树莓派供电,控制外部负载。具体开发板接口如图 11 所示。 4 ?$ I; a1 i. Q u. ]8 K( G! ?$ v 图 11 开发板接口 为了实现 STM32 坦克的所有功能,我们充分利用了每一个引脚,下面介绍一下主要的电路原理。STM32 单片机引脚分配如图 12 所示。 6 n0 X& q7 G3 d! K( F4 I! v 图12 STM32 单片机引脚分配
无线部分,我使用 NRF24L01P 无线模块,无线模块电路如图 13 所示,模块自带功放芯片,发射功率为 100mW,通过SPI 总线与 STM32 通信,半双工模式可以接收数据,也可以发送数据。 8 x; M6 U9 v9 @) U8 B 图13 无线模块电路
这里使用了 2 个 A4950 电机驱动模块,A4950 电机驱动电路如图 14 所示,STM32 单片机向 A4950 电机驱动模块发送 PWM 信号,即可驱动电机转动。 5 p4 P+ y* I O. k) v% E ?9 h* x 7 p* @" H, p: p6 p6 G/ R 图14 A4950 电机驱动电路
开发板上总共有 8 个 PWM 接口,在这个项目中,我们使用其中 2 个即可满足对云台的控制。PWM 输出电路如图 15 所示。
图 15 PWM 输出电路
电路原理图完成之后,在嘉立创 EDA中 绘 制 PCB, 图16 所示为绘制完成的PCB。 0 Q& q) F+ i/ ?; u& [ 图16 绘制完成的 PCB . O7 H6 C. P, o, J. U. v& o: @$ @ i* @" s5 j 使用嘉立创 EDA 中的 3D 预览功能,查看电路板 3D 模型,如图17 所示,符合预期、确认没有问题之后交付板厂打样。
图17 电路板 3D 模型
A4950 电机驱动芯片的工作原理示意图如图 18 所示,当 IN1 输入高电平且 IN2 输入低电平时,电机正转;当 IN1 输入低电平且IN2 输入高电平时,电机反转。通过在 IN1 或IN2 上输入 PWM 信号,控制电机的转速。 + G, }" A' P( B' U) X4 L
图 18 A4950 电机驱动芯片工作原理示意图
电机控制实现如程序1 所示, 限定PWM 值范围为 0~1000,以其中 1 个电机为例。 当电机旋转时,电机尾部的编码器会输出脉冲,每转动一周输出 330 个脉冲,根据单位时间内输出的脉冲数,可以得到电机的转速。如果有需要,可以根据电机的转速计算出坦克前进的速度和距离。程序 2 是使用中断方式读取编码器脉冲数。 0 P7 H. V* ^/ R$ e A, Z+ ] 云台由 2 个舵机驱动,通过改变输入的 PWM 信号控制舵机的旋转角度。舵机的 PWM 信号周期是 20ms,通过高电平持续的时间(脉宽)来表示需要转动的角度。脉宽取值范围为 500~2500μs,中值是1500μs。具体如程序 3 所示。 ; M) Z/ H9 V! Z0 R# R$ Q& ?3 ^ STM32 开发板上的无线模块,可以接收手柄发来的数据。STM32 开发板需要解析手柄发送过来的数据,并转换成电机的转速和舵机的角度。我们用手柄右侧摇杆来控制坦克移动,向前推动摇杆,左右两侧电机同时正转,坦克前进;向后推摇杆,坦克后退;向左推动摇杆,左侧电机反转,右侧电机正转,坦克左转;反之亦然。手柄按键定义如图 19 所示,按下 L1 键,1 号舵机口的 PWM 信号减小,使 1 号舵机左转,按下 R1 键则 1 号舵机右转。同理,按下 L2 或 R2 键,使 2 号舵机正转或反转。具体如程序 4 所示。
图19 手柄按键定义 : S: ~9 Z2 f8 ` Z7 K5 D0 m4 M 9 u7 e. T ~0 |5 c9 b 遥控手柄 9 z# U5 @* W r 电路设计遥控手柄使用的 STM32 单片机和无线模块与主控开发板一致,无须赘述,我简要介绍一下摇杆的电路。遥控手柄上的摇杆电路如图 20 所示,摇杆由两个旋转电位器和一个按键组成,推动摇杆会使电位器阻值发生变化,进而使电位器分压发生变化。使用单片机内部 ADC 来测量出电位器的分压,即可计算摇杆的位置。摇杆内部的按键在被按下时,会产生电平的变化,进而被检测到。
图20 遥控手柄上的摇杆电路 3 Z1 P7 ^+ W4 E& b, |4 j. V4 \' r/ s1 C3 o- F 根据电路图,我们绘制出遥控手柄的PCB,如图 21 所示,并交付板厂打样。 # q% v( K P3 Q$ D; W 图21 遥控手柄的 PCB
打样完成后,对电路板进行焊接,焊接完成的手柄电路板如图 22 所示。 2 }6 [4 R" \( i0 S9 d ?# h& `' `' F/ \ 图22 焊接完成的手柄电路板 # b+ Y5 w: `$ b5 K 手柄的无线部分程序同主控 STM32开发板相同,不同的是手柄工作时需要读取 16 个按键的状态,并计算 2 个摇杆的位置。如程序 5 所示,第一行程序用来读取 1 个按键状态,然后获取摇杆电位器分压并计算摇杆水平位置。 ( [0 K0 {( O/ G& v/ n7 v 联合调试 . h; v: a+ i5 V `* P G2 G. z 前边我们单独设计了 STM32 开发板和无线遥控手柄,现在需要使两者结合起来,确认功能是否符合预期。我们给开发板接上 8 个舵机和 2 个编码电机,使用手柄遥控,所有舵机和电机均可以正常工作。STM32 开发板与无线手柄联合调试如图23 所示,测试成功。调试完成后,我们把开发板、电机、舵机等安装到底盘上,就完成了对坦克的控制,制作完成的整体设备如图 24 所示。 / y/ n7 |6 d0 B 图23 STM32 开发板与无线手柄联合调试 图24 制作完成的整体设备 4 J3 {6 j9 ^1 P' f: Q 结语 2 l* ^4 _" V, @2 Z$ f1 f2 ^! W 本项目包含实现对电机和舵机的控制、摇杆的模拟采样,以及无线通信等。除了最核心的 STM32 单片机,还涉及多种芯片的选型和使用,需要有一定的经验和耐心。两个电路板的绘制,两套程序的开发、调试,软 / 硬件细节的打磨,机械部分硬件的多次改进……DIY 就是这样,因为热爱,所以坚持;因为坚持,所以总能收获自己想要的成果! & T% L0 V9 V9 b. C1 Q7 m; E: s% y9 H |
HRTIM 指南
NUCLEO-U545RE-Q评测(2)运行环境建立
NUCLEO-U545RE-Q评测 (3)驱动OLED
NUCLEO-U545RE-Q评测 (6)FFT
NUCLEO-U545RE-Q评测 (5)DAC_DMA
NUCLEO-U545RE-Q评测 (4)ADC_DMA_转换
基于STM32 TrustZone 开发HardFault调试与处理
基于STM32在Keil中调试硬件错误的方法
基于STM32通过PWM控制电机速度经验分享
基于STM32的PWM舵机控制经验分享