查看: 1054|回复: 0

[资料] 【疯壳·人形街舞机器人开发教程6】串口控制舵机

[复制链接]
  • TA的每日心情
    开心
    2022-4-17 15:37
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2022-5-31 11:28:59 | 显示全部楼层 |阅读模式
    分享到:
    多自由度人形双足舞蹈机器人
    串口控制舵机
    ——疯壳·机器人开发系列



    1 串口简介

      本章将使用 IAP15W4K61S4 单片机的串口通信来控制舵机的转动。

      IAP15W4K61S4 单 片 机 有 4 个 采 用 UART ( Universal Asychronous Receiver/Transmitter)工作方式的全双工异步串行通行接口。每一个串口都有 2 个数据缓冲器、一个移位寄存器、一个串行控制寄存器和一个波特率发生器组成。而每一个串行口的数据缓冲器由 2 个相互独立的接收、发送缓冲器构成,可以同时发送和接收数据。发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入,因而两个缓冲器可以共用一个地址码。
      IAP15W4K61S4 单片机的串口 1 有 4 种工作方式,其中两种方式的波特率是可变的,另两种是固定的。而串口 2、3、4 都只有两种工作方式,这两种工作方式的波特率都是可变的。
      用户可以用软件设置不同的波特率和选择不同的工作方式。主机可通过查询或中断方式对接收/发送进行程序处理,使用十分灵活。
      IAP15W4K61S4 单片机的串口对应的硬件部分分别为:TXD 和 RXD、TXD2 和RXD2、TXD3 和 RXD3、TXD4 和 RXD4,可以在几组引脚之间进行切换。


    2 硬件设计

      由于绝大多数笔记本已经没有串口了,所以我们这里使用了 CH340 这个芯片,
    成功实现 USB 通信协议和标准 UART 串行通信协议的转换。另外,DEBUG_RX 与DEBUG_TX 连接到 IAP15W4K51S4 单片机的 P3.0 和 P3.1。

    1.png
    图 1


    3软件设计

      在使用串口之前,我们首先介绍几个与串口 1 相关的主要寄存器,其他串口的寄存器可以查看数据手册。
    (1)串行控制寄存器 SCON

    串行控制寄存器 SCON 用于选择串行通信的工作方式和某些控制功能。

    2.png
    图 2
      SM0/FE:当 PCON 寄存器中的 SMOD0/PCON.6 位为 1 时,该位用于帧错误检测。当检测到 一个无效停止位时,通过 UART 接收设置该位。它必须由软件清零。当 PCON 寄存器中 的 SMOD0/PCON.0 时,该位和 SM1 一起指定串行通信的工作方式,如下表所示:

    3.png
    图 3
      SM2:允许方式 2 或方式 3 多级通信控制位。

      REN:允许/禁止串口接收控制位。由软件置 REN 位 1 为允许串行接收状态, 可启动串口接收器 RXD,开始接收信息。软件复位 REN,即 REN=0,则禁止接收。
      TB8:在方式 2 或方式 3,它为要发送的第 9 位数据,按需要由软件置位或者清零。在方式0 和方式 1 中,该位不可用。

      RB8:在方式 2 或方式 3,它为要接收到的第 9 位数据,作为奇偶效验位或者地址帧/数据帧   的标志位。方式 0 中不用 RB8(置 SM2=0)。方式 1 中也不用 RB8(置 SM2=0,RB8 是 接收到的停止位)。
      TI:发送中断请求标志位。在方式 0,当串行发送数据第 8 位结束时,由内部硬件自动置位TI=1,向主机请求中断,响应中断 TI 必须用软件清零,即 TI=0。在其他方式中,则在停 止位开始发送时由硬件置位,即 TI=1,响应中断后 TI 必须用软件清零。
      RI:接收中断请求标志位。在方式 0,当串行接收到第 8 位结束时,由内部硬件自动置位RI=1,向主机请求中断,响应中断 RI 必须用软件清零,即 RI=0。在其他方式中,串行        接收到停止位的中间时刻由硬件置位,即 RI=1,向 CPU 发中断申请,响应中断后 RI 必 须用软件清零。
    (2)数据缓冲寄存器 SBUF

      串口 1 的数据缓冲寄存器(SBUF)的地址是 99H,实际是 2 个缓冲器,写 SBUF 的操作完成待发送数据的加载,读SBUF 的操作可获得已收到的数据。两个操作分别对应两个不同的寄存器,写寄存器和读寄存器。
    (3)串口 1 切换寄存器 AUXR1(P_SW1)

    4.png
    图 4
      要是用串口通信,首先就是就要对串口进行初始化。

    代码1.png
    代码1

      对串口初始化完成之后,我们就开始写串口中断函数uart_int(void) interrupt 4using 1,每当接收到数据,CPU 就会产生中断,从而进入串口中断函数。
      在串口中断函数中,我们设置了一个数据缓冲区,将串口接收到的一个一个字节的数据存储在 receive_data 中。

    代码2.png
    代码2

      每次将 6 个字节的数据接存储到 receive_data 中,当第一个字节为 0x05,并且最后一个字节为 0x77 时,那么中间的第 2、3、4、5 字节分别表示P 值的千、百、十、个位。


    4实验现象

      首先打开下载软件 STC-ISP。

    5.png
    图 5
      (1)点击 Keil 仿真设置,添加 STC 相关的头文件。STC 的相关头文件路径是我们之前安装 Keil C51 的路径,如果之前采用的默认路径,那么选择 C 盘 Keil 文件夹。

    6.png
    图 6
      (2)添加完 STC 相关的头文件,点击弹窗中的确定。

    7.png        
    图 7
      (3)设置单片机的型号、最低波特率、最高波特率如下图所示,硬件选项等选项默认即可。串口号根据实际情况选择。

    8.png
    图 8
      (4)点击打开程序文件,选择我们例程中的.hex 文件。

    9.png
    图 9
      (5)点击下载/编程,下载代码。

    10.png        
    图 10
      (6)按一下电路板上面的 RST 按键,完成下载。

    11.png
    图 11
      代码下载完成之后,打开机器人电源,运行代码,打开串口调试助手。

      (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。

      (2)配置串口参数,波特率为 9600,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
      (3)点击打开串口。


    12.png
    图 12
      打开串口之后,我们在字符串输入框中输入 05 01 02 02 02 77,然后点击发送,将机器人头部舵机的高电平时间改为 1222,同时会看到我们机器人的头转动到一个位置,继续发送其他值,机器人的头会转向其它位置。


    13.png
    图 13


    配套资料:https://www.fengke.club/GeekMart/su_fV1WzKsGQ.jsp
    配套视频:https://www.fengke.club/GeekMart/su_fBdB1yTU0.jsp
    文件下载请点击: 5_串口控制舵机.pdf (1.27 MB, 下载次数: 1)
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-19 14:47 , Processed in 0.125008 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.