龙空技术网

PID算法及其C语言实现

陌上的零 15677

前言:

今天我们对“pid的c语言程序”大约比较关切,咱们都想要分析一些“pid的c语言程序”的相关资讯。那么小编也在网上汇集了一些对于“pid的c语言程序””的相关文章,希望姐妹们能喜欢,我们一起来了解一下吧!

调节器

在我们的日常生活中,总有这样的例子,我们在走路的时候,基本上是不能闭着眼睛的,即使视力出现故障,也要有导盲犬、探路棍、盲道等措施弥补,所有这些措施其实都是提供了一个叫反馈环节的环节。我们的大脑收集到反馈信息以后,一定会进行负反馈处理。走路的时候,眼睛看路,大脑会告诉你一个信号:偏左了,偏右了,然后让你脑子进行修正。信号发到你脑子里面后,你脑子里要对反馈信号与目标信号相减,然后进行修正。偏左了就向右点,偏右了就向左点。对这个相减的信号就是称之为负反馈。如果相加就是正反馈了,那样走着走着你就会掉进坑里去了。是不是呢。这其实就是一个抽象的闭环控制系统。

我们知道,光定性不定量还是没办法控制的为了保证你不掉进坑里,那仅仅是给你提供了怎样走路的方向。具体每一步走多大,向左向右偏多少,还要进行具体的计算。

要弄清楚怎样定量之前, 我们先要理解一个最基本的概念: 调节器。 调节器是干什么的?调节器就是人的大脑,就是一个调节系统的核心。任何一个控制系统,只要具备了带有 PID的大脑或者说是控制方法,那它就是自动调节系统。如果没有带 PID 的控制方法呢?那可不一定不是自动调节系统, 因为后来又涌现各种控制思想。 比如时下研究风头最劲的模糊控制,以前还有神经网络控制等等;后来又产生了具有自适应能力的调节系统,说白了也就是自动整定参数的能力;还有把模糊控制,或者神经网络控制与 PID 结合在一起应用的综合控制等等。可以这样说:凡是具备控制思想和调节方法的系统都叫自动调节系统。而涉及最核心的调节方法的东西叫做调节器。

基本的调节器具有两个输入量:被调量和设定值。被调量就是反映被调节对象的实际波动的量值。比如水位温度压力等等;设定值顾名思义,是人们设定的值,也就是人们期望被调量需要达到的值。被调量肯定是经常变化的。而设定值可以是固定的,也可以是经常变化的。基本的调节器至少有一个模拟量输出。大脑根据情况运算之后要发布命令了,它发布一个精确的命令让执行机构去按照它的要求动作。

再说PID

在PID调节中,比例作用是依据偏差的大小来动作的,在调节阀系统中起着稳定被调参数的作用;积分作用是依据偏差是否存在来动作的,在系统中起着消除余差的作用;微分作用是依据偏差变化速度来动作的,在系统中起着超前调节的作用。

比例调节规律的作用

偏差一出现就能及时调节,但调节作用同偏差量是成比例的,调节终了会产生静态偏差(简称静差)。Kp增大有利于减小静差,但Kp增加太大,将导致系统超调增加,稳定性变坏,甚至使系统产生振荡。

积分调节规律的作用

只要有偏差,就有调节作用,直到偏差为零,因此它能消除偏差。但积分作用过强,又会使调节作用过强,引起被调参数超调,甚至产生振荡。

微分调节规律的作用

根据偏差的变化速度进行调节,因此能提前给出较大的调节作用,大大减小了系统的动态偏差量及调节过程时间。但微分作用过强,又会使调节作用过强,引起系统超调和振荡。(另一种表达方式:微分系数的作用是加快系统的响应,对偏差量的变化做出响应,按偏差量趋向进行控制,把偏差消灭在萌芽状态之中,使超调小,稳定性增加,但对扰动的抑制能力减弱。)

位置式PID的C语言实现

其实说那些理论,太晦涩了。随便一本控制类的书籍都会有详细的讲解。我们更多的是关注怎么去使用这个理论来实际的去控制一些东西,比如我们要去做有个自平衡的车,做一个巡线的机器人,在或者一个自调节的温控系统,等等demo。我们首先想到的控制思想肯定是PID,因为它简单好用,并且还能满足这些功能。

直接上代码了:

1.定义一个pid变量的结构体:

2.初始化变量

3.位置式pid算法

4.主函数,给一个设定值

好了,我们来看一下完整的代码:

看一下运行的结果:

整定了100次,基本上稳定在了我们的设定值250这,我们在改一下设定值试试,我们设定设定值为200,我们再来看看运行的效果:

是不是也稳定在了设定值那。其实从这个数据中我们能看到很多的规律,就不一一说了。在实际的应用中可以直接套用这个模板在定制开发就好了。

其实,PID的理论和应用都是很简单的,我们只需要会用就好了,理论也不需要太注重细节。还有增量式pid,还有微分先行等等,也不一一介绍了,贪多也没有,我们其实只需要能熟练的使用一种pid的实现形式基本上就差不多了。简单的控制基本上就没有啥问题了。对于pid难就难在对三个参数的整定,这个是不容易的,对于整定的方法也有很多,但是重要的是实际的经验了。这个确实有些繁琐,但是还有方法的。下一次我们可以在来讲讲参数整定的方法。好了,今天就说这个多了。

更多的内容请关注头条号:小5嵌入式。

标签: #pid的c语言程序