ODRIVE问题及解决

官方问题处理:https://docs.odriverobotics.com/troubleshooting

欢迎加入 创客基地 电机控制Q群 讨论电机控制相关问题:732557609

欢迎光临 创客基地 B站 了解技术资料:https://space.bilibili.com/393688975

欢迎光临 创客基地 淘宝店 采购产品:https://makerbase.taobao.com/

提示:可以按快捷键“Ctrl+F”快速寻找相关问题。

注意:该文档会不断维护更新,如各位遇到问题并成功解决也可在Q群732557609 私聊@管理员。

(一)ODrive-fw-V0.5.2版本

  1. ODrive主板USB无法连接到PC问题
    答:V0.5.2自身存在问题,开发者承诺在V0.5.3版本修复。建议先使用V0.5.1版本。

群里大佬提供的解决办法:
在这里插入图片描述

(二)ODrive-fw-V0.5.1版本

一、ODrive GUI常见问题

  1. 问题如下图所示:
    在这里插入图片描述

    答:安装组件,flask要匹配版本。
    在这里插入图片描述

  2. 问题如下图所示:
    在这里插入图片描述

    答:odrive tool与odrive gui不能共用,需要退出(quit)odrive tool。

二、主板故障常见问题

  1. 问题:ODrive在之前就设置好参数,无负载通电,发热主板或者芯片发热。
    答:有可能是主板某个地方短路了,建议检查一下主板线路。

  2. 问题:主板接入PC或者同电源完全无反应。
    答:很可能是主板烧了

三、ODrive tool常见问题

  1. 问题:新手提问odrivetools怎么安装呢?我按教程安装失败?我是WIN7.

    答:建议使用WIN10家庭版安装。

四、其它各类常见问题

  1. 问题:测得电流太小,估算力矩太小
    答:没带负载,空载力矩会很小。

  2. 问题:关于错误 ENCODER_ERROR_CPR_POLEPARIS_MISMATCH
    答:一般是配置编码器分辨率设置不对,可以在odrive tool输入odrv0.axis0.encoder.config.cpr = 16384
    注意:编码器分辨率 = 每圈步数x4

    ##估算编码器分辨率,差值大概等于分辨率

    1. 读取值 odrv0.axis0.encoder.shadow_count
    2. 手动转一圈电机;
    3. 再次读取值 odrv0.axis0.encoder.shadow_count

    ##极对数设置判断极对数方法
    方法一:根据线圈数量÷2=极对数
    方法二:用手控制电机转动一圈,查看有几次停顿停顿数÷2=极对数

  3. 问题:编码器不校准会报错
    答:增量式编码器必须得进行编码器校准

  4. 问题:电机错误ERROR_CURRENT_UNSTABLE,电流不稳定

  5. 在这里插入图片描述

    答:电流限制调大,采样范围也加大。

  6. 问题:编码器错误
    在这里插入图片描述

    答:极对数和CPR至少错了一个(有时候它就是在校准的时候出错)

  7. 问题:如果ODrive用SPI接口的编码器(AS5048a),那两路电机是不是只能用一路了?因为ODrive上只有一组MOSI和MISO。两路编码器的的mosi和miso接在一起,然后cs选不同的是吧?

    答:MOSI和MISO 可以共用,两路区分CS就行

  8. 问题:gui报错
    在这里插入图片描述
    答:
    方法1:首先打开gui将路径复制,然后在文件夹找到这个路径下的python文件,然后在python中输入python那个py文件,变绿了之后需要等待,别直接退了。
    方法2:Python版本不对,必须得是Python3.9.1类型的版本,其它版本不能共用,必须卸载重新安装。

  9. 问题:Python安装错误
    在这里插入图片描述
    答:重装依赖库,这里直接提示yaml没找到;检查python版本是否存在问题,并且只能存在一个版本,即v3.9.1。

  10. 问题:ERROR_INVALID_STATE – 0X01
    答:您试图在不被允许的情况下切换状态。通常是,您在校准电机之前尝试运行编码器校准或闭环控制,或者在校准编码器之前尝试运行闭环控制。

  11. 问题:ERROR_DC_BUS_UNDER_VOLTAGE =0x02
    答:确认电源线已牢固连接。对于测试,可以使用几个安培的12V服务器电源,而使用类似适配器那种小电流电源可能会导致行为不一致,因此不建议这样做。

  12. ODRIVE USB无法连接到PC,PC无法识别ODRIVE。例如下图问题:
    在这里插入图片描述
    在这里插入图片描述
    答:可能是电压高了,导致干扰增强,建议使用隔离电源(电池)试一下;断开其它连接以求减少干扰(比如电机);换一根带有屏蔽的USB线。

