
STM32 遥控坦克 拥有一辆属于自己的遥控坦克是很多人的梦想,能亲自动手制作一辆遥控坦克那就更棒了,年少时做不到的事,终于在成为硬件工程师后如愿以偿! 项目概述 / u7 j! `, b4 z 坦克不同于一般的车辆,没有像汽车一样可以转向的车轮,其前进和转向都是通过左右两侧的两个履带实现,这就需要左右两侧的履带能够以不同的速度和方向转动。为了简化机械结构,我使用两个独立的电机来驱动左右两侧的履带。然后使用两个舵机制作一个 2 自由度的云台,安装到履带底盘上,用来模拟坦克炮塔的转动。 控制系统是我自己设计的一块 STM32开发板,搭载电机驱动模块、陀螺仪模块、无线通信模块和舵机驱动电路,通过OLED 显示屏显示基本的参数。遥控装置是一个无线手柄,外壳采用游戏手柄的外壳,内部是我自己设计的另外一个 STM32开发板。STM32 遥控坦克如图 1 所示。 " V! y; H( U3 h F* [3 u# X! R ![]() 图1 STM32 遥控坦克 机械结构 ; F H8 u7 w1 g3 V- q- N 履带底盘 先绘制好底盘结构件的图纸,如图2所示,然后使用 6061 铝合金板,通过激光切割、折弯、攻丝等工艺加工成我们需要的结构件。 e4 X% I: K, y# e ![]() 图2 底盘结构件图纸 ( R7 P) n2 G1 S b% @拿到加工好的结构件后,我们使用螺丝、螺母、弹簧、铜柱等进行固定,把底盘组装起来,底盘如图3 所示。 ![]() 图3 底盘 1 A0 J3 J7 R' U+ v' U然后将电机和舵机直接装上去,履带采用通用的工程塑料履带即可,图4 所示为底盘安装好履带的效果。; z4 ^# E) D8 u' E1 R+ l / [3 S1 f. d8 C ![]() 图4 底盘安装好履带的效果 编码器电机 驱动履带车需要比较大的动力,常见电机一般转速较高,但扭矩较小,因此需要使用减速齿轮箱(见图5)对电机进行减速,同时大幅增大扭矩。这里使用的是减速比为1:30 的直流减速电机,如图6 所示,其额定电压下测试参数如附表所示。 5 q8 n6 P0 y# L# G& a![]() % ~: o! D# y v5 ^ 图5 减速齿轮箱 $ B9 q% p- B7 m, K: X. B; z![]() 图6 直流减速电机 % z7 b$ I; s' ~ M" _6 [ Y' o9 n+ H![]() 电机的尾部有霍尔正交编码器,如图7 所示,可以用来测量电机的转速,反馈给控制系统。
![]() 图7 霍尔正交编码器
正交编码器是一种用于测量旋转速度和方向的传感器,通过积分(累加)运算后,还可以用来计算距离。正交编码器工作原理示意图如图 8 所示,有两个输出信号:A 相和 B 相。正交来源于 A、B 两个信号的特征,一般情况下 A 相和 B 相的输出信号总是有 π/2 的相位差。 6 W: [# J+ B$ ?. ^( _! ] ![]() 图8 正交编码器工作原理示意图 e4 K- a: T f: k 图 8 中 A 和 B 分别连接到两个传感器上,黑白相间的圆环称为栅格。图 9 所示为电机正转、反转时分别产生的脉冲波形。 ) e' @5 c9 H- j7 R6 J0 Q ![]() 图9 电机正转、反转时分别产生的脉冲波形
电机正转的时候,信道 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 中常用第一种方式处理,使用定时器的编码器模式。 % \8 a; s6 w9 d- @& q6 ` 舵机云台如图 10 所示,由两个舵机驱动,水平方向可以转动 270°,垂直方向可以转动 180°。我们把云台嵌入履带底盘,用来模拟坦克的炮塔转动。 # Z6 q2 ]8 d' H5 V+ N2 x![]() 图10 舵机云台 2 F l- V" T: q 主控STM32开发板 我使用STM32开发板控制坦克。为了便于这个开发板用于更多的项目,设计时需要尽可能多地增加它的功能。最终确定需要实现的功能包括:可以同时控制 8 个舵机和 2 个编码器电机,搭载 MPU9250 姿态传感器,自带功率为100mW 的无线模块,可实现远距离遥控、通信,支持 CAN 通信、USB 烧录 / 通信、串口通信等。稳压输出可以对外给树莓派供电,控制外部负载。具体开发板接口如图 11 所示。 ![]() 图 11 开发板接口 * m7 g: B' Q8 O, E! `* X/ p( ~ 电路设计为了实现 STM32 坦克的所有功能,我们充分利用了每一个引脚,下面介绍一下主要的电路原理。STM32 单片机引脚分配如图 12 所示。
![]() 图12 STM32 单片机引脚分配
无线部分,我使用 NRF24L01P 无线模块,无线模块电路如图 13 所示,模块自带功放芯片,发射功率为 100mW,通过SPI 总线与 STM32 通信,半双工模式可以接收数据,也可以发送数据。
![]() 图13 无线模块电路 5 K$ R. o2 u$ Q 这里使用了 2 个 A4950 电机驱动模块,A4950 电机驱动电路如图 14 所示,STM32 单片机向 A4950 电机驱动模块发送 PWM 信号,即可驱动电机转动。
![]() 图14 A4950 电机驱动电路
开发板上总共有 8 个 PWM 接口,在这个项目中,我们使用其中 2 个即可满足对云台的控制。PWM 输出电路如图 15 所示。
图 15 PWM 输出电路
电路原理图完成之后,在嘉立创 EDA中 绘 制 PCB, 图16 所示为绘制完成的PCB。 2 |/ E2 w1 O4 N$ X ![]() 7 u: ^, V Q& }5 b 图16 绘制完成的 PCB
使用嘉立创 EDA 中的 3D 预览功能,查看电路板 3D 模型,如图17 所示,符合预期、确认没有问题之后交付板厂打样。 0 P- X4 p( q: u' t( M8 C: [1 O
图17 电路板 3D 模型 X, L2 x6 k8 r A4950 电机驱动芯片的工作原理示意图如图 18 所示,当 IN1 输入高电平且 IN2 输入低电平时,电机正转;当 IN1 输入低电平且IN2 输入高电平时,电机反转。通过在 IN1 或IN2 上输入 PWM 信号,控制电机的转速。 : w7 v' a9 \% S; G' ^
图 18 A4950 电机驱动芯片工作原理示意图 ( M& t4 I8 M* m 电机控制实现如程序1 所示, 限定PWM 值范围为 0~1000,以其中 1 个电机为例。 ![]() 当电机旋转时,电机尾部的编码器会输出脉冲,每转动一周输出 330 个脉冲,根据单位时间内输出的脉冲数,可以得到电机的转速。如果有需要,可以根据电机的转速计算出坦克前进的速度和距离。程序 2 是使用中断方式读取编码器脉冲数。 : y$ d9 u7 E- o0 X, M$ Y1 {% f. \ ![]() # t1 a9 {" J" m* p 云台由 2 个舵机驱动,通过改变输入的 PWM 信号控制舵机的旋转角度。舵机的 PWM 信号周期是 20ms,通过高电平持续的时间(脉宽)来表示需要转动的角度。脉宽取值范围为 500~2500μs,中值是1500μs。具体如程序 3 所示。 . U2 l" v; P' B* ~ ![]() ![]() * M0 { l% |" ?; {! i6 r STM32 开发板上的无线模块,可以接收手柄发来的数据。STM32 开发板需要解析手柄发送过来的数据,并转换成电机的转速和舵机的角度。我们用手柄右侧摇杆来控制坦克移动,向前推动摇杆,左右两侧电机同时正转,坦克前进;向后推摇杆,坦克后退;向左推动摇杆,左侧电机反转,右侧电机正转,坦克左转;反之亦然。手柄按键定义如图 19 所示,按下 L1 键,1 号舵机口的 PWM 信号减小,使 1 号舵机左转,按下 R1 键则 1 号舵机右转。同理,按下 L2 或 R2 键,使 2 号舵机正转或反转。具体如程序 4 所示。
![]() 图19 手柄按键定义 ![]() ![]() ![]() & c2 S/ S7 Q) p 遥控手柄 遥控手柄使用的 STM32 单片机和无线模块与主控开发板一致,无须赘述,我简要介绍一下摇杆的电路。遥控手柄上的摇杆电路如图 20 所示,摇杆由两个旋转电位器和一个按键组成,推动摇杆会使电位器阻值发生变化,进而使电位器分压发生变化。使用单片机内部 ADC 来测量出电位器的分压,即可计算摇杆的位置。摇杆内部的按键在被按下时,会产生电平的变化,进而被检测到。
![]() 图20 遥控手柄上的摇杆电路
根据电路图,我们绘制出遥控手柄的PCB,如图 21 所示,并交付板厂打样。
![]() 图21 遥控手柄的 PCB
打样完成后,对电路板进行焊接,焊接完成的手柄电路板如图 22 所示。
![]() 图22 焊接完成的手柄电路板 & S" ~' g+ S+ |9 J) K
手柄的无线部分程序同主控 STM32开发板相同,不同的是手柄工作时需要读取 16 个按键的状态,并计算 2 个摇杆的位置。如程序 5 所示,第一行程序用来读取 1 个按键状态,然后获取摇杆电位器分压并计算摇杆水平位置。 ![]() ![]() ![]() 5 E- Y4 q) A7 _2 W7 m* ` 联合调试 / T. ?2 B" o' }$ ?- k: f H( \ 前边我们单独设计了 STM32 开发板和无线遥控手柄,现在需要使两者结合起来,确认功能是否符合预期。我们给开发板接上 8 个舵机和 2 个编码电机,使用手柄遥控,所有舵机和电机均可以正常工作。STM32 开发板与无线手柄联合调试如图23 所示,测试成功。调试完成后,我们把开发板、电机、舵机等安装到底盘上,就完成了对坦克的控制,制作完成的整体设备如图 24 所示。 6 t+ n. Z( p* \0 @' c ![]() 图23 STM32 开发板与无线手柄联合调试 $ M! ~/ ]7 ~/ B# y# O# E5 V7 V1 k![]() 图24 制作完成的整体设备 * \" j& U: y, ^) s" Z- C 结语 / h( M) t' P$ y$ H* d* a 本项目包含实现对电机和舵机的控制、摇杆的模拟采样,以及无线通信等。除了最核心的 STM32 单片机,还涉及多种芯片的选型和使用,需要有一定的经验和耐心。两个电路板的绘制,两套程序的开发、调试,软 / 硬件细节的打磨,机械部分硬件的多次改进……DIY 就是这样,因为热爱,所以坚持;因为坚持,所以总能收获自己想要的成果! $ z8 d- m7 L0 ]# `# Q0 P6 Z" c- w/ p |
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
刘氓兔的64位入门挑战【1】——MP257芯片下单和硬件准备
刘氓兔的64位入门挑战【0】——MP257选型
HRTIM 指南
基于STM3的开发环境搭建经验分享
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_转换