ODrive实例 #2 电机配置实例(小米9号平衡车轮毂电机)

ODrive实例 #2 电机配置实例(小米9号平衡车轮毂电机)

以下内容将详细介绍使用 ODrive 驱动无刷电机的过程,如果您的硬件和本文中所使用的一样的话,配置参数按照本文中的配置即可达到同样的效果,如果硬件使用有所不同,个别参数需要您适当调整。

1. 硬件介绍

  • ODrive

    • 硬件版本:ODrive v3.6 56v电压版本
    • 固件版本:fw-v0.5.1

    购买链接:淘宝链接

  • 小米9号平衡车轮毂电机

    • 极对数:15
    • 额定转速:200RPM
    • 额定电压:24-48VDC
    • 额定输出功率:<=350W
    • 有感反馈:霍尔传感器
  • 功率耗散电阻(可选)

    50W 2R 黄金壳功率耗散电阻

    购买链接:淘宝链接

2. 硬件连接

电机具有三个较粗的电机相位线(通常为黄色,蓝色,绿色),以及一组5条较细的线,用于霍尔传感器反馈(通常为红色,黄色,蓝色,绿色,黑色)。
您可以以任何顺序将电机的相线连接到 ODrive M0 电机接口,因为稍后我们仍将对其校准。 将霍尔反馈线连接到ODrive J4连接器(确保和电机通道号匹配 M0),如下所示:

霍尔反馈线J4 连接器
Red5V
YellowA
BlueB
GreenZ
BlackGND

注意:为了与编码器输入信号兼容,ODrive 在霍尔传感器连接的引脚上没有任何滤波电容。 因此,为了获得可靠的霍尔信号,建议在这些引脚上添加一些滤波电容。

3. 配置参数

进行配置前建议首先执行一遍擦除配置(odrv0.erase_configuration()Enter)并重启 ODrive 以确保配置恢复为固件默认配置

3.1 基本配置

odrv0.config.brake_resistance = 2.0

配置功率耗散电阻阻值,我们使用的的功率耗散电阻阻值为 2 Ohm,如果不接制动电阻或不想使用功率耗散电阻将此项配置为 0 即可

odrv0.config.dc_bus_undervoltage_trip_level = 8

配置电源电压低压保护阈值,当电源电压低于 8V 时将停止电机并报错,注意:8V 为极限值建议根据自己所使用的供电更精确的配置以更好地保护 ODrive 主板

odrv0.config.dc_bus_overvoltage_trip_level = 56

配置电源电压过压保护阈值,当电源电压高于 56V 时将停止电机并报错,注意:56V 为极限值建议根据自己所使用的供电更精确的配置以更好地保护 ODrive 主板

odrv0.config.dc_max_positive_current = 80

配置母线电流过流保护阈值,当母线电流高于 80A 时将停止电机并报错,配置为无穷大时禁用此保护

odrv0.config.dc_max_negative_current = -5

配置电机制动时在母线上产生的反向电流过流保护阈值,当反向电流高于 5A 时将停止电机并报错,配置为负无穷大时禁用此保护

odrv0.config.max_regen_current = 0

配置制动回充电流值为 0A ,由于使用的开关电源进行供电所以不具备电能回收功能,所以配置为 0,如果您使用的电池供电则可以根据电池组可以承受的回充电流大小进行配置,当母线上反向回充电流高于此值时,高出的电流能量将会通过功率耗散电阻进行消耗

3.2 电机配置

odrv0.axis0.motor.config.pole_pairs = 15

配置电机极对数,我们所使用的电机极对数为 15

可以通过以下方式获取电机极对数:

  1. 查找电机数据手册,一般会有说明
  2. 数一数电机永磁体个数,然后除以 2 就是电机极对数
  3. 在两个电机线之间连接直流电源,电源电压设定为额定直流母线电压的5% (您也可以将电源设置为电机的额定电流)
    • 用手旋转电机,应该稍微有一点阻力,否则:
      • 如果无法转动电机,请降低施加的电压或电流
      • 如果电机产生的阻力过小,请逐渐增加施加的电压或电流
    • 用手转动转子一圈,其中转动停顿的次数为该电机的极对数
odrv0.axis0.motor.config.calibration_current = 10

配置电机参数校准时的电流,此电流值在进行电机参数校准和霍尔偏移校准时使用,如果设置的过小在进行霍尔偏移校准时电机将没有足够的力量旋转

odrv0.axis0.motor.config.resistance_calib_max_voltage = 5

配置电机参数校准时的电压,当电机的相电阻越高此值应该越高,但是如果此值过高会造成电流过大,产生过流保护错误

odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT

配置所使用的电机类型为大电流电机

odrv0.axis0.motor.config.current_control_bandwidth = 100

配置电机电流控制器带宽,由于轮毂电机与普通的电机相比具有更高的相电阻和相电感,因此电流控制器带宽比普通电机参数要小

odrv0.axis0.motor.config.current_lim = 20

配置电机运行的最大电流限制

odrv0.axis0.motor.config.requested_current_range = 30

配置电机电流采样范围,注意:此值设置后需要重新启动才能生效

3.3 霍尔传感器配置

odrv0.axis0.encoder.config.mode = ENCODER_MODE_HALL

配置电机编码器类型为霍尔信号输入

odrv0.axis0.encoder.config.cpr = 90

