当前位置 博文首页 > ODrive常见驱动问题及解决_gjy_skyblue的博客:Makerbase

    ODrive常见驱动问题及解决_gjy_skyblue的博客:Makerbase

    作者:[db:作者] 时间:2021-09-02 19:10

    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

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

    cs
    下一篇:没有了