五、官网提示错误标志

1.电机错误标志

ERROR_NONE — 0x00000000

没有说明

ERROR_PHASE_RESISTANCE_OUT_OF_RANGE — 0x00000001

原因:测得的电动机相电阻超出了合理范围。
在校准期间,将测量电动机的电阻和电感。如果测得的电动机电阻或电感超出设定范围,则会返回此错误。检查所有电机导线是否牢固连接。
可以使用odrivetool查看测量值,如下所示:

In [2]: odrv0.axis0.motor.config.phase_inductance
Out[2]: 1.408751450071577e-05

In [3]: odrv0.axis0.motor.config.phase_resistance
Out[3]: 0.029788672924041748

某些电动机的相电阻和电感将与此相差很大。例如,万向节电机,一些小型电机(例如,峰值电流<10A)。如果您认为这适用于您,请尝试使用odrivetool将config.resistance_calib_max_voltage从其默认值1增加,然后重复电机校准过程。如果电动机的峰值电流消耗较小(例如,<20A),则也可以尝试将config.calibration_current从其默认值10A减小 。

一般来说,您需要
resistance_calib_max_voltage > calibration_current * phase_resistance
resistance_calib_max_voltage < 0.5 * vbus_voltage

ERROR_PHASE_INDUCTANCE_OUT_OF_RANGE — 0x00000002

原因:测得的电动机相电感超出合理范围。详情请参阅PHASE_RESISTANCE_OUT_OF_RANGE

ERROR_ADC_FAILED — 0x00000004

没有说明

ERROR_DRV_FAULT — 0x00000008

原因:栅极驱动器芯片报告错误。
已知ODrive v3.4存在硬件问题,当向M0施加大电流时,电动机将停止运行。在这种情况下,两个电动机的报告错误为ERROR_DRV_FAULT。

推测是,高开关电流会在DRV8301栅极驱动器芯片的电源中产生较大的纹波,从而导致其欠压故障检测。

要解决此问题,您可以将M0电流限制为40A。在一台测试电动机上观察到DRV故障的最低电流为45A,另一台测试电动机为50A。请参阅 此帖子 以获取有关硬件修复的说明。

ERROR_CONTROL_DEADLINE_MISSED — 0x00000010

没有说明

ERROR_NOT_IMPLEMENTED_MOTOR_TYPE — 0x00000020

没有说明

ERROR_BRAKE_CURRENT_OUT_OF_RANGE — 0x00000040

没有说明

ERROR_MODULATION_MAGNITUDE — 0x00000080

原因:母线电压不足以推动所需的电流通过电动机。如果在电动机校准过程中遇到此问题,请确保 config.resistance_calib_max_voltage不超过母线电压的一半。

对于万向电机,建议将config.calibration_current和config.current_lim设置为 总线电压的一半或更低。

ERROR_BRAKE_DEADTIME_VIOLATION — 0x00000100

没有说明

ERROR_UNEXPECTED_TIMER_CALLBACK — 0x00000200

没有说明

ERROR_CURRENT_SENSE_SATURATION — 0x00000400

