【注:本章所述的PID理解真实有效,可作为教材学习】
接下来,刘牧又举了一个烧锅炉的例子,现在需要把温度保持在38度。
假定有一个锅炉工人,他需要看着温度计调整锅炉的阀门,温度低了,他就加大阀门;温度高了,他就减小阀门。
这其实就是最原始的P调节。
但是问题来了,如果温度是30度、35度,那对应调节多大量的阀门呢?
同样现在是30度,跟目标相差8度,那么春天、夏天、秋天、冬天,调节阀门的量相同吗?如果不同,区别又在哪?
一个控制系统,影响参量很多。
刘牧说:“所以,这样一个锅炉调温系统,需要一位多年经验、且心思细腻的老师傅才能很好地调节阀门;这还只是一个简单的案例,如果更复杂呢?参量更多呢?我们不可能穷尽每一个细节;这就是PID的意义。”
“我此前说过,PID是构建输入与输出的函数关系,现在我只要把温度差输入到PID这个黑盒子里,不管是什么天气、什么季节、什么影响参数,都不管,这时候PID必然有一个控制阀门的输出值,所以PID可以适应各种系统。”
“那为什么PID就可以不考虑具体细节,只需要合适的三个参量即可,却能适应各种系统呢?”
“这就是因为世间万物都可以用比例、积分、微分来逼近,就好像数学中每一个函数都能展开为级数形态。”
高屋建瓴!周峰越听越觉得上头,听小牧牧讲课太享受。
形而上、浅入浅出。
接着,刘牧就展示了一副PID逼近目标的动图。
能够非常清晰地看到P、I、D的作用。
观看了10次,差不多10分钟之后,六名本科生都大受震撼。
刘牧解说:“P其实是能够逼近目标的关键,P太小,无法逼近目标,而P太大,会导致严重超调,所以P根据系统能够接受的最大超调量确定就行。”
“D就很有意思了,就像我们开车,想要沿着一条直线走,新手总是一会向左、一会向右,D就是到达目标后的波动,而我们需要做的是:别浪。”
配图也很有意思。
章涵没抬头,漠然问道:“有些动态性要求很高的系统,只采用PD控制,PD会有什么问题?”
这问题很考验理解深度。
“章师兄这个问题很好。”刘牧不紧不慢说,“我先说一个小故事,古时候有很吝啬的地主,为了让驴子一刻不停的干活,会在驴子嘴边放一个萝卜,驴子看到萝卜就会一直往前追,但是一直吃不到萝卜,章师兄所说的PD控制就会出现这个问题。”
哦!六名本科生一下懂了。
韩开云说:“就是始终保持一个距离,却死活达不到。”
“对的,韩师兄总结很好,这就是静差,而积分环节就是消除静差的关键,下面就来说说积分I。”
“古语有云,不积跬步无以至千里,积累的效果超乎想象,曾经老师们说过的鸡汤,每天进步一点点,1.01的365次方就能达到惊人的37.8,这就是积分的力量。在PID中,积分就是不断累积误差,把一点点小静差累积放大,从而消除静差。”
……
一个小时讲完自动控制PID。
你听懂了吗?
周峰副教授带头鼓掌,讲得太好了。
金榜啧啧也用力拍手。
沉浸在思考中的六位本科生反应过来也羞涩的认可。
窦真很激动地鼓掌,喊道:“太优秀了。”
章涵抬头看了一眼,又看回电脑屏幕,从电脑包里拿出一个小盒子,推了出去,说:“实际调参一个项目,成功了再说吧。”
电机连接着角速度传感器,角速度传感器的轴上挂着一个如时针的大箭头,大箭头上有几块不规则的配重;另外一侧,则是红外距离传感器。
输入信号是距离,转化为电压,作为目标值。
控制量则是角度传感器的位置。
控制器是小巧的Arduino Micro。
章涵把小设备通电,然后手掌放在红外测距传感器前面,随着他手掌与测距传感器的距离变化,角度传感器轴上的指针就稳稳停在对应的位置。
响应快速,且无抖动。
由于指针的不同位置设置了不规则配重块,也就是说指针的任何角度受力都差异很大。
这无疑是极为优越的自控算法程序。
刷掉了程序,留下一句话:“后天上午电赛选题了,想做自控题,先在明天晚上之前把参数和代码调试出来再说。”
说完,章涵抱着电脑,潇洒而去。
金榜心说,章师兄强是强的,就是爱装B。
六名本科生有些发憷。
短短一周半的接触,对章博士产生PTSD。
周峰说道:“刘牧,你带他们六个调试一下,金榜,你还是当助教。”
“好的,周老师。”
金榜很愉快地答应下来。
这一段程序代码其实很复杂。
刘牧思索片刻,就开始动手尝试。
先写一个完整的PID控制程序,很简单,AI端口采集距离传感器的电压作为目标;拿出三个DO端口作为电机驱动模块TB6612的控制信号。
这是常规操作。
在控制器Arduino Micro与电机之间,必须增加电机驱动模块。
因为控制器的端口输出电流很弱,只有20mA。
而电机在刚通电的一瞬间相当于短路,瞬时电流会非常大。
那么,电机驱动模块就相当于一个电流放大器。
写代码花了20分钟,调试PID参数大概30分钟。
指针总算能够随着手掌距离变化而转动起来。
只是不够顺滑,且指针有很明显的抖动现象。
章涵夹着电脑又走了进来,看了一会儿刘牧的调试过程。
他哼了一声,嗤之以鼻道:“我之前的代码是花了一周时间,反复修改优化,达到了产品级的动态性和稳定性,你这代码仅仅是实现功能,你要知道实现功能和产品级之间,有条巨大的鸿沟;不过,你一个高二学生做到功能实现,也比他们七个废柴强很多了。”
七个?金榜很不爽,为什么要带上我。
六名本科生顿时脸色一黑。
章涵不管别人看法,继续问:“你们知道这其中的难点在哪儿吗?难在哪儿都不知道,会让你们坐井观天,幼稚而不自知。”