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

【疯壳·机器人教程6】人形街舞机器人-串口控制舵机

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

. g6 o6 I  Y' A  M, N; T& U, J
5 S- }) z. O# t: |4 P! e7 x# _. q; x2 z8 E$ P% j6 O5 p
4 S: x, G- o) K, c  |. ^- c, C+ z
$ @! y6 V3 h& ]! K& G8 E" K
1 串口简介
% i' t# K% c6 q) N& g3 @
. Q4 u4 I4 o4 E* ?# X  本章将使用 IAP15W4K61S4 单片机的串口通信来控制舵机的转动。
0 Y3 [6 }- V2 a4 Y% V% n* q8 B9 e' C# U  Z/ T  Y
  IAP15W4K61S4 单 片 机 有 4 个 采 用 UART ( Universal Asychronous Receiver/Transmitter)工作方式的全双工异步串行通行接口。每一个串口都有 2 个数据缓冲器、一个移位寄存器、一个串行控制寄存器和一个波特率发生器组成。而每一个串行口的数据缓冲器由 2 个相互独立的接收、发送缓冲器构成,可以同时发送和接收数据。发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入,因而两个缓冲器可以共用一个地址码。+ o% Y9 }6 i. t- k* d/ b
  IAP15W4K61S4 单片机的串口 1 有 4 种工作方式,其中两种方式的波特率是可变的,另两种是固定的。而串口 2、3、4 都只有两种工作方式,这两种工作方式的波特率都是可变的。. k, A' s" ^) C/ l" ~
  用户可以用软件设置不同的波特率和选择不同的工作方式。主机可通过查询或中断方式对接收/发送进行程序处理,使用十分灵活。' R5 w/ N0 t; |' y: I# b
  IAP15W4K61S4 单片机的串口对应的硬件部分分别为:TXD 和 RXD、TXD2 和RXD2、TXD3 和 RXD3、TXD4 和 RXD4,可以在几组引脚之间进行切换。
