你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 遥控坦克

[复制链接]
STMCU小助手 发布时间:2023-3-7 15:00

STM32 遥控坦克


8 Y+ f& J9 N; z* j2 J. U1 [$ O! d6 O+ {

拥有一辆属于自己的遥控坦克是很多人的梦想,能亲自动手制作一辆遥控坦克那就更棒了,年少时做不到的事,终于在成为硬件工程师后如愿以偿!


! }" G  r" I5 Q0 G% j

项目概述

/ u7 j! `, b4 z

坦克不同于一般的车辆,没有像汽车一样可以转向的车轮,其前进和转向都是通过左右两侧的两个履带实现,这就需要左右两侧的履带能够以不同的速度和方向转动。为了简化机械结构,我使用两个独立的电机来驱动左右两侧的履带。然后使用两个舵机制作一个 2 自由度的云台,安装到履带底盘上,用来模拟坦克炮塔的转动。

控制系统是我自己设计的一块 STM32开发板,搭载电机驱动模块、陀螺仪模块、无线通信模块和舵机驱动电路,通过OLED 显示屏显示基本的参数。遥控装置是一个无线手柄,外壳采用游戏手柄的外壳,内部是我自己设计的另外一个 STM32开发板。STM32 遥控坦克如图 1 所示。

" V! y; H( U3 h  F* [3 u# X! R
微信图片_20230305152324.png
图1 STM32 遥控坦克

6 F7 S  l- J) a: U6 C% i2 `

机械结构

; F  H8 u7 w1 g3 V- q- N
履带底盘

先绘制好底盘结构件的图纸,如图2所示,然后使用 6061 铝合金板,通过激光切割、折弯、攻丝等工艺加工成我们需要的结构件。

  e4 X% I: K, y# e

微信图片_20230305152320.png
图2  底盘结构件图纸
( R7 P) n2 G1 S  b% @

拿到加工好的结构件后,我们使用螺丝、螺母、弹簧、铜柱等进行固定,把底盘组装起来,底盘如图3 所示。


- P# T) [% H4 _/ ~

! v: ?/ K4 `0 D( V+ S$ h8 S& W
微信图片_20230305152315.png

2 Y- L# k* e! O$ g5 R

1 U' L2 ]8 V6 {  l* n, e6 E- A

: ~. k3 |5 k- z! L
图3  底盘
1 A0 J3 J7 R' U+ v' U

0 L( v, K; e6 B# X; j' a9 V
然后将电机和舵机直接装上去,履带采用通用的工程塑料履带即可,图4 所示为底盘安装好履带的效果。; z4 ^# E) D8 u' E1 R+ l
/ [3 S1 f. d8 C
微信图片_20230305152312.png
. `; c& O. I2 w
图4  底盘安装好履带的效果

/ |/ q. F& C) e; B
编码器电机

驱动履带车需要比较大的动力,常见电机一般转速较高,但扭矩较小,因此需要使用减速齿轮箱(见图5)对电机进行减速,同时大幅增大扭矩。这里使用的是减速比为1:30 的直流减速电机,如图6 所示,其额定电压下测试参数如附表所示。

5 q8 n6 P0 y# L# G& a
微信图片_20230305152307.png
% ~: o! D# y  v5 ^

3 t" v6 c8 s& D% A0 G5 y! ^1 K
图5 减速齿轮箱
$ B9 q% p- B7 m, K: X. B; z
微信图片_20230305152305.png
图6 直流减速电机
% z7 b$ I; s' ~  M" _6 [  Y' o9 n+ H
微信图片_20230305152300.png
3 Z4 v6 y) |# J! b! M2 v/ G, ?

电机的尾部有霍尔正交编码器,如图7 所示,可以用来测量电机的转速,反馈给控制系统。


. g" I: G- P- j' t4 f, P( E

微信图片_20230305152257.png
图7 霍尔正交编码器


0 |. t2 E4 R' e, v

正交编码器是一种用于测量旋转速度和方向的传感器,通过积分(累加)运算后,还可以用来计算距离。正交编码器工作原理示意图如图 8 所示,有两个输出信号:A 相和 B 相。正交来源于 A、B 两个信号的特征,一般情况下 A 相和 B 相的输出信号总是有 π/2 的相位差。

