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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
多自由度人形双足舞蹈机器人
——疯壳·机器人开发系列
舵机的基本控制
! x2 {% `4 O7 r2 ?8 Y
0 I6 u( |6 K/ b' l$ R" K; v: V  O; N
1 舵机简介
5 M+ q5 P9 J& K! }/ a' e. J
( y+ M+ r$ U$ F. D) G9 l2 V" \本章,我们将使用 IAP15W4K61S4 单片机控制舵机的转动。
$ Y( a5 u7 e3 b
, N; {2 _1 _5 Y8 C. ~; u+ M
  I; W1 p/ B1 C( T5 g* n5 b5 ^( l$ o图 1
( L6 {* l0 U/ r一般来说,舵机由舵盘、减速齿轮组、位置反馈电位计、直流电机、控制电路组成。) w. K# K& Y7 D
它的输入线一共 3 条,电源线、地线和控制线。1 C6 z* ^: ^1 w% Q, m7 w

4 I( C8 P1 O5 p7 t3 n: @* c" O% y' b舵机是通过 PWM 脉宽调节角度,周期为 20ms,占空比 0.5ms 到 2.5ms 的脉宽电平对应舵机 0 度到 180 度角度范围。因此,我们就可以通过 IAP15W4K61S4 单片机产生不同占空比的方波,来控制舵机轴的不同位置,从而控制舵机的转动。) O% b: R" L, ^& j3 R% [7 f
/ x& z; A7 l$ I3 [2 t
2 硬件设计. J$ `: C4 R* L2 E
由于单片机在实际中的输出电流很小,本次就使用了 74HC244 来增加输出电流。另外,机器人的头部舵机的信号线是通过 P27 与 74HC244 相连间接控制的。' s0 i* R' |; j& ?  y& P4 d

$ s$ p3 M( M6 w; p: `( \  q4 b
) D0 Y: _7 V* B' o6 k图 22 c, `& c5 C, I: y1 \- D" K8 y% d  a
3软件设计
" x7 N$ S" N. X8 X
" E5 i7 A& ^$ e" x4 G本次我们是通过定时器 T0 控制 IO 口输出高低电平的时间来输出 PWM。首先,我们介绍一下 IO 口以及定时器相关寄存器。8 N$ L( k5 w+ Y8 N( p
(1)数据寄存器 Px, s9 B. o0 n" }8 W" w3 e! q8 a

+ c7 b+ Z' n+ J# i) lPx 对应的输入输出数据,以 P0 为例,如下图所示:% j% V4 m* A% I

# }' w3 X4 D2 Y" u1 U
0 G& u: |4 `7 p$ `9 @( j  Q图 3' W# }0 @. H4 h5 C/ m. @0 P- y
(2)模式寄存器" |/ }9 d8 I; f# w; A. E
2 _6 r5 H# N! o3 g! V( j
每个引脚对应的两个模式寄存器共同决定了引脚的工作模式,以 P0 为例,如下图所示:6 F9 W5 d0 m! A7 a! C' T; i

0 Z% R8 J  u, t, e! d# ]
0 x* m) b/ N8 k! E图 4: i1 B# y! P! \9 q! Q
(3)定时器/计数器 0/1 控制寄存器 TCON; C7 R5 G( ?9 ~( s; c

8 y. {* q8 h+ i+ q9 z9 q; V# B
7 l4 ?" f; g, {* x图 5
: B$ ~: _! r: ETF0:T0 溢出中断标志。T0 被允许计数以后,从初值开始加 1 计数,当产生溢出时,由硬件        置 1TF0,向 CPU 请求中断,一致保持到 CPU 响应该中断时, 才由硬件清 0。
* U; l( f" C! B, D8 D2 lTR0:定时器的运行控制位。该位由软件社设置清零。
! p$ ]! q' w4 k2 R1 w
$ ~4 u2 {) p- h1 D$ I+ G$ }& o+ uIE0:外部中断 0 请求源(INT0/P3.2)标志。IE0=1 外部中断 0 向 CPU 请求中断,当 CPU 响应外部中断时,由硬件清 0 。$ ~( L8 Y2 P) z. _( J' y( U
IT0:外部中断源 0 触发控制位。IT0=0,上升沿或下降沿均可触发外部中断 0。IT0=1,外部中断 0 程控为下降沿触发方式。+ _' d9 M5 E5 l  f, Q& t$ D9 Y
(4)计时器/计数器工作模式寄存器 TMOD
! E6 Q  h# C0 R3 {- Z
! Q. ~0 O$ [- d$ N
3 F" D8 T/ h5 ]9 K2 o图 6+ |3 B8 W9 ?3 P& ~* r5 b, N8 S) M& x
M1,M0:定时器/计数器模式选择。C/T:清 0 作为定时器,置 1 作为计数器。4 f  _7 N) Y( {6 J5 Z
关于其它的寄存器,可以参考 IAP15W4K61S4 的数据手册。5 Y9 K9 W6 d3 b/ F1 r* L% L6 |8 |/ _

3 B$ e& L2 g: y8 E# o. y, A代码中,我们首先将 IO 口初始化。
3 Y  b! x. Z' d* [0 P1 k' B! u3 H1 H9 c& H

/ F9 ]* {) G7 Y3 U% E' U& W% r代码1/ u$ E* y' G: ^
将 IO 口设置为准双向口,默认低电平,然后通过赋值给 P27 一或者零,来( w1 n% k8 i/ F0 C9 H9 @

: ^7 P) m; E0 _2 f6 k/ D# R" B8 ]  @- \控制 P27 口输出高低电平。2 ~" ?% N2 |. F9 j* n8 r

- b; t$ n! y) q* y& J1 c关于定时器的使用,首先进行初始化。
7 |0 Q2 F* z8 _( g* N5 n
+ Y1 x% ^: w5 q0 a(1)设置辅助寄存器 AUXR,将定时器 0 设为传统 8051 速度的 12 分频。
  T7 ?  F* M/ N$ v* @9 ~, C1 U: G: J. t- w: |* _' \3 I  y, Y6 Z
(2)设置定时器 0 为 16 位不可重装载模式,TH0、TL0 全用。
- h. v6 ^& l7 s, k- h* H  C% n: H
; R- G, Y! C* X(3)清除 T0 溢出中断标志。8 O: ^, f! N: S/ t

" A3 n+ I/ k6 d(4)允许 T0 产生中断。
( L3 M7 V% t5 d! V1 B- U* T$ @# v/ o7 w% e6 X) Q0 ?
(5)打开总中断
+ p  J- N: ^+ V7 Y& @& o5 N4 `5 J" N0 n% n8 z. g" {

0 Y* C5 e! l3 I6 M2 H. K* @代码2) L, f3 y/ [' E2 P/ \" m

) D4 b$ \. h+ @4 j, C9 }( o完成定时器 0 初始化之后,就必须通过函数 Timer0(unsigned int us)给 TH0、TL0 填值。当时间到了,程序就可以进入定时中断函数 T0_Inter(void) interrupt 1。当进入一次中断之后,如果还要再次进入定时中断函数,就必须再一次装载定时器。
/ ^# r3 L1 b* ?. E" \$ ^7 k+ L, a0 ~4 {% r- q5 k
; o) U1 u4 ~5 B
代码38 q" h1 d0 M; u' Q! @; s
我们在中断函数中再次装载定时器,改变 PWM 的占空比,让舵机不停的更换角度,从而达到使机器人做出摇头的效果。+ [+ a( v  V1 p6 s5 _0 ~/ W
; V8 R/ ^9 k2 M. I
* l; P$ D- B( K. o
代码4' _7 u* N- ~4 O4 \
4 c, q! Y0 @2 O
4实验现象$ }4 v. Y7 K4 K9 B9 c* m
: o7 M* }5 x4 K. Y7 q
首先打开下载软件 STC-ISP。
. N( w) O% k# y$ Z5 n4 b! o+ J! m/ Q) E$ W
! J- [9 t3 l9 c- D6 a2 R) D! i
图 7
; W1 W$ k2 q- F) K(1)点击 Keil 仿真设置,添加 STC 相关的头文件。STC 的相关头文件路径是我们之前安装 Keil C51 的路径,如果之前采用的默认路径,那么选择 C 盘 Keil 文件夹。
  B( B* q, s  ]* L8 I1 u' O: y3 P; V  ^

/ Z- p9 o+ W& Y" C4 M2 @& \7 l图 8
+ G9 D* a4 w- K$ V. P(2)添加完 STC 相关的头文件,点击弹窗中的确定。) b% K! C. o, W+ I. R/ B

1 i6 ?3 }- b# U" D. h7 m$ i- h  i        
5 T& o1 \3 J2 _$ M图 9/ k9 e1 D4 f* y% U

3 c$ p, M/ I8 n(3)设置单片机的型号、最低波特率、最高波特率如下图所示,硬件选项等选项默认即可。串口号根据实际情况选择。
: |% t# L1 o8 t
8 c. C8 ?: o  d& a& P6 M 0 a* Y3 F6 ?7 P- w( t1 C* M. k
图 10* O2 W1 m+ J8 y7 Q
(4)点击打开程序文件,选择我们例程中的.hex 文件。
. D, c. G* t+ ~! {9 l( k/ Y( Y
: T7 p+ n5 ?. L& V) o - t9 j9 |6 K9 y. P3 O9 e6 |
图 11
6 Z" h) L  S( a8 H& ^(5)点击下载/编程,下载代码。
6 F( w% h: W8 Q+ B5 Q+ g% X) e3 q* u  i' |9 _
          q+ l5 g2 U& y2 I- Z$ f
图 128 q7 W! E" r0 U" E7 k
; i9 L8 M8 S4 {! C1 }
(6)按一下电路板上面的 RST 按键,完成下载。
# L  t( U( ^& @7 T5 a. p2 g8 i: j5 H# v
$ u/ {4 s1 z; v* y, ` 4 }; M. Z, B* h, }2 A
图 13
, s( G; G' y3 o$ b/ U$ v
+ y  O& Y1 b& G3 I; B, N: ~& O+ C- ~$ @) P
代码下载完成之后,打开机器人的电源开关,运行代码,就能看到我们的机器人在做摇头动作。8 j) s5 @8 V/ Z" _9 V, o

: o! ?) s0 Q" @* r3 O& m  T" S, N% O$ t7 |, W7 k; n1 B# ~
配套资料:https://www.fengke.club/GeekMart/su_fV1WzKsGQ.jsp ' P8 l/ ?) ~/ R1 V
配套视频:https://www.fengke.club/GeekMart/su_fBdB1yTU0.jsp+ S* i8 A5 y4 \8 B: n
套件地址:http://shop115904315.taobao.com
: U' Z8 A8 H# f& Y" \% Q: r9 I文件下载请点击: 4_舵机的基本控制.pdf (1.14 MB, 下载次数: 0) ( R/ l/ F0 k4 M( E
* q+ C7 B: l. [! M

# j  |: a8 j9 ~# U/ X

该用户从未签到

2#
发表于 2022-7-4 09:17 | 只看该作者
刚开始学习单片机。。。
2 v$ S* ~2 N/ u5 z' S6 v
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-22 07:07 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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