* x7 h3 ?7 _/ t: I% _. C
# ]8 u) H9 {/ M' |4 j' \: c' M2 X
" W3 I; E1 h" e, u+ a0 r( Z2 硬件设计1 S9 H3 j- ^+ S- k
2 x* _2 Q4 i2 [( X; n
  由于绝大多数笔记本已经没有串口了,所以我们这里使用了 CH340 这个芯片,
- i- r$ T( Q. E* _/ f成功实现 USB 通信协议和标准 UART 串行通信协议的转换。另外,DEBUG_RX 与DEBUG_TX 连接到 IAP15W4K51S4 单片机的 P3.0 和 P3.1。/ f4 o7 @1 @6 Q* {4 I& ~0 m: ~5 P

; J4 T8 D4 V, J  L' M4 f0 a
4 V$ I6 T. t/ t7 z, }图 1+ ^# D' d& E; w! w
6 i7 I: [: t3 }& Y& l
( p" ^/ `: O" u0 g% ~- B  @
3软件设计3 j4 d* u% ~2 f! w

, p" {$ X: w* V8 k: o9 d( h. R# c  在使用串口之前,我们首先介绍几个与串口 1 相关的主要寄存器,其他串口的寄存器可以查看数据手册。# F! m7 S/ n$ P6 F0 A( X3 M, Q9 H
(1)串行控制寄存器 SCON
# k/ Y( g2 O6 O
- C& x. E4 q4 Q% v) @" v4 O串行控制寄存器 SCON 用于选择串行通信的工作方式和某些控制功能。$ O* ~5 G, M& _

5 j/ h, k; a/ D4 I0 q- J3 A2 O0 K( H
% O1 U* ?/ R8 H% z# X图 2. ]; k5 e/ {* _$ d/ }+ U+ q$ E2 {/ n
  SM0/FE:当 PCON 寄存器中的 SMOD0/PCON.6 位为 1 时,该位用于帧错误检测。当检测到 一个无效停止位时,通过 UART 接收设置该位。它必须由软件清零。当 PCON 寄存器中 的 SMOD0/PCON.0 时,该位和 SM1 一起指定串行通信的工作方式,如下表所示:2 Q1 a3 Y  G1 z- i9 N" B9 W5 |( T% S8 \

( t4 m# D# a. t% V7 H# {& N: ~7 R
% S1 T$ `1 Z8 X! H7 }* _图 3
# v( w+ P0 x/ M  SM2:允许方式 2 或方式 3 多级通信控制位。7 y& b: {: H. e" Z% J! A! {5 Z

& i# H: }1 ~- p$ j2 B) I  REN:允许/禁止串口接收控制位。由软件置 REN 位 1 为允许串行接收状态, 可启动串口接收器 RXD,开始接收信息。软件复位 REN,即 REN=0,则禁止接收。( ^6 L: Y7 N) E' y$ |1 U
  TB8:在方式 2 或方式 3,它为要发送的第 9 位数据,按需要由软件置位或者清零。在方式0 和方式 1 中,该位不可用。; z# x. e. G6 a
5 P' r5 f( c; M5 Q5 n" J
  RB8:在方式 2 或方式 3,它为要接收到的第 9 位数据,作为奇偶效验位或者地址帧/数据帧   的标志位。方式 0 中不用 RB8(置 SM2=0)。方式 1 中也不用 RB8(置 SM2=0,RB8 是 接收到的停止位)。+ R4 z6 B& Q) _& b
  TI:发送中断请求标志位。在方式 0,当串行发送数据第 8 位结束时,由内部硬件自动置位TI=1,向主机请求中断,响应中断 TI 必须用软件清零,即 TI=0。在其他方式中,则在停 止位开始发送时由硬件置位,即 TI=1,响应中断后 TI 必须用软件清零。1 x: T4 R/ ~2 c/ v. |
  RI:接收中断请求标志位。在方式 0,当串行接收到第 8 位结束时,由内部硬件自动置位RI=1,向主机请求中断,响应中断 RI 必须用软件清零,即 RI=0。在其他方式中,串行        接收到停止位的中间时刻由硬件置位,即 RI=1,向 CPU 发中断申请,响应中断后 RI 必 须用软件清零。. D1 c$ U5 a1 r5 M- y
(2)数据缓冲寄存器 SBUF) ?. G" `0 Q5 g' I& }

4 z: l2 Q3 c8 o" |$ f( t  串口 1 的数据缓冲寄存器(SBUF)的地址是 99H,实际是 2 个缓冲器,写 SBUF 的操作完成待发送数据的加载,读SBUF 的操作可获得已收到的数据。两个操作分别对应两个不同的寄存器,写寄存器和读寄存器。
1 P  M( }6 J' I: J, r6 A(3)串口 1 切换寄存器 AUXR1(P_SW1)
: U: d& d" w. B$ h% o! x. i$ }* y/ o* s) X, H! J( [* \
3 a0 x" R% ?0 G! y' o% c& C5 W3 Q
图 4; @2 x4 u2 N8 E9 A: P" O/ j$ g$ Y
  要是用串口通信,首先就是就要对串口进行初始化。
2 l, b. z) Z9 `! {  |' L2 x) H: B
) Y& a0 i, V9 c% w0 R6 Y, r
代码1% x1 k9 E% l2 b; Q9 A1 ?; ~- B

7 j/ o8 q! v* x) w6 f  对串口初始化完成之后,我们就开始写串口中断函数uart_int(void) interrupt 4using 1,每当接收到数据,CPU 就会产生中断,从而进入串口中断函数。+ R; c; H( t6 o  T4 L
  在串口中断函数中,我们设置了一个数据缓冲区,将串口接收到的一个一个字节的数据存储在 receive_data 中。1 @) b2 A3 p3 v& `% ?( c6 O: @

2 @% a4 a- X8 L  [, o1 }  @
; G) ?+ D! E8 G+ m( n$ i代码2* ~/ W: n, m* u* l
7 D- a3 \, v, B+ \- S
  每次将 6 个字节的数据接存储到 receive_data 中,当第一个字节为 0x05,并且最后一个字节为 0x77 时,那么中间的第 2、3、4、5 字节分别表示P 值的千、百、十、个位。+ p7 z- E# G0 g. \
4 j# p# J3 d- T* g

& E7 w& |! z+ g4 N2 I/ f" ~/ }5 {4实验现象- e$ Y, u+ M& F, |  D1 l& c) P

. r, U5 `+ E0 R" v$ B3 r6 `+ U7 K  首先打开下载软件 STC-ISP。
# X4 F+ `! |& a) n7 ?, J: j  g* Q
, h, f4 K& P6 f: ^7 Q8 ^ - a* T9 g; |+ M$ f" x" `! Z- ~4 m
图 52 W' O; w0 Z/ s; {7 Z
  (1)点击 Keil 仿真设置,添加 STC 相关的头文件。STC 的相关头文件路径是我们之前安装 Keil C51 的路径,如果之前采用的默认路径,那么选择 C 盘 Keil 文件夹。7 L7 \% P& ~1 w. X

+ d$ z' k- k9 w: I/ g7 g $ N! {. g: V1 D
图 6& f8 }1 M* }' Z: ^
  (2)添加完 STC 相关的头文件,点击弹窗中的确定。
' r; m" n) a7 ~( i% r: p" M
" G; g" h9 y( v$ g+ l        
4 }' ^, O) s$ I8 |图 75 T3 O6 r0 q1 x* f* C* V9 t; N
  (3)设置单片机的型号、最低波特率、最高波特率如下图所示,硬件选项等选项默认即可。串口号根据实际情况选择。3 l' m: w% o( ?
2 z4 |, h; d6 V- c5 A

, Q7 h% \* G: i$ O- \图 8: ~5 n6 D. P$ |
  (4)点击打开程序文件,选择我们例程中的.hex 文件。8 D( Z2 c% @& i/ ~" S8 L

; q& v+ {. e+ p) G( `4 ?8 a) _2 l
. F3 G8 q$ `* |$ Y6 E( C图 9
9 u4 E% G- D9 p6 j  (5)点击下载/编程,下载代码。
$ `3 J' k6 q8 h% k
% i, s  n/ M4 N4 W- v         : g# _" n# J" x6 z7 R/ h1 q
图 10
+ o1 {7 S' P8 m; H  (6)按一下电路板上面的 RST 按键,完成下载。3 {& C$ \# ]9 t2 `3 K$ ~# e

& X* O1 @2 |. M8 t- M6 |, x$ f1 z 5 W  U" _5 z$ d) s0 T
图 11  ?, s' h; p( U* p
  代码下载完成之后,打开机器人电源,运行代码,打开串口调试助手。
- I" w% k" q! i1 ^" U6 E" T
/ i9 t6 N% Y2 g  (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
3 A4 w! {) G) Q& Z: k
- x, k5 X8 v/ b  A) x3 \  (2)配置串口参数,波特率为 9600,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
3 H% J0 f* Y2 S& x: R3 C, L5 B5 R  G  (3)点击打开串口。
6 w9 e8 L& U9 U0 N
- S5 [- }. N& V8 U% K( D: O/ }7 k% H
# m4 A( u" X  z0 J2 |; z2 W & K0 a' }" L" L/ A$ `; D* |! p
图 12
, k5 _8 U( h6 m' b# ^) u  打开串口之后,我们在字符串输入框中输入 05 01 02 02 02 77,然后点击发送,将机器人头部舵机的高电平时间改为 1222,同时会看到我们机器人的头转动到一个位置,继续发送其他值,机器人的头会转向其它位置。
* w2 r) l! D9 f, z0 i6 v
2 d7 }! W, z3 \5 l0 d" R5 l3 k/ Y8 n$ ]9 I) h' N8 F

; H' F8 Q0 L: m$ M- }9 s图 13
/ o5 }6 _: R" a5 r
; ^# }4 z8 r% c- S" n
4 U# I5 H! L; F$ N; y; ~9 Y2 C由于图片文件上传数量有限,部分图片无法继续上传,有兴趣的伙伴请关注下一篇同系列帖子末端的原文件8 ~$ f! o9 a/ A  u2 \+ n& d
. B* y1 C* _" D: E' v
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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