注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
Megamind的个人空间 https://home.eeworld.com.cn/space-uid-386988.html [收藏] [复制] [分享] [RSS]
日志

闭环控制

已有 1435 次阅读2012-8-19 09:25 |个人分类:PID|

这三天研究了一下PID闭环控制。想法的来源是上次找兼职被秒,所以觉得是得加强一下这方面的训练了。然后就想怎样能用尽可能的器件搭建出一个闭环系统来。后来想到一直在玩的LaunchPad,想用TA定时器产生的PWM来模拟DAC产生一个电压,经过RC滤波,然后再用ADC10采回去,根据测得的反馈电压,再去调节PWM的占空比,如果电压高于设定的值,减少占空比;如果电压低于设定值,提高占空比。这样一个闭环系统就搭建出来了。可以通过串口与电脑通信,用超级终端设定目标电压。话说滤波电路是振华做信号发生器时的实验板,偷了个懒。

程序的框架在回家前都完成了,后来由于别的事,就拖到了迷你假期结束。来后才开始调试,第一天把原来的程序运行了一下,结果出现莫名其妙的错误。试了不同的值还是不行。被折腾得精疲力竭,然后就偃旗息鼓了。后来又把谢大神的书拿来膜拜了,再深入研究一下PID算法。

第二天,调试才真正开始,因为我看到了自己的签名:想干的人永远在找方法,不想干的人永远在找理由。哥必须将其拿下。拿来示波器,从PWM波开始看,然后是滤波后的波形,才发现滤波出问题了,把方波滤成了三角波,怪不得AD采得的值是随机变化的。于是提高PWM波的频率,效果好多了,再增加滤波阶数,终于把纹波控制到20mV以内了。然后调ADC10,使它能正确测出实际电压。接下来突然发现串口不能正常工作了,原来还好好的呢。下午来后才猛然想起提高PWM频率的时候,改变SMCLK时钟频率了,于是串口问题也就顺利解决了。晚上开始调PID系数,按照书上说的,先调比例系数PID0,结果却总是在最大和最小之间徘徊。后来又调积分系数I,结果仍不对。后来干脆放弃人家和程序模板,根据自己的理解和实验数据表现出的规律,自己写,只用了一个比例调节OutPut=OutPut+P+I+D;就成功了。

第三天,昨天回去后想想,原来自己的方法不是不是比例算法,而是积分算法,因为我把比例环节的误差累加起来了,这原本是积分算法该干的事。于是今天把昨天那条山寨语句,换成正规的积分算法了。然后调节积分系数,发现只用积分就可以很快达到设定值,如果加上微分算法,速度反而更慢。因为微分是对有超调或者惯性的系统的。后来发现如果设定的值太大或太小,积分值会在有效范围之外徘徊很久才能进入有效范围。原来是积分限没有设置,后来又经过多次实验才确定了积分限。不过想起了大神的范例程序中积分限不是固定的,而是根据设定的目标值变化而变化。所以根据实验数据,计算出了本系统的积分上下限。果然逼近速度大大提高。下 1就是最后使用超级终端的调试界面。设定电压的时候,输入值是设定值×100.

1 超级终端调试界面

 

2  实物图

 

 

P.S.:在我落寞的岁月里,只有科研解脱我的孤寂。

 

发表评论 评论 (5 个评论)
回复 sun_ic 2012-8-21 02:23
V5
回复 挨紧 2012-8-25 16:07
加油!
顺带问一下,博主的PID算法的书在哪里看的?
回复 awarenessxie 2012-8-26 22:36
楼主,我发现你的上位机程序很碉堡的样子,能发一份给我吗?878111710@qq.com
回复 dsc198981 2012-8-30 11:58
awarenessxie: 楼主,我发现你的上位机程序很碉堡的样子,能发一份给我吗?878111710@qq.com
这是超级终端吧
回复 awarenessxie 2012-8-30 23:41
不是吧,有点像超级终端

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章