PID算法软件编写详解(重点推荐)
- 格式:pdf
- 大小:90.07 KB
- 文档页数:3
P I D控制器开发笔记之一:P I D算法原理及基本实现The Standardization Office was revised on the afternoon of December 13, 2020在自动控制中,PID及其衍生出来的算法是应用最广的算法之一。
各个做自动控制的厂家基本都有会实现这一经典算法。
我们在做项目的过程中,也时常会遇到类似的需求,所以就想实现这一算法以适用于更多的应用场景。
1、P ID算法基本原理PID算法是控制行业最经典、最简单、而又最能体现反馈控制思想的算法。
对于一般的研发人员来说,设计和实现PID算法是完成自动控制系统的基本要求。
这一算法虽然简单,但真正要实现好,却也需要下一定功夫。
首先我们从PID算法最基本的原理开始分析和设计这一经典命题。
PID算法的执行流程是非常简单的,即利用反馈来检测偏差信号,并通过偏差信号来控制被控量。
而控制器本身就是比例、积分、微分三个环节的加和。
其功能框图如下:根据上图我们考虑在某个特定的时刻t,此时输入量为rin(t),输出量为rout(t),于是偏差就可计算为err(t)=rin(t)-rout(t)。
于是PID的基本控制规律就可以表示为如下公式:其中Kp为比例带,T I为积分时间,T D为微分时间。
PID控制的基本原理就是如此。
2、P ID算法的离散化上一节简单介绍了PID算法的基本原理,但要在计算机上实现就必须将其离散化,接下来我们就说一说PID算法的离散化问题。
在实现离散化之前,我们需要对比例、积分、微分的特性做一个简单的说明。
比例就是用来对系统的偏差进行反应,所以只要存在偏差,比例就会起作用。
积分主要是用来消除静差,所谓静差就是指系统稳定后输入输出之间依然存在的差值,而积分就是通过偏差的累计来抵消系统的静差。
而微分则是对偏差的变化趋势做出反应,根据偏差的变化趋势实现超前调节,提高反应速度。
在实现离散前,我们假设系统采样周期为T。
PID算法通俗讲解PID算法是一种用于反馈控制系统的自动控制算法,它能根据系统当前的反馈信号与设定值之间的差异,来调整控制系统的输出信号,使得系统能够更好地接近设定值。
PID算法是目前使用最广泛的自动控制算法之一,它在工业生产、自动驾驶、机器人等领域得到了广泛的应用。
比例项(Proportional Control)比例项是PID算法最基本的一个部分。
它根据当前的偏差(设定值与实际值之差)的大小,决定调整输出信号的幅度。
如果偏差很大,那么比例项就会增加输出信号的幅度,使得系统能够更快地接近设定值。
但是如果偏差过大,比例项会增加的太大,可能导致系统出现超调,即超过设定值。
因此,比例项不能独立作用,还需要结合其他参数来实现最优的控制效果。
积分项(Integral Control)积分项用来消除系统的稳定偏差。
如果比例项无法完全消除偏差,那么积分项会根据偏差的时间积累情况,逐渐适应并调整输出信号的幅度。
如果偏差时间持续较长,积分项会逐渐增加输出信号的幅度,使得系统能够更好地靠近设定值。
但是如果偏差时间过长,积分项可能会造成系统超调或者震荡的情况,因此也需要其他参数的协同作用。
微分项(Derivative Control)微分项用来预测系统的未来变化趋势。
它通过观察偏差随时间的变化率,来调整输出信号的变化速度。
如果偏差随时间的变化率很大,那么微分项会增大输出信号的变化速度,以期快速地接近设定值。
但是如果偏差随时间的变化率波动很大,微分项可能会造成输出信号的剧烈变化,导致系统不稳定。
因此,微分项的作用也需要与其他参数相互协调。
比例、积分和微分项在PID算法中起着不同的作用,它们相互协同工作,通过不断地监测系统的反馈信号与设定值之间的差异,并调整输出信号的幅度和变化速度,来实现系统的稳定控制。
1.设置比例项、积分项和微分项的参数值。
这些参数值的选择会直接影响系统的控制效果,需要根据实际情况进行调整。
2.读取当前的反馈信号和设定值,计算偏差值。
PID算法软件编写详解PID(Proportional, Integral, Derivative)控制算法是一种经典的反馈控制算法,在工业控制中广泛应用。
PID控制器根据实际系统输出和理想的输出之间的差异,通过对比例、积分和微分三个部分的控制,来调整系统输入,使得实际输出逐渐接近理想输出。
下面我们详细介绍如何编写一个PID算法的软件。
1.初始化参数这里我们可以通过调试的方式来确定这些参数的初值。
通常的做法是先将比例系数和微分系数设为0,然后增大积分系数,直到系统稳定;接着逐渐增大比例系数和微分系数,直到系统能够快速、稳定地响应变化。
2.读取输入信号3.计算误差值将读取到的实际输出信号与理想输出信号进行比较,得到误差值(error),通过error来评估系统的偏差。
4.计算比例部分将误差值乘以比例系数Kp,得到比例部分的输出值(P)。
P = Kp * error5.计算积分部分将误差值累积起来,并乘以积分系数Ki,得到积分部分的输出值(I)。
I = Ki * (error + previous_error)6.计算微分部分将误差值与上一次的误差值(previous_error)之差乘以微分系数Kd,得到微分部分的输出值(D)。
D = Kd * (error - previous_error)7.计算PID输出PID输出等于比例部分、积分部分和微分部分之和。
output = P + I + D8.更新参数和误差值将当前的误差值保存为上一次的误差值,供下一次迭代使用。
同时,根据实际系统的响应情况,可以调整比例、积分和微分系数来提高控制系统的性能。
9.控制系统输入使用PID输出来调整控制系统的输入信号,进而改变系统的行为,使得实际输出逐渐接近理想输出。
需要注意的是,PID算法的性能很大程度上取决于参数的调整。
过大或过小的参数都可能导致系统无法正常工作。
因此,在实际应用中,需要根据具体的系统和控制需求进行参数的调整和优化。
PID控制算法介绍与实现一、PID的数学模型在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法,如果能够熟练掌握PID算法的设计与实现过程,对于一般的研发人员来讲,应该是足够应对一般研发问题了,而难能可贵的是,在很多控制算法当中,PID控制算法又是最简单,最能体现反馈思想的控制算法,可谓经典中的经典。
经典的未必是复杂的,经典的东西常常是简单的,而且是最简单的。
PID算法的一般形式:PID算法通过误差信号控制被控量,而控制器本身就是比例、积分、微分三个环节的加和。
这里我们规定(在t时刻):1.输入量为i(t)2.输出量为o(t)3.偏差量为err(t)=i(t)− o(t)u(t)=k p(err(t)+1T i.∫err(t)d t+T D d err(t)d t)二、PID算法的数字离散化假设采样间隔为T,则在第K个T时刻:偏差err(k)=i(k) - o(k)积分环节用加和的形式表示,即err(k) + err(k+1) + …微分环节用斜率的形式表示,即[err(k)- err(k−1)]/T; PID算法离散化后的式子:u(k)=k p(err(k)+TT i.∑err(j)+T DT(err(k)−err(k−1)))则u(k)可表示成为:u(k)=k p(err(k)+k i∑err(j)+k d(err(k)−err(k−1)))其中式中:比例参数k p:控制器的输出与输入偏差值成比例关系。
系统一旦出现偏差,比例调节立即产生调节作用以减少偏差。
特点:过程简单快速、比例作用大,可以加快调节,减小误差;但是使系统稳定性下降,造成不稳定,有余差。
积分参数k i:积分环节主要是用来消除静差,所谓静差,就是系统稳定后输出值和设定值之间的差值,积分环节实际上就是偏差累计的过程,把累计的误差加到原有系统上以抵消系统造成的静差。
微分参数k d:微分信号则反应了偏差信号的变化规律,或者说是变化趋势,根据偏差信号的变化趋势来进行超前调节,从而增加了系统的快速性。
PID算法的通俗讲解及调节口诀首先,让我们来了解PID算法的原理。
PID算法是通过不断地调整控制量,使得反馈量与设定值尽可能接近,从而实现控制系统的稳定。
PID算法的名称来自于三个基本控制参数,即比例(proportional)、积分(integral)和微分(derivative)。
比例项是根据反馈量与设定值的差异来调整控制量的大小。
如果两者之间的差异很大,控制量会相应地增大或减小。
该项主要用于快速响应系统的初始变化。
积分项通过计算反馈量与设定值的累计差异,以调整控制量。
如果累计差异较大,控制量会相应地增加或减小,以减小系统的误差。
该项主要用于长期的稳态控制。
微分项是根据反馈量变化的速度来调整控制量。
如果反馈量变化速度很快,控制量会相应地增加或减小,以避免系统过冲或振荡。
该项主要用于快速响应系统的变化。
接下来,让我们来看看如何调节PID参数。
PID算法的调节是一个经验性的过程,需要根据实际应用进行调试。
这里提供一个常用的调节口诀:平稳、灵敏、迅速。
首先是平稳。
在系统刚开始运行时,应该降低比例参数和积分参数的值,这样可以避免系统过冲和振荡。
通过逐步提高这两个参数的值,可以逐渐将系统稳定在设定值附近。
其次是灵敏。
在系统达到稳态后,应该逐步提高比例参数的值,以使系统对外部变化更加敏感。
这样系统就能更快地响应外部变化,并尽快调整到设定值。
最后是迅速。
一旦系统的响应速度满足要求,就可以逐步增加微分参数的值。
微分参数主要用于抑制系统的振荡和过冲,但过高的微分参数值可能会导致系统不稳定。
因此,需要谨慎调整微分参数的值。
总结一下,PID算法是通过比例、积分和微分三个控制参数的调整,使得系统稳定,并能够快速响应外部变化。
调节PID参数需要遵循平稳、灵敏、迅速的原则,根据实际应用进行调试。
希望这篇文章能够对你理解PID算法和调节参数有所帮助。
在自动控制中,PID及其衍生出来的算法是应用最广的算法之一。
各个做自动控制的厂家基本都有会实现这一经典算法。
我们在做项目的过程中,也时常会遇到类似的需求,所以就想实现这一算法以适用于更多的应用场景。
1、P ID算法基本原理PID算法是控制行业最经典、最简单、而又最能体现反馈控制思想的算法。
对于一般的研发人员来说,设计和实现PID算法是完成自动控制系统的基本要求。
这一算法虽然简单,但真正要实现好,却也需要下一定功夫。
首先我们从PID算法最基本的原理开始分析和设计这一经典命题。
PID算法的执行流程是非常简单的,即利用反馈来检测偏差信号,并通过偏差信号来控制被控量。
而控制器本身就是比例、积分、微分三个环节的加和。
其功能框图如下:根据上图我们考虑在某个特定的时刻t,此时输入量为rin(t),输出量为rout(t),于是偏差就可计算为err(t)=rin(t)-rout(t)。
于是PID的基本控制规律就可以表示为如下公式:其中Kp为比例带,T I为积分时间,T D为微分时间。
PID控制的基本原理就是如此。
2、P ID算法的离散化上一节简单介绍了PID算法的基本原理,但要在计算机上实现就必须将其离散化,接下来我们就说一说PID算法的离散化问题。
在实现离散化之前,我们需要对比例、积分、微分的特性做一个简单的说明。
比例就是用来对系统的偏差进行反应,所以只要存在偏差,比例就会起作用。
积分主要是用来消除静差,所谓静差就是指系统稳定后输入输出之间依然存在的差值,而积分就是通过偏差的累计来抵消系统的静差。
而微分则是对偏差的变化趋势做出反应,根据偏差的变化趋势实现超前调节,提高反应速度。
在实现离散前,我们假设系统采样周期为T。
假设我们检查第K个采样周期,很显然系统进行第K次采样。
此时的偏差可以表示为err(K)=rin(K)-rout(K),那么积分就可以表示为:err(K)+err(K+1)+┈┈,而微分就可以表示为:(err(K)- err(K-1))/T。
pid温度控制算法程序编写PID(比例-积分-微分)控制算法是一种常用的控制系统算法,用于调节控制系统的输出以使其接近预期的设定点。
PID控制算法基于当前误差的比例、积分和微分,通过这三个部分的组合来调节控制系统的输出。
下面我将从编写PID控制算法的三个部分来进行解释。
首先是比例部分(P),它根据当前误差的大小来调节控制系统的输出。
比例控制的作用是使输出与误差成正比,即误差越大,输出调节越大。
比例部分的数学表达式为P = Kp e(t),其中P为比例控制输出,Kp为比例增益,e(t)为当前误差。
在编写PID控制算法的程序时,需要根据实际系统的特性来选择合适的比例增益Kp,并将其与当前误差相乘得到比例部分的输出。
其次是积分部分(I),它用于消除系统存在的静态误差。
积分控制的作用是累积误差并将其作用于控制系统的输出,以消除系统的稳态误差。
积分部分的数学表达式为I = Ki ∫e(t)dt,其中I 为积分控制输出,Ki为积分增益,∫e(t)dt为误差的累积。
在程序编写中,需要对误差进行积分运算,并乘以积分增益Ki得到积分部分的输出。
最后是微分部分(D),它用于预测误差的变化趋势并相应地调节控制系统的输出。
微分控制的作用是根据误差变化的速度来调节输出,以减小系统的超调和震荡。
微分部分的数学表达式为D = Kd de(t)/dt,其中D为微分控制输出,Kd为微分增益,de(t)/dt为误差的变化率。
在程序编写中,需要对误差进行微分运算,并乘以微分增益Kd得到微分部分的输出。
综合以上三个部分,PID控制算法的输出为PID = P + I + D,将比例、积分和微分部分的输出相加得到最终的控制输出。
在编写PID控制算法的程序时,需要根据实际系统的特性来选择合适的比例增益Kp、积分增益Ki和微分增益Kd,并将其与当前误差、误差的累积和误差的变化率相结合得到最终的控制输出。
总之,编写PID温度控制算法的程序需要考虑比例、积分和微分三个部分,并根据实际系统的特性选择合适的增益参数,将它们结合起来得到最终的控制输出。
pid控制原理及编程方法PID控制是一种常用的控制算法,可以根据给定的目标值和实际值,通过不断调整输出值,使得实际值尽可能接近目标值。
PID控制的原理可以通过以下几个步骤来理解和实现。
1. 比例控制(P控制):根据目标值和实际值的偏差,乘以一个比例增益系数Kp得到控制量的变化量,作为输出。
控制量的变化量 = Kp * (目标值 - 实际值)2. 积分控制(I控制):将偏差的累积值乘以一个积分增益系数Ki得到控制量的变化量,作为输出。
这个步骤主要是为了解决系统存在的偏差问题。
控制量的变化量 += Ki * (目标值 - 实际值)* Δt3. 微分控制(D控制):根据偏差的变化率乘以一个微分增益系数Kd得到控制量的变化量,作为输出。
这个步骤主要是为了解决系统存在的过渡问题。
控制量的变化量 += Kd * (目标值变化率 - 实际值变化率) / Δt以上三个步骤得到的控制量的变化量之和即为最终的输出。
在编程实现PID控制时,可以按照以下步骤进行:1. 定义并初始化相关变量,包括比例增益系数Kp、积分增益系数Ki、微分增益系数Kd、目标值、实际值、偏差、偏差的累积值、上次偏差等。
2. 循环执行以下操作:a. 更新实际值。
b. 计算偏差(目标值 - 实际值)。
c. 计算控制量的变化量,包括比例控制量、积分控制量和微分控制量。
d. 更新偏差的累积值。
e. 计算最终输出值。
f. 控制执行相应操作(根据最终输出值控制系统)。
g. 等待一定时间间隔。
3. 重复步骤2直至达到控制目标。
需要注意的是,PID控制算法需要根据具体的应用场景,仔细选择合适的增益系数,以达到良好的控制效果。
PID算法完全讲解PID控制算法是一种常用的自动控制算法,适用于多种工业自动化领域。
PID算法的主要作用是通过对目标系统的反馈信号进行连续测量和调整,使系统的输出趋向于预期的目标值。
PID算法由比例控制、积分控制和微分控制三部分组成。
比例控制是根据误差的大小调整输出值,积分控制是根据误差的累计情况进行输出调整,微分控制则是根据误差的变化速度进行输出修正。
这三个参数相互配合,通过不断调节,使系统的输出逐渐趋近目标值。
首先,我们来看看比例控制。
比例控制根据目标值与实际值之间的误差来调节系统的输出值。
调节的思路是,误差越大,则输出值的调节越大。
通过比例参数Kp的调整,可以使误差和输出之间的关系更加精确。
若Kp过大,则系统的响应速度变快,但会引起超调现象;若Kp过小,则系统的响应速度较慢。
接下来是积分控制。
积分控制主要是通过对误差的累计进行调节,来消除系统的稳态误差。
稳态误差指系统在无干扰的情况下,达到了一些稳定的状态,但与目标值存在差距。
积分参数Ki的调节可以影响到控制系统的灵敏度,过大的Ki会导致系统的超调过大,过小则会使系统的响应时间变长。
最后是微分控制。
微分控制主要是通过对误差变化率的监控,来调节系统输出值的变化速度。
若误差变化率较大,则微分作用会加大,以减缓输出值的变化速度。
微分参数Kd的调整可以改变系统的阻尼特性,过大的Kd会导致系统的反应迟缓,过小则会导致系统的超调量增大。
在使用PID算法时,需要根据具体的应用场景进行参数的调整。
一般可以先将三个参数设置为较小的初始值,然后根据实际情况和实验结果逐步调整参数,使系统的响应速度和稳定性达到最优。
除了上述的基本PID算法,还有一些改进的方法,如增量式PID控制算法、鲁棒PID控制算法等,用于改善PID控制算法的性能。
综上所述,PID算法是一种基本的自动控制算法,通过对比例、积分和微分三个部分参数的调整,可以实现对目标系统的精确控制。
通过合理地调整PID参数,可以使系统的动态特性和稳态特性达到最优。
新手教新手之PID算法PID控制算法是一种常用的控制算法,用于自动调节控制系统的输出,使其尽可能接近给定的目标值。
PID算法的三个参数分别是比例增益(Proportional Gain)、积分时间(Integral Time)和微分时间(Derivative Time),它们通过调节来控制系统的输出。
首先,来看一下比例增益(KP),它是用于使系统的输出能够按照比例地改变。
当系统的输出偏离目标值时,比例增益会根据偏离的程度来调节系统的输出。
比例增益越大,系统的输出变化越快,但是过大的比例增益可能会导致系统的不稳定。
其次,积分时间(TI)用于防止系统的输出超调,即超出目标值后再回归到目标值。
积分时间会根据偏差的累积量来调节系统的输出。
积分项可以理解为系统的记忆,它会记住过去的偏差,并在系统的输出与目标值之间建立一个“积分差”。
积分时间越大,系统的输出回归目标值的速度越快,但是过大的积分时间可能会导致系统的震荡。
最后,微分时间(TD)用于减小系统输出的震荡。
微分时间会根据偏差的变化速率来调节系统的输出。
微分项可以理解为系统的预测,它根据偏差的变化情况来预测系统的输出。
微分时间越大,系统的输出变化越平稳,但是过大的微分时间可能会导致系统的响应过慢。
在实际的控制系统中,我们通常需要根据系统的特点来选择合适的PID参数。
一种常用的方法是通过试错法来调节PID参数,即将比例增益、积分时间和微分时间依次调整,观察系统的输出情况,直到系统能够以稳定的速度接近目标值为止。
这个过程可能会需要多次尝试和调整,但是通过不断的实验和调节,我们最终能够找到合适的PID参数。
除了试错法,还有一些优化算法可以用来自动调节PID参数,比如遗传算法和模糊控制等。
这些算法能够根据系统的特点和性能指标来自动调节PID参数,从而使系统的响应速度和稳定性更好。
这种自动调节的方法通常适用于复杂的控制系统,可以大大提高系统的性能和效率。
总结一下,PID控制算法是一种常用的控制算法,通过调节比例增益、积分时间和微分时间来控制系统的输出。
正文开始:这篇文章分为三个部分:•PID原理普与•常用四轴的两种PID算法讲解(单环PID、串级PID)•如何做到垂直起飞、四轴飞行时为何会飘、如何做到脱控?PID原理普与1、对自动控制系统的基本要求:稳、准、快:稳定性(P和I降低系统稳定性,D提高系统稳定性):在平衡状态下,系统受到某个干扰后,经过一段时间其被控量可以达到某一稳定状态;准确性(P和I提高稳态精度,D无作用):系统处于稳态时,其稳态误差;快速性(P和D提高响应速度,I降低响应速度):系统对动态响应的要求。
一般由过渡时间的长短来衡量。
2、稳定性:当系统处于平衡状态时,受到某一干扰作用后,如果系统输出能够恢复到原来的稳态值,那么系统就是稳定的;否则,系统不稳定。
3、动态特性(暂态特性,由于系统惯性引起):系统突加给定量(或者负载突然变化)时,其系统输出的动态响应曲线。
延迟时间、上升时间、峰值时间、调节时间、超调量和振荡次数。
通常:上升时间和峰值时间用来评价系统的响应速度;超调量用来评价系统的阻尼程度;调节时间同时反应响应速度和阻尼程度;4、稳态特性:在参考信号输出下,经过无穷时间,其系统输出与参考信号的误差。
影响因素:系统结构、参数和输入量的形式等5、比例(P)控制规律:具有P控制的系统,其稳态误差可通过P控制器的增益Kp来调整:Kp越大,稳态误差越小;反之,稳态误差越大。
但是Kp越大,其系统的稳定性会降低。
由上式可知,控制器的输出m(t)与输入误差信号e(t)成比例关系,偏差减小的速度取决于比例系数Kp:Kp越大,偏差减小的越快,但是很容易引起振荡(尤其是在前向通道中存在较大的时滞环节时);Kp减小,发生振荡的可能性小,但是调节速度变慢。
单纯的P控制无法消除稳态误差,所以必须要引入积分I控制。
原因:(R为参考输入信号,Kv为开环增益)当参考输入信号R不为0时,其稳态误差只能趋近于0,不能等于0。
因为开环增益Kv不为0。
6 比例微分(PD)控制规律:可以反应输入信号的变化趋势,具有某种预见性,可为系统引进一个有效的早期修正信号,以增加系统的阻尼程度,而从提高系统的稳定性。
PID算法解析范文PID(比例、积分、微分)算法是一种常用的控制算法,常用于工业控制、自动化控制等领域。
它通过比较实际输出值与设定目标值的差别,调整输入信号,达到控制系统的稳定性、快速响应和高精度的控制效果。
PID算法的基本原理是:通过分析实际输出值与目标值之间的误差(偏差),按照比例、积分和微分三种方式调整输入信号。
其中比例控制按照偏差的大小直接调整输入信号,积分控制按照偏差的累计量调整输入信号,微分控制按照偏差的变化率调整输入信号。
三种控制模式的比重可以通过调整各自的系数来控制。
比例控制是最基本的控制模式,按照比例系数Kp将偏差与输出的乘积作为控制信号。
比例控制具有快速响应、让控制器的控制力有一个起始点的作用,但常常出现超调或震荡现象。
积分控制则是通过将偏差累计,按照积分系数Ki调整输入信号。
积分控制可以消除静差,提高稳定性,但容易引起超调、震荡等问题。
微分控制根据偏差的变化率来调整输入信号,减小纠正力。
通过微分系数Kd,使控制器更加稳定、精确。
微分控制可以迅速响应快速变化的控制量,并抑制超调,但容易受到噪声干扰。
PID算法是通过将比例、积分和微分三种控制模式加权组合,综合利用它们的优势,以达到最佳的控制效果。
PID算法的输出是一个调整信号,用于调整控制目标或控制参数。
当输出值与设定目标值接近时,调整信号接近于零,系统趋于稳定。
PID算法的调优是非常重要的,对于不同的系统、不同的控制要求,参数的选择有很大的差异。
常见的调优方法包括试错法、经验法、优化算法等。
试错法是最常用的方法,通过手动调整参数,并观察系统响应特性,不断调整参数以达到最佳控制效果。
经验法则是以经验为基础,根据系统特点和实验经验来选择参数。
优化算法则是利用数学优化方法,通过建立数学模型,自动寻找最佳参数组合。
PID算法的广泛应用使其成为工业控制领域的核心算法。
它具有较为简单的原理和实现方式,在实际应用中反应迅速、稳定性强,容易理解和调试。
PID算法
这个是PID公式:
U(k+1) = U(k) + ( KP*E(k) - KI*E(k-1) + KD*E(k-2) )
对你的系统而言,U(k)就是当前占空比。
我这里先假定你的占空比对应定时器寄存器设置范围是0-65535.同时假定定时器设置为0的时候,
占空比输出为0%,全部是低电平,完全不加热。
65535的时候,占空比输出100%,全速加热。
E(k)是当前温度和设定温度的误差值
E(k-1)是上次计算时的误差值
E(k-2)是上上次计算时的误差值
由于KP,KI,KD三个系数现在都不知道。
需要整定,有自动整定,也有手动整定。
我们先采取手动整定的方案。
我们现在可以知道温度相差40℃,显然,需要比较快速的加热。
水温在正常系统使用的时候,显然是0-100℃的。
而你们这里需要目标温度是30-60℃,故最大加热的差值可以认为是60-0 = 60。
(假定不是冰,是水开始加热)。
我们可以认为,在需要最大加热差值的时候,仅用比例控制应当是开启全速加热。
所以我们可以得到一个KP的估计值。
好,现在假定设置需要温度是60℃,而当前温度是20℃。
那么可以知道
第一次
U(k) = 0 ---最开始是没有占空比输出的。
所以是占空比是0
E(k) = 60-20 = 40 ---第一次的误差
E(k-1) = 0 ---还没有上次,所以初始化为0
E(k-2) = 0 ---还没有上上次,所以初始化为0
由于KP假定是1000,所以
U(k+1) = 40*1000 = 40000
所以,现在就可以按照占空比40000来加热了。
由于热系统是一个缓慢变化的系统,所以,加热需要一段时间才可以看到效果,假设采用固定间隔时间来设计。
这里取5秒。
5秒过后,假定温度上升了5℃,当前温度为25℃。
则计算第二次占空比过程。
第二次
U(k) = 40000
E(k) = 60-25 = 35
E(k-1) = 40
E(k-2) = 0
U(k+1) = 40000 + 35*1000 - 40*800 + 0 = 43000 (加热加速了)
又过了5秒,假定温度上升了6℃。
当前温度为29℃
第三次
U(k) = 43000
E(k) = 60-31 = 29
E(k-1) = 35
E(k-2) = 40
U(k+1) = 43000 + 29*1000 - 35*800 + 40*300 = 56000 (2个周期以后还未达到指定温度,加热继续加速)
继续计算第四次,第五次,第N次即可。
显然,要一直到出现超调,才会出现加热速度放慢甚至不加热。
若不允许超调,则需要增加一些门限控制。
那就不在标准的PID讨论范围以内了。
以上是算法部分。
以下来讨论整定部分。
看系数是否合理,需要通过实验观察。
关于系数的整定,有一些工程的方法。
你可以对自己的系统来摸索摸索。
整定的时候,先用整定比例系数。
先不给积分,微分系数赋值,然后看加热速度有多快。
这个快慢就主要看的是几个整定周期达到目标温度。
先不考虑超调的问题。
所以,你需要先对整个系统做实验,先看全速加热需要多久才可以把温度由0℃加热到60℃。
全速加热把温度从0℃加热到60℃所需要的时间设置为T,那么我们的整定周期就可以根据T来设置了。
假设整定周期为T/10。
(事实上,整定周期还可以根据偏差值来做动态调整,显然温度越接近目标值,整定周期就需要越短,非标PID不在继续深入,仅仅做一个简单提示)
然后以此来设置不同的KP比例系数,看KP设置为多少,可以接近10个整定周期达到同等加热速度,这样得到的KP就是一个比较合理的KP了。
然后再来看KI的整定,看KI设置成多少,可以让超调大约在根号2左右,也就是说最大只有超调41%,这样得到的KI就是比较合理的。
当然,如果系统温度不允许超调41%,那就需要修改KI来实现了。
最后来整定KD,看KD设置成多少,可以让最终稳定温度和设置温度的偏差达到要求,比如偏差在0.5℃以内。
这个就看你的需求了。
故,你的代码需要记录整定的时候,PID算法运行的次数,以及每次整定的时候所得到的温度偏差。
通过串口发送出来做记录。
根据这些记录来选取合适的KP,KI,KD。
以上介绍了关于PID算法和整定的方案。
总的思路应该是比较清晰的,实际应用的时候,需要根据自己的需求多做做修改。
4楼的公式U(k+1) = U(k) + ( KP*E(k) - KI*E(k-1) + KD*E(k-2) )有点问题,PID公式是U(k) = U(k-1) + {KP*[E(k)-E(k-1)] + KI*E(k) + KD*[E(k)+E(k-2)-2*E(k-1)]}整理一下是U(k) = U(k-1)+aE(k)-bE(k-1)+cE(k-2),其中,a=KP+KI+KD ,b=KP+2KD,c=KD;大家发现和4楼的公式差不多,有木有。
调整a,b,c值也就是调整KP,KI,KD值,但还是不要混为一谈,毕竟KP,KI,KD通常都是分别代表比例项,积分项,微分项系数。
后面整定的思路是根据KP,KI,KD 的意义来整定的,而不是a,b,c,这也是不要混淆的原因。
我把 PID 的公式稍微解释一下:
时域标准的 PID 公式为:
y(t) = Kp * e(t) + Ki * ∫(e(t))dt + Kd*d(e(t))/dt
把上面的标准公式转换为数字形式是,一般有两种主要形式
(1)独立积分式,这种方法把积分器独立出来,
i(t) = Ki * ∫(e(t))dt
转换为:
i(k) = i(k-1) + e(k)
最后把比例,积分,微分三个部分叠加在一起
y(k) = Kp * e(k) + Ki * i(k) + Kd*(e(k) –e(k-1))
(2)增量式:
对标准的 PID 公式微分后,可得:
dy = Kp * de + Ki*e + Kd*dde
离散化后得:
dy(k) = y(k) – y(k-1) = Kp * (e(k) – e(k-1) +Ki*e(k) + Kd* (e(k) -2*e(k-1) +e(k-2))
即:
dy(k) = y(k) – y(k-1) = (Kp + Ki + Kd) * e(k) +(-Kp -2*Kd)*e(k-1) + Kd*e(k-2)
独立积分式与增量式其实是一个公式,各自表述,没有本质的区别,我们可以从独立积分式导出增量式:
y(k) = Kp * e(k) + Ki * i(k) + Kd*(e(k) –e(k-1))
y(k-1) = Kp * e(k-1) + Ki * i(k-1) + Kd*(e(k-1) –e(k-2))
上述两个公式相减可得:
dy(k) = y(k) – y(k-1) = (Kp + Ki + Kd) * e(k) +(-Kp -2*Kd)*e(k-1) + Kd*e(k-2)
从实际应用角度来看,独立积分式略微更简单些,因为没有 e(k-2) 项。