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

【开发教程5】人形街舞机器人-舵机的基本控制

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

& k; l% U* h) F" h2 Q( K
  Y# @* @: V6 l3 d& R8 g1 舵机简介: L# k9 R2 a. g6 ~; D& Z

: K. ?( g  \) R8 S7 J' j- n" w6 \本章,我们将使用 IAP15W4K61S4 单片机控制舵机的转动。
5 S/ ~, R' G! E( P5 ~# [- B$ Z8 S% B4 T& P* ?. v
& Z+ W- I$ [4 g# g+ v8 p
图 1' K8 s) T( s% X# A
一般来说,舵机由舵盘、减速齿轮组、位置反馈电位计、直流电机、控制电路组成。
/ F+ c/ V" Q9 a  l7 ^它的输入线一共 3 条,电源线、地线和控制线。1 h( C! n/ Z6 K, g
* s" d1 v  G3 n
舵机是通过 PWM 脉宽调节角度,周期为 20ms,占空比 0.5ms 到 2.5ms 的脉宽电平对应舵机 0 度到 180 度角度范围。因此,我们就可以通过 IAP15W4K61S4 单片机产生不同占空比的方波,来控制舵机轴的不同位置,从而控制舵机的转动。. s# x7 Q% w( V! G

/ i, t+ ]2 [" u2 硬件设计2 H5 e! }  r9 e7 @9 F/ ?
由于单片机在实际中的输出电流很小,本次就使用了 74HC244 来增加输出电流。另外,机器人的头部舵机的信号线是通过 P27 与 74HC244 相连间接控制的。
$ W+ I6 a# K$ |* U; [7 g( m' i
5 ~& w9 L3 |' z" a  A/ g! i9 ]
6 @$ y7 C: e! i) A3 c/ \, i* `图 2: |5 N( m' x- c6 y; N7 Q+ ^
3软件设计
1 q( n# C7 ]4 {8 n: z8 D
" U3 v) e$ x. }- ~- K/ Z; m本次我们是通过定时器 T0 控制 IO 口输出高低电平的时间来输出 PWM。首先,我们介绍一下 IO 口以及定时器相关寄存器。) U3 J  T$ K$ k6 p  m8 W" r
(1)数据寄存器 Px4 I* S/ l5 H& \: r5 ^; \
% ^  x: `8 J* T; x
Px 对应的输入输出数据,以 P0 为例,如下图所示:# i) ^% M% I. @
9 r& h2 a# _7 b! k- H
7 M, ~5 K) K$ C3 e- D! Y
图 3
2 C9 X4 T6 t6 g/ x% p+ h(2)模式寄存器( T1 ?( Z0 N1 o

0 M7 L; Z  Y6 z9 m( q6 r: E! A每个引脚对应的两个模式寄存器共同决定了引脚的工作模式,以 P0 为例,如下图所示:% \& p+ _+ H( S0 h6 Q( e8 X- t7 H

' B& E/ m1 W. n6 d! L4 H; r , M# ~* m" \/ J1 x
图 4$ `7 ]5 M5 q- ~; V4 I
(3)定时器/计数器 0/1 控制寄存器 TCON
* F3 ^' d: c; P% {* m
1 a( |$ |3 M4 f  H
6 e( {" ]; S4 z! D( X图 5
% R8 z+ _: g% o! X3 a- \2 F" h0 V; uTF0:T0 溢出中断标志。T0 被允许计数以后,从初值开始加 1 计数,当产生溢出时,由硬件        置 1TF0,向 CPU 请求中断,一致保持到 CPU 响应该中断时, 才由硬件清 0。
$ S/ _, [+ U; s7 P4 A' n  |4 hTR0:定时器的运行控制位。该位由软件社设置清零。
9 _: l, \* L: y7 I. k" b
4 t" t" l6 m  xIE0:外部中断 0 请求源(INT0/P3.2)标志。IE0=1 外部中断 0 向 CPU 请求中断,当 CPU 响应外部中断时,由硬件清 0 。6 B7 y( u$ h) D' t- s+ R! ~
IT0:外部中断源 0 触发控制位。IT0=0,上升沿或下降沿均可触发外部中断 0。IT0=1,外部中断 0 程控为下降沿触发方式。( Y7 ?7 N9 y  c2 `! O1 r
(4)计时器/计数器工作模式寄存器 TMOD
1 Y/ P& {. B7 P+ y* X# Y; q- J4 B& d% u8 g4 e0 t; g
: p, d5 |  \; q: g/ s! L
图 6
$ a+ O( u2 B3 J8 n% A+ vM1,M0:定时器/计数器模式选择。C/T:清 0 作为定时器,置 1 作为计数器。
$ Z; m; B* {1 x6 ]" t/ l关于其它的寄存器,可以参考 IAP15W4K61S4 的数据手册。
" j9 @1 s& _# b: C9 C4 d5 o2 a
" R) \4 `. ^& p0 g# Y- w代码中,我们首先将 IO 口初始化。
+ C- l& Y" e  H3 t) q( }3 ~" U( O& v

6 Q2 z. y9 R4 ^" N+ h$ N代码1
9 `( u1 t! P+ d7 o. c将 IO 口设置为准双向口,默认低电平,然后通过赋值给 P27 一或者零,来. X% R8 u, R& Q5 ~

' m1 N. C; V9 @* s! H控制 P27 口输出高低电平。
, _; e& w( V2 T1 L
9 U7 q# H( o8 W& V9 C8 x3 P关于定时器的使用,首先进行初始化。
7 f) p! X$ t; {% x( P8 \* F9 i2 i: ?7 N, R
(1)设置辅助寄存器 AUXR,将定时器 0 设为传统 8051 速度的 12 分频。& x+ b: d. n3 h: W

/ P7 H) v( U, n6 j& U0 @(2)设置定时器 0 为 16 位不可重装载模式,TH0、TL0 全用。+ M& U- z" ?0 l9 ~6 @! J9 \
9 C8 x; O2 ?2 D9 {6 J. }* k( \* n' a+ @
(3)清除 T0 溢出中断标志。( w$ ?, h( n$ F! T4 n+ K
) V1 G2 l2 |6 r+ j$ f
(4)允许 T0 产生中断。* p& F- v+ p  r6 f

( p8 G$ m% h+ ?6 g9 d(5)打开总中断( L# L3 f2 T9 E0 H8 ~
, `, r" h- @+ Y8 l: C2 y, H- h
/ F2 s$ z2 h' D, J& v6 l, Z8 d: m
代码2/ g5 ^; V9 a$ \+ H$ a! n

6 n2 B5 X$ k; _完成定时器 0 初始化之后,就必须通过函数 Timer0(unsigned int us)给 TH0、TL0 填值。当时间到了,程序就可以进入定时中断函数 T0_Inter(void) interrupt 1。当进入一次中断之后,如果还要再次进入定时中断函数,就必须再一次装载定时器。
5 x+ t/ c7 o% X$ O( @+ O( N5 U
8 S6 B* f3 `) |# S/ x( j ( n- M4 e: g; C6 V7 L5 ?9 w3 ?$ C6 r
代码3
7 v) l! V* T2 C+ k8 |我们在中断函数中再次装载定时器,改变 PWM 的占空比,让舵机不停的更换角度,从而达到使机器人做出摇头的效果。
. M0 o+ G# y1 j6 U7 W* e
" t& u! X4 i& G+ W4 F 3 ?6 c2 K& @6 I/ _$ l! f) ~
代码4
0 p3 n* Q8 k) o$ d! ~# v; F7 @  L5 @3 f9 j
4实验现象" [0 B# z$ q/ Z3 ~0 F+ m
. m  f8 J- U; P# ^  N' `
首先打开下载软件 STC-ISP。
9 P* g' u) ]. f5 W
. T4 p+ Z6 j& E8 n
( ?- u( c% Q( Z) e" k9 C( [' ?图 71 v2 C% \$ A& n) [2 T
(1)点击 Keil 仿真设置,添加 STC 相关的头文件。STC 的相关头文件路径是我们之前安装 Keil C51 的路径,如果之前采用的默认路径,那么选择 C 盘 Keil 文件夹。3 C' N" v$ v- h$ m

3 r- I/ u) a5 I$ ~8 v9 b
+ N# l& v0 `/ l图 85 X  ^' C9 B, T8 X* y9 X
(2)添加完 STC 相关的头文件,点击弹窗中的确定。0 ~4 P, u2 }( ~4 X* _: l4 C' e

8 g* {8 }% o" {         3 v5 C% |3 z/ u( s  X2 J: [* L
图 9
# F4 {! @9 K( t  M# X5 U% r# }' k- U5 K. U) V1 f
(3)设置单片机的型号、最低波特率、最高波特率如下图所示,硬件选项等选项默认即可。串口号根据实际情况选择。0 \4 z3 l$ g& R9 g
1 w0 J) _1 C0 R; ]9 F: Z0 j. r  ?

* Q: B9 U1 \, j图 102 o, g0 \8 \  q# b0 s) d* a
(4)点击打开程序文件,选择我们例程中的.hex 文件。6 C4 Y4 ~! {) F# B: w
) `8 K: W6 h7 s( P& y

( k& t4 L. v2 X" ^  g/ T8 t8 ^图 11. e( l% o. ?3 T0 H
(5)点击下载/编程,下载代码。" z" P) K. F- c7 c) }: B; q

' d$ q5 W9 j5 w5 F% B4 Q2 @         3 y/ n# P7 i1 h7 R1 b+ T
图 12
" N8 Y+ J& R" z2 j5 q# J4 x
) e) E5 h% K8 @7 I. j. d$ R3 F(6)按一下电路板上面的 RST 按键,完成下载。
2 b" Q1 ]' F! I. u. p- g  Z+ B+ G. k8 ]4 Y8 k( C, t

7 }& h* A& K# W, k3 _9 a2 \图 13# J% x3 c' X4 T2 q9 S$ F6 \0 K
( v4 A' I" v" m3 d( X

' V0 ~+ W$ {" K/ E- W代码下载完成之后,打开机器人的电源开关,运行代码,就能看到我们的机器人在做摇头动作。
8 k6 S. ?. ?2 B$ _. |0 @
6 O" Y" K, |; F3 z% S3 V: q" |$ I; h4 i  o: D3 k
配套资料:https://www.fengke.club/GeekMart/su_fV1WzKsGQ.jsp : l& U+ y( _; C/ L: T
配套视频:https://www.fengke.club/GeekMart/su_fBdB1yTU0.jsp
9 j/ o3 d3 x% o7 O套件地址:http://shop115904315.taobao.com
" Y& l! o% j! U, s文件下载请点击: 4_舵机的基本控制.pdf (1.14 MB, 下载次数: 0) , R+ _/ W$ j: H7 p+ r# M! _

3 J6 x' |5 l0 s0 n! |( d" D/ W# ^7 x  p/ ]

该用户从未签到

2#
发表于 2022-7-4 09:17 | 只看该作者
刚开始学习单片机。。。6 p2 k6 y: Z# G/ T' z. k3 K
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-24 07:33 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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