Makerbase oDrive第九课 CAN测试

第1部分 硬件介绍

1.1 硬件清单

序号品名数量
1ODRIVE主板1
2MKS X2212电机1
3MKS X2212电机1
4USB数据线1
512V 2.0A电源适配器1
6杜邦线2
7编码器连接线1
850W 2欧 耗散电阻1
9CANable_Z USB to CAN1
10micro USB 线1

硬件清单如下图所示。
在这里插入图片描述

1.2 硬件连接

电机与ODrive主板、主板与PC接线参考之前课程,这次需要介绍的是CANable_Z与主板连接。

  1. ODrive主板CAN功能引脚为L、H;CANable_Z功能引脚为CAN L、CAN H。对应关系如下表格所示。
序号ODrive主板CANable_Z
CANLLCAN L
CANHHCAN H
  1. 两主板连线,一共连接2根线:
    L----CAN L,
    H----CAN H,
    GND----GND(选接)。如下图所示。
    在这里插入图片描述

  2. 用USB数据线将CANable_Z与PC连接。

  3. 硬件连接如下图所示:
    在这里插入图片描述

第2部分 下载文件

  1. 测试组件可在CANable官网:https://canable.io/getting-started.html下载,也可以通过Q群(732557609)下载,如下图所示。
    在这里插入图片描述

  2. 解压后文件如下图所示。
    在这里插入图片描述

第3部分 配置准备

3.1 配置ODrive

  1. 打开odrivetool命令窗口。

  2. 配置Axis0的CAN Node ID为2。

    odrv0.axis0.config.can_node_id = 0x010
    
  3. 配置CAN通讯波特率。

    odrv0.can.set_baud_rate(250000)
    
  4. 保存配置。

    odrv0.save_configuration()
    
  5. 重启主板。

    odrv0.reboot()
    

3.2 配置CAN调试助手

  1. 打开下载好的CAN调试助手(cangaroo),如下图所示。
    在这里插入图片描述
    进入页面,如下图所示。
    在这里插入图片描述

2.按F5,进入配置页面,选择candle0,如下图1所示。

3.将波特率设置为250000,如下图2所示;点击OK,如下图3所示。
在这里插入图片描述

4.配置成功,页面出现提示,CANable_Z的RX、TX灯亮,如下图所示。
在这里插入图片描述

5.若ODrive主板电源开启,则会有心跳信息返回且CANable_Z的TX灯闪烁,如下图所示。
在这里插入图片描述

第4部分 状态参数配置测试

  1. 状态配置命令如下表所示
命令 ID名称信号起始字节信号类型数量补位字节顺序
0x007设置Axis请求状态Axis Requested State0Unsigned Int3210Intel
  1. 在ODrive源代码can_simple.cpp文件的节点命令解析函数
    void CANSimple::handle_can_message(can_Message_t& msg)中设置状态参数指令进行选择,如下图2所示。
    在这里插入图片描述

    0x007指令选择执行MSG_SET_AXIS_REQUESTED_STATE,如下图3所示。
    在这里插入图片描述

    注:ODrive接收到的每个命令都会在void CANSimple::handle_can_message()中先进行解析,然后选择对应的指令,往后不再说明命令解析与指令选择的内容。

  2. 在ODrive源代码interfaces.hpp文件中对状态参数(Axis State)进行了定义,如下图2所示。
    在这里插入图片描述

  3. 在ODrive源代码can_simple.cpp文件的
    void CANSimple::set_axis_requested_state_callback()函数对状态的配置数据进行解析。
    can_getSignal()读取起始位0,数据长度16位,类型为整型。如下图4所示。
    在这里插入图片描述

4.1 检测电机参数

  1. 在Address输入栏中输入207(axis0 NodeID=2,CMDID=0x007),如下图1所示。
  2. 在Payload的字节1中输入04(AXIS_STATE_MOTOR_CALIBRATION),如下图2所示。
  3. 点击Send Single,如下图3所示。
  4. 发送成功,如下图4所示。
  5. 执行命令成功,返回心跳信息,如下图5所示。
  6. 这条命令执行成功约2秒后,应听到ODrive主板发出“哔”声音。
    在这里插入图片描述