原因:相电流超出可测量范围。
电流检测电路使电流检测放大器饱和。这可能是由于将config.current_lim设置为高于 config.requested_current_range造成的。如果发生这种情况,请增加请求的电流范围,保存配置,然后重新启动控制器。
最大允许电流和可测量电流范围之间默认有10%的余量。这通常就足够了,但是在某些情况下,您可能需要更多的余量。您可以简单地减少current_lim一点,也可以增加requested_current_range。如果仍然有requested_current_range比30%高的current_lim问题,则当前控制器中可能存在不稳定问题。

ERROR_CURRENT_LIMIT_VIOLATION — 0x00001000

原因:
电机电流超过motor.config.current_lim + motor.config.current_lim_margin。电流控制器是一个 PI 控制器,所以它会经历过冲。PI 增益是根据config.current_control_bandwidth以及电机电阻和电感(极点位置)自动计算的。一些过冲是正常的,所以如果您的电流限制很大,一个明智的解决方案是增加电流限制裕度。

ERROR_BRAKE_DUTY_CYCLE_NAN — 0x00002000

没有说明

ERROR_DC_BUS_OVER_REGEN_CURRENT — 0x00004000

原因:电机热敏电阻测得的温度高于 motor.motor_thermistor.config.temp_limit_upper

ERROR_DC_BUS_OVER_CURRENT — 0x00008000

原因:过多的电流从电源中输出.

2.轴错误标志

ERROR_NONE — 0x00000000

没有说明
ERROR_INVALID_STATE — 0x00000001
请求了无效的状态。
您试图在允许之前运行状态。通常,您在校准电动机之前尝试运行编码器校准或闭环控制,或者在校准编码器之前尝试运行闭环控制。

ERROR_DC_BUS_UNDER_VOLTAGE — 0x00000002

直流电压低于config.dc_bus_undervoltage_trip_level中配置的限制。
确认电源线已牢固连接。对于初始测试,可以提供几个安培的12V PSU应该足够,而使用低电流“壁式疣”插头包可能会导致行为不一致,因此不建议这样做。
您可以通过输入odrivetool中的liveplotter来监视PSU电压start_liveplotter(lambda: [odrv0.vbus_voltage])。如果看到 电压下降到config.dc_bus_undervoltage_trip_level以下(默认值:〜8V),则将触发此错误。即使是相对较小的电动机也可以瞬间消耗数kW的电能,因此,除非您的PSU非常大或正在使用电池,否则在执行具有高电流限制的高速运动时可能会遇到此错误。要限制您的PSU功耗,您可以限制电动机电流和/或速度限制controller.config.vel_limit和 motor.config.current_lim。

ERROR_DC_BUS_OVER_VOLTAGE — 0x00000004

直流电压超过了config.dc_bus_overvoltage_trip_level中配置的限制。
确认您已正确连接了正确电阻值的制动电阻器,并且已将config.brake_resistance设置为制动电阻器的值。
您可以通过输入odrivetool中的liveplotter来监视PSU电压start_liveplotter(lambda: [odrv0.vbus_voltage])。如果在移动过程中看到电压升高到PSU的标称设定电压之上,则说明制动电阻设置得太低。如果您使用长导线或小规格导线将制动电阻器连接到odrive,则可能会发生这种情况,这会增加额外的电阻。需要考虑这个额外的电阻,以防止出现电压尖峰。如果已检查所有连接,还可以尝试将制动电阻一次增加〜0.01欧姆,最大比制动电阻值大0.05。

ERROR_CURRENT_MEASUREMENT_TIMEOUT — 0x00000008

没有说明

ERROR_BRAKE_RESISTOR_DISARMED — 0x00000010

制动电阻器意外撤防。

ERROR_MOTOR_DISARMED — 0x00000020

电机意外撤防。

ERROR_MOTOR_FAILED — 0x00000040

检查motor.error以获取更多信息。

ERROR_SENSORLESS_ESTIMATOR_FAILED — 0x00000080

没有说明

ERROR_ENCODER_FAILED — 0x00000100

有关更多信息,请检查encoder.error。

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

检查fet_thermistor.error和motor_thermistor.error以获取更多信息。

3.编码器错误标志

