ODrive 配置 重要参数

参考链接:

ODrive干货 #3 ODriveTool 指令大全_odrive命令大全-CSDN博客

ODrive实例 #1 电机配置实例(4250-520KV + TLE5012B-E1000)_tle5012b转速计算-CSDN博客

ODrive实例 #2 电机配置实例(小米9号平衡车轮毂电机)_小米九号平衡车的电机是多少伏的-CSDN博客

odrv0

系统命令

[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

将输入模式配置为梯形轨迹模式

  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值