幻尔16路舵机控制板二次开发指南
幻尔16路舵机控制板二次开发指南
幻尔16路舵机控制板是一款功能强大的设备,能够同时控制多达16个舵机,并通过串口与外部平台进行通信。本文将详细介绍该控制板的结构、工作原理以及如何通过STM32进行二次开发,帮助开发者快速掌握其使用方法。
1. 控制板结构
- 安卓线接口:用于连接控制器和PC,实现两者之间的通讯。
- 二次开发串口通信接口:用于控制板与其他开发平台(如STM32、ESP32等)进行串口通信。
- LED1:上电后点亮。
- LED2:收到信号时点亮。
- 控制板开关:用于控制电源的通断。
注意:供电电压应在5-8.4V之间,接线时不要接反,否则会烧坏板子。
2. 舵机控制板的通讯
(1)舵机控制板与PC端通讯
在进行舵机控制板和PC端通讯时,需要完成以下步骤:
- 下载官方上位机软件“Hiwonder”和CH340串口驱动。
- 打开上位机软件,界面分为六个区域:
- 语言与舵机选择区域
- 设备连接区域
- 舵机操纵区域
- 动作组详情区域
- 动作组设置区域
- 偏差设置区域
界面具体操作留给大家自己探索,这里只对重要内容进行讲解:
- 只有当控制板上电后,有线连接按钮才变为绿色。
- 可通过调整对应舵机的数值(500—2500),对舵机的转动位置进行调整。
- 动作组设置,可以在4区域查看动作的执行时间和舵机参数。
动作组编辑步骤:
- 选中一号舵机,点击舵机回中,让舵机处于中间角度。
- 设置动作时间为1000ms,点击添加动作。
- 让舵机向右旋转,设置动作时间1000ms,将1500调小,点击添加动作。
- 在两个动作之间添加一个过渡动作,一般在100~300ms之间。
- 最后让舵机回中,设置时间1000ms,点击“添加动作”。
动作编辑完成后,可以保存到电脑本地或直接下载到控制板中。通过代码调用可以实现动作组的复现。
(2)舵机控制板与STM32进行通讯
在进行串口的二次开发时,需要进行硬件接线。注意STM32的TX引脚接控制板的RX引脚,RX引脚接TX引脚。这里使用的是STM32F103开发板,使用PA9(USART1_TX)和PA10(USART1_RX)引脚进行通讯。
在编写代码前,应明确对控制板进行二次开发的步骤:
- 配置基础的串口初始化和串口收数据代码。
- 根据手册通讯协议进行数据收发,实现一个或多个舵机精确角度的转动。
- 扩展内容,对通讯协议手册进行深入挖掘,实现如读取电压值等更高级控制。
全程不需要进行PWM输出代码部分的编写。
- 串口初始化代码(包括接收和发送数据,当只需要发送数据时,NVIC中断部分可不写)。
- 串口发数据代码。
- 根据手册通讯协议进行数据收发,实现一个或多个舵机精确角度的转动。
在编写代码之前,需要了解该控制板内置的通讯协议:
- 包头永远不变为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给控制板。
- 根据通讯协议编写主控代码:
控制单个舵机转动任意角度:
LobotServoController.C文件中
main.C文件中
直接调用moveServo()函数即可实现单个舵机任意角度的转动
控制舵机实现预先设定好的动作组复现:
LobotServoController.C文件中
main.C文件中调用该函数即可
最后附上LobotServoController.h文件
到这里,对于控制板的简单使用部分已经结束了,官方资料和我的工程文件已经全部放在文末,有需要的自取。
在未来,我也将继续介绍关于该控制板的更高级二次开发,包括实现读取控制板的电压,同时控制多个舵机的转动等等内容。
最后值得一提的是,当你手头上只有一两个舵机,所需要的转动较为简单时,不推荐使用该控制板。但当你需要控制多个舵机,动作组复杂时(比如机械臂的控制),该舵机控制板的存在会让你的主控代码编写更加简单。
对文章有任何疑问之处,欢迎在评论区下方留言,期待共同进步!