pid控制算法的DSP程序设计与实现

pid控制算法的DSP程序设计与实现,第1张

typedef struct PID {

int SetPoint// 设定目标 Desired value

int Proportion// 比例常数 Proportional Const

int Integral// 积分常数 Integral Const

int Derivative// 微分常数 Derivative Const

unsigned int LastError// Error[-1]

unsigned int PrevError// Error[-2]

unsigned int SumError// Sums of Errors

// double Lastout //上次输出

unsigned int E1 // e1>e2

unsigned int E2 //

int Pmax//上限

int Pmin//下限

} PID

/*====================================================================================================

PID计算部分,遇限消弱积分PID防饱和,积分分离算法实现

=====================================================================================================*/

int PIDCalc( PID *pp, unsigned int NextPoint )

{

int dError,

Error

Error = pp->SetPoint - NextPoint //偏差

if (Error<=-pp->E1) return (pp->Pmin) //饱和

else if (Error>=pp->E1)

return (pp->Pmax)

else

{

dError = pp->LastError - pp->PrevError// 当前微分

pp->PrevError = pp->LastError

pp->LastError = Error

if (Error>=pp->E2||Error<=-pp->E2) //分离

return (pp->Proportion * Error // 比例项

+ pp->Derivative * dError )//PD,考虑限幅

else //位置式

{

pp->SumError += Error // 积分

return (pp->Proportion * Error // 比例项

+ pp->Integral * pp->SumError // 积分项

+ pp->Derivative * dError // 微分项 //PID

)

}

}

}

非法字符,或者缺少生声明。建议删除这行,重新输入下。

把void PIDfunc_calc(...)放到结构体PID_FUNC_DEFAULTS{..} 前面。

仅能给你一段例子程序去修改,对你说的具体东西不是非常清楚,要完全按你的要求写出来,不太可能

// PID算法控制子程序-------------------------------------------------------------------------

void PIDControl(int rk,int yk)

{

ek=rk-yk

duk=a*ek+b*ek1+c*ek2 // 计算控制输出

ek2=ek1ek1=ek

if ( duk>10 ) duk=3 // 幅度限制

tz=(int)duk

pwm+=tz// 计算当前占空比

if ( pwm<0 ) pwm=0

else if ( pwm>99 ) pwm=99

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7780188.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存