|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
多自由度人形双足舞蹈机器人 ——疯壳·机器人开发系列 舵机的基本控制
1 p+ L: |6 D5 E2 D& e( l6 X1 @/ D4 B7 F
1 舵机简介6 t' J. d; q, }' [. j
- N: w8 s: ~- M7 ?$ _
本章,我们将使用 IAP15W4K61S4 单片机控制舵机的转动。* H' y6 |. u. p! B6 p$ N5 M
& ^2 C3 V5 k3 e0 i
; Q( C, r# w) t' E图 17 q9 Q& m4 E4 W( v2 m7 }
一般来说,舵机由舵盘、减速齿轮组、位置反馈电位计、直流电机、控制电路组成。2 [ P' f! s3 E9 {0 J+ v+ h. U( x
它的输入线一共 3 条,电源线、地线和控制线。* R+ X' e5 x% D* ]- ]% J9 {0 y: h: z
3 |! P/ n, H% l, `9 O+ T舵机是通过 PWM 脉宽调节角度,周期为 20ms,占空比 0.5ms 到 2.5ms 的脉宽电平对应舵机 0 度到 180 度角度范围。因此,我们就可以通过 IAP15W4K61S4 单片机产生不同占空比的方波,来控制舵机轴的不同位置,从而控制舵机的转动。
7 X, {- A: M# t% i( p5 [% F5 U" Z& F' V# @0 Q; {# b5 T8 v" ], G$ R7 [
2 硬件设计( D& B# p& Y g8 f6 l, ~
由于单片机在实际中的输出电流很小,本次就使用了 74HC244 来增加输出电流。另外,机器人的头部舵机的信号线是通过 P27 与 74HC244 相连间接控制的。
' i. z: d6 T& u+ @# @$ I6 _3 _) ^5 p7 Y2 q
7 N& s# m- g1 R' e# |! d2 b
图 2
M7 P, r3 P1 c0 ?9 k3软件设计* V. k7 H. \# @4 t' e4 E9 X
R4 v6 Y p v1 [6 [本次我们是通过定时器 T0 控制 IO 口输出高低电平的时间来输出 PWM。首先,我们介绍一下 IO 口以及定时器相关寄存器。. p' G# q7 w( ]( w( Q' j1 b' U
(1)数据寄存器 Px1 I/ x0 V5 |2 o# i S
5 B) ^ g- W6 V v* M$ s& }- o0 TPx 对应的输入输出数据,以 P0 为例,如下图所示:. I7 t! U" A8 H3 f3 u% W& ?
" ?( d8 d2 L P4 s# Y
! q7 Y9 Q" Z9 j. s7 t图 3
* O+ S% U% S: T9 A& v7 L(2)模式寄存器
0 t3 E5 P) E0 {6 E) ^: h0 B+ M6 Y4 g |1 K$ p* P% e- Z# [* ` V6 |
每个引脚对应的两个模式寄存器共同决定了引脚的工作模式,以 P0 为例,如下图所示:
- z6 m3 ]; A* b. U, Z! y8 g( n+ [
5 @& N/ s! n- X0 P
. @ Z) }# W7 x8 F; i' V+ ~图 4
2 _6 U) [4 M+ P+ W8 m2 d(3)定时器/计数器 0/1 控制寄存器 TCON
* Q7 e! f4 _' H7 j$ Y! L k: r- v* `0 e: z/ x( u- o
8 R: W. ~0 Y+ D8 Z
图 5
8 m) f5 R- w& \3 _- U0 \TF0:T0 溢出中断标志。T0 被允许计数以后,从初值开始加 1 计数,当产生溢出时,由硬件 置 1TF0,向 CPU 请求中断,一致保持到 CPU 响应该中断时, 才由硬件清 0。' d1 |3 Q0 r/ ^
TR0:定时器的运行控制位。该位由软件社设置清零。3 p$ [2 ^* W8 ]. `1 \
# m( M3 D- [9 u6 }& W- w2 cIE0:外部中断 0 请求源(INT0/P3.2)标志。IE0=1 外部中断 0 向 CPU 请求中断,当 CPU 响应外部中断时,由硬件清 0 。) q7 d r: J1 o7 e: z+ T4 r
IT0:外部中断源 0 触发控制位。IT0=0,上升沿或下降沿均可触发外部中断 0。IT0=1,外部中断 0 程控为下降沿触发方式。0 B2 w, I, e. p7 m2 Z" p, N
(4)计时器/计数器工作模式寄存器 TMOD
8 n+ f# t8 S) h) b- y- `% |" r1 ~6 D j4 j& n1 l% U1 J. R) ^5 \
: P2 D, o6 h* g A6 d# R
图 6" X. H6 W+ F' \
M1,M0:定时器/计数器模式选择。C/T:清 0 作为定时器,置 1 作为计数器。4 h# B" n, i: R+ V# P8 S# p
关于其它的寄存器,可以参考 IAP15W4K61S4 的数据手册。
; s& a6 G" U3 O: ^. O
( g* k$ [6 R) ^( y代码中,我们首先将 IO 口初始化。( e& h. T* e3 A! c
, H8 P6 R1 B |/ @, c# T' }
9 X3 \2 S6 c; ~代码1. a: k9 k" v# T% n
将 IO 口设置为准双向口,默认低电平,然后通过赋值给 P27 一或者零,来1 {& u2 q" U* j/ P# O
( X+ R. \& J p5 s2 M控制 P27 口输出高低电平。
8 @" Y7 \; o! i- R7 H: b9 C1 s4 k5 s$ c2 x/ E- F
关于定时器的使用,首先进行初始化。
2 Z9 s/ z5 C4 H( ?. l! r" l
2 i' t7 o* m8 B* d+ j# F8 \8 \(1)设置辅助寄存器 AUXR,将定时器 0 设为传统 8051 速度的 12 分频。( ]: |5 j- q# L% W
% ^% r/ P! c& Y+ o(2)设置定时器 0 为 16 位不可重装载模式,TH0、TL0 全用。
* f' N1 |! e4 I) X' d5 M
& f1 m/ j- v! N v/ v(3)清除 T0 溢出中断标志。
% W) I4 J0 |2 D' O' d8 Y# b: p& Q( s6 W" m2 u
(4)允许 T0 产生中断。7 t- u( n4 A9 n3 T6 W
0 K2 F2 x* z2 S2 M3 Q(5)打开总中断- r! D- y* _, t; I
$ o4 \) z% A R# U& ?# E
( P. Q; Y1 O. u3 t4 V2 Q! f代码2
- y0 _, q6 H' g6 c$ v
5 Z- F1 _, L" I5 @完成定时器 0 初始化之后,就必须通过函数 Timer0(unsigned int us)给 TH0、TL0 填值。当时间到了,程序就可以进入定时中断函数 T0_Inter(void) interrupt 1。当进入一次中断之后,如果还要再次进入定时中断函数,就必须再一次装载定时器。* U: @) t$ V- l. Q
# j3 f4 x" i" Z5 H7 X4 m- E) ^
6 j1 r4 ^; E) M+ h' C. V代码3 c4 }/ |& E1 J% n; x+ X, P2 [+ H* b
我们在中断函数中再次装载定时器,改变 PWM 的占空比,让舵机不停的更换角度,从而达到使机器人做出摇头的效果。
+ }. ?1 e$ S7 \; R2 B* p
' ]+ W. p& X3 _3 ^) k9 K) ~/ x/ P
/ ^5 J: M: D/ \: T1 P5 W* P代码4" a& a" L; p- i% [3 B
4 N4 D7 `) W' w' `! q
4实验现象4 P8 j2 F1 T/ c+ C2 F
: r. v1 a0 m0 s2 t3 f% Q4 e% X首先打开下载软件 STC-ISP。. [' [3 C5 \6 i; Z
3 g+ ?( S6 J; L9 V
' m3 u% J* G) r- _/ d图 7( Y5 {, m9 a8 ^
(1)点击 Keil 仿真设置,添加 STC 相关的头文件。STC 的相关头文件路径是我们之前安装 Keil C51 的路径,如果之前采用的默认路径,那么选择 C 盘 Keil 文件夹。1 Q T) [7 K9 Z$ Z
) A* ?: J5 n$ C$ n( ~3 l& }3 B
' g# o8 D. E" y
图 8& F+ B- c Q# o( @
(2)添加完 STC 相关的头文件,点击弹窗中的确定。
* _3 B. q/ v% g9 G9 ~( C
* j" r v8 T! L
P' R9 `( @3 K5 n. x& f
图 95 D2 d1 C5 X& ?( e4 F2 ?8 P8 n" t
+ z7 t2 ^( j) ]+ V
(3)设置单片机的型号、最低波特率、最高波特率如下图所示,硬件选项等选项默认即可。串口号根据实际情况选择。
! O$ m, A; {1 }$ `3 O
& L4 x+ c7 [& P( n7 ]
R: ?& D$ w3 |0 e7 i' m
图 102 W: ~. e& n7 s9 E% f: m3 _& F% L
(4)点击打开程序文件,选择我们例程中的.hex 文件。
- y' v1 P) f& u: }2 X6 n% a& }" H6 E$ h
2 s, G2 \3 e' j1 g) A
) @% H0 W$ {) M+ b+ N) R图 119 S/ F$ h8 B$ [, ? P
(5)点击下载/编程,下载代码。) O" _' Y0 D: B2 a! u& ~- u# V- E
' B, y* G- Z4 H! N) k
3 a/ c# x& @/ ^# G/ k" U图 12
/ B7 `+ W5 {# D# U* ~; j7 G& a4 l) g# }" D# k" t, e0 `1 N
(6)按一下电路板上面的 RST 按键,完成下载。3 i3 ?$ O. f- i0 C& u2 q
1 G- o2 s2 Y c& G5 E
$ h: o5 y% J& K/ i J
图 13
' C1 u/ {) H- a- N( U
7 m5 Y! Q9 B7 ? b: C
. O* W( }6 e% j8 I" U2 f& Q代码下载完成之后,打开机器人的电源开关,运行代码,就能看到我们的机器人在做摇头动作。
0 f. l) z$ N0 Q; n
3 Z; f, G( N6 I' C4 g5 F. t' Z8 i
$ H! f3 A- ~0 @4 v H/ x' o, Q配套资料:https://www.fengke.club/GeekMart/su_fV1WzKsGQ.jsp
$ ~+ g2 T+ f3 V配套视频:https://www.fengke.club/GeekMart/su_fBdB1yTU0.jsp+ ?/ a+ {+ U% [ T( F+ j
套件地址:http://shop115904315.taobao.com 1 c1 F0 c U4 R1 L5 j: O6 R
文件下载请点击:
4_舵机的基本控制.pdf
(1.14 MB, 下载次数: 0)
2 A- W2 ]- N$ c' h l
F/ H" y3 r0 }- I: z2 m
( w. v: e, c1 A8 a7 Z6 J |
|