本文主要是介绍odrive 3.6 v0.5.1 驱动TMOTOR MN4004-25,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
电机为TMOTOR MN4004-25 KV300,如图:
编码器选择AEDT-9810,码盘选择2500脉冲(625P/R):
连接好线路后,cmd打开命令行窗口,启动odrivetool,确认连接。
配置如下:
1.恢复出厂配置
# 恢复出厂配置
odrv0.erase_configuration()
2.配置主板参数
# 配置AUX接口上的制动电阻值(常见的为0.47、2.0Ω),如没接则配置为0
odrv0.config.brake_resistance = 0# 配置低压保护阈值(V)
odrv0.config.dc_bus_undervoltage_trip_level = 8.0# 配置高压保护阈值(V)
odrv0.config.dc_bus_overvoltage_trip_level = 56.0# 配置过流保护阈值(A)
odrv0.config.dc_max_positive_current = 50.0# 配置反向电流阈值(电机制动产生的反向电流)(A)
odrv0.config.dc_max_negative_current = -5.0# 配置回充电流值(根据供电电池的参数配置,开关电源供电配置为0)(A)
odrv0.config.max_regen_current = 0# 保存参数
odrv0.save_configuration()
3.配置电机参数
# 配置电机0极对数
odrv0.axis0.motor.config.pole_pairs = 12# 配置电机0的限制电流(A)
odrv0.axis0.motor.config.current_lim = 9# 配置电机0的电流采样阈值(A)
odrv0.axis0.motor.config.requested_current_range = 20# 配置电机0校准时的电流阈值(根据自己电机的负载状况酌情配置)(A)
odrv0.axis0.motor.config.calibration_current = 6# 配置电机0类型。
# 目前支持两种电机:大电流电机(MOTOR_TYPE_HIGH_CURRENT)和云台电机(MOTOR_TYPE_GIMBAL)
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT# 配置电机1极对数
odrv0.axis1.motor.config.pole_pairs = 12# 配置电机1的限制电流(A)
odrv0.axis1.motor.config.current_lim = 9# 配置电机1的电流采样阈值(A)
odrv0.axis1.motor.config.requested_current_range = 20# 配置电机1校准时的电流阈值(根据自己电机的负载状况酌情配置)(A)
odrv0.axis1.motor.config.calibration_current = 6# 配置电机1类型。
# 目前支持两种电机:大电流电机(MOTOR_TYPE_HIGH_CURRENT)和云台电机(MOTOR_TYPE_GIMBAL)
odrv0.axis1.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT# 保存参数
odrv0.save_configuration()
4.配置编码器参数
# 配置电机0编码器类型。当前使用的是ABI正交(增量)编码器。
odrv0.axis0.encoder.config.mode = ENCODER_MODE_INCREMENTAL# 配置电机0编码器CPR(每转一圈,编码器的计数),为编码器线数*4
odrv0.axis0.encoder.config.cpr = 20000# 配置电机1编码器类型。当前使用的是ABI正交(增量)编码器。
odrv0.axis1.encoder.config.mode = ENCODER_MODE_INCREMENTAL# 配置电机1编码器CPR(每转一圈,编码器的计数),为编码器线数*4
odrv0.axis1.encoder.config.cpr = 20000# 保存参数
odrv0.save_configuration()
5.配置控制器参数(位置闭环模式、配置PID参数)
# 配置电机0控制模式,为位置闭环控制
odrv0.axis0.controller.config.control_mode = CONTROL_MODE_POSITION_CONTROL# 配置电机0最大转速(转/秒)(电机kv值 * 电压 / 60)
odrv0.axis0.controller.config.vel_limit = 120# 配置位置环增益:20
odrv0.axis0.controller.config.pos_gain = 20# 配置速度环增益:0.05
odrv0.axis0.controller.config.vel_gain = 0.05# 配置积分增益:0.02
odrv0.axis0.controller.config.vel_integrator_gain = 0.02# 配置电机1控制模式,为位置闭环控制
odrv0.axis1.controller.config.control_mode = CONTROL_MODE_POSITION_CONTROL# 配置电机1最大转速(转/秒)(电机kv值 * 电压 / 60)
odrv0.axis1.controller.config.vel_limit = 120# 配置位置环增益:20
odrv0.axis1.controller.config.pos_gain = 20# 配置速度环增益:0.05
odrv0.axis1.controller.config.vel_gain = 0.05# 配置积分增益:0.02
odrv0.axis1.controller.config.vel_integrator_gain = 0.02# 保存参数
odrv0.save_configuration()# 重启驱动器
odrv0.reboot()
6.电机和编码器校准
# 进行电机0参数和编码器校准(运行后电机会发出哔~的一声,并电机会正转一圈再反转一圈)
odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE# 设置电机预校准。(不用每次上电都哔~的一声)
# 驱动器会将本次校准值保存,避免上电启动后自动校准,以加快启动速度。
odrv0.axis0.motor.config.pre_calibrated = True# 进行电机1参数和编码器校准(运行后电机会发出哔~的一声,并电机会正转一圈再反转一圈)
odrv0.axis1.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE# 设置电机预校准。(不用每次上电都哔~的一声)
# 驱动器会将本次校准值保存,避免上电启动后自动校准,以加快启动速度。
odrv0.axis1.motor.config.pre_calibrated = True
# 配置电机0为闭环模式
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL# 配置电机1为闭环模式
odrv0.axis1.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL
进入闭环模式后,电机会有轻微的滋滋电流声。用手扭动电机,电机会产生反抗的力矩,松手后,电机会转回原来的位置。
如手拨后,如电机未回到原来位置,或在原来位置反复运动,或者能明显感受到过冲,都需要重调PID参数。
7.最后设置为上电自动校准,自动进入闭环。
# 设置ODrive电机0上电启动时,自动校准编码器
odrv0.axis0.config.startup_encoder_offset_calibration = True# 设置ODrive电机1上电启动时,自动校准编码器
odrv0.axis1.config.startup_encoder_offset_calibration = True后两句可不要,便于上位机控制
# 设置ODrive电机0上电启动时,自动进入闭环模式
//odrv0.axis0.config.startup_closed_loop_control = True
# 设置ODrive电机1上电启动时,自动进入闭环模式
//odrv0.axis1.config.startup_closed_loop_control = True# 保存参数
odrv0.save_configuration()# 重启驱动器
odrv0.reboot()
重启后,电机会自动进行编码器校准,正转一圈反转一圈归位,并自动进入闭环模式。之后可直接发送控制指令,来让电机运动。
8.下发控制指令、控制电机运行
# 配置电机0为闭环模式
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL# 配置电机1为闭环模式
odrv0.axis1.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL# 控制电机运行到10圈的位置
odrv0.axis0.controller.input_pos = 10# 控制电机运行到0圈的位置
odrv0.axis0.controller.input_pos = 0# 控制电机运行到-10圈的位置
odrv0.axis0.controller.input_pos = -10
9.释放电机
# 释放电机(释放后,电机退出闭环模式,外力可轻松拨动电机)
odrv0.axis0.requested_state = AXIS_STATE_IDLE# 配置电机为闭环模式
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL
10.退出odrivetool
quit
11.故障排除
如果ODrive不能按预期运行,可以按以下方式排除错误:
运行odrivetool
并输入dump_errors(odrv0)
这将列出所有错误代码:
上面会显示错误,再在网上搜索排除错误即可。
这篇关于odrive 3.6 v0.5.1 驱动TMOTOR MN4004-25的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!