51单片机PID算法程序增量式PID控制算法要点
![51单片机PID算法程序增量式PID控制算法要点_第1页](https://file5.zhuangpeitu.com/fileroot5/2022-9/13/d1f6b366-7516-4323-8e79-f0e881a1ebc8/d1f6b366-7516-4323-8e79-f0e881a1ebc81.gif)
![51单片机PID算法程序增量式PID控制算法要点_第2页](/images/s.gif)
![51单片机PID算法程序增量式PID控制算法要点_第3页](/images/s.gif)
《51单片机PID算法程序增量式PID控制算法要点》由会员分享,可在线阅读,更多相关《51单片机PID算法程序增量式PID控制算法要点(17页珍藏版)》请在装配图网上搜索。
1、51单片机PID算法程序(一)PID算法 (原创文章,转载请注明出处 ) 比例,积分,微分的线性组合,构成控制量u(t),称为:比例(Proportional)、 积分(Integrating)、微分(Differentiation)控制,简称 PID 控制 图1 控制器公式 在实际应用中,可以根据受控对象的特性和控制的性能要求,灵活地采用不 同的控制组合,构成 比例(P)控制器 比例+积分(Pi)控制器 u(f) = K肿)+和》(讣] 比例+积分+微分(PID)控制器 u(f) = KpW(f) + 式中心-比例放大系数;爲-积分时间爲-微分
2、时间。 u(Z)= Kpe(t} + Kj [ e(r)rfr + KD 式中心-比例放大系数V只分系数;忍-微分系数。 控制系统中的应用 在单回路控制系统中,由于扰动作用使被控参数偏离给定值,从而产生偏差。 自动控制系统的调节单元将來自变送器的测量值与给定值相比较后产生的偏差 进行比例、积分、微分(PID)运算,并输出统一标准信号,去控制执行机构的动 作,以实现对温度、压力、流量、也为及其他工艺参数的自动控制。 比例作用P只与偏差成正比;积分作用I是偏差对时间的积累;微分作用D 是偏差的变化率; 比例(P)控制 比例控制能迅速反应误差,从而减少稳态误差。除了系统控制输入为0和系
3、 统过程值等于期望值这两种情况,比例控制都能给出稳态误差。当期望值有一个 变化时,系统过程值将产生一个稳态误差。但是,比例控制不能消除稳态误差。 比例放大系数的加大,会引起系统的不稳定。 图2比例(P)控制阶跃响应 积分(I)控制 在积分控制中,控制器的输出与输入误差信号的积分成正比关系。 为了减小稳态误差,在控制器中加入积分项,积分项对误差取决于时间的积 分,随着时间的增加,积分项会增大。这样,即使误差很小,积分项也会随着时 间的增加而加大,它推动控制器的输出增大使稳态误差进一步减少,直到等于零。 积分⑴和比例(P)通常一起使用,称为比例+积分(PI)控制器,可以使系统在
4、进入稳态后无稳态误差。如果单独用积分⑴的话,由于积分输出随时间积累而逐 渐增大,故调节动作缓慢,这样会造成调节不及时,使系统稳定裕度下降。 图3积分(I)控制和比例积分(PI)控制阶跃相应 微分(D)控制 在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成 正比关系。 由于自动控制系统有较大的惯性组件(环节)或有滞后(delay)组件,在 调节过程中可能出现过冲其至振荡。解决办法是引入微分(D)控制,即在误差很 大的时候,抑制误差的作用也很大;在误差接近零时,抑制误差的作用也应该是 总结: 零。 图4微分(D)控制和比例微分(PD)控制阶跃相应 PI比P少
5、了稳态误差,PID比PI反应速度更快并且没有了过冲。PID比PI 有更快的响应和没有了过冲。 图5 Table I • Gain Constant Rise Time Overshoot Settling Time Steady State •F Error KP Ki Kd Decrease Decrease Little Change Increase Increase Decrease Little Change Increase Decrease Decrease Eliminate Little Change 增益常数(
6、系数) 上升时间 过冲 建立时间 稳态误差 Kp 减少 增大 很小变化 减小 Ki 减少 增大 增加 消除 Kd 很小变化 减小 减少 很小变化 表1 注意,这里的 图6典型的PID控制器对于阶跃跳变参考输入的响应 参数的调整 应用PID控制,必须适当地调整比例放大系数Kp,积分时间Ti和微分时间 Td,使整个控制系统得到良好的性能。 最好的寻找PID参数的办法是从系统的数学模型出发,从想要的反应來计 算参数。很多时候一个详细的数学描述是不存在的,这时候就需要实际地调节P ID的参数. Ziegler-Nichols 方法 Zieg
7、ler-Nichols方法是基于系统稳定性分析的PID整定方法.在设计过程中 无需考虑任何特性要求,整定方法非常简单,但控制效果却比较理想。 具体整定方法步骤如下: 1•先置I和D的增益为0,逐渐增加Kp直到在输出得到一个持续的稳定的振荡。 2.记录下振荡时的P部分的临界增益Kc,和振荡周期Pc,代到下表中计算出K p, Ti, Tdo Ziegler-Nichols 整定表 Table 2・4・ Ziegler・Nichols parameters Controller Kp Ti Td P 0.5* Ke PD 0.65 * Kc 0.12* Pc
8、 PI 0.45 #Kc 0.85 * Pc PID 0.65 # Kc 0.5 • Pc 0/12 • Pc 表2 Tyreus-Luyben 整定表: K c TI PI control K 3.2 u 1.1 p u PID conti ol K /2.2 u 1.1 p u 气/63 表3 Tyreus丄uyben的整定值减少了振荡的作用和增强了稳定性。 自动测试方法: 为了确定过程的临界周期Pc和临界增益Kc,控制器会临时使它的PID 算法失效,取而代之的是一个ON/OFF的继电器來让过程变为振荡的。这 两
9、个参数很好的将过程行为进行了量化以决定PID控制器应该如何整定来 得到理想的闭环回路性能。 继电器测宦 nb 参考资料 1) Mixed-Signal Control Circuits Use Microcontroller for Flexibility in Impl ementing PID Algorithms, By Eamon Neary (图4,表1) ?^^附件 2) Atmel 8-bit AVR Microcontrollers Application Note:AVR221: Discrete PI D controlle
10、r (图2,图3,图4,图5,表2) 附件 3) 使用Ziegler-Nichols方法的自整定控制 (图6) 4) Ziegler-Nichols Method http://www.chem.mtu.edu/~tbco/cm416/zn.html (表3) 5) Ziegler-Nichols方法PID参数整定一随风的blog http://blog.eccn.eom/u/4/archives/2007/97.htm 6) PID控制原理教程,胡晓若编制 51单片机PID算法程序(二)位置式PID控制算法 (转载请注明出处 ) 由51单片机组成的数字控制系统
11、控制中,PID控制器是通过PID控制算法 实现的。51单片机通过AD对信号进行采集,变成数字信号,再在单片机中通 过算法实现PID运算,再通过DA把控制量反馈回控制源。从而实现对系统的伺 服控制。 位置式PID控制算法 位置式PID控制算法的简化示意图 上图的传递函数为: (2-1) 在时域的传递函数表达式 (2-2) 对上式中的微分和积分进行近似 (2-3) 式中n是离散点的个数。 于是传递函数可以简化为: (2-4) 其中 u(n) 第k个釆样时刻的控制; Kp —比例放大系数; Ki —积分放大系数; Kd —微分放大系数; T —采样周期。 如果釆样
12、周期足够小,则(2-4)的近似计算可以获得足够精确的结果,离 散控制过程与连续过程十分接近。 (2-4)表示的控制算法直接按(2-1)所给出的PID控制规律定义进行计算 的,所以它给出了全部控制量的大小,因此被称为全量式或位置式PID控制算 迭。 缺点: 1) 由于全量输出,所以每次输出均与过去状态有关,计算时要对e(k)(k=O, 1,...n)进行累加,工作量大。 2) 因为计算机输出的u(n)对应的是执行机构的实际位置,如果计算机出现 故障,输出u(n)将大幅度变化,会引起执行机构的大幅度变化,有可能因 此造成严重的生产事故,这在实际生产中是不允许的。 位置式PID控制算法C5
13、1程序
具体的PID参数必须由具体对象通过实验确定。由于单片机的处理速度和r am资源的限制,一般不釆用浮点数运算,而将所有参数全部用整数,运算 到最后再除以一个2的N次方数据(相当于移位),作类似定点数运算,可大 大提高运算速度,根据控制精度的不同要求,当精度要求很高时,注意保留移位 引起的“余数”,做好余数补偿。这个程序只是一般常用pid算法的基本架构,没 有包含输入输出处理部分。
==========================================*/
#inelude
14、件 /*========================================================== PID Function The PID (比例、积分、微分)function is used in mainly control applications. PIDCalc performs one iteration of the PID algorithm ・ While the PID function works, main is just a dummy program showing a typical usage・ =============
15、=============================*/ typedef struct PID { double SetPoint; double Proportion; double Integral; double Derivative; double LastError; // 设定目标 Desired value II 比例常数 Proportional Const // 积分常数 Integral Const // 微分常数 Derivative Const // Error[-1] double PrevError; // Error[-2] double Su
16、mError; // Sums of Errors } PID; PID计算部分 */ double PIDCalc( PID *pp, double NextPoint ) double dError, Error; //偏差 //积分 //当前微分 Error = pp->SetPoint ・ NextPoint; pp->SumError += Error; dError = Error - pp->LastError; pp->PrevError = pp->LastError; pp->LastError = Error; return (pp->Pro
17、portion * Error // 比例项 + pp->lntegral * pp->SumError // 积分项 + pp->Derivative * dError // 微分项 ); } Initialize PID Structure PID 参数初始化 ==========================================*/ void PIDInit (PID *pp) { memset ( pp,0,sizeof(PID)); } Main Program 主程序 double sensor (void) // Dummy Sensor Func
18、tion { return 100.0; } void actuator(double rDelta) // Dummy Actuator Function {} void main(void) { PID sPID; // PID Control Structure double rOut; // PID Response (Output) double rln; // PID Feedback (Input) PIDInit ( &sPID ); // Initialize Structure sPID.Proportion 二 0.5; // Set PID Coeffi
19、cients sPID.Integral = 0.5; sPID. Derivative = 0.0; sPID.SetPoint = 100.0; // Set PID Setpoint for (;;) { // Mock Up of PID Processing 「In 二 sensor (); // Read Input rOut = PIDCalc ( &sPID,rln ); // Perform PID Interation actuator ( rOut ); // Effect Needed Changes } 参考资料: 1) Atmel 8-bit AVR M
20、icrocontrollers Application Note:AVR221: Discrete PI D controller 2) 茶壶・pid C程序,好东西・腾讯博客一 Qzone 3) PID调节控制做电机速度控制,SUNPLUS凌阳科技 51单片机PID算法程序(三)增量式PID控制算法 (转载请注明出处 ) 当执行机构需要的不是控制量的绝对值,而是控制量的增量(例如去驱动步 进电动机)时,需要用PID的“增量算法”。 图3.2(b)增心弋PID柠制算法的简化示意图 增量式PID控制算法可以通过(2-4)式推导出。由(2・4)可以得到控制器 的第个
21、釆样时刻的输出值为: A j-o 将(2-4)与(2-5)相减并整理,就可以得到增量式PID控制算法公式为: 由(2-6)可以看出,如果计算机控制系统釆用恒定的釆样周期T, 一 旦确定A、B、C,只要使用前后三次测量的偏差值,就可以由(2-6)求出控制 量。 增量式PID控制算法与位置式PID算法(2・4)相比,计算量小得多,因此 在实际中得到广泛的应用。 位置式PID控制算法也可以通过增量式控制算法推出递推计算公式: 忍=% + X (2-7) (2-7)就是目前在计算机控制中广泛应用的数字递推PID控制算法。 增量式PID控制算法C51程序 PID F
22、unction The PID (比例、积分、微分)function is used in mainly control applications. PIDCalc performs one iteration of the PID algorithm ・ While the PID function works, main is just a dummy program showing a typical usage・ ==========================================*/ typedef struct PID { int SetPoint; 〃设
23、定目标 Desired Value long SumError; 〃误差累计 double Proportion; 〃比例常数 Proportional Const double Integral; 〃积分常数 Integral Const double Derivative; 〃微分常数 Derivative Const int LastError; //Error[-1] int PrevError; //Error[-2] } PID; static PID sPID; static PID *sptr = &sPID; Initialize PID Structure
24、 PID 参数初始化 ==========================================*/ void IncPIDInit(void) { sptr->SumError = 0; sptr->LastError = 0; //Error[-1] sptr->PrevError = 0; //Error卜2] sptr->Proportion = 0; 〃比例常数 Proportional Const sptr->lntegral = 0; 〃积分常数 Integral Const sptr->Derivative = 0; 〃微分常数 Derivative Cons
25、t sptr->SetPoint = 0; } 增量式PID计算部分 */ int lncPIDCalc(int NextPoint) register int iError, ilncpid; 〃当前误差 iError = sptr->SetPoint ・ NextPoint; 〃增量计算 ilncpid= sptr->Proportion * iError 〃E[k]项 -sptr->lntegral * sptr->LastError //E[k—1]项 + sptr->Derivative * sptr->PrevError; //E[k—2]项 〃存储误差,用于下次计算 sptr->PrevError = sptr->LastError; sptr->LastError = iError; 〃返回增量值 retur n( ilncpid); } 参考资料: 1) PID调节控制做电机速度控制,SUNPLUS凌阳科技 2)增量式PID控制模块程序设计 -24/73560.html
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。