资讯详情

ODrive实例 #2 电机配置实例(小米9号平衡车轮毂电机)

ODrive实例 #2 电机配置实例(小米9号平衡车轮毂电机)

以下内容将详细介绍使用情况 ODrive 驱动无刷电机的过程,如果您的硬件与本文中使用的相同,配置参数可以根据本文中的配置达到相同的效果。如果硬件使用不同,您需要适当调整个别参数。

文章目录

1. 硬件介绍

  • ODrive

    • 硬件版本:ODrive v3.6 56v电压版本
    • 固件版本:fw-v0.5.1

    购买链接:淘宝链接

  • 小米9号平衡轮毂电机

    • 极对数:
    • 额定转速:
    • 额定电压:
    • 额定输出功率:
    • 有感反馈:
  • 功率耗散电阻(可选)

    50W 2R 金壳功率耗散电阻

    购买链接:淘宝链接

2. 硬件连接

电机有三条较厚的电机相位线(通常是黄色、蓝色和绿色),霍尔传感器反馈(通常是红色、黄色、蓝色、绿色和黑色)。 您可以将电机的相线连接到任何顺序 ODrive M0 电机接口,因为我们以后还会校准。 连接霍尔反馈线ODrive J4连接器(确保与电机通道号匹配 M如下所示:0):

霍尔反馈线 J4 连接器
Red 5V
Yellow A
Blue B
Green Z
Black GND

3. 配置参数

配置前,建议先擦除配置(odrv0.erase_configuration()Enter)并重启 ODrive 确保配置恢复为固件默认配置

3.1 基本配置

odrv0.config.brake_resistance = 2.0 

配置功耗电阻值,我们使用的功耗电阻值为 2 Ohm,如果不接制动电阻或不想使用功率耗散电阻,则此配置为 0 即可

odrv0.config.dc_bus_undervoltage_trip_level = 8 

当电源电压低于 8V 停止电机并报错,

odrv0.config.dc_bus_overvoltage_trip_level = 56 

当电源电压高于 56V 停止电机并报错,

odrv0.config.dc_max_positive_current = 80 

当母线电流高于母线电流过流保护阈值时, 80A 停止电机并报错,配置无限时禁止此保护

odrv0.config.dc_max_negative_current = -5 

配置电机制动时在母线上产生的反向电流过流保护阈值,当反向电流高于 5A 当电机停止并报错时,禁止在负无限时进行保护

odrv0.config.max_regen_current = 0 

配置制动回充电流值 0A ,由于使用的开关电源供电,因此没有电能回收功能,因此配置为 0.如果您使用的电池供电,可以根据电池组可承受的回充电流配置。当母线上的反向回充电流高于此值时,高电流能量将通过功率耗散电阻消耗

3.2 电机配置

odrv0.axis0.motor.config.pole_pairs = 15 

配置电机极对数,我们使用的电机极对数为 15

电机极对数可以通过以下方式获得:

  1. 查找电机数据手册通常有说明
  2. 数一数电机永磁体的数量,然后除以 2 是电机的极对数
  3. 直流电源连接在两条电机线之间,电源电压设定为额定直流母线电压的5% (您也可以将电源设置为电机的额定电流)
    • 用手旋转电机,应稍有阻力,否则:
      • 如果电机不能转动,请降低施加的电压或电流
      • 如果电机产生的电阻过小,请逐渐增加施加的电压或电流
    • 用手转动转子,转动停顿的次数是电机的极对数
odrv0.axis0.motor.config.calibration_current = 10 

电机参数校准时配置电流,电机参数校准和电流值使用时,如果设置过小,霍尔偏移校准时电机旋转力不够

odrv0.axis0.motor.config.resistance_calib_max_voltage = 5 

配置电机参数校准时的电压,电机相电阻越高,值越高,但如果值过高,电流过大,过流保护错误

odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT 
<>配置所使用的电机类型为大电流电机

odrv0.axis0.motor.config.current_control_bandwidth = 100

配置电机电流控制器带宽,由于轮毂电机与普通的电机相比具有更高的相电阻和相电感,因此电流控制器带宽比普通电机参数要小

odrv0.axis0.motor.config.current_lim = 20

