由于双电机的PID上升曲线难以完全重合,造成左右电机速度不一致。本文为了解决该问题设计了一种方法。
主要思想是将不同速度对应的PWM占空比曲线拟合出来,减1000(总10000)占空比后作为预设值给PID,然后在预设值的基础上调左右电机的PID。这样控制的时候,左右电机在不同速度下都只需要PID控制1000的区域。具体步骤分为三步:
第一步:通过PID获取电机在不同速度下,PWM的占空比
1. 在simulink中搭建简单的PID算法,获取键盘按键指令,通过串口输出控制数据;
2. 底盘的stm32中将当前的车速通过串口上传;在通过串口获取数据,控制电机;
3. 通过设置不同的速度,在simulink中查看对应速度,PWM的占空比。最终获得数据如下表,其中左右轮速是指 100ms内,电机编码器获取的数据。
| 前进 | 左 轮速 | 右 轮速 | 左 PWM | 右 PWM | 后退 | 左 轮速 | 右 轮速 | 左 PWM | 右 PWM |
| -500 | -500 | 1295 | 1415 | 500 | 500 | -1100 | -1100 |
| -700 | -700 | 1580 | 1800 | 700 | 700 | -1150 | -1225 |
| -1000 | -1000 | 2250 | 2546 | 1000 | 1000 | -1250 | -1360 |
| -1500 | -1500 | 3200 | 3250 | 1500 | 1500 | -1700 | -1680 |
| -2000 | -2000 | 4230 | 4170 | 2000 | 2000 | -1880 | -1999 |
| -2500 | -2500 | 5180 | 5350 | 2500 | 2500 | -2300 | -2580 |
| -3000 | -3000 | 6100 | 6250 | 3000 | 3000 | -3170 | -2980 |
| -3500 | -3500 | 7000 | 7200 | 3500 | 3500 | -3914 | -3660 |
4. 为了方便,我取左右车轮的平均值,只做了两条曲线前进和后退(应该有4条);数据处理时将PWM都减了1000,这一部分的数据是用PID来控制的。
前进的曲线拟合:2.29507543e-08 1.38323405e-04 -1.656210e+00 -5.11076808e+02
后退的曲线拟合:-3.35497467e-08 -2.31317457e-06 -4.16984963e-01 1.134533e+02