文章目录
- 驱动板引脚:
- 编码器的安装:
- 电机参数
- 编码器设置
- odrive控制
- 控制指令
- 设置模式
- 设置输入模式
- 其他指令
- 调PID
- 调试准则
- 先调整内环,再调整外环
- 在位置模式下调试
- 结论
使用的灯哥开源的odrive驱动板,外接编码器
驱动板引脚:
板载STM32F405RGT6
编码器的安装:
磁体距离编码器芯片1~2mm最佳;
外接编码器不支持SPI功能;
板载编码器支持SPI;
接线:
电机三相线和板子接口,mr30接口
三条线和电机三相线接起来
电机参数
电机类型,大电流的选这个
5010电机主要需要极对数以及KV值
360KV ;7对极
编码器设置
cpr,每转一圈计数多少次
odrive控制
控制指令
打开odrive:
activate python39//激活python39
odrivetool// 打开odrive
odrv0.reboot//重启
odrv0.axis0.config.can_node_id = //设置电机的id
odrv0.save_configuration()//配置完成后需要保存配置
odrv0.save_configuration()//配置完成后需要保存配置
设置模式
odrv0.axis0.controller.config.control_mode
//力矩控制
CONTROL_MODE_TORQUE_CONTROL
//速度控制
CONTROL_MODE_VELOCITY_CONTROL
//位置控制
CONTROL_MODE_POSITION_CONTROL
闭环控制
//速度模式
odrv0.axis0.controller.input_vel = [速度目标值]
//位置模式
odrv0.axis0.controller.input_pos = [位置目标值]
//位置控制1是转到1圈的位置,0.5就是半圈的位置
//力矩模式
odrv0.axis0.controller.input_torque = [位置目标值]
pid控制
//速度环增益
//速度环积分
//位置环增益
//阻尼
odrv0.axis0.controller.config.vel_gain//最大到0.06,0.07就乱了
//位置模式出现误差回到指定位置,未归位的时间越长,力会越大
odrv0.axis0.controller.config.vel_integrator_gain
odrv0.axis0.controller.config.pos_gain//位置模式到达指定位置的速度
设置输入模式
odrv0.axis0.controller.config.control_mode
//1、关闭输入
INPUT_MODE_INACTIVE
//2、直接控制
INPUT_MODE_PASSTHROUGH
//在这种输入模式下,根据所设置的控制模式control_mode来控制电机,指令包括input_pos/input_vel/input_torque, 输入指
//令后电机直接运转至目标值。
//3、速度爬升
INPUT_MODE_VEL_RAMP
//这种输入模式下,驱动器需要在速度控制模式下,并会从当前的速度值逐渐爬升/下降到输入
//到 input_vel 的目标速度值。在这种模式下,需要配置
//爬升速率
//载惯量
odrv0.axis0.controller.config.vel_ramp_rate[turn/sec]
odrv0.axis0.controller.config.inertia[Nm/(turn/s²)]
//4、梯形轨迹模式
INPUT_MODE_TRAP_TRAJ
// 这种输入模式下,驱动器需要在位置控制模
// 式下,通过 input_pos 输入目标位置值,电
// 机按照加速-匀速-减速到达设定位置,即速
// 度变化轨迹为梯形,位置变化接近曲线。
//◼ 梯形轨迹下的速度限制
//◼ 梯形轨迹下的加速度限制
//◼ 梯形轨迹下的加速度限制
odrv0.axis0.trap_traj.config.vel_limit
odrv0.axis0.trap_traj.config.accel_limit
odrv0.axis0.trap_traj.config.decel_limit
//5、力矩爬升
INPUT_MODE_TORQUE_RAMP
// 这种输入模式下,驱动器需要在力矩控制模式下,
// 并会从当前的力矩值逐渐爬升/下降到输入到
// input_tor的目标速度值。在这种模式下,需要
// 配置
// ◼ 力矩爬升速度
odrv0.axis0.controller.config.torque_ramp_rate
其他指令
//查看电压
odrv0.vbus_voltage
调PID
调试准则
先调整内环,再调整外环
先调整角度环P
1、先调速度:
vel;
调之前把位置环的p清零;
调电机的阻尼
odrv0.axis0.controller.config.vel_gain = 0.05时摩擦感强烈;
在位置模式下调试
odrive官网上面,只是调试了位置环的p,速度环的P、I;
没有负载的情况下调试好后,加上负载后再调,因为有负载的情况下是不一样的;
如果用手转电机,设置积分会使得,电机不在指定角度的时间越久,电机回位置的力越大;
位置环的p,越大,转的越快,定一个稳定的值后调试v的p和i;
速度环的p越大,转的越快,太大会超调,会抖动;
速度环的i,如果偏差一直在的话,电机的力矩会越来越大;
结论
5010电机、AS5047p传感器:
1、官方odrive只是调了位置环的P以及速度环的P、I;
先调p、再调I
2、速度模式下:
位置环的p没用;
只有速度环的p有用:
p越高阻尼越大,速度给高时会越抖,但是速度低时候就比较稳定;
p越低阻尼越小,速度低时比较抖动,但是速度高时就不怎么抖动;
3、位置模式下:
a、位置环p设置数值,给定某个位置,他才会转动:
p越大,去这个位置的速度越快;
b、速度环p决定了阻尼大小,p越大,阻尼越大,太大会超调,就有噪声;
c、速度环I决定了力矩,在没到指定位置时,他的力矩会给的越来越大,用手拧电机,一定角度后保持几秒就能明显感觉到力矩变大了;
d、能转差不多50圈,再多就会启动过流保护,会阻止电源给电机供电;