问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

幻尔16路舵机控制板二次开发指南

创作时间:
作者:
@小白创作中心

幻尔16路舵机控制板二次开发指南

引用
CSDN
1.
https://blog.csdn.net/2302_80965858/article/details/138230538

幻尔16路舵机控制板是一款功能强大的设备,能够同时控制多达16个舵机,并通过串口与外部平台进行通信。本文将详细介绍该控制板的结构、工作原理以及如何通过STM32进行二次开发,帮助开发者快速掌握其使用方法。

1. 控制板结构

  • 安卓线接口:用于连接控制器和PC,实现两者之间的通讯。
  • 二次开发串口通信接口:用于控制板与其他开发平台(如STM32、ESP32等)进行串口通信。
  • LED1:上电后点亮。
  • LED2:收到信号时点亮。
  • 控制板开关:用于控制电源的通断。

注意:供电电压应在5-8.4V之间,接线时不要接反,否则会烧坏板子。

2. 舵机控制板的通讯

(1)舵机控制板与PC端通讯

在进行舵机控制板和PC端通讯时,需要完成以下步骤:

  1. 下载官方上位机软件“Hiwonder”和CH340串口驱动。
  2. 打开上位机软件,界面分为六个区域:
  • 语言与舵机选择区域
  • 设备连接区域
  • 舵机操纵区域
  • 动作组详情区域
  • 动作组设置区域
  • 偏差设置区域

界面具体操作留给大家自己探索,这里只对重要内容进行讲解:

  1. 只有当控制板上电后,有线连接按钮才变为绿色。
  2. 可通过调整对应舵机的数值(500—2500),对舵机的转动位置进行调整。
  3. 动作组设置,可以在4区域查看动作的执行时间和舵机参数。

动作组编辑步骤:

  1. 选中一号舵机,点击舵机回中,让舵机处于中间角度。
  2. 设置动作时间为1000ms,点击添加动作。
  3. 让舵机向右旋转,设置动作时间1000ms,将1500调小,点击添加动作。
  4. 在两个动作之间添加一个过渡动作,一般在100~300ms之间。
  5. 最后让舵机回中,设置时间1000ms,点击“添加动作”。

动作编辑完成后,可以保存到电脑本地或直接下载到控制板中。通过代码调用可以实现动作组的复现。

(2)舵机控制板与STM32进行通讯

在进行串口的二次开发时,需要进行硬件接线。注意STM32的TX引脚接控制板的RX引脚,RX引脚接TX引脚。这里使用的是STM32F103开发板,使用PA9(USART1_TX)和PA10(USART1_RX)引脚进行通讯。

在编写代码前,应明确对控制板进行二次开发的步骤:

  1. 配置基础的串口初始化和串口收数据代码。
  2. 根据手册通讯协议进行数据收发,实现一个或多个舵机精确角度的转动。
  3. 扩展内容,对通讯协议手册进行深入挖掘,实现如读取电压值等更高级控制。

全程不需要进行PWM输出代码部分的编写。

  1. 串口初始化代码(包括接收和发送数据,当只需要发送数据时,NVIC中断部分可不写)。
  2. 串口发数据代码。
  3. 根据手册通讯协议进行数据收发,实现一个或多个舵机精确角度的转动。

在编写代码之前,需要了解该控制板内置的通讯协议:

  • 包头永远不变为0x55 0x55
  • 数据长度为参数个数N + 2
  • 指令就是指令集
  • 参数是需要自己补充的控制信息

指令名CMD_SERVO_MOVE指令值3(0x03),控制任意个舵机的转动。指令值3有多个参数,在指令集3中,数据长度=舵机数量*3+5。

  • 参数一:控制舵机的个数
  • 参数二:时间低八位
  • 参数三:时间高八位
  • 参数四:舵机ID号
  • 参数五:角度位置低八位
  • 参数六:角度位置高八位
  • 参数……:格式与4,5,6相同,控制多个舵机时使用

例如,控制0号舵机在1000ms内转动到2000的位置:

包头 0x55 0x55
数据长度 0x08(1*3+5)
指令 0x03
参数 0x01 0xE8 0x03 0x00 0xD0 0x07

即让单片机发送0x55 0x55 0x08 0x03 0x01 0xE8 0x03 0x00 0xD0 0x07给控制板。

再比如控制2和9号舵机在800ms内,2号转到1200位置,9号转到2300位置:

包头 0x55 0x55
数据长度 0x0B(2*3+5)
指令 0x03
参数0x02 0x20 0x03 0x02 0xB0 0x04 0x09 0xFC 0x08

即让单片机发送0x55 0x55 0x0B 0x030x02 0x20 0x03 0x02 0xB0 0x04 0x09 0xFC 0x08给控制板。

下面讲述如何调用自己在PC端下载到板子上的动作组:

指令名CMD_ACTION_GROUP_RUN指令值6(0x06),实现动作组调用。指令值6有3个参数,数据长度(Length):0x05。

  • 参数一:要运行的动作组编号
  • 参数二:动作组运行的次数低八位
  • 参数三:动作组运行的次数高八位

(若想让动作住一直运行,则参数值给0即可)

比如控制5号动作住运行2次(在之前确保动作组已经下载到控制板内了):

包头 0x55 0x55
数据长度 0x55
指令 0x06
参数 0x05 0x02 0x00

即让单片机发送0x55 0x55 0x055 0x06 0x05 0x02 0x00给控制板。

  1. 根据通讯协议编写主控代码:

控制单个舵机转动任意角度:

LobotServoController.C文件中
main.C文件中
直接调用moveServo()函数即可实现单个舵机任意角度的转动

控制舵机实现预先设定好的动作组复现:

LobotServoController.C文件中
main.C文件中调用该函数即可

最后附上LobotServoController.h文件

到这里,对于控制板的简单使用部分已经结束了,官方资料和我的工程文件已经全部放在文末,有需要的自取。

在未来,我也将继续介绍关于该控制板的更高级二次开发,包括实现读取控制板的电压,同时控制多个舵机的转动等等内容。

最后值得一提的是,当你手头上只有一两个舵机,所需要的转动较为简单时,不推荐使用该控制板。但当你需要控制多个舵机,动作组复杂时(比如机械臂的控制),该舵机控制板的存在会让你的主控代码编写更加简单。

对文章有任何疑问之处,欢迎在评论区下方留言,期待共同进步!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号