资讯详情

ODrive应用 #4 配置参数&指令

配置参数&指令

我们把它作为每一个ODrive对象的占位符。 每个ODrive都是控制器ODrive对象。 在odrivetool中通常是odrv0。 另外,我们会<axis>作为每个轴的占位符,这是ODrive对象的属性(例如odrv0.axis0)。 轴表示电机的连接位置。(M0和axis0对应,M1和axis1对应)

文章目录

轴相应的指令

在大多数情况下,可以单独控制ODrive上两个轴。

状态机

轴的当前状态由<axis>.current_state指示。 可供用户使用<axis>.requested_state请求切换到其他状态。 启动后的默认状态为AXIS_STATE_IDLE

  1. AXIS_STATE_IDLE 禁用电机PWM,不执行任何操作。
  2. AXIS_STATE_STARTUP_SEQUENCE 操作启动程序。
  3. AXIS_STATE_FULL_CALIBRATION_SEQUENCE 操作电机校准,编码器偏移校准(如果编码器索引信号同时搜索索引信号,如果需要设置编码器索引脉冲信号 <axis>.encoder.config.use_indexTrue即可)。
  4. AXIS_STATE_MOTOR_CALIBRATION 测量电机的相电阻和相电感。
    • 要存储测量结果,请将测量结果存储起来<axis> .motor.config.pre_calibrated设置为True,然后保存配置。 之后,您无需在下次启动时运行电机校准。
    • 运行此测量后 <axis>.motor.config.phase_resistance<axis>.motor.config.phase_inductance将被修改。
  5. AXIS_STATE_SENSORLESS_CONTROL 启动无传感器运行。
    • 确保电机已被校准(<axis>.motor.is_calibratedTrue
    • 确保<axis>.controller.control_mode 配置正确。
  6. AXIS_STATE_ENCODER_INDEX_SEARCH 在搜索编码器索引之前,电机沿一个方向旋转。 仅当<axis> .encoder.config.use_indexTrue才能进入这种状态。
  7. AXIS_STATE_ENCODER_OFFSET_CALIBRATION 电机沿一个方向旋转几秒钟,然后反向旋转,测量编码器位置与电机电气相位之间的偏移。
    • 仅当电机已经校准时(<axis> .motor.is_calibratedTrue)才能进入这种状态。
    • 编码器校准成功实施后<axis>.encoder.is_ready将会变为True
  8. AXIS_STATE_CLOSED_LOOP_CONTROL 电机闭环运行模式。
    • 该状态的具体操作与控制模式有关。
    • 仅当电机已校准时(<axis> .motor.is_calibrated)编码器已经准备好了(<axis> .encoder.is_ready)才能进入这种状态。

启动程序

默认情况下,ODrive启动后执行任何操作,并立即进入空闲状态。

如果您想更改启动后的程序,请将启动后要执行的项目设置为True

ODrive启动后,设置如下所示True执行。

  • <axis>.config.startup_motor_calibration
  • <axis>.config.startup_encoder_index_search
  • <axis>.config.startup_encoder_offset_calibration
  • <axis>.config.startup_closed_loop_control
  • <axis>.config.startup_sensorless_control

请参见状态机关于每个状态的说明。

控制模式

位置控制是默认控制模式。 如果要使用其他模式,可以设置<axis>.controller.config.control_mode以下任意值:

  • CTRL_MODE_POSITION_CONTROL
  • CTRL_MODE_VELOCITY_CONTROL
  • CTRL_MODE_CURRENT_CONTROL
  • CTRL_MODE_VOLTAGE_CONTROL - 这种模式通常不使用

控制指令

  • <axis>.controller.pos_setpoint = <encoder_counts>
  • <axis>.controller.vel_setpoint = <encoder_counts/s>
  • <axis>.controller.current_setpoint = <current_in_A>

系统监控指令

编码器的位置和速度

  • 使用 <axis>.encoder.pos_estimate [counts] 查看当前编码器的位置
  • 使用 <axis>.encoder.vel_estimate [counts/s]查看当前电机转速

估算电机电流和转矩

  • 使用 <axis>.motor.current_control.Iq_setpoint [A] 查看当前设置的电机电流
  • 使用 <axis>.motor.current_control.Iq_measured [A]查看当前电机的实际电流,如果发现数据有噪声,可以直接用设定的电机电流代替,因为在给定电压下,电机的实际电流的电机电流,否则电机的实际电流可能小于设定的目标电流。 通过电机电流和电机KV电机的转矩可以用以下关系来估计:转矩[N.m] = 8.27 *电流[] / KV。

通用系统指令

保存配置

所有带有.config的变量都可以保存到ODrive的非易失性存储器中,因此在断电后它们仍然存在。 相关命令为:

诊断ODrive

  • <odrv>.serial_number: 唯一标识您ODrive的序列号。 当以大写十六进制(hex(<odrv> .serial_number).upper()))打印时,该串序列号与USB描述符指示的序列号相同。
  • <odrv>.fw_version_major, <odrv>.fw_version_minor<odrv>.fw_version_revision: ODrive的固件版本。
  • <odrv>.hw_version_major, <odrv>.hw_version_minor, <odrv>.hw_version_revision: ODrive的硬件版本。

设置无传感器模式运行

ODrive可以在没有编码器/霍尔反馈的情况下运行,但是有最低转速限制,通常约为几千转/分。 此模式下和使用编码器模式下转速的单位不再是counts/s,而是电机的电气角速度 rad/s。控制增益的单位也会有所不同。 例如, vel_gain 单位为 A/(rad/s)而不再是 A/(count/s)。 举个例子,假设您有一个7对极的电机,并且想以3000 RPM的转速运行。 vel_setpoint应该被设置为3000 * 2 * pi / 60 * 7 = 2199 rad/s。 以下是建议的参数配置。 请注意,您必须正确设置pm_flux_linkage才能使无传感器模式正常工作。

odrv0.axis0.controller.config.vel_gain = 0.01
odrv0.axis0.controller.config.vel_integrator_gain = 0.05
odrv0.axis0.controller.config.control_mode = 2
odrv0.axis0.controller.vel_setpoint = 400
odrv0.axis0.motor.config.direction = 1
odrv0.axis0.sensorless_estimator.config.pm_flux_linkage = 5.51328895422 / (<pole pairs> * <motor kv>)

使用以下指令来启动电机:

<axis>.requested_state = AXIS_STATE_SENSORLESS_CONTROL

标签: 闭环电流传感器专用hw

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台