首页    MW6010-8说明书
微信图片_20240108152050

MW6010-8说明书

MW6010-8微电机使用说明书

目录

版本记录        

注意事项        

法律声明        

售后政策        

1        电机规格参数        

1.1        图纸及尺寸        

1.2        电气特性        

1.3        机械特性        

2        驱动器信息        

2.1        外观及三维尺寸        

2.2        接口概览        

2.3        规格        

2.4        接口详细定义        

2.5        主要器件及规格        

3        调测说明        

3.1        上位机调测        

3.2        固件更新下载        

4        通信协议及示例        

4.1        CAN协议        

4.2        Python SDK        

4.1        Arduino SDK        

4.2        ROS SDK        

5        常见问题和异常码(待更新)        

5.1        常见问题(FAQ)        

5.2        异常码        

 

 

版本记录

版本号

日期

修订/说明

0.1

2023.12.5

支持odrivetool的第一版

0.2

2023.12.15

增加指令列表与指令分类

0.3

2023.12.19

增加Python,Arduino,ROS SDK

0.4

2023.12.23

增加USB和CAN兼容性的切换描述

0.5

2023.12.29

增加上位机调测实战案例

0.6

2024.1.2

增加CAN协议和Python调测实战案例

0.7

2024.1.8

增加CAN接口120R匹配电阻开关选项

 

 

 

注意事项

1.                      请按照本说明书的工作参数使用,否则将会对产品造成不可逆的损坏!

2.                      在电机运行过程中,请做好电源的过流过压保护措施,以免损坏驱动器。

3.                      使用前请检查各部件完好,如发生部件缺失或损坏,请及时联系技术支持。

4.                      驱动器没有防反接能力,请在接电源前参照第2.4.1节,确保电源正负正确。

5.                      驱动器裸露部分,请不要用手碰触,以免静电损坏

法律声明

在使用本产品前,请务必仔细阅读本手册,按照内容操作本产品。如用户违反说明书内容使用本产品,造成的任何财产损失、人身伤害事故,本公司不承担任何责任。因本产品由众多零部件构成,切勿让⼉童接触本产品,以免发⽣意外事故。为延⻓产品使⽤寿命,请勿在⾼温、⾼压环境中使⽤本产品。本⼿册在印刷时已尽可能的包含各项功能介绍和使⽤说明。但由于产品功能不断完善、设计变更等,仍可能与用户购买的产品有不符之处。

本⼿册与实际产品在颜⾊、外观等⽅⾯可能有所偏差,请以实际产品为准。本公司随时可能对本⼿册中的印刷错误、不准确的最新信息进⾏必要的改进和更改,或对程序和/或设备进⾏改进,恕不另⾏通知。此类更改将上传到本⼿册的新版本中,请联系技术支持获取。所有图⽚仅供功能说明参考,请以实物为准。

售后政策

本产品售后服务严格依据《中华人民共和国消费者权益保护法》、《中华人民共和国产品质量法》实行售后服务,服务内容如下:

1.                      保修期限及内容

1)                      凡在线上渠道下单购买本产品的用户,可在⾃签收次⽇起七⽇内享受⽆理由退货服务。退货时用户须出⽰有效购买凭证,并退回发票。用户须保证退货商品保持原有品质和功能、外观完好、商品本⾝及配件的商标和各种标识完整⻬全,如有赠品需⼀并退回。如果商品出现⼈为损坏、⼈为拆机、包装箱缺失、零配件缺失的情况,不予办理退货。退货时产⽣的物流费⽤由用户承担。如果用户未结清物流费⽤,将按实际发⽣额从退款⾦额中扣除。⾃收到退货商品之⽇起七⽇内向用户返还已⽀付的货款。退款⽅式与付款⽅式相同。具体到账⽇期可能会受银⾏、⽀付机构等因素影响

2)                      用户签收次⽇起7天内,发⽣⾮⼈为损坏性能故障,经由本公司售后服务中⼼检测确认后,为用户办理退货业务,退货时用户须出⽰有效购买凭证,并退回发票。如有赠品需⼀并退回。

3)                      用户签收次⽇起7天后15天内,发⽣⾮⼈为损坏性能故障,经由本公司售后服务中⼼检测确认后,为用户办理换货业务,更换整套商品。换货后,商品本⾝三包期重新计算。

