编辑: AA003 2019-10-09
沈阳单片机开发网――帮您精确掌握电子器件的使用细节 www.

symcukf.com 工业控制中常用的 PID 处理程序 这是工业控制中常用的 PID 处理程序,在使用单片机作为控制 cpu 时,请稍作简化,具 体的 PID 参数必须由具体对象通过实验确定. 由于单片机的处理速度和 ram 资源的限制, 一 般不采用浮点数运算, 而将所有参数全部用整数, 运算到最后再除以一个

2 的N次方数据 (相 当于移位) ,作类似定点数运算,可大大提高运算速度,根据控制精度的不同要求,当精度 要求很高时,注意保留移位引起的"余数" ,做好余数补偿.这个程序只是一般常用 pid 算 法的基本架构,没有包含输入输出处理部分. #include #include / PID Function The PID (比例、积分、微分) function is used in mainly control applications. PIDCalc performs one iteration of the PID algorithm. While the PID function works, main is just a dummy program showing a typical usage. typedef struct PID { double SetPoint;

// 设定目标 Desired Value double Proportion;

// 比例常数 Proportional Const double Integral;

// 积分常数 Integral Const double Derivative;

// 微分常数 Derivative Const double LastError;

// Error[-1] double PrevError;

// Error[-2] double SumError;

// Sums of Errors } PID;

PID 计算部分 double PIDCalc( PID *pp, double NextPoint ) { double dError, 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 // 积分项

1 沈阳单片机开发网――帮您精确掌握电子器件的使用细节 www.symcukf.com + pp->Derivative * dError // 微分项 );

} Initialize PID Structure void PIDInit (PID *pp) { memset ( pp,0,sizeof(PID));

} Main Program double sensor (void) // Dummy Sensor Function { return 100.0;

} void actuator(double rDelta) // Dummy Actuator Function {} void main(void) { PID sPID;

// PID Control Structure double rOut;

// PID Response (Output) double rIn;

// PID Feedback (Input) PIDInit ( &sPID );

// Initialize Structure sPID.Proportion = 0.5;

// Set PID Coefficients sPID.Integral = 0.5;

sPID.Derivative = 0.0;

sPID.SetPoint = 100.0;

// Set PID Setpoint for Mock Up of PID Processing rIn = sensor ();

// Read Input rOut = PIDCalc ( &sPID,rIn );

// Perform PID Interation actuator ( rOut );

// Effect Needed Changes 2

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题