参考链接:
ODrive干货 #3 ODriveTool 指令大全_odrive命令大全-CSDN博客
ODrive实例 #1 电机配置实例(4250-520KV + TLE5012B-E1000)_tle5012b转速计算-CSDN博客
ODrive实例 #2 电机配置实例(小米9号平衡车轮毂电机)_小米九号平衡车的电机是多少伏的-CSDN博客
odrv0
系统命令
写入odrivetool restore-config steal.json
备份odrivetool backup-config yes1.json
[OP] odrv0.save_configuration()
将配置保存到内部 FLASH 内。
[OP] odrv0.erase_configuration()
擦除 FLASH 中的配置,下次重新启动后所有配置变为默认配置。
[OP] odrv0.reboot()
重启 ODrive 硬件
odrv0.config
[RW] odrv0.config.enable_uart
类型为 [bool],是否启用 uart 通讯。
注意: 更改后需要保存并重新启动 ODrive 才能生效
[RW] odrv0.config.uart_baudrate
类型为 [uint32_t],uart 通讯波特率。
odrv0.axis0
[RW] odrv0.axis0.error
类型为 [enum],axis0 错误代码。
ERROR_NONE = 0x00000000, ERROR_INVALID_STATE = 0x00000001, ERROR_DC_BUS_UNDER_VOLTAGE = 0x00000002, ERROR_DC_BUS_OVER_VOLTAGE = 0x00000004, ERROR_CURRENT_MEASUREMENT_TIMEOUT = 0x00000008, ERROR_BRAKE_RESISTOR_DISARMED = 0x00000010, ERROR_MOTOR_DISARMED = 0x00000020, ERROR_MOTOR_FAILED = 0x00000040, ERROR_SENSORLESS_ESTIMATOR_FAILED = 0x00000080, ERROR_ENCODER_FAILED = 0x00000100, ERROR_CONTROLLER_FAILED = 0x00000200, ERROR_POS_CTRL_DURING_SENSORLESS = 0x00000400, ERROR_WATCHDOG_TIMER_EXPIRED = 0x00000800, ERROR_MIN_ENDSTOP_PRESSED = 0x00001000, ERROR_MAX_ENDSTOP_PRESSED = 0x00002000, ERROR_ESTOP_REQUESTED = 0x00004000, ERROR_HOMING_WITHOUT_ENDSTOP = 0x00020000, ERROR_OVER_TEMP = 0x00040000,
[OP] odrv0.axis0.clear_errors()
清除 axis0 上的错误。
odrv0.axis0.config
[RW] odrv0.axis0.config.startup_motor_calibration
类型为 [bool],ODrive上电后是否自动进行电机校准。
[RW] odrv0.axis0.config.watchdog_timeout
类型为 [float],单位为 [s],axis0 内部看门狗超时时间设置。
[RW] odrv0.axis0.config.enable_watchdog
类型为 [bool],是否启用 axis0 内部看门狗。
odrv0.axis0.motor
[RW] odrv0.axis0.motor.error
类型为 [enum],电机错误代码。
ERROR_NONE = 0x00000000, ERROR_PHASE_RESISTANCE_OUT_OF_RANGE = 0x00000001, ERROR_PHASE_INDUCTANCE_OUT_OF_RANGE = 0x00000002, ERROR_ADC_FAILED = 0x00000004, ERROR_DRV_FAULT = 0x00000008, ERROR_CONTROL_DEADLINE_MISSED = 0x00000010, ERROR_NOT_IMPLEMENTED_MOTOR_TYPE = 0x00000020, ERROR_BRAKE_CURRENT_OUT_OF_RANGE = 0x00000040, ERROR_MODULATION_MAGNITUDE = 0x00000080, ERROR_BRAKE_DEADTIME_VIOLATION = 0x00000100, ERROR_UNEXPECTED_TIMER_CALLBACK = 0x00000200, ERROR_CURRENT_SENSE_SATURATION = 0x00000400, ERROR_CURRENT_LIMIT_VIOLATION = 0x00001000, ERROR_BRAKE_DUTY_CYCLE_NAN = 0x00002000, ERROR_DC_BUS_OVER_REGEN_CURRENT = 0x00004000, ERROR_DC_BUS_OVER_CURRENT = 0x00008000,
[RO] odrv0.axis0.motor.is_calibrated
类型为 [bool],电机是否已校准。
odrv0.axis0.motor.config
[RW] odrv0.axis0.motor.config.pre_calibrated
类型为 [bool],电机是否已经校准,设置为 True 时认为以下电机参数有效可用,如果不想每次重启重新校准电机参数可以设置为 True
[RW] odrv0.axis0.motor.config.direction
类型为 [int32_t],电机运行方向,0 无效,1 和编码器方向一致 -1 和编码器方向相反,无感模式下需要手动设置方向,有感模式下会在编码器校准中自动设置
[RW] odrv0.axis0.motor.config.current_lim_margin
类型为 [float],超过电机最大运行电流的容忍度,如:此值设置为 3 表示当电机电流超过限制电流 3A 时停止电机并报错
[RW] odrv0.axis0.motor.config.requested_current_range
类型为 [float],单位为 [A],电机运行的电流范围,根据此值来自动调整电流采样运放的增益,设置后需要保存配置并重启才能生效
告诉ODrive你的电机在运行时可以接受的最大电流是多少
[RW] odrv0.axis0.motor.config.current_control_bandwidth
类型为 [float],电流控制环的控制带宽,用来自动计算电流环 PI 参数。较低的控制带宽意味着电流控制环的响应更加平滑和缓慢。
odrv0.axis0.controller
[RW] odrv0.axis0.controller.error
类型为 [enum],axis0 控制器错误代码
ERROR_NONE = 0x00000000, ERROR_OVERSPEED = 0x00000001, ERROR_INVALID_INPUT_MODE = 0x00000002, ERROR_UNSTABLE_GAIN = 0x00000004, ERROR_INVALID_MIRROR_AXIS = 0x00000008, ERROR_INVALID_LOAD_ENCODER = 0x00000010, ERROR_INVALID_ESTIMATE = 0x00000020,
[RW] odrv0.axis0.controller.input_pos
类型为 [float],单位为 [turn],输入的电机目标位置,如:设置为 0.1 即表示电机轴转动到 36°(360° * 0.1 = 36°)。
[RW] odrv0.axis0.controller.input_vel
类型为 [float],单位为 [turn/s],输入的电机目标转速,如:设置为 1 即表示电机将以 1转/秒的速度旋转。
[OP] odrv0.axis0.controller.start_anticogging_calibration()
执行 anticogging 校准。
odrv0.axis0.controller.config
[RW] odrv0.axis0.controller.config.gain_scheduling_width
类型为 [float],速度环增益规划功能启用的位置误差范围。
参数设置的影响
较小的值:如果设置得较小,增益调整会更频繁地发生,这有助于在接近目标位置时减少系统的动态响应,但可能会导致控制过程中的不稳定和振荡。
较大的值:较大的设置值意味着即使位置误差较大,增益调整也会被触发,这可以在快速动作时保持较高的控制增益,有助于快速减少大的位置误差,但可能会在接近目标位置时导致过冲。
[RW] odrv0.axis0.controller.config.enable_gain_scheduling
类型为 [bool],是否启用增益规划功能,增益规划功能有利于增加在目标位置的鲁棒性。原理为当位置误差小于 odrv0.axis0.controller.config.gain_scheduling_width 时按照比例调整速度环增益大小,来增强非线性区域控制的鲁棒性。
[RW] odrv0.axis0.controller.config.enable_vel_limit
类型为 [bool],是否启用转速限制功能。
[RW] odrv0.axis0.controller.config.enable_current_mode_vel_limit
类型为 [bool],是否启用在电流控制模式下转速限制功能。
[RW] odrv0.axis0.controller.config.enable_overspeed_error
类型为 [bool],当转速超过设置限制值时是否停止电机并报错。
[RW] odrv0.axis0.controller.config.control_mode
类型为 [enum],控制模式。
CONTROL_MODE_VOLTAGE_CONTROL = 0, CONTROL_MODE_TORQUE_CONTROL = 1, CONTROL_MODE_VELOCITY_CONTROL = 2, CONTROL_MODE_POSITION_CONTROL = 3,
[RW] odrv0.axis0.controller.config.input_mode
类型为 [enum],控制信号输入模式。
INPUT_MODE_INACTIVE = 0, INPUT_MODE_PASSTHROUGH = 1, INPUT_MODE_VEL_RAMP = 2, INPUT_MODE_POS_FILTER = 3, INPUT_MODE_MIX_CHANNELS = 4, INPUT_MODE_TRAP_TRAJ = 5, INPUT_MODE_TORQUE_RAMP = 6, INPUT_MODE_MIRROR = 7,
[RW] odrv0.axis0.controller.config.vel_gain
类型为 [float],单位为 [Nm/(turn/s)],速度环增益。
-
高增益值:增益值较高时,电机对速度误差的响应更快,可以快速减少速度误差,但过高的增益可能导致系统过度响应,引起振荡或不稳定。
-
低增益值:增益值较低时,电机对速度误差的响应较慢,系统的稳定性较好,但响应速度慢,可能导致跟踪性能下降。
[RW] odrv0.axis0.controller.config.vel_integrator_gain
类型为 [float],单位为 [Nm/(turn/s * s)],速度环积分增益。
odrv0.axis0.controller.config.vel_gain = 0.06 odrv0.axis0.controller.config.vel_integrator_gain = 0.3
[RW] odrv0.axis0.controller.config.vel_limit
类型为 [float],单位为 [turn/s] ,设定的最大转速限制。
[RW] odrv0.axis0.controller.config.vel_limit_tolerance
类型为 [float],最大转速波动容忍度,如:此值设定为 1.2 时表示当转速超过设定的最大转速值的 1.2 倍才会触发 ERROR_OVERSPEED。
[RW] odrv0.axis0.controller.config.vel_ramp_rate
类型为 [float],单位为 [(turn/s) / s] ,转速爬升速度。用于当控制信号输入模式设置为 INPUT_MODE_VEL_RAMP 时。
[RW] odrv0.axis0.controller.config.inertia
类型为 [float],单位为 [Nm/(turn/s^2)],电机转动惯量(电机对转速变化的响应速度的物理属性)。
[RW] odrv0.axis0.controller.config.input_filter_bandwidth
类型为 [float],单位为 [1/s],控制信号输入的滤波带宽。
odrv0.axis0.controller.config.anticogging
[RO] odrv0.axis0.controller.config.anticogging.index
类型为 [uint32_t],anticogging 当前索引。
[RW] odrv0.axis0.controller.config.anticogging.pre_calibrated
类型为 [bool],anticogging 是否已经校准完成。
[RO] odrv0.axis0.controller.config.anticogging.calib_anticogging
类型为 [bool],anticogging 是否正在校准中。
[RW] odrv0.axis0.controller.config.anticogging.calib_pos_threshold
类型为 [float],单位为 [count],anticogging 时位置误差的阈值。
[RW] odrv0.axis0.controller.config.anticogging.calib_vel_threshold
类型为 [float],单位为 [count],anticogging 时转速误差的阈值。
[RO] odrv0.axis0.controller.config.anticogging.cogging_ratio
类型为 [float],暂未使用。
[RW] odrv0.axis0.controller.config.anticogging.anticogging_enabled
类型为 [bool],是否启用 anticogging。
odrv0.axis0.encoder
[RW] odrv0.axis0.encoder.error
类型为 [enum],编码器错误代码。
ERROR_NONE = 0x00000000, ERROR_UNSTABLE_GAIN = 0x00000001, ERROR_CPR_POLEPAIRS_MISMATCH = 0x00000002, ERROR_NO_RESPONSE = 0x00000004, ERROR_UNSUPPORTED_ENCODER_MODE = 0x00000008, ERROR_ILLEGAL_HALL_STATE = 0x00000010, ERROR_INDEX_NOT_FOUND_YET = 0x00000020, ERROR_ABS_SPI_TIMEOUT = 0x00000040, ERROR_ABS_SPI_COM_FAIL = 0x00000080, ERROR_ABS_SPI_NOT_READY = 0x00000100,
[RO] odrv0.axis0.encoder.is_ready
类型为 [bool],编码器是否准备就绪。
[RO] odrv0.axis0.encoder.index_found
类型为 [bool],是否已完成编码器索引校准
odrv0.axis0.encoder.config
[RW] odrv0.axis0.encoder.config.mode
类型为 [enum],所使用的编码器类型。
MODE_INCREMENTAL = 0, MODE_HALL = 1, MODE_SINCOS = 2, MODE_SPI_ABS_CUI = 256, MODE_SPI_ABS_AMS = 257, MODE_SPI_ABS_AEAT = 258, MODE_SPI_ABS_RLS = 259,
[RW] odrv0.axis0.encoder.config.use_index
类型为 [bool],是否使用编码器索引信号。(用于位置控制)
[RW] odrv0.axis0.encoder.config.zero_count_on_find_idx
类型为 [bool],是否将索引信号位置设置为编码器计数0的位置。
[RW] odrv0.axis0.encoder.config.cpr
类型为 [int32_t],电机轴转动每圈编码器产生的脉冲数,注意和编码器手册中的每转产生的脉冲数(PPR)区分,cpr = PPR * 4。
[RW] odrv0.axis0.encoder.config.pre_calibrated
类型为 [bool],编码器是否事先已被校准。
[RW] odrv0.axis0.encoder.config.enable_phase_interpolation
类型为 [bool],是否启用根据转速插补编码器相位。
当该参数设置为 True 时,系统会根据电机的转速插值编码器的相位,以提高位置测量的精度和减小误差。如果需要更高的位置测量精度,可以考虑启用相位插值;如果对实时性要求较高,可以选择禁用相位插值。
[RW] odrv0.axis0.encoder.config.bandwidth
类型为 [float],编码器更新带宽,设置后立即生效,使用的编码器分辨率越高此项应该约高。(更快地响应电机位置变化)
odrv0.axis0.encoder.config.bandwidth = 3000
设置编码器 PLL 带宽,一般对于高分辨率编码器 (> 4000个计数/转) 此值应该越高,这样有助于减少电机振动
[RW] odrv0.axis0.encoder.config.calib_range
类型为 [float],通过编码器cpr检查所需的精度,用于在执行编码器偏移校准时编码器的实际输出计算的移动距离和电机开环步进移动距离之间允许的最大误差,超过此误差将报错 ERROR_CPR_OUT_OF_RANGE。
odrv0.axis0.trap_traj
odrv0.axis0.trap_traj.config
[RW] odrv0.axis0.trap_traj.config.vel_limit
类型为 [float],单位为 [turn/s],梯形轨迹控制模式下的最高转速。
[RW] odrv0.axis0.trap_traj.config.accel_limit
类型为 [float],单位为 [turn/s^2],梯形轨迹控制模式下加速时的加速度。
[RW] odrv0.axis0.trap_traj.config.decel_limit
类型为 [float],单位为 [turn/s^2],梯形轨迹控制模式下减速时的加速度。
3.5 梯形加减速配置
odrv0.axis0.trap_traj.config.vel_limit = 30 1
配置梯形轨迹模式下电机匀速时的转速为 30 转/秒
odrv0.axis0.trap_traj.config.accel_limit = 5 1
配置梯形轨迹模式下电机加速时的加速度,单位为 [turn/s^2],例如:此处我们配置为 5,表示电机从静止加速到 5 转/秒 需要一秒钟的时间
odrv0.axis0.trap_traj.config.decel_limit = 5 1
配置梯形轨迹模式下电机减速时的加速度,单位为 [turn/s^2],例如:此处我们配置为 5,表示电机从 5 转/秒减速到静止需要一秒钟的时间
odrv0.axis0.controller.config.input_mode = INPUT_MODE_TRAP_TRAJ 1
将输入模式配置为梯形轨迹模式