配置编码器分辨率,即电机转动一圈多少个计数值,霍尔反馈对于电机中的每个对极有6种状态,由于我们的电机是15个极对,因此将 cpr 设置为 15 * 6 = 90

odrv0.axis0.encoder.config.bandwidth = 100

设置编码器 PLL 带宽,一般编码器分辨率越高(cpr > 4000个计数/转)此值应该越高,这样有助于减少电机振动,由于霍尔反馈每转仅具有 90 个计数,因此我们希望减少速度跟踪带宽以获得更平滑的转速估计

3.4 控制器配置

odrv0.axis0.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL

配置电机控制模式,由于霍尔反馈分辨率较低,位置模式效果不理想,我们设置为转速控制模式

odrv0.axis0.controller.config.vel_limit = 10

配置电机最大转速,单位为 [turn/s],例如:此处我们配置为 10 转/秒 即 600 转/分

odrv0.axis0.controller.config.vel_gain = 0.2
odrv0.axis0.controller.config.vel_integrator_gain = 0.07

配置控制器控制增益,vel_gain 和 vel_integrator_gain 为速度环增益

odrv0.axis0.controller.config.input_mode = INPUT_MODE_VEL_RAMP

将输入模式配置为转速爬升模式,如果不想只用 ODrive 内部的转速爬升可以设置为直接控制模式(INPUT_MODE_PASSTHROUGH)

odrv0.axis0.controller.config.vel_ramp_rate = 10

配置转速爬升速度,单位为 [(turn/s) / s] ,例如:此值设置为10表示当设置电机5转/秒运行时电机由静止加速到 5转/秒这个加速程耗费 0.5 秒

3.5 保存配置

odrv0.save_configuration()
odrv0.reboot()

保存配置参数并重启 ODrive 已使某些配置参数生效

等待 ODrive 重新连接到 odrivetool

4. 自动校准

注意:进行参数校准前请确保电机转子能够自由旋转而且不能有偏载,即负载均匀和较弱的摩擦负载才行,重载或类似弹簧载荷不行,否则将影响参数自动校准

4.1 电机和编码器校准

odrv0.axis0.requested_state = AXIS_STATE_MOTOR_CALIBRATION

进行自动检测电机参数,执行这条命令后大约2秒,应听到电机发出哔声

dump_errors(odrv0)

检查错误代码,如果都为 no error 表明一切正常,否则结合错误代码信息对问题分析,当问题解决后输入 dump_errors(odrv0, True) Enter 对错误代码进行清除,然后重新执行电机参数校准

odrv0.axis0.motor.config.pre_calibrated = True

将电机 pre_calibrated 设置为 True,表示电机已校准下次重新启动后可以直接使用本次校准的结果

odrv0.axis0.requested_state = AXIS_STATE_ENCODER_OFFSET_CALIBRATION

进行霍尔传感器偏移校准,电机将向一个方向转动几秒钟然后再反方向转动几秒钟

dump_errors(odrv0)

检查错误代码,如果都为 no error 表明一切正常,否则结合错误代码信息对问题分析,当问题解决后输入 dump_errors(odrv0, True) Enter 对错误代码进行清除,然后重新执行霍尔传感器偏移校准

odrv0.axis0.encoder.config.pre_calibrated = True

将编码器 pre_calibrated 设置为 True,表示编码器已校准下次重新启动后可以直接使用本次校准的结果

4.2 保存校准结果

odrv0.save_configuration()
odrv0.reboot()

将自动检测的电机参数保存并重启

等待 ODrive 重新连接到 odrivetool

5. 上电后控制电机运行流程

odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL

进入闭环运行模式,此时电机将进入转速闭环模式

odrv0.axis0.controller.input_vel = 4

命令电机已 4 转/秒 转动,如果想反方向转动设置为 -4 即可,也可以设置为小数,如:0.5 转/秒

odrv0.axis0.requested_state = AXIS_STATE_IDLE

如果想释放电机,发送此命令即可让 ODrive 进入待机模式,此时电机可以被自由转动

如果您有任何问题或疑问,欢迎您加入ODrive社区或QQ群 851421965 进行交流

步进电机是一种将电脉冲信转换成相应角位移或线位移的电动机。每输入一个脉冲信,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。伺服电机又称执行电机,在自动控制系统中,用作执行元件,把收到的电信转换成电机轴上的角位移或角速度输出。   步进电机和伺服电机的区别在于:   1、矩频特性不同;步进电机的输出力矩会随转速升高而下降,交流伺服电机为恒力矩输出。   2、过载能力不同;步进电机一般不具有过载能力,而交流电机具有较强的过载能力。   3、速度响应性能不同;步进电机从静止加速到工作转速需要上百毫秒,而交流伺服系统的加速性能较好,一般只需几毫秒,可用于要求快速启停的控制场合。   4、低频特性不同;步进电机在低速时易出现低频振动现象,当它工作在低速时一般采用阻尼技术或细分技术来克服低频振动现象,伺服电机运转非常平稳,即使在低速时也不会出现振动现象。   5、运行性能不同;步进电机的控制为开环控制,启动频率过高或负载过大易丢步或堵转的现象,停止时转速过高易出现过冲现象,交流伺服驱动系统为闭环控制,驱动器可直接对电机编码器反馈信进行采样,内部构成位置环和速度环,一般不会出现步进电机的丢步或过冲的现象,控制性能更为可靠。   综上所述,伺服电机在许多性能方面都优于步进电机,但是价格比就不一样。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值