【STM32】幻尔16路舵机控制板二次开发教程

幻尔的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

    作者:我讨厌下雨

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【STM32】幻尔16路舵机控制板二次开发教程

    发表评论