|
发表于 2014-6-4 10:32:26
|
显示全部楼层
首先考虑滞后,就是你控制了不一定马上有反馈,容易导致过量调节。解决办法一是加大控制间隔,二是降低KP系数。我做过激光器的温度PID,比你这个应该反应的快一点。我可以贴出我的代码。然后有几本书我当时参考了一下,非常有用。PID我也是自己改写过的。
不过我的温度控制跟你的不一样,我有个引脚是控制加热还是制冷。。。。。我还是贴另外一个功率自动控制的吧,跟你的温度控制稍微近似一点:
void APC ( void ) //PIDCalc
{
#define PKProportion1 0.3 //泵浦1比例常数Proportional Const
#define PKIntegral1 0.01 //泵浦1积分常数Integral Const
#define PKDerivative1 0.1 //泵浦1微分常数Derivative Const
#define PKDrvtArf 0.2 //微分部分α常数
//#define KProportion 2 // 比例常数Proportional Const
//#define KIntegral 0.1 // 积分常数Integral Const
//#define KDerivative 0.1 // 微分常数Derivative Const
//Pump_Power = adc(0)*25/1023*200 = 2000; 10Bits A/D
#define Desiredvalue 411 // 设定目标Desired value r(t)
typedef struct STRUCT_PID
{
double LastError; // Error[-1]
double SumError; // Sums of Errors
double LastDrt; //上次微分值
int ControlValue; //控制量 u(t)
} STRUCT_PID;
//(DAT实际取值范围为0到4095)
static xdata STRUCT_PID PID = {0.0, 0.0,0.0, PIDIintControlValue}; // PID Control Structure
/*
double xdata dError, Error;
double xdata Feedback_In; // PID Feedback (Input) AD c(t)
double xdata Response_Out; // PID Response (Output) DA u(t) change
*/
double xdata Proportion,Differential;
Feedback_In = adc ( 0 ); // Read Input
/*当前误差*/
Error = Desiredvalue - Feedback_In; // 偏差 e(t)
/*累加误差*/
PID.SumError += Error; // 积分
/*分离积分*/
if ( fabs ( Error ) >41 ) //误差超过20mW,取消积分项
PID.SumError=0;
/*计算各数据项*/
Proportion=Error; //比例项
Differential=PKDerivative1* ( 1-PKDrvtArf ) *Error
+PKDrvtArf*PID.LastDrt
-PKDerivative1* ( 1-PKDrvtArf ) *PID.LastError;//微分项
/*死区控制*/
if ( abs ( Error ) < 2 ) //1-0.48mw
{
PID.SumError = 0;
//PID.LastError = 0;
return;
}
/*增量计算*/
Response_Out= PKProportion1*Proportion // 比例项
+ PKIntegral1*PID.SumError // 积分项
+ Differential; // 微分项
/*记忆参数*/
PID.LastDrt = Differential; //记忆本次微分值
PID.LastError= Error; //记忆本次误差
/*控制值计算*/
PID.ControlValue += Response_Out;
/*控制值极限判断*/
if ( PID.ControlValue < 0 )
PID.ControlValue = 0;
else if ( PID.ControlValue > 4095 )
PID.ControlValue = 4095;
AD5322 ( ( unsigned int ) ( PID.ControlValue ),1 );
}
下面是几本电子书,重点推荐《新型PID控制及其应用》我看完前几章就会改写了。
PS:别人的始终只能给你灵感和参考,写出适合自己的才是王道。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|