ODrive的操作演示——控制AS5047P、霍尔电机和轮毂电机

14 篇文章 42 订阅



ODrive、VESC和SimpleFOC 教程链接汇总:请点此链接

说明

本文主要结合本店的驱动器和电机,快速实现对电机的控制。
在这里插入图片描述

ODrive 购买链接:某宝购买
电机 购买链接:某宝购买

  • 关于ODrive的操作教程网上有很多,本节只是尽可能用最少的配置让电机转起来,不保证参数为最佳设置,
  • ODrive版本v0.5.1,
  • ABZ和ABI的叫法不同,指的都是一种编码器。

一、5008航模电机标配AS5047P

ODrive 购买链接:https://item.taobao.com/item.htm?ft=t&id=644329838237,图锐科技
电机 购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技

1.1、接ABZ接口

在这里插入图片描述

//5008电机AS5047P_ABI接口,接在M0上,电源电压12V,24V用以下配置也可以
odrv0.vbus_voltage                                                      //查看电压
odrv0.erase_configuration()                                             //清除之前的配置,恢复默认配置
odrv0.config.dc_bus_overvoltage_trip_level = 56
odrv0.config.dc_max_positive_current = 30
odrv0.config.dc_max_negative_current = -5
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT           //设置电机类型
odrv0.axis0.motor.config.pole_pairs = 7                                 //默认7
odrv0.axis0.motor.config.calibration_current = 5                        //默认10,10=0.88A,5=0.3A(万用表测母线电流)
odrv0.axis0.encoder.config.mode = ENCODER_MODE_INCREMENTAL              //选择编码器类型
odrv0.axis0.encoder.config.cpr = 4000                                   //AS5047P=4000,TLE5012B=16384
odrv0.axis0.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL   //设置为速度模式
odrv0.axis0.controller.config.vel_gain = 0.02                           //默认0.167,速度环P参数
odrv0.axis0.controller.config.vel_integrator_gain = 0.2                 //默认0.33333,速度环I参数
odrv0.axis0.controller.config.vel_limit = 100                           //默认2,限制最大转速
odrv0.axis0.controller.config.input_mode = INPUT_MODE_VEL_RAMP          //速度爬升模式,否则速度变化时“噔”一声
odrv0.axis0.controller.config.vel_ramp_rate = 50                        //默认1非常小
odrv0.save_configuration()                                              //保存参数
odrv0.reboot()                                                          //重启

odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE           //电机校准,2秒后“哔”一声,然后正反转一圈
odrv0.axis0.error                                                            //查看是否有错误
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL                 //进入闭环,电流会增加约50mA

odrv0.axis0.controller.input_vel = 10                                        //速度限制会影响最大转速
odrv0.axis0.controller.input_vel = 0
odrv0.axis0.requested_state = AXIS_STATE_IDLE                                //进入空闲模式

1.2、接SPI接口

  • 用官方的ODrive板子:
    SPI接M0端子,进入闭环后电机稍微动一下就报错,查看错误:ENCODER_ERROR_ABS_SPI_COM_FAIL,
    百度后找到这个:https://www.bilibili.com/read/cv12631507/。
    用M1接口控制好点,但是转速不能过高,否则也报错。
    应该跟ODrive的电源是通过M0的DRV8301降压有关,或者单片机和两路DRV8301通过SPI通信,导致SPI复用过多。
    (本人实际测试,仅对我测试的板子负责)

  • 本店改版后的ODrive,使用单独的电源芯片,并且SPI接口没有过多复用,不存在这个问题,M0/M1都能很好的转动。
    在这里插入图片描述

