一直以来,关于PID整定都在进行手动调试,例如试凑法、1/4衰减曲线法、齐格勒-尼柯尔斯整定法等;
虽然上述方法都可以完成对参数的整定,但是需要非常丰富的调试经验才能达到预期的目的。同时,当需要控制的系统过于庞大,影响系统的参数整定,根据经验的调试也会力不从心,那么关于PID整定的工作量无疑是巨大的。
因此,我们需要从系统内部出发,对系统进行建立数学模型,进行图形化的PID参数整定。
1.永磁有刷直流电机的数学建模
首先我们必须注意三个关键词,即永磁、有刷、直流;
永磁即电机内部的磁场是由永磁铁产生的,而非励磁绕组一类;
有刷即含有电刷的电机,此处主要与无刷电机控制方式区分;
直流即使电机工作的为一般直流电;
在这里,我不准备进行大量的公式推导,只提供永磁有刷电机的数学模型如下:
G
(
s
)
=
K
T
s
+
1
G(s)=\frac{K}{Ts+1}
G(s)=Ts+1K
有需要的可以从网上搜索《直流电动机传递函数测定的实验研究》等相关论文看看;
其中K,T为我们需要测量的电机相关参数;
2.电机参数K、T的求取
G
(
s
)
=
K
T
s
+
1
G(s)=\frac{K}{Ts+1}
G(s)=Ts+1K
观察此方程式,为控制系统中的一阶系统,因此可以根据一阶系统的单位阶跃特性,即:
当系统来了一个单位阶跃响应时:K为系统稳态时的输出;而T值为0.623K时的时间;
因此我们可以设计实验的方式求得参数K,T的值;
具体方法如下:
为电机通上额定电压后,测量其时间-转速的数据;例如我使用的电机为12V,那我就为电机通上12V电源,当按下一开始按键后,就使目标系统通过串口输出对应时刻的转速;
每隔20ms,传送其速度值;
printf("%d\t%0.2f\n",timeLable*20,Speed);
实验数据片段如下:
20 0.64
40 1.3
60 1.48
80 1.52
100 1.57
120 1.57
140 1.59
160 1.59
180 1.57
200 1.57
220 1.57
240 1.59
260 1.57
280 1.59
300 1.57
320 1.59
可以从代码片段中看出,系统稳定后的值在1.57~1.59间波动,那我们就使用K=1.59;
则T的值则为0.623K对应的横坐标。因此,我们将实验数据导入到Matlab中,绘制时间-速度图像,求取T值;
由图中可以看出T=30.67;
则我们电机的数学模型如下:
G
(
s
)
=
1.59
30.67
s
+
1
G(s)=\frac{1.59}{30.67s+1}
G(s)=30.67s+11.59
3.PID参数的整定
最后搭建仿真框图:
根据实际情况搭建,其实也可以使用pidtool(G(s))形式调试PID参数;
一定要选择离散PID整定,采样时间根据实际需求确定,我在这里使用的采样时间为0.1s
以上是我已经调整好的参数;
4.上机实测
MCU中我使用的始增量式PID,将调整好的PI参数下载到开发板中,运行平稳符合要求,测量数据如下:
其中期望转速15r/m
Spd:0 Pulse -- Spd: 0.00 r/m
Spd:0 Pulse -- Spd: 0.00 r/m
Spd:24 Pulse -- Spd: 1.21 r/m
Spd:40 Pulse -- Spd: 2.02 r/m
Spd:53 Pulse -- Spd: 2.68 r/m
Spd:67 Pulse -- Spd: 3.38 r/m
Spd:79 Pulse -- Spd: 3.99 r/m
Spd:90 Pulse -- Spd: 4.55 r/m
Spd:101 Pulse -- Spd: 5.10 r/m
Spd:110 Pulse -- Spd: 5.56 r/m
Spd:121 Pulse -- Spd: 6.11 r/m
Spd:130 Pulse -- Spd: 6.57 r/m
Spd:140 Pulse -- Spd: 7.07 r/m
Spd:148 Pulse -- Spd: 7.47 r/m
Spd:158 Pulse -- Spd: 7.98 r/m
Spd:165 Pulse -- Spd: 8.33 r/m
Spd:171 Pulse -- Spd: 8.64 r/m
Spd:178 Pulse -- Spd: 8.99 r/m
Spd:185 Pulse -- Spd: 9.34 r/m
Spd:191 Pulse -- Spd: 9.65 r/m
Spd:196 Pulse -- Spd: 9.90 r/m
Spd:202 Pulse -- Spd: 10.20 r/m
Spd:206 Pulse -- Spd: 10.40 r/m
Spd:212 Pulse -- Spd: 10.71 r/m
Spd:218 Pulse -- Spd: 11.01 r/m
Spd:222 Pulse -- Spd: 11.21 r/m
Spd:227 Pulse -- Spd: 11.46 r/m
Spd:232 Pulse -- Spd: 11.72 r/m
Spd:236 Pulse -- Spd: 11.92 r/m
Spd:240 Pulse -- Spd: 12.12 r/m
Spd:242 Pulse -- Spd: 12.22 r/m
Spd:247 Pulse -- Spd: 12.47 r/m
Spd:251 Pulse -- Spd: 12.68 r/m
Spd:253 Pulse -- Spd: 12.78 r/m
Spd:256 Pulse -- Spd: 12.93 r/m
Spd:260 Pulse -- Spd: 13.13 r/m
Spd:260 Pulse -- Spd: 13.13 r/m
Spd:264 Pulse -- Spd: 13.33 r/m
Spd:268 Pulse -- Spd: 13.54 r/m
Spd:269 Pulse -- Spd: 13.59 r/m
Spd:272 Pulse -- Spd: 13.74 r/m
Spd:275 Pulse -- Spd: 13.89 r/m
Spd:276 Pulse -- Spd: 13.94 r/m
Spd:277 Pulse -- Spd: 13.99 r/m
Spd:278 Pulse -- Spd: 14.04 r/m
Spd:279 Pulse -- Spd: 14.09 r/m
Spd:281 Pulse -- Spd: 14.19 r/m
Spd:285 Pulse -- Spd: 14.39 r/m
Spd:286 Pulse -- Spd: 14.44 r/m
Spd:288 Pulse -- Spd: 14.55 r/m
Spd:290 Pulse -- Spd: 14.65 r/m
Spd:292 Pulse -- Spd: 14.75 r/m
Spd:292 Pulse -- Spd: 14.75 r/m
Spd:293 Pulse -- Spd: 14.80 r/m
Spd:294 Pulse -- Spd: 14.85 r/m
Spd:294 Pulse -- Spd: 14.85 r/m
Spd:294 Pulse -- Spd: 14.85 r/m
Spd:294 Pulse -- Spd: 14.85 r/m
Spd:295 Pulse -- Spd: 14.90 r/m
Spd:293 Pulse -- Spd: 14.80 r/m
Spd:295 Pulse -- Spd: 14.90 r/m
Spd:294 Pulse -- Spd: 14.85 r/m
Spd:295 Pulse -- Spd: 14.90 r/m
Spd:295 Pulse -- Spd: 14.90 r/m
Spd:294 Pulse -- Spd: 14.85 r/m
Spd:294 Pulse -- Spd: 14.85 r/m
Spd:295 Pulse -- Spd: 14.90 r/m
Spd:295 Pulse -- Spd: 14.90 r/m
Spd:294 Pulse -- Spd: 14.85 r/m
Spd:295 Pulse -- Spd: 14.90 r/m
Spd:294 Pulse -- Spd: 14.85 r/m
Spd:295 Pulse -- Spd: 14.90 r/m
Spd:294 Pulse -- Spd: 14.85 r/m
Spd:295 Pulse -- Spd: 14.90 r/m
Spd:295 Pulse -- Spd: 14.90 r/m
Spd:294 Pulse -- Spd: 14.85 r/m
Spd:295 Pulse -- Spd: 14.90 r/m
Spd:294 Pulse -- Spd: 14.85 r/m
Spd:295 Pulse -- Spd: 14.90 r/m