幻尔的16路舵机控制板,可以对16个舵机同时进行控制,并且用串口与其他平台进行通信,大大
降低代码编写的难度和复杂度。
而在对控制板进行二次开发时,我们首先需要了解该控制板的结构和大概接线。
1.控制板结构
安卓线接口:连接控制器和PC,实现两者通讯
二次开发串口通信接口:控制板和其他开发平台(如STM32,ESP32等等)进行串口通信
LED1:上电后点亮
LED2:收到信号时点亮
控制板开关:控制电源通断
注意:供电电压在5-8.4v之间,接线时不要接反,否则会烧坏板子。
2.舵机控制板的通讯
(1)舵机控制板与PC端通讯
(1)在进行舵机控制板和PC段通讯时,首先确保已经下载官方上位机软件“Hiwonder”(后文附了资料包)和CH340串口驱动
(2)打开上位机软件
(3)界面分为六个区域,1语言与舵机选择区域;2,设备连接区域;3,舵机操纵区域;4,动作组详情区域;5,动作组设置区域;6,偏差设置区域
界面具体操作留给大家自己探索,这里只对重要内容进行讲解
1.只有当控制板上电后,有线连接按钮才变为绿色
2.可通过调整对应舵机的数值(500—2500),对舵机的转动位置进行调整
3.动作组设置,可以在4区域查看动作的执行时间和舵机参数
(图标的简单说明)
4.动作组编辑(以连接了1号舵机,让其向右转动再回中为例)
(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)引脚进行通讯。
接线如图
在编写代码前,应明确对控制板进行二次开发的步骤有如下几点:
配置基础的串口初始化和串口收数据代码。
根据手册通讯协议进行数据收发,实现一个或多个舵机精确角度的转动
扩展内容,对通讯协议手册进行深入挖掘,实现如读取电压值等更高级控制(将在后续文章中介绍)。
全程不需要进行PWM输出代码部分的编写!!!!
1.串口初始化代码(包括接收和发送数据,当只需要发送数据时,NVIC中断部分可不写)
2.串口发数据代码
3.根据手册通讯协议进行数据收发,实现一个或多个舵机精确角度的转动
在编写代码之前,我们需要了解该控制板内置的通讯协议,如下图
包头永远不变为0x55 0x55
数据长度为参数个数N + 2
指令就是指令集
参数是需要自己补充的控制信息
指令名CMD_ SERVO_MOVE 指令值3(0x03),控制任意个舵机的转动
指令值3有多个参数,在指令集3中,数据长度=舵机数量*3+5
- 参数一:控制舵机的个数
- 参数二:时间低八位
- 参数三:时间高八位
- 参数四:舵机ID号
- 参数五:角度位置低八位
- 参数六:角度位置高八位
- 参数……:格式与4,5,6相同,控制多个舵机时使用
1.比如我要控制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.再比如我要控制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 0x03 0x02 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 给控制板
4.根据通讯协议编写主控代码
控制单个舵机转动任意角度
LobotServoController.C文件中
main.C文件中
直接调用moveServo()函数即可实现单个舵机任意角度的转动
控制舵机实现预先设定好的动作组复现
LobotServoController.C文件中
main.C文件中调用该函数即可
最后附上LobotServoController.h文件
到这里,对于控制板的简单使用部分已经结束了,官方资料和我的工程文件已经全部放在文末,有需要的自取。
在未来,我也将继续介绍关于该控制板的更高级二次开发,包括实现读取控制板的电压,同时控制多个舵机的转动等等内容。
最后值得一提的是,当你手头上只有一两个舵机,所需要的转动较为简单时,不推荐使用该控制板。但当你需要控制多个舵机,动作组复杂时(比如机械臂的控制),该舵机控制板的存在会让你的主控代码编写更加简单。
对文章有任何疑问之处,欢迎在评论区下方留言,期待共同进步!
舵机控制板全部工程代码如下
链接:https://pan.baidu.com/s/1tTXLDT0qbqUyWHdrCwckHg?pwd=8866
提取码:8866