预览加载中,请您耐心等待几秒...
在线预览结束,喜欢就下载吧,查找使用更方便
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
由单片机组成得数字控制系统控制中,PID控制器就是通过PID控制算法实现得。单片机通过AD对信号进行采集,变成数字信号,再在单片机中通过算法实现PID运算,再通过DA把控制量反馈回控制源。从而实现对系统得伺服控制。位置式PID控制算法位置式PID控制算法得简化示意图上图得传递函数为:(2-1)在时域得传递函数表达式(2-2)对上式中得微分与积分进行近似(2-3)式中n就是离散点得个数。于就是传递函数可以简化为:(2-4)其中u(n)——第k个采样时刻得控制;KP——比例放大系数;Ki——积分放大系数;Kd——微分放大系数;T——采样周期。如果采样周期足够小,则(2-4)得近似计算可以获得足够精确得结果,离散控制过程与连续过程十分接近。(2-4)表示得控制算法直接按(2-1)所给出得PID控制规律定义进行计算得,所以它给出了全部控制量得大小,因此被称为全量式或位置式PID控制算法。缺点:1)由于全量输出,所以每次输出均与过去状态有关,计算时要对e(k)(k=0,1,…n)进行累加,工作量大。2)因为计算机输出得u(n)对应得就是执行机构得实际位置,如果计算机出现故障,输出u(n)将大幅度变化,会引起执行机构得大幅度变化,有可能因此造成严重得生产事故,这在实际生产中就是不允许得。位置式PID控制算法程序具体得PID参数必须由具体对象通过实验确定。由于单片机得处理速度与ram资源得限制,一般不采用浮点数运算,而将所有参数全部用整数,可大大提高运算速度。这个程序只就是一般常用pid算法得基本架构,没有包含输入输出处理部分。=====================================================================/*=========================================================================================================================================================================================================*/typedefstructPID{ﻫdoubleSetPoint;//设定目标DesiredvalueﻫdoubleProportion;//比例常数ProportionalConstdoubleIntegral;//积分常数IntegralConstﻫdoubleDerivative;//微分常数DerivativeConstﻫdoubleLastError;//Error[-1]doublePrevError;//Error[-2]doubleSumError;//SumsofErrorsﻫ}PID;ﻫ/*====================================================================================================ﻫPID计算部分ﻫ=====================================================================================================*/ﻫdoublePIDCalc(PID*pp,doubleNextPoint){ﻫdoubledError,Error;ﻫError=pp->SetPoint-NextPoint;//偏差pp->SumError+=Error;//积分ﻫdError=Error-pp->LastError;//当前微分ﻫpp->PrevError=pp->LastError;ﻫpp->LastError=Error;ﻫreturn(pp->Proportion*Error//比例项ﻫ+pp->Integral*pp->SumError//积分项+pp->Derivative*dError//微分项ﻫ);}/*====================================================================================================ﻫInitializePIDStructurePID参数初始化=====================================================================================================*/ﻫvoidPIDInit(PID*pp)ﻫ{m