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)这将列出所有错误代码:

 上面会显示错误,再在网上搜索排除错误即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值