找回密码
 注册
关于网站域名变更的通知
查看: 221|回复: 0
打印 上一主题 下一主题

【疯壳·机器人教程5】人形街舞机器人-舵机的基本控制

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-8-24 15:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
多自由度人形双足舞蹈机器人
——疯壳·机器人开发系列
舵机的基本控制

) i; G; a) W. _$ i6 ~+ K
2 q: g2 g) W& r- \  S% `- I% p6 r8 n
0 m- p  T2 k/ c& y: r, C6 a( ?  o4 I# N$ U
1 舵机简介
) |% n* d. b* j+ o9 [$ P3 k2 }! x: B2 N) z# Q$ r
本章,我们将使用 IAP15W4K61S4 单片机控制舵机的转动。/ n% N1 l& }0 V& m' i" t3 I' H

6 ^. W2 m& o& Y8 X; x- o1 j3 E/ k$ r 5 U! B! Y9 `$ X) v: z7 j
图 1! n) m5 z, w' E& u- O9 L
一般来说,舵机由舵盘、减速齿轮组、位置反馈电位计、直流电机、控制电路组成。
! n/ [8 b# j# J! D它的输入线一共 3 条,电源线、地线和控制线。/ x: H& }$ z! n3 `& |6 H
8 K$ E' I3 f% n( j1 O2 w
舵机是通过 PWM 脉宽调节角度,周期为 20ms,占空比 0.5ms 到 2.5ms 的脉宽电平对应舵机 0 度到 180 度角度范围。因此,我们就可以通过 IAP15W4K61S4 单片机产生不同占空比的方波,来控制舵机轴的不同位置,从而控制舵机的转动。; w/ t. T& x. K* d9 d* w; H/ W: W. w
" o0 ^( B5 l; u* {4 a  H
2 硬件设计
" \6 D/ w8 e) A& n' x5 h- R由于单片机在实际中的输出电流很小,本次就使用了 74HC244 来增加输出电流。另外,机器人的头部舵机的信号线是通过 P27 与 74HC244 相连间接控制的。
+ t2 ]/ \& Z, p, F; w8 w8 f* E. _5 a5 j; E; v( t4 d  T& b! u
0 J4 J6 \: x! M- X5 _3 u4 k8 A$ @
图 2! g5 u8 @& g1 s% |9 L! C
3软件设计$ k6 g' P: ^7 k
$ X0 V. N1 D+ e' ]; o4 U8 L
本次我们是通过定时器 T0 控制 IO 口输出高低电平的时间来输出 PWM。首先,我们介绍一下 IO 口以及定时器相关寄存器。6 N" A' n* Q! q+ A
(1)数据寄存器 Px& p. z3 A" V* P8 X: v4 w

% E# d3 w. d4 W% oPx 对应的输入输出数据,以 P0 为例,如下图所示:
$ V$ K) K! x; C0 Y9 D( ~, f* x+ ~" [3 r: p! Y3 B% `2 ^8 P( C

" T, T5 D$ M$ h& L- ?$ q! o* y图 3
) m  R) y4 i# U, e' Y1 C/ n(2)模式寄存器: x  L# l9 o6 z5 Z; A; M
% H+ ?& y: `- u: Z1 @# s
每个引脚对应的两个模式寄存器共同决定了引脚的工作模式,以 P0 为例,如下图所示:& `# ~3 U1 C5 X/ Q5 b: q) J/ H6 }# K- o
5 p8 I% b' i, [