ERROR_NONE — 0x00000000

没有说明

ERROR_UNSTABLE_GAIN — 0x00000001

没有说明

ERROR_CPR_POLEPAIRS_MISMATCH — 0x00000002

确认您为编码器输入了正确的每转计数 (CPR) 。ODrive 使用您提供的电机极对值来测量 CPR。所以你也应该仔细检查这个值。
如果您仍然遇到问题,您可以尝试将 config.calib_scan_distance增加到默认值的 4 倍。
如果您的编码器 cpr 和电机极对设置正确,则可能导致此错误,因为电机齿槽会导致电机运动比指令少或多。您可以通过增加config.calib_scan_distance来解决这个问题 。
请注意,AMT 编码器可使用编码器 PCB 上的微动开关进行配置,因此您可能需要检查它们是否处于正确位置。如果您的编码器列出其每转脉冲 (PPR),则将该数字乘以 4 即可获得 CPR。

ERROR_NO_RESPONSE — 0x00000004

确认您的编码器已插入 ODrive 板上的正确引脚。

ERROR_UNSUPPORTED_ENCODER_MODE — 0x00000008

没有说明

ERROR_ILLEGAL_HALL_STATE — 0x00000010

霍尔效应编码器只有 8 (2^3) 个可能状态中的 6 个有效状态。无效状态可能由噪声或硬件故障引起。如果出现此错误并且您确定电气连接正确,请在编码器 A、B、Z 引脚和地之间添加 22nF 电容器以滤除噪声。

ERROR_INDEX_NOT_FOUND_YET — 0x00000020

检查您的编码器是否是具有索引脉冲的型号。如果您的编码器没有连接到 ODrive 上的引脚 Z 的电线,则它不会输出索引脉冲。

ERROR_ABS_SPI_TIMEOUT — 0x00000040

没有说明

ERROR_ABS_SPI_COM_FAIL — 0x00000080

没有说明

ERROR_ABS_SPI_NOT_READY — 0x00000100

没有说明

ERROR_HALL_NOT_CALIBRATED_YET — 0x00000200

没有说明

4.控制器错误标志

ERROR_NONE — 0x00000000

没有说明

ERROR_OVERSPEED — 0x00000001

超出电机速度config.vel_limit * config.vel_limit_tolerance并启用config.enable_overspeed_error。
尝试增加config.vel_limit。每秒 2 圈的默认设置使电机速度仅为 120 RPM。注意:即使您不命令电机超过config.vel_limit,电机负载的突然变化也可能导致暂时超过此速度,从而导致此错误。
您也可以尝试增加config.vel_limit_tolerance。默认值 1.2 意味着它只允许违反速度限制的 20%。您可以将config.enable_overspeed_error设置为 False 以禁用此错误。

ERROR_INVALID_INPUT_MODE — 0x00000002

该config.input_mode设置被设置为无效值。有关可用值,请参阅 InputMode
输入模式和控制模式是不同的概念。控制模式设置要使用的控制类型,如位置、速度或扭矩控制。输入模式修改给定的输入(input_pos等)以提供所需的行为。例如,在位置控制模式下,位置过滤器输入模式将平滑input_pos命令以提供更平滑的运动。

ERROR_UNSTABLE_GAIN — 0x00000004

没有说明

ERROR_INVALID_MIRROR_AXIS — 0x00000008

没有说明

ERROR_INVALID_LOAD_ENCODER — 0x00000010

没有说明

ERROR_INVALID_ESTIMATE — 0x00000020

没有说明

ERROR_INVALID_CIRCULAR_RANGE — 0x00000040

没有说明

ERROR_SPINOUT_DETECTED — 0x00000080

电机机械功率和电气功率不符。这通常是由打滑的编码器或不正确的编码器偏移校准引起的。检查您的编码器是否在电机上打滑。如果使用索引引脚,请检查您是否收到由噪声引起的错误索引脉冲。如果您对编码器信号使用非屏蔽电缆,就会发生这种情况。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