//5008电机AS5047P_SPI接口,接在M0上,电源电压12V,24V也可以
odrv0.erase_configuration()                                           //清除之前的配置,恢复默认配置
odrv0.config.dc_bus_overvoltage_trip_level = 56
odrv0.config.dc_max_positive_current = 30
odrv0.config.dc_max_negative_current = -5
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT         //设置电机类型
odrv0.axis0.motor.config.pole_pairs = 7                               //默认7
odrv0.axis0.motor.config.calibration_current = 5                      //默认10,10=0.88A,5=0.3A(万用表测母线电流)
odrv0.axis0.encoder.config.mode = ENCODER_MODE_SPI_ABS_AMS            //设置编码器类型
odrv0.axis0.encoder.config.abs_spi_cs_gpio_pin = 1                    //选择CS引脚
odrv0.axis0.encoder.config.cpr = 2**14                                //14bit
odrv0.axis0.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL    //设置为速度模式
odrv0.axis0.controller.config.vel_gain = 0.02                         //默认0.167,速度环P参数
odrv0.axis0.controller.config.vel_integrator_gain = 0.2               //默认0.33333,速度环I参数
odrv0.axis0.controller.config.vel_limit = 100                         //默认2,限制最大转速
odrv0.axis0.controller.config.input_mode = INPUT_MODE_VEL_RAMP        //速度爬升模式,否则速度变化时“噔”一声
odrv0.axis0.controller.config.vel_ramp_rate = 50                      //默认1非常小
odrv0.save_configuration()                                            //保存参数
odrv0.reboot()                                                        //重启

odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE            //电机校准,2秒后“哔”一声,然后正反转一圈
odrv0.axis0.error                                                             //查看是否有错误
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL                  //进入闭环,电流会增加约50mA

odrv0.axis0.controller.input_vel = 10                                         //设置速度,速度限制会影响最大转速
odrv0.axis0.controller.input_vel = 0
odrv0.axis0.requested_state = AXIS_STATE_IDLE                                 //进入空闲模式

1.3、无感模式

去掉编码器接线,就是无感控制

//无感模式配置,5008电机,KV335,固件0.5.1
odrv0.erase_configuration()                                                   //清除之前的配置,恢复默认配置
odrv0.config.dc_bus_overvoltage_trip_level = 56
odrv0.config.dc_max_positive_current = 30
odrv0.config.dc_max_negative_current = -5
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT                 //设置电机类型
odrv0.axis0.motor.config.current_lim = 20                                     //默认10
odrv0.axis0.motor.config.direction = 1                                        //默认0,设定电机转向,必须配置
odrv0.axis0.motor.config.calibration_current = 5                              //默认10,5=0.38A
odrv0.axis0.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL    //设置为速度模式
odrv0.axis0.controller.config.vel_gain = 0.01                                 //默认0.167,速度环P参数
odrv0.axis0.controller.config.vel_integrator_gain = 0.05                      //默认0.33333,速度环I参数
odrv0.axis0.controller.config.vel_limit = 100                                 //默认2,限制最大转速
odrv0.axis0.controller.config.input_mode = INPUT_MODE_VEL_RAMP                //速度爬升模式
odrv0.axis0.controller.config.vel_ramp_rate = 50                              //默认1非常小
odrv0.axis0.sensorless_estimator.config.pm_flux_linkage = 5.51328895422 / (7 * 335)     //永磁磁链配置,极对数=7,KV335
odrv0.save_configuration()
odrv0.reboot()

odrv0.axis0.requested_state = AXIS_STATE_MOTOR_CALIBRATION               //电机校准,2秒后“哔”一声结束
odrv0.axis0.error                                                        //查看是否有错误
odrv0.axis0.controller.input_vel = 10
odrv0.axis0.requested_state = AXIS_STATE_SENSORLESS_CONTROL             //电机启动并运行,vel=10

odrv0.axis0.controller.input_vel = 50                                   //设置目标速度,最大速度为限制速度
odrv0.axis0.controller.input_vel = 0
odrv0.axis0.requested_state = AXIS_STATE_IDLE                           //进入空闲模式


固件0.5.6和0.5.1的配置稍微有点差异,下面说下0.5.6版本的配置:

//无感模式配置,5008电机,KV335,固件0.5.6
odrv0.erase_configuration()
odrv0.config.dc_bus_overvoltage_trip_level = 56
odrv0.config.dc_max_positive_current = 30
odrv0.config.dc_max_negative_current = -5
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT
odrv0.axis0.motor.config.current_lim = 20                                      //默认10
//odrv0.axis0.encoder.config.direction = 1                        //0.5.1版本是motor.config,在0.5.6 此句可以不配置
odrv0.axis0.motor.config.calibration_current = 5                              //默认10,5=0.38A
odrv0.axis0.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL    //设置为速度模式
odrv0.axis0.controller.config.vel_gain = 0.01                                //默认0.167,速度环P参数
odrv0.axis0.controller.config.vel_integrator_gain = 0.05                     //默认0.33333,速度环I参数
odrv0.axis0.controller.config.vel_limit = 100                                //默认2,限制最大转速
odrv0.axis0.controller.config.input_mode = INPUT_MODE_VEL_RAMP               //速度爬升模式
odrv0.axis0.controller.config.vel_ramp_rate = 50                             //默认1非常小
odrv0.axis0.config.enable_sensorless_mode = True                             //0.5.6版本 需要配置为无感模式
odrv0.axis0.sensorless_estimator.config.pm_flux_linkage = 5.51328895422 / (7 * 335)  //永磁磁链配置,极对数=7,KV335
odrv0.save_configuration()
odrv0.reboot()

