51单片机PID算法程序(一)PID算法(原仓U文章,转载请注明出处 先置I和D的增益为0,逐渐增加Kp直到在输出得到一个持续的稳定的振荡2. 记录下振荡时的P部分的临界增益Kc,和振荡周期Pc,代到下表中计算出Kp,Ti,TdZiegler-Nichols整定表Table2-1.Ziegler-NicholsparametersControllerKpTjTd.PPD065*、0.12*PcjPI045-Kc0.65*PcPID065-Kc0.5■Pc0.12*Pc|表2Tyreus-Luyben整定表:K€TIr1DPIc011(101K/3.2u2.2Pu-FIDcontrolK~/riu2,2PuP76.3u表3Tyreus-Luyben的整定值减少了振荡的作用和增强了稳定性自动测试方法:为了确定过程的临界周期Pc和临界增益Kc,控制器会临时使它的PID算法失效,取而代之的是一个ON/OFF的继电器来让过程变为振荡的这两个参数很好的将过程行为进行了量化以决定PID控制器应该如何整定来得到理想的闭环回路性能参考资料1)Mixed-SignalControlCircuitsUseMicrocontrollerforFlexibilityinImplementingPIDAlgorithms,ByEamonNeary(图1,表1)2)Atmel8-bitAVRMicrocontrollersApplicationNote:AVR221:DiscretePIDcontroller(图2,图3,图4,图5,表2)I附件使用Ziegler-Nichols方法的自整定控制 Ziegler-Nichols方法PID参数整定--随风的blog 因为计算机输出的u(n)对应的是执行机构的实际位置,如果计算机出现故障,输出u(n)将大幅度变化,会引起执行机构的大幅度变化,有可能因此造成严重的生产事故,这在实际生产中是不允许的。
位置式PID控制算法C51程序具体的PID参数必须由具体对象通过实验确定由丁单片机的处理速度和ram资源的限制,一般不采用浮点数运算,而将所有参数全部用整数,运算到最后再除以一个2的N次方数据(相当丁移位),作类似定点数运算,可大大提高运算速度,根据控制精度的不同要求,当精度要求很高时,注意保留移位引起的徐数做好余数补偿这个程序只是一般常用pid算法的基本架构,没有包含输入输出处理部分/#include#include//C语言中memset函数头文件/*====================================================================================================PIDFunctionThePID(比例、积分、微分)functionisusedinmainlycontrolapplications.PIDCalcperformsoneiterationofthePIDalgorithm.WhilethePIDfunctionworks,mainisjustadummyprogramshowingatypicalusage.typedefstructPID{doubleSetPoint;doubleProportion;doubleIntegral;doubleDerivative;doubleLastError;==========================================*///设定目标Desiredvalue//比例常数ProportionalConst//积分常数IntegralConst//微分常数DerivativeConst//Error[-1]doublePrevError;//Error[-2]doubleSumError;//SumsofErrors}PID;/*==========================================================PID计算部分*///偏差//积分//当前微分doublePIDCalc(PID*pp,doubleNextPoint){doubledError,Error;Error=pp->SetPoint-NextPoint;pp->SumError+=Error;dError=Error-pp->LastError;pp->LastError=Error;return(pp->Proportion*Error//比例项+pp->Integral*pp->SumError//积分项+pp->Derivative*dError//微分项);}/*====================================================================================================InitializePIDStructurePID参数初始化===================================================================。