4)                      用户签收次⽇起15天后365天内,经由本公司售后服务中⼼检测确认后,属于产品本⾝质量故障,可免费提供维修服务。更换的故障产品归本公司所有。⽆故障产品,将原样返回。本产品经过各项严格检测后出⼚,如有⾮产品本⾝质量故障,我们将有权拒绝用户的退换货需求。

本⼿册售后政策若与店铺售后政策不⼀致的,以店铺的售后政策为准。

2.                      非保修条例

以下情况不属于保修范围:

1)                      超出保修条款所限定的保修期限。

2)                      未按照说明书要求,错误使⽤造成的产品损坏损毁。

3)                      不当的操作、维修、安装、改装、测试等不正当使⽤造成的损坏损毁。

4)                      ⾮质量故障引起的常规机械损耗、磨损。

5)                      ⾮正常⼯况下造成的损坏,包括但不限于跌落、撞击、液体浸⼊、剧烈撞击等。

6)                      天灾(如⽔灾、⽕灾、雷击、地震等)或不可抗击⼒造成的损坏。

7)                      超过峰值扭矩使⽤造成的损坏。

8)                      本公司原装正品或⽆法提供合法购买凭证。

9)                      其他⾮产品的设计、技术、制造、质量等问题导致的故障或损坏。

10)                      私自拆卸本产品造成的损坏。

如果出现上述情况,用户需⾃⾏⽀付费⽤。

1                      电机规格参数

1.1                      图纸及尺寸

6010-8安装图-1

1.2                      电气特性

额定转速

120rpm±10%

最大转速

420rpm±10%

额定扭矩

5N.m

堵转扭矩

11N.m

额定电流

10.5A

堵转电流

25A

空载电流

0.4A

绝缘电阻/定⼦绕组

DC 500VAC, 100M Ohms

耐⾼压/定⼦与机壳

600 VAC, 1s, 2mA

电机反电势

0.054~0.057Vrms/rpm

相间电阻

0.48Ω±10%

相间电感

368μH±10%

转速常数

12.3rpm/v

扭矩常数

0.47N.M/A

 

特性曲线如下图:

img2 

1.3                      机械特性

重量

388g±3

14对

相数

3相

驱动⽅式

FOC

减速

8:1

2                      驱动器信息

2.1                      外观及三维尺寸

img3

2.2                      接口概览

img4

接口序号

定义

1

15~60V电源和CAN通信集成端子

2

Type-C调试接口及上位机通信接口

3

接口扩展插槽(可扩展RS485EtherCAT,航模,脉冲方向,油门控制等接口/协议)

4

SWD调试及下载接口

5