odrv0.axis0.requested_state = AXIS_STATE_MOTOR_CALIBRATION        //电机校准,2秒后“哔”一声结束
odrv0.axis0.error
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL      //进入闭环,电机转速约 9 turn/s

odrv0.axis0.controller.input_vel = 50                             //设置目标速度,最大速度为限制速度
odrv0.axis0.controller.input_vel = 0
odrv0.axis0.requested_state = AXIS_STATE_IDLE                     //进入空闲模式

二、同时控制两个3505电机

ODrive 购买链接:https://item.taobao.com/item.htm?ft=t&id=644329838237,图锐科技
电机 购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技

在这里插入图片描述

//3505电机AS5047P_ABZ接口,电源电压12V
odrv0.erase_configuration()
odrv0.config.dc_bus_overvoltage_trip_level = 56
odrv0.config.dc_max_positive_current = 30
odrv0.config.dc_max_negative_current = -5
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT
odrv0.axis0.motor.config.pole_pairs = 10                                //默认7,3505电机10对极
odrv0.axis0.motor.config.calibration_current = 4                        //默认10,4=0.33A(万用表测母线电流)
odrv0.axis0.encoder.config.mode = ENCODER_MODE_INCREMENTAL              //选择编码器类型
odrv0.axis0.encoder.config.cpr = 4000                                   //AS5047P=4000,TLE5012B=16384
odrv0.axis0.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL   //设置为速度模式
odrv0.axis0.controller.config.vel_gain = 0.02                           //默认0.167,速度环P参数
odrv0.axis0.controller.config.vel_integrator_gain = 0.2                 //默认0.33333,速度环I参数
odrv0.axis0.controller.config.vel_limit = 100                           //默认2,限制最大转速
odrv0.axis0.controller.config.input_mode = INPUT_MODE_VEL_RAMP          //为2,速度爬升模式,否则速度变化时“噔”一声
odrv0.axis0.controller.config.vel_ramp_rate = 50                        //默认1非常小

odrv0.axis1.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT
odrv0.axis1.motor.config.pole_pairs = 10
odrv0.axis1.motor.config.calibration_current = 4
odrv0.axis1.encoder.config.mode = ENCODER_MODE_INCREMENTAL              //选择编码器类型
odrv0.axis1.encoder.config.cpr = 16384
odrv0.axis1.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL
odrv0.axis1.controller.config.vel_gain = 0.02
odrv0.axis1.controller.config.vel_integrator_gain = 0.2
odrv0.axis1.controller.config.vel_limit = 100
odrv0.axis1.controller.config.input_mode = INPUT_MODE_VEL_RAMP
odrv0.axis1.controller.config.vel_ramp_rate = 50

odrv0.save_configuration()                                              //保存参数
odrv0.reboot()                                                          //重启

odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE           //电机校准,2秒后“哔”一声,然后正反转一圈
odrv0.axis0.error                                                            //查看是否有错误
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL                 //进入闭环,电流会增加约50mA

odrv0.axis1.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE
odrv0.axis1.error
odrv0.axis1.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL

odrv0.axis0.controller.input_vel = 10                                        //速度限制会影响最大转速
odrv0.axis1.controller.input_vel = 10

odrv0.axis0.encoder.vel_estimate  //读取实际转速
odrv0.axis1.encoder.vel_estimate  //读取实际转速

三、霍尔电机

在这里插入图片描述

