黄工无刷电机学习
直播中

xymbmcu

12年用户 1040经验值
擅长:可编程逻辑
私信 关注
[问答]

如何ODrive去驱动无刷电机

如何ODrive去驱动无刷电机?有哪些操作步骤?

回帖(1)

李凌平

2021-9-22 15:05:37
  1. 硬件介绍
  ODrive
  硬件版本:ODrive v3.6 56v电压版本
  固件版本:fw-v0.5.1
  购买链接:淘宝链接
  小米9号平衡车轮毂电机
  极对数:15
  额定转速:200RPM
  额定电压:24-48VDC
  额定输出功率:《=350W
  有感反馈:霍尔传感器
  功率耗散电阻(可选)
  50W 2R 黄金壳功率耗散电阻
  购买链接:淘宝链接
  2. 硬件连接
  电机具有三个较粗的电机相位线(通常为黄色,蓝色,绿色),以及一组5条较细的线,用于霍尔传感器反馈(通常为红色,黄色,蓝色,绿色,黑色)。
  您可以以任何顺序将电机的相线连接到 ODrive M0 电机接口,因为稍后我们仍将对其校准。 将霍尔反馈线连接到ODrive J4连接器(确保和电机通道号匹配 M0),如下所示:
  注意:为了与编码器输入信号兼容,ODrive 在霍尔传感器连接的引脚上没有任何滤波电容。 因此,为了获得可靠的霍尔信号,建议在这些引脚上添加一些滤波电容。
  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 时将停止电机并报错,注意:8V 为极限值建议根据自己所使用的供电更精确的配置以更好地保护 ODrive 主板
  odrv0.config.dc_bus_overvoltage_trip_level = 56 配置电源电压过压保护阈值,当电源电压高于 56V 时将停止电机并报错,注意:56V 为极限值建议根据自己所使用的供电更精确的配置以更好地保护 ODrive 主板
  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
  可以通过以下方式获取电机极对数:
  查找电机数据手册,一般会有说明
  数一数电机永磁体个数,然后除以 2 就是电机极对数
  在两个电机线之间连接直流电源,电源电压设定为额定直流母线电压的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.2odrv0.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 进入待机模式,此时电机可以被自由转动。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分