|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
多自由度人形双足舞蹈机器人 ——疯壳·机器人开发系列 舵机的基本控制
; O M+ `: a% j$ J. O! P
9 a) C5 a8 V0 L. |4 n' S6 S: t
' f7 f8 R% J1 R* ^1 O$ X0 x" V5 J. k6 N9 }6 ]) k+ Q' B
1 舵机简介$ F/ c# _' E3 c6 [3 T, S
! B- e3 b" ?: K9 z' l3 K
本章,我们将使用 IAP15W4K61S4 单片机控制舵机的转动。* ?5 r4 b; n/ I! s
. Z4 |- g: z1 Q3 e! o
: h7 _% e5 p/ M! c) ^$ p2 Q
图 1% k' D+ \: [% G; R3 [& M4 ~% o
一般来说,舵机由舵盘、减速齿轮组、位置反馈电位计、直流电机、控制电路组成。
2 h: ?: J) L' ~) }2 T它的输入线一共 3 条,电源线、地线和控制线。
2 @0 c+ a& x M' ^4 D1 d4 I4 \4 `1 B1 \0 @% `
舵机是通过 PWM 脉宽调节角度,周期为 20ms,占空比 0.5ms 到 2.5ms 的脉宽电平对应舵机 0 度到 180 度角度范围。因此,我们就可以通过 IAP15W4K61S4 单片机产生不同占空比的方波,来控制舵机轴的不同位置,从而控制舵机的转动。
! ?9 ~2 [: V6 g& S
. T/ W. z _3 }2 硬件设计; j$ i" ^7 O% M1 p
由于单片机在实际中的输出电流很小,本次就使用了 74HC244 来增加输出电流。另外,机器人的头部舵机的信号线是通过 P27 与 74HC244 相连间接控制的。
; U$ o% S( x! y
% t2 u2 Q3 F) R3 J
/ {( ^/ j x+ e# w
图 2
' x; L, z- G( Q6 U8 b3软件设计
8 V+ T+ k, W9 A& l$ i$ c3 l8 X4 u& M
本次我们是通过定时器 T0 控制 IO 口输出高低电平的时间来输出 PWM。首先,我们介绍一下 IO 口以及定时器相关寄存器。
- O& r& w/ d0 [4 f6 \% y$ K(1)数据寄存器 Px
, {. J+ w2 j+ y7 l- q. W$ c! y I
7 x' m; N& u6 I& ]. D! P/ J7 OPx 对应的输入输出数据,以 P0 为例,如下图所示:
( V8 Y$ l& ~* V7 j$ c& m- [. R- ]1 ^: @; a& x! h
# g u8 ^3 P0 }* T5 t图 3* t5 a* i' r( f/ [
(2)模式寄存器
7 \$ s2 V O/ Q
! h# g \: u, X Q R( Z& C每个引脚对应的两个模式寄存器共同决定了引脚的工作模式,以 P0 为例,如下图所示:+ B3 l' h3 z, g" w1 C% }
: e4 B) y% C1 P
6 A) @. r$ f( S" p8 i/ U0 a& V图 4
0 g9 f2 ^* M: |(3)定时器/计数器 0/1 控制寄存器 TCON: d e# u3 ]2 Z9 F
, [ q! I# t1 K( F
+ t; g [* Y$ I1 Q& j# O" z图 54 g) k- S. r1 K. @% i; I R6 g& M$ n
TF0:T0 溢出中断标志。T0 被允许计数以后,从初值开始加 1 计数,当产生溢出时,由硬件 置 1TF0,向 CPU 请求中断,一致保持到 CPU 响应该中断时, 才由硬件清 0。
8 `6 W" _+ f3 o UTR0:定时器的运行控制位。该位由软件社设置清零。. S# T) H( O% f% }" {$ T9 e5 Z
9 |" b) r" {3 U0 v# e
IE0:外部中断 0 请求源(INT0/P3.2)标志。IE0=1 外部中断 0 向 CPU 请求中断,当 CPU 响应外部中断时,由硬件清 0 。' h" G& m2 h) ~8 v O4 i$ u
IT0:外部中断源 0 触发控制位。IT0=0,上升沿或下降沿均可触发外部中断 0。IT0=1,外部中断 0 程控为下降沿触发方式。. v; N6 M8 U" R) u
(4)计时器/计数器工作模式寄存器 TMOD
! x# m! e2 `. U! n+ U; |1 i) `: p, j* j! I
, H% C& v2 I" ^+ d图 6
( p5 V) o6 |& ~M1,M0:定时器/计数器模式选择。C/T:清 0 作为定时器,置 1 作为计数器。
. M. e% w5 R+ Y0 P" `关于其它的寄存器,可以参考 IAP15W4K61S4 的数据手册。1 V6 K5 \+ Z. K! v% N6 O
& x8 O$ j& q/ A4 Z4 P
代码中,我们首先将 IO 口初始化。 o4 K. `, f7 M9 T3 v" h4 _
% R7 b* c, l2 Q% ~
) W- r' G3 h6 e4 p
代码1
" ]. R8 l8 q/ K" m; T9 w将 IO 口设置为准双向口,默认低电平,然后通过赋值给 P27 一或者零,来! N7 g9 n0 a& h$ |/ o# `' a1 b
3 R" A& H) u4 J7 m/ }0 `; V. d! @
控制 P27 口输出高低电平。& u7 ~- ?! [" e* ?& K2 a
7 q9 m0 q7 Z6 a
关于定时器的使用,首先进行初始化。/ B' f0 w' v9 w( [8 X) o
7 E9 e" R( s, `; v- f6 n(1)设置辅助寄存器 AUXR,将定时器 0 设为传统 8051 速度的 12 分频。
) q5 K$ u- u$ D7 M8 ?8 T: ?0 M
1 X. G6 r& o2 [( T! f$ a(2)设置定时器 0 为 16 位不可重装载模式,TH0、TL0 全用。6 o- v1 c* f6 ]5 g2 z# v
( c6 \" Y" z; X/ g) W! y
(3)清除 T0 溢出中断标志。
% t k2 `; M9 ~7 b6 D1 ]3 `$ t% I* ~5 X1 A* O2 J4 b
(4)允许 T0 产生中断。
I4 v! K, y2 x" ^# x: \! X1 x8 @* \- D2 z k! a. d8 h4 L
(5)打开总中断
$ M$ d3 K5 C5 ^, j1 ^
& S; S, v, E/ K9 S0 Y& s: J
. G" j2 C$ ?$ F代码2- A; o, `8 f) D# {1 }# @; c
- I4 B, f. _1 h3 L$ ?& M完成定时器 0 初始化之后,就必须通过函数 Timer0(unsigned int us)给 TH0、TL0 填值。当时间到了,程序就可以进入定时中断函数 T0_Inter(void) interrupt 1。当进入一次中断之后,如果还要再次进入定时中断函数,就必须再一次装载定时器。
0 H4 Y; A1 K% Y& A3 o. ^% N; z; s" a0 r/ M w! q+ ~
: u$ a9 g$ ^) | a- U
代码3
, C& O! ~+ f% G T- j我们在中断函数中再次装载定时器,改变 PWM 的占空比,让舵机不停的更换角度,从而达到使机器人做出摇头的效果。
3 E, O8 v8 s; b! M2 r6 V# ]2 n) A2 p. g* G8 s
- E% f1 v4 f6 m# I/ t, S0 @' R/ _, M# f代码4
( w- w. s+ S' |% ]- x, d
) ]+ B {4 l; }" r& J% A2 S2 h4实验现象
( j7 X2 ^3 ~- b; M( b# _9 U q% a0 l
首先打开下载软件 STC-ISP。
' O* J7 _7 b, f! h% J1 l8 {
& J1 s5 U5 ~3 p7 G, M
+ Z6 T: k7 y+ ]: _7 u5 S) e
图 7
. k# ?/ K' n2 s(1)点击 Keil 仿真设置,添加 STC 相关的头文件。STC 的相关头文件路径是我们之前安装 Keil C51 的路径,如果之前采用的默认路径,那么选择 C 盘 Keil 文件夹。
/ c; V( x* v6 Z: P, H" f& e( }6 ?) r# g5 k, \: _
- z' u3 `; q \
图 8( Z* }& W# S! d- a% h
(2)添加完 STC 相关的头文件,点击弹窗中的确定。2 g6 F! N) j! c2 ^* l& e
! o# _7 a+ ]4 A( P- @
0 \7 s0 T4 ]8 h; V. o3 x5 ~图 9
8 {: F) R1 _, ]: d
* n A- e8 R% P(3)设置单片机的型号、最低波特率、最高波特率如下图所示,硬件选项等选项默认即可。串口号根据实际情况选择。
3 p( b5 K% X3 I9 Z! A4 R: E0 [ M" Z' i
0 I& L0 I% @) t6 h$ |, S1 k
图 10
2 o4 H/ W4 _: m2 {(4)点击打开程序文件,选择我们例程中的.hex 文件。$ y: s7 n0 o( E& ~. l) ]
4 k8 ~/ E" } g9 v) k$ W" ]
9 V6 G) c% _: ^& e. J6 G& r图 11/ L5 |7 u; V" ~4 V2 U n2 W2 F
(5)点击下载/编程,下载代码。
/ D' R1 ~' q8 J& n5 Z3 X4 r+ s. ?6 L
f$ c7 m/ g$ o; l/ D. L6 L
图 12
. l6 R7 ^! c g) E
& q) X, z, @4 }" ]% |6 |(6)按一下电路板上面的 RST 按键,完成下载。
b! f( d8 R, l. [! L* J R. S
0 I8 C) N8 I8 K, Q% E1 K- w
5 C6 `/ z. e# ]# ]. G
图 13
E3 g3 t5 H% D, T7 @4 @7 h: |+ }, H
5 {% O0 k& z+ J m0 ~* P: i2 X
代码下载完成之后,打开机器人的电源开关,运行代码,就能看到我们的机器人在做摇头动作。
: k* f, o% o- u/ W
: a" \+ i# \( C) [) ]
: @4 U6 N+ [: N, t) Q4 \' T1 B2 D
文件下载请点击:
4_舵机的基本控制.pdf
(1.14 MB, 下载次数: 0)
% T! h5 X E( l; ?1 [
, ^2 X: n) ^& o( ]' Q2 P- l$ c) B3 p7 R/ t% M
|
|