odrv0.erase_configuration()
odrv0.config.dc_bus_overvoltage_trip_level = 56
odrv0.config.dc_max_positive_current = 20
odrv0.config.dc_max_negative_current = -3
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_GIMBAL                  //60W以内肯定不是大电流
odrv0.axis0.motor.config.pole_pairs = 2                                  //默认7,内转子霍尔电机极对数
odrv0.axis0.motor.config.calibration_current = 2
odrv0.axis0.motor.config.current_lim = 20                                //默认10
odrv0.axis0.encoder.config.mode = ENCODER_MODE_HALL
odrv0.axis0.encoder.config.cpr = 12
odrv0.axis0.encoder.config.bandwidth = 100
odrv0.axis0.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL
odrv0.axis0.controller.config.vel_gain = 0.02                           //默认0.167抖动严重
odrv0.axis0.controller.config.vel_integrator_gain = 0                   //默认0.33333,速度环I参数
odrv0.axis0.controller.config.vel_limit = 50                            //默认2,限制最大转速
odrv0.axis0.controller.config.input_mode = INPUT_MODE_VEL_RAMP
odrv0.axis0.controller.config.vel_ramp_rate = 50                        //默认1,非常小,加速度
odrv0.save_configuration()
odrv0.reboot()

odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE
odrv0.axis0.error
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL
odrv0.axis0.controller.input_vel = 10

四、轮毂电机

在这里插入图片描述

odrv0.erase_configuration()
odrv0.config.dc_bus_overvoltage_trip_level = 56
odrv0.config.dc_max_positive_current = 30
odrv0.config.dc_max_negative_current = -5
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT
odrv0.axis0.motor.config.pole_pairs = 15
odrv0.axis0.motor.config.calibration_current = 10
odrv0.axis0.motor.config.resistance_calib_max_voltage = 5	     //默认2,配置电机校准时的电压
odrv0.axis0.motor.config.current_lim = 20                        //默认10
odrv0.axis0.encoder.config.mode = ENCODER_MODE_HALL
odrv0.axis0.encoder.config.cpr = 90                              //默认8192,15对极*6=90
odrv0.axis0.encoder.config.bandwidth = 100	                     //配置编码带宽
odrv0.axis0.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL   //设置为速度模式
odrv0.axis0.controller.config.vel_gain = 0.2                     //默认0.167,速度环P参数
odrv0.axis0.controller.config.vel_integrator_gain = 0.07         //默认0.33333,速度环I参数
odrv0.axis0.controller.config.vel_limit = 10                     //默认2,限制最大转速
odrv0.axis0.controller.config.input_mode = INPUT_MODE_VEL_RAMP	 //速度
odrv0.axis0.controller.config.vel_ramp_rate = 5			         //加速度
odrv0.save_configuration()
odrv0.reboot()

odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE
odrv0.axis0.error
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL
odrv0.axis0.controller.input_vel = 10




ODrive 购买链接:https://item.taobao.com/item.htm?ft=t&id=644329838237,图锐科技
电机 购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技



欢迎加入技术交流群:923734429 (入群申请写:CSDN)


(完)


  • 6
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
霍尔电机使用FOC控制的流程如下: 1. 初始化:首先,需要对电机进行初始化设置。这包括设置电机参数,如电机类型、电阻、电感等。 2. 传感器检测:如果使用传感器融合技术,需要进行传感器检测。对于霍尔电机,需要检测霍尔传感器的工作状态和输出情况。 3. 转子位置估算:根据霍尔传感器的输出,可以推测转子位置。这可以通过分析霍尔传感器输出的相位信息来实现。转子位置的准确估算对于FOC控制至关重要。 4. 空间矢量调制:根据转子位置和期望的电机运行状态,计算所需的电流矢量。空间矢量调制是将期望的电流矢量转换为适当的PWM信号,以驱动电机。 5. 电流控制:将计算得到的电流矢量与实际电流进行比较,并通过控制器调节电机输入电流,以使实际电流接近期望值。这可以通过PI控制器或其他控制算法来实现。 6. 速度/位置控制:根据应用需求,可以进行速度或位置控制。这涉及计算期望的转子速度或位置,并调整电机输入电流以实现所需的运动。 7. 循环控制:以上步骤循环执行,以实现实时的FOC控制。通过持续的转子位置估算和电流控制,可以实现电机的稳定运行和精确控制。 总的来说,霍尔电机使用FOC控制需要进行转子位置估算、空间矢量调制、电流控制和速度/位置控制等步骤。这些步骤可以通过编程实现,以实现高效、高性能的电机控制

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值