4.2 编码器偏移校准

  1. 在Address输入栏中输入207,如下图1所示。

  2. Payload的字节1中输入07AXIS_STATE_ENCODER_OFFSET_CALIBRATION),如下图1所示。

  3. 点击Send Single。

  4. 执行命令成功,返回心跳信息,如下图2所示。

  5. 发送这条命令后,电机将正向转一圈,再反向转一圈。
    在这里插入图片描述

    注意:校准完成后会退出闭环模式,需要继续设置闭环。

4.3 设置闭环运行模式

  1. 在Address输入栏中输入207,如下图1所示。
  2. Payload的字节1中输入08AXIS_STATE_CLOSED_LOOP_CONTROL),如下图1所示。
  3. 点击Send Single。
  4. 执行命令成功,返回心跳信息,如下图所示。
  5. 发送这条命令后,电机将进入闭环模式。
    在这里插入图片描述

第5部分 控制器参数配置

  1. 控制器参数配置命令如下表所示
命令 ID名称信号起始字节信号类型数量补位字节顺序
0x00B设置控制器模式Control Mode0Unsigned Int3210Intel
0x00B设置控制器模式Input Mode4Unsigned Int3210Intel
  1. 在ODrive源代码interfaces.hpp文件中对控制器模式(Control Mode&Input Mode)进行了定义,如下图2所示。
    在这里插入图片描述

  2. 在ODrive源代码can_simple.cpp文件的void CANSimple::set_axis_requested_state_callback()函数对控制器的配置数据进行解析。
    控制模式(ControlMode)读取起始位0,数据长度32位,类型为整型。
    输入模式(InputMode)读取起始位32位,数据长度32位,类型为整型。
    如下图4所示。
    在这里插入图片描述

5.1 配置位置控制与通用输入模式

  1. 在Address输入栏中输入20B
  2. Payload的8个字节中分别输入03 00 00 00 01 00 00 00,如下图所示1。
  3. 点击Send Single。
  4. 执行命令成功,返回心跳信息,如下图所示2。
  5. 发送这条命令后,电机将进入位置控制、通用输入模式。
    在这里插入图片描述

5.2 配置位置控制与梯形轨迹模式

1.在Address输入栏中输入20B
2.Payload的8个字节中分别输入03 00 00 00 05 00 00 00,如下图所示1。
3.点击Send Single。
4.执行命令成功,返回心跳信息,如下图所示2。
5.发送这条命令后,电机将进入位置控制、梯形轨迹输入模式。
在这里插入图片描述

第6部分 电机控制测试

  1. 电机位置控制命令如下表所示
命令 ID名称信号起始字节信号类型数量补位字节顺序
0x00C设定输入位置Input Pos0IEEE 754 Float3210Intel
0x00C设定输入位置Vel FF4Signed Int160.0010Intel
0x00C设定输入位置Torque FF6Signed Int160.0010Intel
  1. 在ODrive源代码can_simple.cpp文件的
    void CANSimple::set_input_pos_callback()函数对电机控制的数据进行解析。
    位置数据(input_pos)读取起始位0,数据长度32位,类型为浮点型。
    速度数据(input_vel)读取起始位32位,数据长度16位,类型为整型。
    扭矩数据(input_torque),读取起始位48位,数据长度16位,类型为整型。
    如下图2所示。
    在这里插入图片描述

6.1 控制电机正转50圈

  1. 打开下载好的4字节和浮点互转工具。如下图所示。
    在这里插入图片描述

  2. 在4字节和浮点互转工具中转换出浮点数50的16进制字节(00 00 48 42),如下图所示。
    在这里插入图片描述

  3. 在Address输入栏中输入20C

  4. Payload的8个字节中分别输入00 00 48 42 00 00 00 00,如下图所示1。

  5. 点击Send Single。

  6. 执行命令成功,返回心跳信息,如下图所示2。

  7. 发送这条命令后,电机会正转50圈。
    在这里插入图片描述

    注意:若不设置速度,则速度为已配置的最大速度。

