第1部分 硬件介绍

1.1 硬件清单

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

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

1.2 硬件连接

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

  1. ODrive主板CAN功能引脚为L、H;CANable_Z功能引脚为CAN L、CAN H。对应关系如下表格所示。
序号 ODrive主板 CANable_Z
CANL L CAN L
CANH H CAN 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 State 0 Unsigned Int 32 1 0 Intel
  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 Mode 0 Unsigned Int 32 1 0 Intel
0x00B 设置控制器模式 Input Mode 4 Unsigned Int 32 1 0 Intel
  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 Pos 0 IEEE 754 Float 32 1 0 Intel
0x00C 设定输入位置 Vel FF 4 Signed Int 16 0.001 0 Intel
0x00C 设定输入位置 Torque FF 6 Signed Int 16 0.001 0 Intel
  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 Estimate 0 IEEE 754 Float 32 1 0 Intel
0x009 获取编码器估算值 Encoder Vel Estimate 4 IEEE 754 Float 32 1 0 Intel
  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 Voltage 0 IEEE 754 Float 32 1 0 Intel
0x017 获取总线电压 Vbus Voltage 4 IEEE 754 Float 32 1 0 Intel
  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/

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