6 W: [# J+ B$ ?. ^( _! ]

微信图片_20230305152254.png
图8 正交编码器工作原理示意图

  e4 K- a: T  f: k

图 8 中 A 和 B 分别连接到两个传感器上,黑白相间的圆环称为栅格。图 9 所示为电机正转、反转时分别产生的脉冲波形。

) e' @5 c9 H- j7 R6 J0 Q

微信图片_20230305152251.png
图9 电机正转、反转时分别产生的脉冲波形

4 z+ c8 |( D+ `9 `1 a! d& H


4 W# C2 t' l8 `$ V) `& Y/ C

电机正转的时候,信道 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
微信图片_20230305152248.png
图10 舵机云台

( ?: L3 ]' }  A+ m, p: a
2 F  l- V" T: q

主控STM32开发板


+ k! p2 Q" C4 R8 a
设计目标

我使用STM32开发板控制坦克。为了便于这个开发板用于更多的项目,设计时需要尽可能多地增加它的功能。最终确定需要实现的功能包括:可以同时控制 8 个舵机和 2 个编码器电机,搭载 MPU9250 姿态传感器,自带功率为100mW 的无线模块,可实现远距离遥控、通信,支持 CAN 通信、USB 烧录 / 通信、串口通信等。稳压输出可以对外给树莓派供电,控制外部负载。具体开发板接口如图 11 所示。


  x' Y: b5 n  k6 g2 u; B, K+ Q
微信图片_20230305152244.png
图 11 开发板接口
* m7 g: B' Q8 O, E! `* X/ p( ~
电路设计

为了实现 STM32 坦克的所有功能,我们充分利用了每一个引脚,下面介绍一下主要的电路原理。STM32 单片机引脚分配如图 12 所示。


6 [9 H$ d+ w" }

微信图片_20230305152242.png

图12 STM32 单片机引脚分配


0 Q% ], B6 Q8 I2 R  q5 T! }

无线部分,我使用 NRF24L01P 无线模块,无线模块电路如图 13 所示,模块自带功放芯片,发射功率为 100mW,通过SPI 总线与 STM32 通信,半双工模式可以接收数据,也可以发送数据。


+ w5 ]2 S$ _) K; b

微信图片_20230305152239.png
图13 无线模块电路

5 K$ R. o2 u$ Q

这里使用了 2 个 A4950 电机驱动模块,A4950 电机驱动电路如图 14 所示,STM32 单片机向 A4950 电机驱动模块发送 PWM 信号,即可驱动电机转动。


; s  {* g: c' f3 b+ \( X. x6 c2 r

微信图片_20230305152237.png

- J5 Y3 j- f/ O
% G* x. q$ G: {
图14 A4950 电机驱动电路

/ A/ U5 J8 z8 P


1 l# Y6 _5 [* s7 \

开发板上总共有 8 个 PWM 接口,在这个项目中,我们使用其中 2 个即可满足对云台的控制。PWM 输出电路如图 15 所示。


- d, Z# ]& B7 d8 u  z* g

微信图片_20230305152234.png

图 15 PWM 输出电路


; B5 ^( }) D2 y) |8 Q  r

PCB设计

电路原理图完成之后,在嘉立创 EDA中 绘 制 PCB, 图16 所示为绘制完成的PCB。

2 |/ E2 w1 O4 N$ X

