PID算法标准例程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

/*====================================================================================================这是从网上找来的一个比较典型的PID处理程序,在使用单片机作为控制cpu时,请稍作简化,具体的PID参数必须由具体对象通过实验确定。由于单片机的处理速度和ram资源的限制,一般不采用浮点数运算,而将所有参数全部用整数,运算到最后再除以一个2的N次方数据(相当于移位),作类似定点数运算,可大大提高运算速度,根据控制精度的不同要求,当精度要求很高时,注意保留移位引起的“余数”,做好余数补偿。这个程序只是一般常用pid算法的基本架构,没有包含输入输出处理部分。=====================================================================================================*/#includestring.h#includestdio.h/*====================================================================================================PIDFunctionThePID(比例、积分、微分)functionisusedinmainlycontrolapplications.PIDCalcperformsoneiterationofthePIDalgorithm.WhilethePIDfunctionworks,mainisjustadummyprogramshowingatypicalusage.=====================================================================================================*/typedefstructPID{doubleSetPoint;//设定目标DesiredValuedoubleProportion;//比例常数ProportionalConstdoubleIntegral;//积分常数IntegralConstdoubleDerivative;//微分常数DerivativeConstdoubleLastError;//Error[-1]doublePrevError;//Error[-2]doubleSumError;//SumsofErrors}PID;/*====================================================================================================PID计算部分=====================================================================================================*/doublePIDCalc(PID*pp,doubleNextPoint){doubledError,Error;Error=pp-SetPoint-NextPoint;//偏差pp-SumError+=Error;//积分dError=pp-LastError-pp-PrevError;//当前微分pp-PrevError=pp-LastError;pp-LastError=Error;return(pp-Proportion*Error//比例项+pp-Integral*pp-SumError//积分项+pp-Derivative*dError//微分项);}/*====================================================================================================InitializePIDStructure=====================================================================================================*/voidPIDInit(PID*pp){memset(pp,0,sizeof(PID));}/*====================================================================================================MainProgram=====================================================================================================*/doublesensor(void)//DummySensorFunction{return100.0;}voidactuator(doublerDelta)//DummyActuatorFunction{}voidmain(void){PIDsPID;//PIDControlStructuredoublerOut;//PIDResponse(Output)doublerIn;//PIDFeedback(Input)PIDInit(&sPID);//InitializeStructuresPID.Proportion=0.5;//SetPIDCoefficientssPID.Integral=0.5;sPID.Derivative=0.0;sPID.SetPoint=100.0;//SetPIDSetpointfor(;;){//MockUpofPIDProcessingrIn=sensor();//ReadInputrOut=PIDCalc(&sPID,rIn);//PerformPIDInterationactuator(rOut);//EffectNeededChanges}}

1 / 2
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功