配置电机运行的最大电流限制

odrv0.axis0.motor.config.requested_current_range = 30

配置电机电流采样范围,

3.3 霍尔传感器配置

odrv0.axis0.encoder.config.mode = ENCODER_MODE_HALL

配置电机编码器类型为霍尔信号输入

odrv0.axis0.encoder.config.cpr = 90

配置编码器分辨率,即电机转动一圈多少个计数值,霍尔反馈对于电机中的每个对极有6种状态,由于我们的电机是15个极对,因此将 cpr 设置为 15 * 6 = 90

odrv0.axis0.encoder.config.bandwidth = 100

设置编码器 PLL 带宽,一般编码器分辨率越高(cpr > 4000个计数/转)此值应该越高,这样有助于减少电机振动,由于霍尔反馈每转仅具有 90 个计数,因此我们希望减少速度跟踪带宽以获得更平滑的转速估计

3.4 控制器配置

odrv0.axis0.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL

配置电机控制模式,由于霍尔反馈分辨率较低,位置模式效果不理想,我们设置为转速控制模式

odrv0.axis0.controller.config.vel_limit = 10

配置电机最大转速,单位为 [turn/s],例如:此处我们配置为 10 转/秒 即 600 转/分

odrv0.axis0.controller.config.vel_gain = 0.2
odrv0.axis0.controller.config.vel_integrator_gain = 0.07

配置控制器控制增益,vel_gain 和 vel_integrator_gain 为速度环增益

odrv0.axis0.controller.config.input_mode = INPUT_MODE_VEL_RAMP

将输入模式配置为转速爬升模式,如果不想只用 ODrive 内部的转速爬升可以设置为直接控制模式(INPUT_MODE_PASSTHROUGH)

odrv0.axis0.controller.config.vel_ramp_rate = 10

配置转速爬升速度,单位为 [(turn/s) / s] ,例如:此值设置为10表示当设置电机5转/秒运行时电机由静止加速到 5转/秒这个加速程耗费 0.5 秒

3.5 保存配置

odrv0.save_configuration()
odrv0.reboot()

保存配置参数并重启 ODrive 已使某些配置参数生效

等待 ODrive 重新连接到 odrivetool

4. 自动校准

4.1 电机和编码器校准

odrv0.axis0.requested_state = AXIS_STATE_MOTOR_CALIBRATION

进行自动检测电机参数,执行这条命令后大约2秒,应听到电机发出哔声

dump_errors(odrv0)

检查错误代码,如果都为 no error 表明一切正常,否则结合错误代码信息对问题分析,当问题解决后输入 dump_errors(odrv0, True) Enter 对错误代码进行清除,然后重新执行电机参数校准

odrv0.axis0.motor.config.pre_calibrated = True

将电机 pre_calibrated 设置为 True,表示电机已校准下次重新启动后可以直接使用本次校准的结果

odrv0.axis0.requested_state = AXIS_STATE_ENCODER_OFFSET_CALIBRATION

进行霍尔传感器偏移校准,电机将向一个方向转动几秒钟然后再反方向转动几秒钟

dump_errors(odrv0)

检查错误代码,如果都为 no error 表明一切正常,否则结合错误代码信息对问题分析,当问题解决后输入 dump_errors(odrv0, True) Enter 对错误代码进行清除,然后重新执行霍尔传感器偏移校准

odrv0.axis0.encoder.config.pre_calibrated = True

将编码器 pre_calibrated 设置为 True,表示编码器已校准下次重新启动后可以直接使用本次校准的结果

4.2 保存校准结果

odrv0.save_configuration()
odrv0.reboot()

将自动检测的电机参数保存并重启

等待 ODrive 重新连接到 odrivetool

5. 上电后控制电机运行流程

odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL

进入闭环运行模式,此时电机将进入转速闭环模式

odrv0.axis0.controller.input_vel = 4

命令电机已 4 转/秒 转动,如果想反方向转动设置为 -4 即可,也可以设置为小数,如:0.5 转/秒

odrv0.axis0.requested_state = AXIS_STATE_IDLE

如果想释放电机,发送此命令即可让 ODrive 进入待机模式,此时电机可以被自由转动

标签: 180w的电机配多大电容

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台