- #include<string.h>
- #include<stdio.h>
- typedefstructPID{
- doubleSetPoint;//设定目标DesiredValue
- doubleProportion;//比例常数ProportionalConst
- doubleIntegral;//积分常数IntegralConst
- doubleDerivative;//微分常数DerivativeConst
- doubleLastError;//Error[-1]
- doublePrevError;//Error[-2]
- doubleSumError;//SumsofErrors
- }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//微分项
- );
- }
- /*====================================================================================================
- PID初始化
- =====================================================================================================*/
- voidPIDInit(PID*pp)
- {
- memset(pp,0,sizeof(PID));
- }
- /*====================================================================================================
- 主函数
- =====================================================================================================*/
- doublesensor(void)//DummySensorFunction
- {
- return100.0;
- }
- voidactuator(doublerDelta)//DummyActuatorFunction
- {}
- voidmain(void)
- {
- PIDsPID;//PIDControlStructure
- doublerOut;//PIDResponse(Output)
- doublerIn;//PIDFeedback(Input)
- PIDInit(&sPID);//InitializeStructure
- sPID.Proportion=0.5;//SetPIDCoefficients
- sPID.Integral=0.5;
- sPID.Derivative=0.0;
- sPID.SetPoint=100.0;//SetPIDSetpoint
- for(;;){//MockUpofPIDProcessing
- rIn=sensor();//ReadInput
- rOut=PIDCalc(&sPID,rIn);//PerformPIDInteration
- actuator(rOut);//EffectNeededChanges
- }
- }
PID调节基础程序模版
最新推荐文章于 2024-07-06 15:57:10 发布