微信图片_20230305152232.png
, P1 `9 y  C8 b6 a( z* X. \
7 u: ^, V  Q& }5 b
图16 绘制完成的 PCB

) P; Q+ I( H- w+ z: o


8 G3 a* K2 @* e/ G  Q. B8 k3 A! P

使用嘉立创 EDA 中的 3D 预览功能,查看电路板 3D 模型,如图17 所示,符合预期、确认没有问题之后交付板厂打样。

0 P- X4 p( q: u' t( M8 C: [1 O

微信图片_20230305152229.png

图17 电路板 3D 模型

  X, L2 x6 k8 r

程序设计

A4950 电机驱动芯片的工作原理示意图如图 18 所示,当 IN1 输入高电平且 IN2 输入低电平时,电机正转;当 IN1 输入低电平且IN2 输入高电平时,电机反转。通过在 IN1 或IN2 上输入 PWM 信号,控制电机的转速。

: w7 v' a9 \% S; G' ^

微信图片_20230305152227.png

图 18 A4950 电机驱动芯片工作原理示意图

( M& t4 I8 M* m

电机控制实现如程序1 所示, 限定PWM 值范围为 0~1000,以其中 1 个电机为例。


0 I2 p# D$ H* j( r, D
微信图片_20230305152223.jpg

; U/ u% p; v% t

当电机旋转时,电机尾部的编码器会输出脉冲,每转动一周输出 330 个脉冲,根据单位时间内输出的脉冲数,可以得到电机的转速。如果有需要,可以根据电机的转速计算出坦克前进的速度和距离。程序 2 是使用中断方式读取编码器脉冲数。

: y$ d9 u7 E- o0 X, M$ Y1 {% f. \
微信图片_20230305152220.jpg
# t1 a9 {" J" m* p

云台由 2 个舵机驱动,通过改变输入的 PWM 信号控制舵机的旋转角度。舵机的 PWM 信号周期是 20ms,通过高电平持续的时间(脉宽)来表示需要转动的角度。脉宽取值范围为 500~2500μs,中值是1500μs。具体如程序 3 所示。

. U2 l" v; P' B* ~
微信图片_20230305152217.png
微信图片_20230305152214.jpg
* M0 {  l% |" ?; {! i6 r

STM32 开发板上的无线模块,可以接收手柄发来的数据。STM32 开发板需要解析手柄发送过来的数据,并转换成电机的转速和舵机的角度。我们用手柄右侧摇杆来控制坦克移动,向前推动摇杆,左右两侧电机同时正转,坦克前进;向后推摇杆,坦克后退;向左推动摇杆,左侧电机反转,右侧电机正转,坦克左转;反之亦然。手柄按键定义如图 19 所示,按下 L1 键,1 号舵机口的 PWM 信号减小,使 1 号舵机左转,按下 R1 键则 1 号舵机右转。同理,按下 L2 或 R2 键,使 2 号舵机正转或反转。具体如程序 4 所示。


0 K1 r, q9 }* `# ~( l5 D

微信图片_20230305152211.png
图19 手柄按键定义

! u$ u. x- v# d2 u7 n/ a
微信图片_20230305152206.png
微信图片_20230305152202.png
微信图片_20230305152159.png
& c2 S/ S7 Q) p

遥控手柄


  j6 j6 F& e* m6 @
电路设计

遥控手柄使用的 STM32 单片机和无线模块与主控开发板一致,无须赘述,我简要介绍一下摇杆的电路。遥控手柄上的摇杆电路如图 20 所示,摇杆由两个旋转电位器和一个按键组成,推动摇杆会使电位器阻值发生变化,进而使电位器分压发生变化。使用单片机内部 ADC 来测量出电位器的分压,即可计算摇杆的位置。摇杆内部的按键在被按下时,会产生电平的变化,进而被检测到。


. w. x  H2 d4 `* L3 G

微信图片_20230305152157.png
图20 遥控手柄上的摇杆电路

' \& ]8 w9 \' ^) j$ q


" J. ~0 Z2 a2 M' c3 B& k, p

PCB设计

根据电路图,我们绘制出遥控手柄的PCB,如图 21 所示,并交付板厂打样。


; P7 {! k% z, S0 e4 L

微信图片_20230305152154.png
图21 遥控手柄的 PCB

6 ?, N2 ]: K& \8 S/ d


& ^  }$ E7 P- M: Q3 F

电路板实物

打样完成后,对电路板进行焊接,焊接完成的手柄电路板如图 22 所示。


% g8 I, J+ E0 ~* S$ l5 }; n3 ]

微信图片_20230305152151.png
图22 焊接完成的手柄电路板
& S" ~' g+ S+ |9 J) K


2 K9 T5 |# D# @# B9 T

程序设计

手柄的无线部分程序同主控 STM32开发板相同,不同的是手柄工作时需要读取 16 个按键的状态,并计算 2 个摇杆的位置。如程序 5 所示,第一行程序用来读取 1 个按键状态,然后获取摇杆电位器分压并计算摇杆水平位置。


% @3 o& B) a1 z7 q1 p7 B8 a& h9 E
微信图片_20230305152148.jpg
微信图片_20230305152141.jpg
微信图片_20230305152135.png
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
微信图片_20230305152130.png
图23 STM32 开发板与无线手柄联合调试
$ M! ~/ ]7 ~/ B# y# O# E5 V7 V1 k
微信图片_20230305152127.png
图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
收藏 评论0 发布时间:2023-3-7 15:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版