ODrive的梯形轨迹



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

一、梯形轨迹


实际应用中,需要电机又快又稳的转到指定位置,梯形轨迹(INPUT_MODE_TRAP_TRAJ)本质上是一个分段函数的轨迹规划,是一个先加速,再匀速,再减速的三段函数的过程。

在这里插入图片描述

1.1、2804云台电机

在这里插入图片描述

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

2804电机100kv,12V电源,最高速度为1200RPM = 20 转/秒


1.1.1、速度模式

先用速度模式热身,

odrv0.erase_configuration()
odrv0.config.dc_max_positive_current = 20
odrv0.config.dc_max_negative_current = -3.0
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_GIMBAL
odrv0.axis0.motor.config.pole_pairs = 7
odrv0.axis0.motor.config.calibration_current = 2.5                      //2=0.23A,2.5=0.3A(万用表测母线电流)
odrv0.axis0.encoder.config.mode = ENCODER_MODE_INCREMENTAL             //默认,选择编码器类型
odrv0.axis0.encoder.config.cpr = 4000                                  //默认8192,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 = 20                           //默认2,限制最大转速
odrv0.axis0.controller.config.input_mode = INPUT_MODE_VEL_RAMP         //速度爬升模式
odrv0.axis0.controller.config.vel_ramp_rate = 10                       //默认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.motor.config.pre_calibrated = True                     //设置预先校准,以后上电可以用保存的参数
odrv0.axis0.config.startup_encoder_offset_calibration = True       //编码器校准,每次上电必须
odrv0.axis0.config.startup_closed_loop_control = True
odrv0.save_configuration()
odrv0.reboot()

odrv0.axis0.controller.input_vel = 10
odrv0.axis0.controller.input_vel = 0
odrv0.axis0.requested_state = AXIS_STATE_IDLE   //退出闭环模式


1.1.2、位置模式,梯形轨迹

odrv0.erase_configuration()
odrv0.config.dc_max_positive_current = 20
odrv0.config.dc_max_negative_current = -3.0
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_GIMBAL
odrv0.axis0.motor.config.pole_pairs = 7
odrv0.axis0.motor.config.calibration_current = 2.5                        //2.5=0.3A,3=0.42A(万用表测母线电流)
odrv0.axis0.encoder.config.mode = ENCODER_MODE_INCREMENTAL              //选择编码器类型
odrv0.axis0.encoder.config.cpr = 4000                                  //默认8192,AS5047P=4000,TLE5012B=16384
odrv0.axis0.controller.config.control_mode = CONTROL_MODE_POSITION_CONTROL
odrv0.axis0.controller.config.vel_limit = 20
odrv0.axis0.controller.config.pos_gain = 10
odrv0.axis0.controller.config.vel_gain = 0.02
odrv0.axis0.controller.config.vel_integrator_gain = 1
odrv0.axis0.controller.config.input_mode = INPUT_MODE_TRAP_TRAJ   //梯形轨迹
odrv0.axis0.trap_traj.config.vel_limit = 5
odrv0.axis0.trap_traj.config.accel_limit = 10
odrv0.axis0.trap_traj.config.decel_limit = 10
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.motor.config.pre_calibrated = True                          //ABZ编码器上电不校准无法进入闭环
odrv0.axis0.config.startup_encoder_offset_calibration = True
odrv0.axis0.config.startup_closed_loop_control = True
odrv0.save_configuration()
odrv0.reboot()

odrv0.axis0.controller.input_pos = 5
odrv0.axis0.controller.input_pos = 0

1.2、5008航模电机

在这里插入图片描述

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

AS5047P_SPI接口,电源电压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 = 8                      //默认10,12V设置为8=0.6A,24V设置为10=0.4A
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_POSITION_CONTROL
odrv0.axis0.controller.config.vel_limit = 100
odrv0.axis0.controller.config.pos_gain = 20
odrv0.axis0.controller.config.vel_gain = 0.1
odrv0.axis0.controller.config.vel_integrator_gain = 1
odrv0.axis0.controller.config.input_mode = INPUT_MODE_TRAP_TRAJ      //梯形轨迹
odrv0.axis0.trap_traj.config.vel_limit = 50
odrv0.axis0.trap_traj.config.accel_limit = 10
odrv0.axis0.trap_traj.config.decel_limit = 10
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.motor.config.pre_calibrated = True                        //设置预先校准,以后上电可以用保存的参数
odrv0.axis0.config.startup_encoder_offset_calibration = True          //编码器必须校准,否则重启后不能闭环
odrv0.axis0.config.startup_closed_loop_control = True                 //上电直接进入闭环
odrv0.save_configuration()
odrv0.reboot()

odrv0.axis0.controller.input_pos = 5
odrv0.axis0.controller.input_pos = 0



(完)



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值