SimpleFOC、ODrive和VESC 教程链接汇总:请点击
一、硬件准备
ODrive 购买链接:https://item.taobao.com/item.htm?ft=t&id=644329838237,图锐科技
电机购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技
二、代码说明
ODrive的CAN通信采用标准帧格式,也就是11bit。Address = node_ID | cmd_ID。
节点ID(node_ID)为高6bit,设置范围1 — 0x3F,一个ODrive的M0/M1需设置为不同的node_ID。
命令ID(cmd_ID)为低5bit,目前共有26个指令,如下图。
ODrive默认CAN通信ID为0,默认波特率为250K。上电后CAN接口以0.1秒为周期发送心跳包。
三、通信操作
3.1、设置ID和波特率
odrv0.axis0.config.can_node_id = 2 //ID=2
odrv0.can.set_baud_rate(250000) //设置波特率250K
odrv0.save_configuration()
odrv0.reboot()
节点地址为2,合成指令时需左移5位,
上电后上传的心跳 cmd_ID=0x01(MSG_ODRIVE_HEARTBEAT),msgID = (node_ID<<5) | cmd_ID = 0x041,
3.2、读取电压
读取当前电压值(MSG_GET_VBUS_VOLTAGE)cmd_ID=0x17,msgID = (node_ID<<5) | cmd_ID = 0x057,发送后没有反应,看代码需要rtr为1,打勾。
3.3、完整操作指令
假如已经通过USB口配置电机参数并保存。
下面通过CAN指令校准、进入闭环模式并设置目标位置。
设置Axis请求状态(MSG_SET_AXIS_REQUESTED_STATE)cmd_ID = 0x07,Adress=(node_ID<<5)|(cmd_ID)=0x047。
047 01 00 00 00 00 00 00 00 //AXIS_STATE_IDLE
047 02 00 00 00 00 00 00 00 //AXIS_STATE_STARTUP_SEQUENCE
047 03 00 00 00 00 00 00 00 //AXIS_STATE_FULL_CALIBRATION_SEQUENCE
047 04 00 00 00 00 00 00 00 //AXIS_STATE_MOTOR_CALIBRATION
047 05 00 00 00 00 00 00 00 //AXIS_STATE_SENSORLESS_CONTROL
047 06 00 00 00 00 00 00 00 //AXIS_STATE_ENCODER_INDEX_SEARCH
047 07 00 00 00 00 00 00 00 //AXIS_STATE_ENCODER_OFFSET_CALIBRATION
047 08 00 00 00 00 00 00 00 //AXIS_STATE_CLOSED_LOOP_CONTROL
047 09 00 00 00 00 00 00 00 //AXIS_STATE_LOCKIN_SPIN
047 0A 00 00 00 00 00 00 00 //AXIS_STATE_ENCODER_DIR_FIND
047 0B 00 00 00 00 00 00 00 //AXIS_STATE_HOMING
设置目标位置(MSG_SET_INPUT_POS)cmd_ID = 0x0C,Adress=(node_ID<<5)|(cmd_ID)=0x04C。
前4个字节为目标位置,
后2个字节限制最大速度,最后2个字节为限制最大力矩,如果之前已经通过USB配置过,此处可以设置为0。
设置目标位置为5,浮点数转为16进制0x40A00000,如下:
设置目标位置为0,如下:
3.4、其它指令
(完)