DDSM Driver HAT (A)
产品说明
这是一款用于 DDSM 系列直驱伺服轮毂电机的驱动板,板载 4 路 DDSM115 电机接口,4 路 DDSM210 接口,集成 ESP32 和轮毂电机控制电路,我们开源了轮毂电机控制例程和 JSON 通信接口,用户可以通过 USB 连接,使用上位机发送 JSON 格式的指令来控制轮毂电机,并获取 JSON 格式的反馈(电机的电流,转速,温度等信息)。
用户也可以对其进行二次开发,作为机器人项目的下位机来使用。
产品特性
- 用于驱动 DDSM 系列轮毂电机:DDSM115、DDSM210
- 板载4路 DDSM115 电机接口,4路 DDSM210 接口
- 提供易于使用的 DDSM 轮毂电机控制例程和 SDK
- 支持多种有线和无线通信方式,支持 JSON 指令交互,方便上位机控制
- 支持安装树莓派,集成5V降压稳压电路可为树莓派供电,通过GPIO串口进行通信,降低接线复杂度
- 集成 WEB 应用用于控制和设置 DDSM 轮毂电机,方便调试
- 可通过 Type-C 接口与 DDSM 轮毂电机直接通信
板载资源
使用前注意事项
- 由于轮毂电机结构特殊,不能直接放置在桌面上让其转动,最好将轮毂电机的轴固定,如果您没有对应的结构件来安装轮毂电机,可以设置心跳函数来让轮毂电机自动停止转动,具体方法会在后续介绍;也可以使用我们的悬挂结构件 UGV Suspension (A) 或 UGV Suspension (B) 来安装轮毂电机,具体根据您的轮毂电机型号选择对应的结构件。
- 目前只有 DDSM115 和 DDSM210 两款轮毂电机。不同型号的轮毂电机不能同时混用,因为控制指令和反馈信息都是不同的,在您为电机设置ID前,先不要连接电机和驱动板。
基础使用
电源准备
准备 DDSM Driver HAT (A) 驱动板的供电电源,可以通过 DC5525 或者 XT60 两个供电接口的其中一个进行供电。
DDSM Driver HAT (A) 驱动板支持 9~28V DC 电源,但具体的电源规格需要根据您所使用的 DDSM 轮毂电机的型号来确定:
- 使用 DDSM115 时,供电范围为 12~24V;
- 使用 DDSM210 时,供电范围为 11~22V;
电源的电流要根据轮毂电机的工作需求来选择,支持的电流越大越好,在我们的使用测试中,使用 24V 6A 的电源可适用于绝大部分场景。
ESP32 使用控制
DDSM Driver HAT (A) 驱动板出厂上默认带有轮毂电机的控制例程,确保“串口控制切换开关”位于 ESP32 的档位(如下图),此时轮毂电机可以接收来自 ESP32 的控制指令。通过 DC5525 或 XT60 两个供电接口给驱动板供电,驱动板上的 ESP32 会自动开机并同时建立热点供用户连接。
- ESP32 建立的热点名称默认为 ESP32-AP,默认密码为 12345678,您可以使用手机、平板或PC连接这个热点,然后打开浏览器,地址栏输入 192.168.4.1,访问轮毂电机 Web 控制应用。
- Web 控制应用中有一个 JSON 指令输入框,下面是 JSON 指令案例,您可以通过点击下面 JSON 指令案例旁的 “INPUT” 来将对应的 JSON 指令自动填写到输入框中,然后再更改输入框中指令的值,更改后点击 “SEND” 将指令发送到 ESP32。
- 根据您需要控制的轮毂电机型号向驱动板发送指令设置驱动板的通信规则类型。驱动板出厂默认会按照 DDSM115 的通信规则来解析轮毂电机的控制和反馈指令。
- 如果需要控制的是 DDSM210 轮毂电机,则点击 DDSM CTRL 中的 CMD_TYPE_DDSM210 这条 JSON 指令旁的 “INPUT”,可以看见这条对应的 JSON 指令填写到上方的输入框中,接着点击 “SEND” 进行发送,即将驱动板设置成按照 DDSM210 的通信规则来解析轮毂电机的控制和反馈指令。
- 如果设置成 DDSM210 的通信规则情况下,需要控制的是 DDSM115 轮毂电机,则通过 DDSM CTRL 中的 CMD_TYPE_DDSM115 这条 JSON 指令来设置成 DDSM115 的通信规则。
- 这个过程可以不需要连接轮毂电机,每次驱动板上电仅需进行一次该设置。
设置电机 ID
每个轮毂电机在出厂时的 ID 默认为1,因此在进行轮毂电机控制之前,需要为每个轮毂电机设置 ID。
- 将需要设置 ID 的轮毂电机与驱动板连接。注意:驱动板上只能连接有一个轮毂电机,如果连接了多个轮毂电机,那么驱动板上所连接的轮毂电机都会被设置为相同的新 ID。
- 通过 DC5525 或 XT60 两个供电接口给驱动板供电,使用手机、平板或PC连接 ESP32-AP 的热点(密码为12345678),打开浏览器访问 192.168.4.1 轮毂电机 Web 控制应用。
- 点击 DDSM CTRL 中的 CMD_DDSM_CHANGE_ID 这条指令旁的 “INPUT”,可以看见上方输入框中显示设置电机 ID 的 JSON 指令为:{"T":10011,"id":1},其中:
- T:设置电机 ID 的指令类型为 10011。不同指令操作都有各自对应的指令类型。固定值,不能修改。
- id:更改为需要设置轮毂电机的 ID 数值,为 1~253。新设置的 ID 支持断电保存。
若您忘记之前给轮毂电机设置的 ID,或者需要查看 ID 设置是否成功,可以发送 DDSM CTRL 中的 CMD_DDSM_ID_CHECK 这条指令即可查询轮毂电机 ID。反馈的信息为:
{"T":20010,"id":6,"typ":210,"spd":-1,"crt":-2,"act":1,"tep":40,"err":0}
速度闭环控制
设置心跳函数
在进行轮毂电机的转动控制前,您需要将轮毂电机的轴固定,如果您目前没有对应的结构件来固定电机轴,可以设置心跳函数来让轮毂电机自动停止转动(默认的速度环模式下)。
- 点击 CMD_HEARTBEAT_TIME 这条指令旁的 “INPUT”,可以看见 Web 界面上方输入框中显示设置心跳函数的 JSON 指令为:{"T":11001,"time":2000},其中:
- T:设置心跳函数的指令类型为 11001。固定值,不能修改。
- time:时间,单位是 ms。当 time 值为 -1 时,心跳函数功能关闭;当 time 值为 2000 时,发送运动控制指令后 2 秒钟内如果没有接收到新的指令,驱动板会自动控制轮毂电机停止转动,这样可以避免轮毂电机一直转动下去。
有两点注意事项:
- 我们提供的例程中,心跳函数仅作用于 ID 为 1、2、3、4 的这四个轮毂电机;
- 当轮毂电机处于位置环模式时,最好关闭心跳函数(即 time 值为 -1 时),否则在位置环模式下自动执行心跳函数会导致轮毂电机回复到 0 位置。
例子: 你可以设置一条 time 值为 1000 的心跳函数指令,在输入框中的 JSON 指令输入:{"T":11001,"time":1000},点击 SEND 发送,这样当你控制 ID 为 1、2、3、4 的轮毂电机转动时,它转动 1 秒钟后会自动停止,这样防止无结构件固定电机轴的情况下电机突然转动引起的危险。
进行速度控制
- 点击 CMD_DDSM_CTRL 这条 JSON 指令旁的 “INPUT”,可以看见 Web 界面上方输入框中显示速度环控制电机的 JSON 指令为:{"T":10010,"id":1,"cmd":50,"act":3},其中:
- T:设置心跳函数的指令类型为 11001。固定值,不能修改。
- id:改成需要控制轮毂电机的 ID。
- cmd:动作指令的值,具体需要对应具体模式环的取值范围。
- act:每一转的加速时间,单位为 0.1ms。act 值越大,速度变化越柔和。
- 在默认的速度环模式下,cmd 值,对于 DDSM115 和 DDSM210 这两种轮毂电机来说都是目标转速的值,但是单位不同,DDSM115 的 cmd 值单位是 转/分钟( rpm);DDSM210 的 cmd 值的单位是 0.1 转/分钟(0.1rpm)。例如:如果 cmd 值为100,对于 DDSM115 来说是目标速度 100 rpm,对于 DDSM210 来说是目标速度 10 rpm。
点击 SEND 发送这个指令之后,轮毂电机会开始转动。如果你没有设置心跳函数(心跳函数的 time 值为 -1)轮毂电机会一直转动下去,之后你可以使用上面的速度控制指令,将目标转速 cmd 值改为 0,可以令轮毂电机停止转动。也可以使用 CMD_DDSM_STOP 指令来让电机停止转动。
电机模式切换
轮毂电机支持不同的电机模式切换,但是重新上电后的轮毂电机默认都是处于速度环模式下(即速度闭环控制的部分)。
可以使用 CMD_CHANGE_MODE 这条指令来切换模式环,可以看见 JSON 指令显示为:{"T":10012,"id":1,"mode":2},其中:
- T:电机模式切换的指令类型为 10012。固定值,不能修改。
- id:需要切换电机模式的 ID。
- mode:电机模式对应的值。具体如下:
- 0:开环,仅 DDSM210 有开环模式,类似于直流电机的 PWM 控制(同样的,当这一数值过低时电机不会转动,需要达到某一阈值后才能开始转动),cmd 值的绝对值越大,加速度越大,cmd 值的取值范围为 -32767 ~ 32767。
- 1:电流环,仅 DDSM115 有电流环模式,闭环控制电流的大小,CMD_DDSM_CTRL 的 cmd 值(一下简称 cmd 值,因为无论什么模式坏,都是由 CMD_DDSM_CTRL 这条 JSON 指令来控制的)的绝对值越大,加速度越大,cmd 值的取值范围为 -32767 ~ 32767,对应 -8A ~ 8A,但是 DDSM115 最大只支持到 2.7 A。
- 2:速度环,DDSM115 与 DDSM210 都具备的模式,也是轮毂电机上电后的默认模式,可闭环控制速度大小,cmd 值得取值范围根据电机的极限转速来确定,电机的极限转速取决于电源的供电能力和电机的负载大小,负载越大可以达到的极限转速越小。DDSM115 在无负载时可以达到 200 rpm;DDSM210 在无负载时可以达到 210 rpm。
- 3:位置环,DDSM115 与 DDSM210 都具备的模式,当电机切换为位置环时的转速不能过快,最好在电机静止时切换位置环,切换位置环时的位置为 cmd 值为 0 时的位置,但是已经处于位置环的电机再次接收切换位置环的指令时,位置 0 不会更新,位置环下的 cmd 值的取值范围为 0 ~ 32767 (0 ~ 360°),数值逐渐增加为顺时针转动,且电机会自动按照最短的路径规划来运动到目标位置,例如:电机目前处于位置 0,但是你需要让它逆时针转动到某一个位置,这时的 cmd 值应该大于 32767/2,因为它逆时针转到目标位置的路程更近。
获取电机反馈
- 每次使用 CMD_DDSM_CTRL 控制电机时,电机都会反馈当前的状态信息。
- 您可以使用 CMD_DDSM_INFO 这条命令获取其它信息反馈。
JSON 指令表
电机控制
- {"T":10010,"id":1,"cmd":50,"act":3}——电机模式控制指令
- id:改成需要控制轮毂电机的 ID。
- cmd:动作指令的值,具体需要对应具体模式环的取值范围。
- act:每一转的加速时间,单位为 0.1ms。act 值越大,速度变化越柔和。
- {"T":10011,"id":2}——设置电机 ID 指令
- id:更改为需要设置轮毂电机的 ID 数值,为 1~253。新设置的 ID 支持断电保存。
- {"T":10012,"id":1,"mode":2}——切换电机模式指令
- id:需要切换电机模式的 ID。
- mode:电机模式对应的值。具体电机可切换的模式参考基础使用中电机模式切换部分。
- {"T":10031}——查看电机 ID 指令(此时有且仅允许一个电机连接在驱动板上)
- {"T":10032,"id":1}——查看电机其它信息指令
- id:需要查看的电机 ID。
- {"T":11001,"time":2000}——设置心跳函数指令
- time:时间,单位是 ms。当 time 值为 -1 时,心跳函数功能关闭;当 time 值为 2000 时,发送运动控制指令后 2 秒钟内如果没有接收到新的指令,驱动板会自动控制轮毂电机停止转动,这样可以避免轮毂电机一直转动下去。
- {"T":11002,"type":115}——更改驱动板电机类型指令
- type:要控制电机型号。型号为 DDSM210 轮毂电机时,type 则为 210;型号为 DDSM115 轮毂电机时,type 则为 115。
WIFI 设置
- {"T":10401,"cmd":3}——设置驱动板通电后 WIFI 的默认模式
- cmd:默认模式的代号。0:WIFI 关闭;1:AP模式;2:STA模式;3:AP+STA模式。
- {"T":10402,"ssid":"ESP32-AP","password":"12345678"}——设置 AP 模式,建立 WIFI 热点
- ssid:AP 模式的热点名称。
- password:AP 模式的热点密码。
- {"T":10403,"ssid":"EM","password":"bubu6788"}——设置 STA 模式,让驱动板连接到您现有的 WIFI
- ssid:现有 WIFI 的热点名称,需要修改为你想要连接的 WIFI 热点名。
- password:现有 WIFI 热点的密码,需要修改为 WIFI 热点对应的密码。
- {"T":10404,"ap_ssid":"ESP32-AP","ap_password":"12345678","sta_ssid":"JSBZY-2.4G","sta_password":"waveshare0755"}——设置AP+STA模式,建立WIFI热点的同时连接到现有的WIFI
- {"T":10405}——查看 WIFI 设置信息
- {"T":10408}——断开 WIFI 连接
ESP32 设置
- {"T":600}——ESP32 重启
- {"T":601}——获得 Flash 空间剩余大小
- {"T":604}——清空 nvs 区(如果有任何功能错误,发送该指令清空 nvs 区后给驱动板重新上电)
JSON 指令的有线控制
基础使用部分介绍的是如何在 Web 应用中发送 JSON 指令及 JSON 指令的介绍,本部分介绍如何通过有线连接的方式发送 JSON 指令控制驱动板和轮毂电机。
您可以使用 树莓派、Jetson、PC 或其它带有 USB 接口(可进行串口通信的 USB 接口)的设备做为上位机,通过 40PIN 串口或者 USB 接口连接驱动板和上位机。您可以在上位机运行 Python 脚本或者串口调试助手之类的工具发送 JSON 指令来控制轮毂电机。
串口调试助手
这里介绍使用简单的串口调试助手来控制轮毂电机:
- 下载串口调试助手
- 连接轮毂电机到驱动板,为驱动板供电,使用 USB 线连接上位机和驱动板上面标记有 ESP32-USB 的 Type-C 接口,确保“串口控制切换开关”位于 ESP32 的档位
- 双击打开 cktszsss32.exe,选择 USB 端口号,打开串口,波特率 115200,编辑 JSON 指令,需要在 JSON 指令后面手动添加换行符 \n,或者也可以不加“\n”,勾选“加回车换行”
- JSON 指令的功能与上面 Web 应用章节所介绍的一致
Python 串口通信
您可以在上位机中运行 Python 脚本来控制轮毂电机,本脚本可以在任何支持运行 Python 脚本和支持串口通信的设备上使用,包括 Windows PC、Raspberry Pi、Jetson orin 等设备,根据实际情况更改运行 Python 脚本时的输入的串口设备名称参数即可。
Windows 使用
安装 Python
1. 首先到Python 官网下载最新版本 Python 的安装包。根据您的操作系统选择进行下载即可,我这里下载的是 windows 的,版本是3.12.0。
2. 下载完成后,双击安装程序 python-3.12.0-amd64。一定要记得勾选“Add python.exe to PATH”,勾选后点击“Customize installation(自定义安装)”进入到“Optional Features”可选功能界面。 注意若您是Windows系统安装一定要勾选“Add Python.exe to PATH”。
3. 在 Optional Features 这一界面中保持勾选点击“Next”后进入到“Advanced Options”界面。
4. 在“Advanced Options”界面中,安装地址可以点击“Browse”后修改为自己要安装的地址,这里是默认安装地址,设置好后点击“Install”安装,等待安装完成即可。
部署 Python 虚拟环境
点击下载 Python 串口通信例程,解压后,接着在“开始”菜单栏中输入 cmd 打开 Windows 的命令提示符界面,输入“cd 文件夹路径”进入到 ddsm_python 项目文件夹下。
cd C:\Users\liuwei\Downloads\Ddsm_python\ddsm_python(liuwei要改成自己系统对应的User名)
在这个项目文件夹下创建一个对于这个项目的虚拟环境,输入命令:python -m venv [虚拟环境名称,一般叫项目名-env]。
python -m venv ddsm-env
激活这个虚拟环境,在命令提示符界面中输入:项目名-env\Scripts\activate.bat。
ddsm-env\Scripts\activate.bat
解压后可以看见例程中有一个 requirements.txt 文件,这个文件是 DDSM_Python 项目需要用到的安装包列表,可以通过输入以下命令直接安装所有必备的包到虚拟环境中:
python -m pip install -r requirement.txt
虚拟环境已经部署好了,该项目所使用到的安装包也已装好,接下来来运行串口通信例程。
运行例程
串口通信用到的 Python 例程为 serial_simple_ctrl.py。例程具体内容如下:
import serial import argparse import threading def read_serial(): while True: data = ser.readline().decode('utf-8') if data: print(f"Received: {data}", end='') def main(): global ser parser = argparse.ArgumentParser(description='Serial JSON Communication') parser.add_argument('port', type=str, help='Serial port name (e.g., COM1 or /dev/ttyUSB0)') args = parser.parse_args() ser = serial.Serial(args.port, baudrate=115200, dsrdtr=None) ser.setRTS(False) ser.setDTR(False) serial_recv_thread = threading.Thread(target=read_serial) serial_recv_thread.daemon = True serial_recv_thread.start() try: while True: command = input("") ser.write(command.encode() + b'\n') except KeyboardInterrupt: pass finally: ser.close() if __name__ == "__main__": main()
连接轮毂电机到驱动板,为驱动板供电,使用 USB 线连接上位机和驱动板上面标记有 ESP32-USB 的 Type-C 接口,确保“串口控制切换开关”位于 ESP32 的档位。
连接后,在“开始”中的搜索栏中搜索设备管理器查看新插入的端口号,这里新插入的为 COM67,不同电脑插入的端口号不一样,记住新接入的端口号。
使用以下命令来运行串口通信程序,根据实际情况更改运行 Python 脚本时输入的串口设备名称参数即可。将 COM67 更换成驱动板在 PC 中新插入的串口设备端口号,如果您使用的是树莓派、Jeston Orin Nano等设备,也要更改为相对应的端口名称。
python serial_simple_ctrl.py COM67
运行完成后,终端不会反馈任何信息,然后您可以在终端中输入 JSON 指令,按回车,即可与 DDSM Driver HAT (A) 进行通信。例如:需要获得当前连接的电机ID(此时只能有一个电机连接),可以发送 {"T":10031},发送成功后会有信息反馈出来。
产品初始化
当你给 DDSM Driver HAT (A) 驱动板上传了其它例程后,会自动替换掉其原有自带的出厂例程,如果你需要快速地将驱动板恢复至出厂的例程,可以使用我们提供的 ESP32 下载工具。
步骤如下:
1. 点击 ESP32 下载工具进行下载,下载后进行解压缩,双击打开“flash_download_tool_3.9.5.exe”程序。打开后,会弹出两个窗口,我们需要操作的是下载工具的 UI 界面,而另一个窗口作为终端来显示下载工具的工作状态。
2. 在“DOWNLOAD TOOL MODE”这个界面,Chip Type 选择为 ESP32,WorkMode 选择为 Factory。(使用 Factory,调用二进制文件时才会使用相对路径,就不需要用户手动输入二进制文件路径,选择好后点击 OK。
3. 进入下载工具软件界面,右边代表的是可以同时给 8 个驱动板上传程序。将 DDSM Driver HAT (A) 驱动板上的开关档位拨动至“ESP32”的档位上,用 USB 线将 DDSM Driver HAT (A) 驱动板上的 ESP32-USB 接口与电脑相连接,点击“COM”,选择新出现的 COM(我这里新出现的 COM 为 COM67);BAUD 是用于设置下载速度,越高速度越快,ESP32 最高可以使用 921600。
4. 选择好后,点击“START”开始上传程序,上传完成后,“IDLE等待”会变成“FINISH完成”,完成后可以断开驱动板与电脑的 USB 连接,连接轮毂电机,通电后即可进行基础使用控制。
产品开发工具使用
资料下载
产品模型
驱动板原理图
产品出厂例程
出厂例程下载工具
Python 脚本
串口调试助手
技术支持
联系人:方工
EMAIL:2355742825@qq.com
QQ:2355742825
微信:扫下方二维码添加