MW6010-8说明书
MW6010-8微电机使用说明书
目录
版本号 |
日期 |
修订/说明 |
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 图纸及尺寸
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 |
特性曲线如下图:
1.3 机械特性
重量 |
388g±3 |
极对数 |
14对 |
相数 |
3相 |
驱动⽅式 |
FOC |
减速⽐ |
8:1 |
2 驱动器信息
2.1 外观及三维尺寸
2.2 接口概览
接口序号 |
定义 |
1 |
15~60V电源和CAN通信集成端子 |
2 |
Type-C调试接口及上位机通信接口 |
3 |
接口扩展插槽(可扩展RS485,EtherCAT,航模,脉冲方向,油门控制等接口/协议) |
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通信端子
板载端子型号XT30PB(2+2)-M,线端型号XT30(2+2)-F,品牌厂家艾迈斯(AMASS)。
2.4.2 Type-C调试接口
Type-C采用标准的数据线规格,常用PC或手机Type-C数据线均兼容。
2.4.3 接口扩展插槽
此插槽采用下述设计方式,提供丰富的板间扩展接口,可由第三方开发任意的扩展板:
第三方可通过SPI,USART,I2C,PWM,ADC,GPIO等方式与驱动器进行交互,实现各种扩展功能。
板载插槽型号是X0812FVS-20CS-9TV01(母座),扩展板插槽型号是X0812WVS-20AS-9TV01(公座),品牌厂家是星坤。
母座X0812FVS-20CS-9TV01 |
公座X0812WVS-20AS-9TV01 |
|
|
2.4.4 SWD调试接口
间隔2mm的插针孔,用户可焊接2mm直插单排针,如下图:
|
|
2.4.5 第二编码器接口
间隔2mm的插针孔,用户可焊接2mm直插单排针,请参见2.4.4。
此接口可通过USART(TX/RX)或I2C(SCL/SDA)与第二编码器进行通信。
2.4.6 电机温度接口
电机内置10K的NTC电阻,两条引线焊接到MOT_TEMP和GND,没有线序。
2.4.7 抱闸/刹车电阻接口
图示5针接口中上方两个焊孔为抱闸/刹车电阻接口,间隔2mm的插针孔,用户可焊接2mm直插单排针,请参见2.4.4。
当为抱闸接口时,驱动器在加电时持续向此接口输出一个电流,以使抱闸呈打开状态,电机得以正常运转,如驱动器断电,则此电流停止,抱闸锁住,电机将在断电位置锁死。
当为刹车电阻接口时,可外接一个刹车电阻(或称之为泄放电阻),在反电动势高于门限电压时,通过此刹车电阻泄放电流,防止无法紧急刹车,或反电动势损坏驱动器。
2.4.8 限位开关接口
驱动器提供两个限位开关接口,且为外部限位开关提供12V电源,间隔2mm的插针孔,用户可焊接2mm直插单排针,请参见2.4.4。
其中LW1是最小位置限位开关,LW2是最大位置限位开关。可外接两线式开关或三线式NPN开关。
2.5 主要器件及规格
序号 |
器件 |
型号/规格 |
数量 |
1 |
MCU |
N32G455REL7 |
1 |
2 |
驱动芯片 |
FD6288Q |
1 |
3 |
磁编码器芯片 |
MA600,16bit绝对值 |
1 |
4 |
MOSFET |
JMSH1004NG,100V/120A |
6 |
3 调测说明
3.1 上位机调测
使用电机精灵(2024年1月推出)进行可视化调测。
驱动器兼容odrive(https://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++的桌面开发”,如下图所示。
3. 安装odrivetool
使用管理员运行Windows PowerShell,在其中运行pip install odrive并回车安装。如果中途出错请重试。如果再三出错,请重启电脑再重试。
4. 安装USB驱动
进入网站https://zadig.akeo.ie并下载USB驱动工具Zadig,用Type-C数据线将驱动器接入电脑,此时驱动器电源灯亮,打开Zadig,通过下拉框选择“CyberBeast Motor Driver Device(Interface 2)”:
通过点击上下键选择不同的USB驱动,请为此接口选择“WinUSB”驱动版本,并点击“Install Driver”为这个接口安装驱动:
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 |
第一行指令安装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通信时切换到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,如果连接成功,会以绿色字体显示如下:
如果没有出现上述连接成功标志,请重新拔插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 实战:上电校准
用户第一次使用微电机时,需要对电机以及编码器进行校准。在校准之前,请固定好电机,或用手握紧,输出轴空载,校准过程如下:
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 |
Ø 第五步:写入电机校准成功标志
Ø 第六步:写入编码器校准成功标志
Ø 第七步:存储校准结果并重启
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 |

3.1.3.4 实战:位置控制
下列指令控制电机转到10转的转子位置:
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"])
|
这个指令将调起一个图形界面,实时输出下述三个指标:线电流、位置、目标位置。接下去,对电机进行位置控制,就会看到电机的实时位置控制曲线:
3.1.5 CAN匹配电阻开关
odrv0.can.config.r120_gpio_num = 5 odrv0.can.config.enable_r120 = True
|
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
|
1. 设置PID初始值
2. 将vel_integrator_gain调为0
3.
drv0.aixs0.controller.config.vel_integrator_gain=0
|
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
|
其中“d:\test.json”是用户可自由修改的保存路径和文件名。
odrivetool restore-config d:\test.json
|
3.2 固件更新下载
可以通过SWD接口(2.4.4)或Type-C接口(2.4.2)烧录固件,提供下述三种方式:
3.2.1 pyocd
pyocd是openOCD的python版本,可支持STLink,JLink,DAP等通用调试工具进行擦除、烧写、重置等操作。请注意,必须用SWD接口连接驱动器。关于SWD的线序,请参见2.4.4。SWD接口中有3.3V电源,请不要接错线序,以免损毁驱动器!
1.
pip install pyocd |
2. 烧写
pyocd list |
pyocd load .\ODrive_N32G455.bin -a 0x8000000 |
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()
|
最后,用国民烧录软件进行烧写,如下图所示。请注意,在烧写完成过后,请点击“常用操作”,然后点击“复位”,可重启驱动器,并可正常通过odrivetool连接调测。
2. SWD(JLink或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.14,Vel_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.14用IEEE 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 |
电机à主机 |
Axis_Error Axis_State Motor_Flag Encoder_Flag Controller_Flag |
|
0x002 |
主机à电机 |
|
|
0x003 |
电机à主机 |
Motor_Error |
|
0x004 |
Get_Encoder_Error |
电机à主机 |
Encoder_Error |
0x005 |
Get_Sensorless_Error |
电机à主机 |
Sensorless_Error |
0x006 |
主机à电机 |
Axis_Node_ID |
|
0x007 |
主机à电机 |
Axis_Requested_State |
|
0x009 |
电机à主机 |
Pos_Estimate Vel_Estimate |
|
0x00B |
主机à电机 |
Control_Mode Input_Mode |
|
0x00C |
主机à电机 |
Input_Pos Vel_FF Torque_FF |
|
0x00D |
主机à电机 |
Input_Vel Torque_FF |
|
0x00E |
主机à电机 |
Input_Torque |
|
0x00F |
主机à电机 |
Velocity_Limit Current_Limit |
|
0x010 |
Start_Anticogging |
主机à电机 |
|
0x011 |
主机à电机 |
Traj_Vel_Limit |
|
0x012 |
主机à电机 |
Traj_Accel_Limit Traj_Decel_Limit |
|
0x013 |
主机à电机 |
Traj_Inertia |
|
0x014 |
电机à主机 |
Iq_Setpoint Iq_Measured |
|
0x015 |
电机à主机 |
Pos_Estimate Vel_Estimate |
|
0x016 |
主机à电机 |
|
|
0x017 |
电机à主机 |
Bus_Voltage Bus_Current |
|
0x018 |
主机à电机 |
|
|
0x01A |
主机à电机 |
Pos_Gain |
|
0x01B |
主机à电机 |
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(主机à电机)