6.2 控制电机反转50圈

  1. 在4字节和浮点互转工具中转换出浮点数0的16进制字节。
  2. 在Address输入栏中输入20C
  3. Payload的8个字节中分别输入00 00 00 00 00 00 00 00,如下图所示1。
  4. 点击Send Single。
  5. 执行命令成功,返回心跳信息,如下图所示2。
  6. 发送这条命令后,电机会反转50圈。
    在这里插入图片描述

第7部分 查询主板数据测试

7.1 查询编码器位置和转速估值

  1. 获取编码器估算值命令如下表所示。
命令 ID名称信号起始字节信号类型数量补位字节顺序
0x009获取编码器估算值Encoder Pos Estimate0IEEE 754 Float3210Intel
0x009获取编码器估算值Encoder Vel Estimate4IEEE 754 Float3210Intel
  1. 在ODrive源代码can_simple.cpp文件的
    void CANSimple::get_encoder_estimates_callback()进行发送查询请求、数据整合。
    发送查询编码器位置请求,如下图2所示,发送查询转速估值请求,如下图4所示。
    对查询到的位置数据移位保存到数组元素0-3,等待发送,如下图3所示。
    对查询到的转速数据保存到数组元素4-7,如下图5所示。
    在这里插入图片描述

  2. 在Address输入栏中输入209

  3. Payload的1字节中输入10,如下图所示1。

  4. 选择RTR选项,如下图2所示。

  5. 点击Send Single。

  6. 执行命令成功,返回位置转速数据(01 D7 4D 3D 00 00 00 00)、心跳信息,如下图所示3。
    在这里插入图片描述

  7. 对查询到的位置和转速的16进制数据转换。
    前4字节为位置数据,即01 D7 4D 3D,换算浮点为0.05025387,如下图所示。
    后4字节为转速数据,即00 00 00 00,换算浮点为0。
    在这里插入图片描述

7.2 查询总线电压

  1. 获取总线电压命令如下表所示。
命令 ID名称信号起始字节信号类型数量补位字节顺序
0x017获取总线电压Vbus Voltage0IEEE 754 Float3210Intel
0x017获取总线电压Vbus Voltage4IEEE 754 Float3210Intel
  1. 在ODrive源代码can_simple.cpp文件的
    void CANSimple::get_vbus_voltage_callback()进行发送总线电压查询请求、数据整合。
    发送查询总线电压请求,如下图2所示。
    对查询到的电压数据移位保存到数组元素0-3,多余数组元素4-7填0,如下图3所示。
    在这里插入图片描述

  2. 在Address输入栏中输入217,如下图所示1。

  3. Payload的1字节中输入10,如下图所示1。

  4. 选择RTR选项,如下图2所示。

  5. 点击Send Single。

  6. 执行命令成功,返回总线电压数据(33 8D 56 41 00 00 00 00 )、心跳信息,如下图所示3。
    在这里插入图片描述

  7. 对查询到的位置和转速的16进制数据转换。
    前4字节为总线电压数据,即33 8D 56 41,换算浮点为13.40947,如下图所示。
    在这里插入图片描述

第8部分 重启ODrive测试

  1. 获取总线电压命令如下表所示。
命令 ID名称信号起始字节信号类型数量补位字节顺序
0x016重启ODrive-------
  1. 在ODrive源代码core_cm0.h文件中对重启进行函数(NVIC_SystemReset())定义,如下图4所示。
    在这里插入图片描述

  2. 在Address输入栏中输入216,如下图1所示。

  3. Payload中不需要填写,如图1。

  4. 点击Send Single。

  5. 执行命令成功,返回心跳信息,如下图3所示。

  6. 发送这条命令后,ODrive会重启启动,电机正转一圈再反转一圈进行校准。
    在这里插入图片描述

至此, ODrive CAN测试完成。
创客基地oDrive第九课 ODrive CAN测试 到此结束。

欢迎加入 创客基地 电机控制Q群 讨论电机控制相关问题:732557609

欢迎光临 创客基地 B站 了解技术资料:https://space.bilibili.com/393688975

欢迎光临 创客基地 淘宝店 采购产品:
https://makerbase.taobao.com/

  • 13
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值