; z. e+ [2 d6 j3 C, ~4 w7 a图 4
1 g- n$ Y$ P* w# H1 Q# }(3)定时器/计数器 0/1 控制寄存器 TCON
, p* h/ [* \& o- _& Z7 ]/ l, k# R" B! N$ j) _' e

+ i& j' \1 K" F" C! ]图 5
5 ]5 C" m/ d' R- z4 ?3 U3 WTF0:T0 溢出中断标志。T0 被允许计数以后,从初值开始加 1 计数,当产生溢出时,由硬件        置 1TF0,向 CPU 请求中断,一致保持到 CPU 响应该中断时, 才由硬件清 0。; I, i  ~5 P7 p1 ?2 v
TR0:定时器的运行控制位。该位由软件社设置清零。
2 T& H! P# X7 r* E9 Q
( N, \8 B5 g; h2 WIE0:外部中断 0 请求源(INT0/P3.2)标志。IE0=1 外部中断 0 向 CPU 请求中断,当 CPU 响应外部中断时,由硬件清 0 。! K. C5 e1 w9 V/ y" e( D0 v0 ^! u
IT0:外部中断源 0 触发控制位。IT0=0,上升沿或下降沿均可触发外部中断 0。IT0=1,外部中断 0 程控为下降沿触发方式。
3 S9 I) L, t' E, j) U: H(4)计时器/计数器工作模式寄存器 TMOD, ?1 ^1 J9 A& P/ ~8 {+ Z3 B
$ `! d: g" @) k6 t4 w

, E5 o2 w. ?: E- }; \- r图 6
; O- f/ ]3 I) s( C; h" BM1,M0:定时器/计数器模式选择。C/T:清 0 作为定时器,置 1 作为计数器。7 j5 T: x, ]% [4 \1 a& f9 m
关于其它的寄存器,可以参考 IAP15W4K61S4 的数据手册。
! ?5 S8 J  R- N+ f  ~$ @
' D1 C' G# D  W, g4 @; Q+ o9 X代码中,我们首先将 IO 口初始化。: t4 m. s' r7 y* D0 f# T& }
3 @5 ^& Y' p% G8 k# S) r8 U  t
; E& _* u' q) S! _0 u9 f
代码1
/ h- o' I; v& R# t2 Z5 B! I将 IO 口设置为准双向口,默认低电平,然后通过赋值给 P27 一或者零,来
, ]" y% i/ E' \/ _, d5 c+ y+ P7 W+ Q! S* x
控制 P27 口输出高低电平。
& X. \8 b6 J+ T3 u8 Y, z: O
4 Z! o+ r8 j$ n: B关于定时器的使用,首先进行初始化。8 u1 f( m: Y3 }4 f$ ]8 L, I

, f2 Y9 }, [, u/ r(1)设置辅助寄存器 AUXR,将定时器 0 设为传统 8051 速度的 12 分频。
# `3 e5 M# H9 U5 K
! c* O7 V" B! k2 H6 k+ @& ?(2)设置定时器 0 为 16 位不可重装载模式,TH0、TL0 全用。
5 o; ]8 z) x2 A. g! g) P6 `7 s* c$ {
(3)清除 T0 溢出中断标志。* ]" k% Y( E6 v

0 x' ]3 y9 \( w+ T% ^( w7 L(4)允许 T0 产生中断。
5 y1 b) G- J3 B% K; g
0 _# R& j. @/ o9 ]+ `(5)打开总中断
4 [2 }1 U- D1 j7 {5 W0 T
1 f& K, W# i5 s! f( P( X$ E. t0 V& c 4 ?% U* w6 F6 F# t9 K, w+ I
代码2
" L# U& m$ `! x6 ]) @9 J3 u& F: u5 C4 G# F: Z
完成定时器 0 初始化之后,就必须通过函数 Timer0(unsigned int us)给 TH0、TL0 填值。当时间到了,程序就可以进入定时中断函数 T0_Inter(void) interrupt 1。当进入一次中断之后,如果还要再次进入定时中断函数,就必须再一次装载定时器。
6 b1 e7 t9 f: N' _( f" y4 a) }# w

5 \2 K9 H8 n% g  u$ o代码3# n; e* p+ ?$ N+ n0 J1 c3 c
我们在中断函数中再次装载定时器,改变 PWM 的占空比,让舵机不停的更换角度,从而达到使机器人做出摇头的效果。& \# B" u" k: K  d

( _9 A. E2 y' T ; @5 x9 s, U9 P
代码4
4 s( a: Z( G7 Z4 d1 _  S/ n- p7 T# ?. A8 d
4实验现象
" g# L% E) u, Q* L+ A+ f! Y1 S9 Q
首先打开下载软件 STC-ISP。- @% s  f& Y/ w7 c8 Y% z

8 B# G0 P$ }1 l2 @ 1 y3 e9 K# C" W/ o/ t
图 7
4 @4 T$ h- T3 H" e2 e(1)点击 Keil 仿真设置,添加 STC 相关的头文件。STC 的相关头文件路径是我们之前安装 Keil C51 的路径,如果之前采用的默认路径,那么选择 C 盘 Keil 文件夹。' ^: Y/ T" B6 @1 P: r/ w! N
7 g: J; N$ f3 @

: J7 P9 g# A/ u图 8
1 H$ K4 n! T1 z1 k(2)添加完 STC 相关的头文件,点击弹窗中的确定。
1 }* L0 Z' V+ P/ F: r( Z1 J3 X2 H  z. O  c. H
       
- ?. s1 ~* |5 @8 e图 9: ?4 ~* O# I0 a- k& ]: h

' f. K* B6 g& M( g; Y# F(3)设置单片机的型号、最低波特率、最高波特率如下图所示,硬件选项等选项默认即可。串口号根据实际情况选择。
8 E! Z: Y& G$ g9 [2 C* p/ N$ ^" q$ H6 M* p; x% n% q; T" [

7 o0 t, V  _. K, g! e9 ~* }图 10
9 g7 W) o( e1 p% h( ~(4)点击打开程序文件,选择我们例程中的.hex 文件。9 p& S$ }: b. V0 g& B" ~9 i

! I/ H. I" K2 G' l; _ $ L) g  y3 ]1 \. R! a" i3 N' V8 q
图 11
+ T. D5 t7 j+ r' R, Z; z9 H7 |$ k(5)点击下载/编程,下载代码。
/ R5 k+ K' b% w3 {2 Y/ L6 N3 e- ~* @2 x4 W( }) v5 g
        " N  x0 w* `3 Y. Y
图 12
( x7 ?' L6 p% e" i4 s, {1 U* t0 r7 @, Z2 i9 x+ E
(6)按一下电路板上面的 RST 按键,完成下载。& D2 W8 h  N' L$ z+ |

% b% t  l1 c0 x  o, h
$ I9 O/ P% b: ~" A+ X7 Y图 13$ R& x! G8 |8 d

) s! A; L5 r( T; c
! n6 k0 Z( \* Y0 [代码下载完成之后,打开机器人的电源开关,运行代码,就能看到我们的机器人在做摇头动作。
+ o' ^. n& H# k/ T3 N: |, [( u* ^$ @# M
; u! d$ ^% ?; _$ \" D1 s) j
* x  n* \- @! d  \! k
文件下载请点击: 4_舵机的基本控制.pdf (1.14 MB, 下载次数: 0)
2 p3 P* i4 `8 u$ h5 j, M$ p0 C6 N8 `* Z9 B# F* q; V/ G
) K. u5 i, E# I, t3 h" N; ^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-12 17:41 , Processed in 0.156250 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表