《位置式PID控制算法.docx》由会员分享,可在线阅读,更多相关《位置式PID控制算法.docx(3页珍藏版)》请在三一办公上搜索。
1、位置式PID控制算法位置式PID控制算法 在使用单片机作为控制cpu时,请稍作简化,具体的PID参数必须由具体对象通过实验确定。 由于单片机的处理速度和ram资源的限制,一般不采用浮点数运算,而将所有参数全部用整数, 运算到最后再除以一个2的N次方数据,作类似定点数运算,可大大提高运算速度, 根据控制精度的不同要求,当精度要求很高时,注意保留移位引起的“余数”,做好余数补偿。 这个程序只是一般常用pid算法的基本架构,没有包含输入输出处理部分。 #include #include PID Function The PID function is used in mainly control a
2、pplications. PID Calc performs one iteration of the PID algorithm. While the PID function works, main is just a dummy program showing a typical usage. PID功能 在PID功能主要用于控制应用。 PID 计算器执行一个PID的迭代算法。虽然PID功能的工程, 主要只是一个虚拟程序显示一个典型的使用。 typedef struct PID double SetPoint; / 设定目标 Desired Value double Proportion
3、; / 比例常数 Proportional Const double Integral; / 积分常数 Integral Const double Derivative; / 微分常数 Derivative Const double LastError; / Error-1 double PrevError; / Error-2 double SumError; / Sums of Errors PID; double PIDCalc( PID *pp, double NextPoint ) double dError, Error; Error = pp-SetPoint - NextPoi
4、nt; / 偏差 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结构 Initialize PID Structure=*/ void PIDInit (PID *pp)
5、 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控制结构 PID Control Structure double rOut; / PID响应 PID Response (Output) double rIn; / PID
6、反馈 PID Feedback (Input) PIDInit ( &sPID ); / 初始化结构 Initialize Structure sPID.Proportion = 0.5; / 设置PID系数 Set PID Coefficients sPID.Integral = 0.5; sPID.Derivative = 0.0; sPID.SetPoint = 100.0; / 设置PID设定 Set PID Setpoint for (;) / 模拟最多的PID处理 Mock Up of PID Processing rIn = sensor ; / 读取输入 Read Input rOut = PIDCalc ( &sPID,rIn ); / 执行的PID迭代 Perform PID Interation actuator ( rOut ); / 所需的更改的影响 Effect Needed Changes