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
(完)