第二编码器接口(支持I2C和UART

6

电机温度接口(NTC

7

抱闸/刹车电阻接口,12V电源,最小/最大限位开关接口

U/V/W

三相绕组焊接孔

4xM2

安装孔

 

2.3                      规格

额定电压

15~48V DC

最小/最大电压

12/72V DC

额定电流

6A

最大线电流

30A

最大相电流

120A

待机功耗

<10mA

CAN总线波特率

1Mbps

Type-C速率

10Mbps

编码器分辨率

16bit(单圈绝对值)

工作环境温度

-20℃70℃

告警电机温度

90(可调)

告警驱动板温度

90(可调)

 

2.4                      接口详细定义

2.4.1                      电源及CAN通信端子

img5

板载端子型号XT30PB(2+2)-M,线端型号XT30(2+2)-F,品牌厂家艾迈斯(AMASS)。

2.4.2                      Type-C调试接口

Type-C采用标准的数据线规格,常用PC或手机Type-C数据线均兼容。

2.4.3                      接口扩展插槽

此插槽采用下述设计方式,提供丰富的板间扩展接口,可由第三方开发任意的扩展板:

img6

第三方可通过SPI,USART,I2C,PWM,ADC,GPIO等方式与驱动器进行交互,实现各种扩展功能。

板载插槽型号是X0812FVS-20CS-9TV01(母座),扩展板插槽型号是X0812WVS-20AS-9TV01(公座),品牌厂家是星坤。

母座X0812FVS-20CS-9TV01

公座X0812WVS-20AS-9TV01

img7

img8

 

2.4.4                      SWD调试接口

间隔2mm的插针孔,用户可焊接2mm直插单排针,如下图:

img9

img10

 

img11

2.4.5                      第二编码器接口

间隔2mm的插针孔,用户可焊接2mm直插单排针,请参见2.4.4

此接口可通过USART(TX/RX)或I2C(SCL/SDA)与第二编码器进行通信。

img12

2.4.6                      电机温度接口

电机内置10K的NTC电阻,两条引线焊接到MOT_TEMP和GND,没有线序。

img13

2.4.7                      抱闸/刹车电阻接口

图示5针接口中上方两个焊孔为抱闸/刹车电阻接口,间隔2mm的插针孔,用户可焊接2mm直插单排针,请参见2.4.4

当为抱闸接口时,驱动器在加电时持续向此接口输出一个电流,以使抱闸呈打开状态,电机得以正常运转,如驱动器断电,则此电流停止,抱闸锁住,电机将在断电位置锁死。

当为刹车电阻接口时,可外接一个刹车电阻(或称之为泄放电阻),在反电动势高于门限电压时,通过此刹车电阻泄放电流,防止无法紧急刹车,或反电动势损坏驱动器。

img14

2.4.8                      限位开关接口

驱动器提供两个限位开关接口,且为外部限位开关提供12V电源,间隔2mm的插针孔,用户可焊接2mm直插单排针,请参见2.4.4

其中LW1是最小位置限位开关,LW2是最大位置限位开关。可外接两线式开关三线式NPN开关

img15

 

2.5                      主要器件及规格

序号

器件

型号/规格

数量

1

MCU

N32G455REL7

1

2

驱动芯片

FD6288Q

1

3

磁编码器芯片

MA600,16bit绝对值

1

4

MOSFET

JMSH1004NG,100V/120A

6

3                      调测说明

3.1                      上位机调测

使用电机精灵(2024年1月推出)进行可视化调测。

驱动器兼容odrivehttps://github.com/odriverobotics/odrive.git),所以也可使用odrivetool进行调测。

3.1.1                      上位机安装

3.1.1.1                      Windows

1.                      安装python

进入python官方网站https://www.python.org下载最新python安装程序并按提示安装。请不要下载第三方网站或微软Microsoft Store商店中的python版本。

2.                      安装visual c++生成工具

安装visual c++生成工具https://visualstudio.microsoft.com/visual-cpp-build-tools/ ,安装过程中勾选使用C++的桌面开发”,如下图所示。

img16

3.                      安装odrivetool

使用管理员运行Windows PowerShell,在其中运行pip install odrive并回车安装。如果中途出错请重试。如果再三出错,请重启电脑再重试。

4.                      安装USB驱动

进入网站https://zadig.akeo.ie并下载USB驱动工具Zadig,用Type-C数据线将驱动器接入电脑,此时驱动器电源灯亮,打开Zadig,通过下拉框选择“CyberBeast Motor Driver Device(Interface 2)”:

img17

通过点击上下键选择不同的USB驱动,请为此接口选择“WinUSB”驱动版本,并点击“Install Driver”为这个接口安装驱动:

img18

3.1.1.2                      WSL(Windows Subsystem for Linux

1.                      安装python/usb/odrivetool

sudo apt install python3 python3-pip

sudo apt install libusb-1.0-0

sudo pip install odrive numpy matplotlib

如果用户安装了WSL2,可进入WSL2的命令行,按照下面的步骤来安装(假设用户WSL安装的是Ubuntu

第一行指令安装python,第二行指令安装usb驱动,第三行指令安装odrivetool上位机。

2.                      连接驱动器到WSL

用type-C数据线插入Windows,默认情况下Windows会加载此USB端口的驱动,而WSL并不会加载。需要将此USB端口加载到WSL中,请参照微软文档(https://learn.microsoft.com/zh-cn/windows/wsl/connect-usb)操作。

3.1.1.3                      Ubuntu

Ubuntu下的安装过程跟WSL下非常类似,请参见上一小节。

3.1.2                      USB和CAN兼容性

在本产品的早期版本(硬件版本小于等于3.6,可通过下一小节3.1.3中的指令odrv0.hw_version_major和odrv0.hw_version.minor来获取)中,USB与CAN不兼容,可通过下述方式在两种通信方式中切换(硬件版本大于3.6的可忽略本节内容)

Ø                      USB通信时切换到CAN

odrv0.config.enable_can_a = True

odrv0.axis0.requested_state = AXIS_STATE_IDLE

odrv0.save_configuration()

当禁止CAN时,用户可使用Type-C接口通信(参见下一小节3.1.3),此时,可通过下列指令切换到CAN

Ø                      CAN通信时切换到USB

当使能CAN时,用户首先通过发送消息Set_Axis_State(参数为1,表示空闲(IDLE)状态)将电机切换到空闲状态,再通过发送Disable_Can消息来切换到USB(参见4.1.2)。

请注意,无论是从USB切换到CAN,还是CAN切换到USB,必须先让电机处于空闲(IDLE)状态,否则会切换失败。

3.1.3                      上位机调测

请连接电机主电源(可不连接CAN接口)和Type-C接口,在电脑上进入Windows PowerShell,运行odrivetool,如果连接成功,会以绿色字体显示如下:

img19

如果没有出现上述连接成功标志,请重新拔插USB,并确认电源连接正常,或参照3.1.2查看如何切换USB和CAN通信

3.1.3.1                      指令列表

在连接成功后,用户可通过指令对电机进行控制,并获取电机运行的参数。下表是常用指令和调测过程及说明:

类型

指令

说明

基础指令

dump_errors(odrv0)

打印所有的错误信息

odrv0.clear_errors()

清除所有的错误信息

odrv0.save_configuration()

在修改过参数,或电机自动识别参数或校准过后,请务必执行此指令存储修改,否则断电后丢失所有修改。

odrv0.reboot()

重启驱动器

odrv0.vbus_voltage

获取电源电压(V)

odrv0.ibus

获取电源电流(A

odrv0.hw_version_major

硬件主版本号,MW6010-8目前的主版本号为3

Odrv0.hw_version_minor

硬件次版本号,MW6010-8目前的次版本号为7

odrv0.hw_version_variant

同一硬件配置下的不同型号码,MW6010-8对应的型号码为1

odrv0.can.config.r120_gpio_num

控制CAN接口的120R匹配电阻开关的GPIO

odrv0.can.config.enable_r120

控制CAN接口的120R匹配电阻开关

参数配置指令

odrv0.config.dc_bus_undervoltage_trip_level

低电压告警门限(V)

odrv0.config.dc_bus_overvoltage_trip_level

超电压告警门限(V)

odrv0.config.dc_max_positive_current

线电流最大值(正值)(A

odrv0.config.dc_max_negative_current

线电流反向充电最大值(负值)(A

odrv0.axis0.motor.config.resistance_calib_max_voltage

电机参数识别时最大电压值,一般此值稍小于电源电压一半,如24V供电,可设置为10

odrv0.axis0.motor.config.calibration_current

电机参数识别时最大电流值,此值一般可设置为2~5A,不可过大,也不可过小。

odrv0.axis0.motor.config.torque_constant

电机的力矩常数(Nm/A

校准指令

odrv0.axis0.requested_state=4

对电机进行参数识别,包括识别相电阻,相电感,以及对三相电流平衡性做出校准。这个过程会历时3~6秒钟,电机会发出尖利的声音。在声音停止后,或6秒后没有声音时,均运行dump_errors(odrv0)查看错误,确认没有错误再进行其他操作。

odrv0.axis0.requested_state=7

对编码器进行校准。执行此操作前,请确认电机输出轴没有任何负载,且用手或其他装置固定住电机。此操作执行后,电机会正向和反向旋转一定时间,对编码器进行识别和校准。在电机停转后,运行dump_errors(odrv0)查看错误,确认没有错误再进行其他后续步骤。

odrv0.axis0.encoder.config.pre_calibrated=1

写入预校准成功,表示不用每次上电进行校准。这个参数仅在上述校准成功过后才能写入,否则写入会失败。

odrv0.axis0.controller.config.load_encoder_axis=0

确保当前操作电机为第0个电机。此操作仅在BETA中必要,量产版本中无效。

控制指令

odrv0.axis0.requested_state=1

停止电机,进入空闲状态

odrv0.axis0.requested_state=8

启动电机,进入闭环状态

odrv0.axis0.motor.config.current_lim

电机运行最大线电流(A),超过此值会报过流告警。请注意,此值不得大于100

odrv0.axis0.controller.config.vel_limit

电机运行最大速度(turns/s),电机转子速度超过此值会报超速告警。

odrv0.axis0.controller.config.enable_vel_limit

速度限制开关,为True时上述vel_limit生效,为False时无效。

odrv0.axis0.controller.config.control_mode

控制模式。

0:电压控制

1:力矩控制

2:速度控制

3:位置控制

odrv0.axis0.controller.config.input_mode

输入模式。表示用户输入的控制值以什么方式去控制电机运转:

0:闲置

1:直接控制

2:速度斜坡

3:位置滤波

5:梯形曲线

6:力矩斜坡

odrv0.axis0.controller.config.vel_gain

速度环PID控制的P值

odrv0.axis0.controller.config.vel_integrator_gain

速度环PID控制的I值

odrv0.axis0.controller.config.pos_gain

位置环PID控制的P值

odrv0.axis0.controller.input_torque

力矩控制的目标,或速度控制/位置控制的力矩前馈(Nm

odrv0.axis0.controller.input_vel

速度控制的目标,或位置控制的速度前馈(turns/s

odrv0.axis0.controller.input_pos

位置控制的目标(turns

 

3.1.3.2                      实战:上电校准

用户第一次使用微电机时,需要对电机以及编码器进行校准。在校准之前,请固定好电机,或用手握紧,输出轴空载,校准过程如下:

img20

odrv0.axis0.requested_state = AXIS_STATE_MOTOR_CALIBRATION

dump_errors(odrv0)

odrv0.axis0.requested_state = AXIS_STATE_ENCODER_OFFSET_CALIBRATION

dump_errors(odrv0)

odrv0.axis0.motor.config.pre_calibrated = 1

odrv0.axis0.encoder.config.pre_calibrated = 1

odrv0.save_configurations()

解释如下:

Ø                      第一步:电机参数自识别

odrv0.axis0.motor.config.phase_resistance

odrv0.axis0.motor.config.phase_inductance

测量电机的相电阻和相电感,会听到尖利的“嘀”一声。相电阻和相电感的测量结果可通过下述指令查看:

Ø                      第二步:查看错误码

查看第一步过后的系统错误码,如果出现任何的红色错误码,则需要重启电机,然后重试,或者报告售后。

Ø                      第三步:编码器校准

对编码器进行校准,包括编码器的安装角度与电机机械角度的校准,以及编码器自身的校准。在这个校准过程中,电机会缓慢正转一个角度,再反转一个角度。如果只正转后就停止,则说明有错误,请通过第四步查看错误码。

Ø                      第四步:查看错误码

odrv0.axis0.encoder.config.cpr

odrv0.axis0.motor.config.pole_pairs

在第三步编码器校准后,查看系统的错误码。通常出现的错误是ERROR_CPR_POLEPAIRS_MISMATCH,表示编码器的CPR设置错误,或者电机的极对数设置错误,请通过下述指令查看/设置:

Ø                      第五步:写入电机校准成功标志

Ø                      第六步:写入编码器校准成功标志

Ø                      第七步:存储校准结果并重启

 

3.1.3.3                      实战:速度控制

下列指令是进行速度控制的实例:

odrv0.axis0.controller.config.control_mode=CONTROL_MODE_VELOCITY_CONTROL

odrv0.axis0.controller.config.input_mode=INPUT_MODE_VEL_RAMP

odrv0.axis0.requested_state=AXIS_STATE_CLOSED_LOOP_CONTROL

odrv0.axis0.controller.input_vel=15

img21

 

3.1.3.4                      实战:位置控制

下列指令控制电机转到10转的转子位置:

img22

odrv0.axis0.controller.config.control_mode=CONTROL_MODE_POSITION_CONTROL

odrv0.axis0.controller.config.input_mode=INPUT_MODE_POS_FILTER

odrv0.axis0.requested_state=AXIS_STATE_CLOSED_LOOP_CONTROL

odrv0.axis0.controller.input_pos=10

3.1.4                      图形化调测

在对电机进行调测时,如果需要实时监控某些运行参数,可以利用python强大的计算库和图形库,以及Type-C接口的高速吞吐能力实时输出电机参数。

1.                      环境准备

pip install numpy matplotlib

 

安装计算库和图形库:

2.                      图形化参数输出

start_liveplotter(lambda:[odrv0.ibus,odrv0.axis0.encoder.pos_estimate,odrv0.axis0.controller.input_pos],["ibus","pos","pos_target"])

 

 

odrivetool命令行界面,调起图形库,读取任何电机运行指标,如:

这个指令将调起一个图形界面,实时输出下述三个指标:线电流、位置、目标位置。接下去,对电机进行位置控制,就会看到电机的实时位置控制曲线

img23

3.1.5                      CAN匹配电阻开关

odrv0.can.config.r120_gpio_num = 5

odrv0.can.config.enable_r120 = True

 

在驱动器上,已经板载一个120欧阻抗匹配电阻,用户可根据需要打开或关闭,指令示例如下:

 

3.1.6                      PID调整

odrv0.axis0.controller.config.pos_gain=20.0

odrv0.axis0.controller.config.vel_gain=0.16

odrv0.aixs0.controller.config.vel_integrator_gain=0.32

 

 

下述过程可以为用户调节PID参数提供一个参考:

1.                      设置PID初始值

2.                      vel_integrator_gain调为0

3.                      

drv0.aixs0.controller.config.vel_integrator_gain=0

 

调节vel_gain方法:

1)                      用速度控制模式转动电机,如果转动不平稳,有抖动或震动,减小vel_gain,直到转动平稳

2)                      接着,每次把vel_gain增大30%左右,直到出现明显的抖动

3)                      此时,将vel_gain减小50%左右,即可稳定

4.                      调节pos_gain方法:

1)                      用位置模式尝试转动电机,如果转动不平稳,有拉动或震动,减小pos_gain,直到转动平稳

2)                      接着,每次把pos_gain增大30%左右,直到位置控制出现明显的过调(即每次位置控制电机会超出目标位置,然后振荡回到目标位置)

3)                      然后,逐渐减小pos_gain,直到过调现象消失

5.                      在上述4步调整过后,可将vel_integrator_gain设置为0.5*bandwidth*vel_gain,其中bandwidth是系统控制带宽。何为控制带宽?比如,从用户设置目标位置,到电机真正到达目标位置的时间为10ms,则控制带宽就是100Hz,那么vel_integrator_gain=0.5*100*vel_gain

在上述调参过程中,建议使用3.1.4中的图形化手段实时查看调参效果,避免肉眼感知的误差。

3.1.7                      电机参数备份与恢复

odrivetool backup-config d:\test.json

 

利用odrivetool,可将调测完备的电机进行参数备份:

其中“d:\test.json”是用户可自由修改的保存路径和文件名。

odrivetool restore-config d:\test.json

 

参数恢复的指令为:

 

3.2                      固件更新下载

可以通过SWD接口(2.4.4)或Type-C接口(2.4.2)烧录固件,提供下述三种方式:        

3.2.1                      pyocd

pyocdopenOCD的python版本,可支持STLinkJLink,DAP等通用调试工具进行擦除、烧写、重置等操作。请注意,必须用SWD接口连接驱动器。关于SWD的线序,请参见2.4.4SWD接口中有3.3V电源,请不要接错线序,以免损毁驱动器!

1.                      

pip install pyocd

安装

2.                      烧写

pyocd list

首先,列出连接的调试工具

img24

然后,执行下述指令烧写bin文件:

pyocd load .\ODrive_N32G455.bin -a 0x8000000

img25

3.2.2                      国民下载软件

1.                      USB(DFU烧写

请注意,国民下载软件可通过Type-C接口进行烧录,也可通过SWD接口(仅支持JLink和DAP)烧录,本节主要以Type-C接口烧录为例。

首先,下载国民烧录软件(https://www.cyberbeast.cn/Customer/FileDownloadVerifyPass?fileid=766844&type=img),解压到任意目录,并且运行

odrv0.enter_dfu_mode()

 

 

然后,连接Type-C接口,进入odrivetool,并执行下述指令将驱动器置于DFU模式:

最后,用国民烧录软件进行烧写,如下图所示。请注意,在烧写完成过后,请点击“常用操作”,然后点击“复位”,可重启驱动器,并可正常通过odrivetool连接调测。

img26

2.                      SWDJLink或DAP)烧写

使用SWD方式下载跟DFU模式相似,但需要通过SWD调试接口(2.4.4)进行连接,且在上图中选择相应的调试工具(JLink或DAP)

3.2.3                      电机精灵(即将推出)

4                      通信协议及示例

4.1                      CAN协议

默认通信接口是CAN,最大通信速率1Mbps请注意:早期硬件版本(小于等于3.6)中USB与CAN不兼容,请参见3.1.2如何从USB切换到CAN

4.1.1                      协议帧格式

CAN通信采用标准帧格式,11位ID,8字节数据,如下表所示(左为MSB,右为LSB)

数据域

CAN ID(11bits

Data(8 bytes)

分段

Bit10 ~ Bit5

Bit4 ~ Bit0

Byte0 ~ Byte7

描述

node_id

cmd_id

通信数据

 

l                      node_id:代表这个电机在总线上的唯一ID,可在odrivetool中用odrv0.axis0.config.can.node_id来读取和设置。

l                      cmd_id:指令编码,表示协议的消息类型,请参见本节余下内容。

l                      通信数据:8个字节,每一个消息中携带的参数会被编码成整数或浮点数,字节序为小端(small endian),其中浮点数是按照IEEE 754标准进行编码(可通过网站https://www.h-schmidt.net/FloatConverter/IEEE754.html测试编码)。

以4.1.2中描述的Set_Input_Pos消息为例,假设其三个参数分别为:Input_Pos=3.14Vel_FF=1000(表示1rev/s),Torque_FF=5000(表示5Nm),而Set_Input_Pos消息的CMD ID=0x00C,假设驱动器的节点(node_id被设置成0x05,则:

l                      11位CAN ID=(0x05<<5)+0x0C=0xAC

l                      根据4.1.2中对于Set_Input_Pos的描述可知,Input_Pos在第0个字节开始的4个字节,编码为C3 F5 48 40(浮点数3.14IEEE 754标准编码为32位数0x4048f5c3),Vel_FF在第4个字节开始的2个字节,编码为E8 03(1000=0x03E8),Torque_FF在第6个字节开始的2个字节,编码为88 13(5000=0x1388),则8个字节的通信数据为:

Byte0

Byte1

Byte2

Byte3

Byte4

Byte5

Byte6

Byte7

C3

F5

48

40

E8

03

88

13

 

4.1.2                      帧消息

下表列出了所有的可用消息

CMD ID

名称

方向

参数

0x001

Heartbeat

电机à主机

Axis_Error

Axis_State

Motor_Flag

Encoder_Flag

Controller_Flag

0x002

Estop

主机à电机

 

0x003

Get_Motor_Error

电机à主机

Motor_Error

0x004

Get_Encoder_Error

电机à主机

Encoder_Error

0x005

Get_Sensorless_Error

电机à主机

Sensorless_Error

0x006

Set_Axis_Node_ID

主机à电机

Axis_Node_ID

0x007

Set_Axis_State

主机à电机

Axis_Requested_State

0x009

Get_Encoder_Estimates

电机à主机

Pos_Estimate

Vel_Estimate

0x00B

Set_Controller_Mode

主机à电机

Control_Mode

Input_Mode

0x00C

Set_Input_Pos

主机à电机

Input_Pos

Vel_FF

Torque_FF

0x00D

Set_Input_Vel

主机à电机

Input_Vel

Torque_FF

0x00E

Set_Input_Torque

主机à电机

Input_Torque

0x00F

Set_Limits

主机à电机

Velocity_Limit

Current_Limit

0x010

Start_Anticogging

主机à电机

 

0x011

Set_Traj_Vel_Limit

主机à电机

Traj_Vel_Limit

0x012

Set_Traj_Accel_Limits

主机à电机

Traj_Accel_Limit

Traj_Decel_Limit

0x013

Set_Traj_Inertia

主机à电机

Traj_Inertia

0x014

Get_Iq

电机à主机

Iq_Setpoint

Iq_Measured

0x015

Get_Sensorless_Estimates

电机à主机

Pos_Estimate

Vel_Estimate

0x016

Reboot

主机à电机

 

0x017

Get_Bus_Voltage_Current

电机à主机

Bus_Voltage

Bus_Current

0x018

Clear_Errors

主机à电机

 

0x01A

Set_Pos_Gain

主机à电机

Pos_Gain

0x01B

Set_Vel_Gains

主机à电机

Vel_Gain

Vel_Integrator_Gain

0x01D

Get_Controller_Error

电机à主机

Controller_Error

0x01E

Disable_Can

主机à电机

 

 

所有消息的详细描述如下:

Ø                      Heartbeat

CMD ID: 0x001(电机à主机)

起始字节

名称

类型

odrivetool访问

0

Axis_Error

uint32

odrv0.axis0.error

4

Axis_State

uint8

odrv0.axis0.current_state

5

Motor_Flag

uint8

1:odrv0.axis0.motor.error不为0

0:odrv0.axis0.motor.error为0

6

Encoder_Flag

uint8

1:odrv0.axis0.encoder.error不为0

0:odrv0.axis0.encoder.error为0

7

Controller_Flag

uint8

bit7:odrv0.axis0.controller.trajectory_done

bit0

1:odrv0.axis0.controller.error不为0

0:odrv0.axis0.controller.error为0

 

Ø                      Estop

CMD ID: 0x002(主机à电机)无参数无数据。

此指令会导致电机紧急停机,并报ESTOP_REQUESTED异常。

Ø                      Get_Motor_Error

CMD ID: 0x003(电机à主机)

起始字节

名称

类型

odrivetool访问

0

Motor_Error

uint32

odrv0.axis0.motor.error

 

Ø                      Get_Encoder_Error

CMD ID: 0x004(电机à主机)

起始字节

名称

类型

odrivetool访问

0

Encoder_Error

uint32

odrv0.axis0.encoder.error

 

Ø                      Get_Sensorless_Error

CMD ID: 0x005(电机à主机)

起始字节

名称

类型

odrivetool访问

0

Sensorless_Error

uint32

odrv0.axis0.sensorless_estimator.error

 

Ø                      Set_Axis_Node_ID

CMD ID: 0x006主机à电机

起始字节

名称

类型

odrivetool访问

0

Axis_Node_ID

uint32

odrv0.axis0.config.can.node_id

 

Ø                      Set_Axis_State

CMD ID: 0x007(主机à电机)

起始字节

名称

类型

odrivetool访问

0

Axis_Requested_State

uint32

odrv0.axis0.requested_state

 

Ø                      Get_Encoder_Estimates

CMD ID: 0x009(电机à主机)

起始字节

名称

类型

单位

odrivetool访问

0

Pos_Estimate

float32

rev

odrv0.axis0.encoder.pos_estimate

4

Vel_Estimate

float32

rev/s

odrv0.axis0.encoder.vel_estimate

 

Ø                      Get_Encoder_Count

CMD ID: 0x00A(电机à主机)

起始字节

名称

类型

odrivetool访问

0

Shadow_Count

int32

odrv0.axis0.encoder.shadow_count

4

Count_In_Cpr

int32

odrv0.axis0.encoder.count_in_cpr

 

Ø                      Set_Controller_Mode

CMD ID: 0x00B(主机à电机)

起始字节

名称

类型

odrivetool访问

0

Control_Mode

uint32

odrv0.axis0.controller.config.control_mode

4

Input_Mode

uint32

odrv0.axis0.controller.config.input_mode

 

Ø                      Set_Input_Pos

CMD ID: 0x00C(主机à电机)

起始字节

名称

类型

单位

odrivetool访问

0

Input_Pos

float32

rev

odrv0.axis0.controller.input_pos

4

Vel_FF

int16

0.001rev/s

odrv0.axis0.controller.input_vel

6

Torque_FF

int16

0.001Nm

odrv0.axis0.controller.input_torque

 

Ø                      Set_Input_Vel

CMD ID: 0x00D(主机à电机)

起始字节

名称

类型

单位

odrivetool访问

0

Input_Vel

float32

rev/s

odrv0.axis0.controller.input_vel

4

Torque_FF

float32

Nm

odrv0.axis0.controller.input_torque

 

Ø                      Set_Input_Torque

CMD ID: 0x00E(主机à电机)

起始字节

名称

类型

单位

odrivetool访问

0

Input_Torque

float32

Nm

odrv0.axis0.controller.input_torque

 

Ø                      Set_Limits

CMD ID: 0x00F(主机à电机)

起始字节

名称

类型

单位

odrivetool访问

0

Velocity_Limit

float32

rev/s

odrv0.axis0.controller.config.vel_limit

4

Current_Limit

float32

A

odrv0.axis0.motor.config.current_lim

 

Ø                      Start_Anticogging

CMD ID: 0x010(主机à电机)

进行力矩纹波校准。

Ø                      Set_Traj_Vel_Limit

CMD ID: 0x011(主机à电机)