PID控制算法程序文件
- 格式:doc
- 大小:80.50 KB
- 文档页数:39
1.功能介绍 (2)2.安装说明 (2)2.1.添加库文件 (2)2.2.调用PID库 (4)3.PID库功能说明 (4)3.1.地址参数说明 (4)3.2.控制字、状态字位地址 (6)4.应用例子 (7)4.1.系统需求 (7)4.2.应用程序 (9)4.3.程序说明 (9)1. 功能介绍PID_T功能块是集成在CPU内部,不占用用户程序空间,作为一个库函数提供给用户使用。
PID_T主要针对温度控制的智能PID功能,带有自整定、自适功能,用户无需复杂编程,只需调用和设置一些简单的参数就可以使用,温度控制准确。
2. 安装说明2.1. 添加库文件在“文件”----“添加/删除库”,找到库文件“”,如下图所示。
在你存放的文件的位置,找到此文件,如下图所示,点“添加“按钮。
安装成功后,在目录树的“库“下可以看到新增加的PID_T的库:2.2. 调用PID库点要添加功能块的“网络”,双击“库”下面的“PID_T”,就会在“网络”里出现相应的功能块。
结果如下图所示:3. PID库功能说明3.1. 地址参数说明参数地址说明类型数值范围备注LOOP 属于第几个回字,常数或变量0-63路PID,不能重复。
从0开始。
CTRL_WORD 控制字,控制字,常数或变量常用控制字:1、3.2. 控制字、状态字位地址控制字的位地址意义如下:状态字位地址的意义:4. 应用例子4.1. 系统需求在这个例子里,我们以一个温区为例,系统及I/O配置表如下:4.2. 应用程序4.3. 程序说明程序地址参数说明如下:PID_T的参数说明参数地址或数值说明备注LOOP 0 因为这是第一个回路,所以是。
单片机P I D算法程序公司内部编号:(GOOD-TMMT-MMUT-UUPTY-UUYY-DTTI-51单片机P I D算法程序(二)位置式P I D控制算法由51单片机组成的数字控制系统控制中,PID控制器是通过PID控制算法实现的。
51单片机通过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控制算法C51程序具体的PID参数必须由具体对象通过实验确定。
由于单片机的处理速度和ram资源的限制,一般不采用浮点数运算,而将所有参数全部用整数,运算到最后再除以一个2的N次方数据(相当于移位),作类似定点数运算,可大大提高运算速度,根据控制精度的不同要求,当精度要求很高时,注意保留移位引起的“余数”,做好余数补偿。
这个程序只是一般常用pid算法的基本架构,没有包含输入输出处理部分。
实验二 数字PID 控制计算机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量。
因此连续PID 控制算法不能直接使用,需要采用离散化方法。
在计算机PID 控制中,使用的是数字PID 控制器。
一、位置式PID 控制算法按模拟PID 控制算法,以一系列的采样时刻点kT 代表连续时间t ,以矩形法数值积分近似代替积分,以一阶后向差分近似代替微分,可得离散PID 位置式表达式:∑∑==--++=⎪⎪⎭⎫ ⎝⎛--++=k j di p k j D I p T k e k e k T j e k k e k k e k e T T j e T T k e k k u 00)1()()()())1()(()()()( 式中,D p d I pi T k k T k k ==,,e 为误差信号(即PID 控制器的输入),u 为控制信号(即控制器的输出)。
在仿真过程中,可根据实际情况,对控制器的输出进行限幅。
二、连续系统的数字PID 控制仿真连续系统的数字PID 控制可实现D/A 及A/D 的功能,符合数字实时控制的真实情况,计算机及DSP 的实时PID 控制都属于这种情况。
1.Ex3 设被控对象为一个电机模型传递函数BsJs s G +=21)(,式中J=0.0067,B=0.1。
输入信号为)2sin(5.0t π,采用PD 控制,其中5.0,20==d p k k 。
采用ODE45方法求解连续被控对象方程。
因为Bs Js s U s Y s G +==21)()()(,所以u dt dy B dty d J =+22,另y y y y ==2,1,则⎪⎩⎪⎨⎧+-==/J)*u ((B/J)y y y y 12221 ,因此连续对象微分方程函数ex3f.m 如下 function dy = ex3f(t,y,flag,para)u=para;J=0.0067;B=0.1;dy=zeros(2,1);dy(1) = y(2);dy(2) = -(B/J)*y(2) + (1/J)*u;控制主程序ex3.mclear all;close all;ts=0.001; %采样周期xk=zeros(2,1);%被控对象经A/D转换器的输出信号y的初值e_1=0;%误差e(k-1)初值u_1=0;%控制信号u(k-1)初值for k=1:1:2000 %k为采样步数time(k) = k*ts; %time中存放着各采样时刻rin(k)=0.50*sin(1*2*pi*k*ts); %计算输入信号的采样值para=u_1; % D/AtSpan=[0 ts];[tt,xx]=ode45('ex3f',tSpan,xk,[],para); %ode45解系统微分方程%xx有两列,第一列为tt时刻对应的y,第二列为tt时刻对应的y导数xk = xx(end,:); % A/D,提取xx中最后一行的值,即当前y和y导数yout(k)=xk(1); %xk(1)即为当前系统输出采样值y(k)e(k)=rin(k)-yout(k);%计算当前误差de(k)=(e(k)-e_1)/ts; %计算u(k)中微分项输出u(k)=20.0*e(k)+0.50*de(k);%计算当前u(k)的输出%控制信号限幅if u(k)>10.0u(k)=10.0;endif u(k)<-10.0u(k)=-10.0;end%更新u(k-1)和e(k-1)u_1=u(k);e_1=e(k);endfigure(1);plot(time,rin,'r',time,yout,'b');%输入输出信号图xlabel('time(s)'),ylabel('rin,yout');figure(2);plot(time,rin-yout,'r');xlabel('time(s)'),ylabel('error');%误差图程序运行结果显示表1所示。
《数字信号处理与DSP应用》课程论文题目:基于DSP的PID控制算法的实现学号:***********名:***班级:6班专业:电路与系统课程老师:黄乡生二零一二年二月二十日摘要:按偏差的比例、积分和微分进行控制的调节器称为PID调节器,PID 调节器是连续系统中技术成熟、应用最为广泛的一种调节器。
它构简单,参数易于调整,在长期的应用中已积累了丰富的经验。
特别在工业过程中,由于控制对象的精确数学模型难以建立,系统的参数又经常发生变化,运用现代控制理论分析综合要耗费很大的代价进行模型辨识,但往往不能得到预期的效果,所以人们常采用数字PID调节器,并根据经验进行在线整定。
这次课程设计将综合用数字信号处理DSP以及自动控制方面的知识,使用CCS集成开发环境进行代码的编译,仿真,才能完成了本次设计。
关键词:PID控制;DSP;仿真;CCSAbstrat: According to the proportion of deviation, integral and differential controls the regulator called the PID regulator, PID regulator is continuous system mature technology, the most widely used a regulator. Its simple structure, easy to adjust the parameters, in the long-term of the application has accumulated a wealth of experience. Especially in the industrial process, because the controlled objects, accurate mathematical model is hard to develop, the parameters of the system and often changes, the use of modern control theory of comprehensive analysis to take a lot of cost model identification, but often can't get the desired effect, so people often uses the digital PID regulator, and according to the experience of online setting. The courses are designed to be integrated with the digital signal processing DSP as well as the automatic control the knowledge of therespect, use CCS integrated development environment for the compilation of the code, simulation, to complete the design.Keywords: PID Control;DSP;simulation ;CCS前言在数字PID算法是目前一般控制领域中经常使用的自动控制算法,它依据给定的设定值,反馈值,以及比例系数,积分和微分时间,计算出一定的控制量,使被控对象能保持在设定的工作范围,并且可以自动的消除外部扰动。
至于参数的整定,根据响应的情况调,比如,响应慢了,我就增大kp,或者减小kd,超调大了,就减小kp或增大点kd,这个规律你可以看看PID三个参数的作用:)SetPoint =SetPoint- Verror;//与设定值比较,得到误差值tempi=PIDCal(&vPID, Error;+=tempi;// Value与Num[2]为共同体,共同体名laserLASERH=[0];LASERL=[1];}}/////////////////////////////////////////////////////////////////////////Title:PID参数初始化//Description: Proportion="0"//Integral=0//LastError=0//Input: PID的P、I控制常数和之前的误差量(PID *pp)//Return:void PIDInit (PID *pp)//PID参数初始化,都置0{memset ( pp,0,sizeof(PID));//memset()的函数,它可以一字节一字节地把整个数组设置为一个指定的值。
// memset()函数在头文件中声明,它把数组的起始地址作为其第一个参数,//第二个参数是设置数组每个字节的值,第三个参数是数组的长度(字节数,不是元素个数)。
//其函数原型为:void *memset(void*,int,unsigned);//头文件<>}/////////////////////////////////////////////////////////////////////////Title:增量式PID算法程序//Description:给出一个误差增量//Input: PID的P、I控制常数和之前的误差量(PID *pp)& 当前误差量(ThisError)//Return: 误差增量templ//////////////////////////////////////////////////////////////////////int PIDCal( PID *pp, int ThisError ){//增量式PID算法(需要控制的不是控制量的绝对值,而是控制量的增量)int pError,dError,iError;long templ;pError = ThisError-pp->LastError;iError = ThisError;dError = ThisError-2*(pp->LastError)+pp->PreError;//增量计算templ=pp->Proportion*pError + pp->Integral*iError+pp->Derivative*dError;//增量//存储误差用于下次运算pp->PreError= pp->LastError;pp->LastError = ThisError;return ((int)(templ>>8));}。
4.5.1数字PID 控制实验 1 标准PID 控制算法一.实验要求1. 了解和掌握连续控制系统的PID 控制的原理。
2. 了解和掌握被控对象数学模型的建立。
3. 了解和掌握数字PID 调节器控制参数的工程整定方法。
4. 观察和分析在标准PID 控制系统中,P.I.D 参数对系统性能的影响。
二.实验内容及步骤 ⑴ 确立模型结构本实验采用二个惯性环节串接组成实验被控对象,T1=0.2S ,T2=0.5S Ko=2。
S e T K s G τ-+⨯≈+⨯+=1S 110.2S 21S 5.01)(000⑵ 被控对象参数的确认被控对象参数的确认构成如图4-5-10所示。
本实验将函数发生器(B5)单元作为信号发生器,矩形波输出(OUT )施加于被测系统的输入端R ,观察矩形波从0V 阶跃到+2.5V 时被控对象的响应曲线。
图4-5-10 被控对象参数的确认构成实验步骤:注:将‘S ST ’用‘短路套’短接!① 在显示与功能选择(D1)单元中,通过波形选择按键选中‘矩形波’(矩形波指示灯亮)。
② B5的量程选择开关S2置下档,调节“设定电位器1”,使之矩形波宽度>2秒(D1单元左显示)。
③ 调节B5单元的“矩形波调幅”电位器使矩形波输出电压= 2.5V 左右(D1单元右显示)。
④ 构造模拟电路:按图4-5-10安置短路套及测孔联线,表如下。
(a )安置短路套 (b )测孔联线⑤ 运行、观察、记录:A)先运行LABACT 程序,选择界面的“工具”菜单选中“双迹示波器”(Alt+W )项,弹出双迹示波器的界面,点击开始,用虚拟示波器观察系统输入信号。
图4-5-11 被控对象响应曲线B) 在图4-5-112被控对象响应曲线上测得t1和t2。
通常取)∞=(3.0)(010Y t Y ,要求从图中测得1t ; 通常取)∞=(7.0)(020Y t Y ,要求从图中测得2t 。
计算0T 和τ:0.84730.3567t -1.204t )]t (y 1[ln -)]t (y 1[ln )]t (y 1[ln t )]t (y 1[n t 0.8473t t )]t (y 1[ln -)]t (y 1[ln t t T 212010201102122010120==-----=-=---=τC) 求得数字PID 调节器控制参数P K 、I T 、D T (工程整定法))/0.2(1)/0.37()/0.6(1)/0.5()/2.5(]27.0)/(35.1[10000200000T T T T T T T T T T K K D I P ττττττ+⨯=++⨯=+=据上式计算数字PID 调节器控制参数P K 、I T 、D T⑶ 数字PID 闭环控制系统实验模块号 跨接座号 1 A5 S5,S7,S10 2 A7 S2,S7,S9,P 3 B5‘S-ST ’1 输入信号R B5(OUT )→A5(H1)2 运放级联 A5A (OUTA )→A7(H1)3 示波器联接 ×1档B5(OUT )→B3(CH1) 4A7A (OUTA )→B3(CH2)数字PID 闭环控制系统实验构成见图4-5-12,观察和分析在标准PID 控制系统中,P.I.D 参数对系统性能的影响,分别改变P.I.D 参数,观察输出特性,填入实验报告,图4-5-12 数字PID 闭环控制系统实验构成实验步骤:注:将‘S ST ’用‘短路套’短接!① 在显示与功能选择(D1)单元中,通过波形选择按键选中‘矩形波’(矩形波指示灯亮)。
51单片机PID算法程序(一)PID算法(原创文章,转载请注明出处/tengjingshu) 比例,积分,微分的线性组合,构成控制量u(t),称为:比例(Proportional)、积分(Integrating)、微分(Differentiation)控制,简称PID控制图1控制器公式在实际应用中,可以根据受控对象的特性和控制的性能要求,灵活地采用不同的控制组合,构成比例(P)控制器比例+积分(PI)控制器比例+积分+微分(PID)控制器式中或式中控制系统中的应用在单回路控制系统中,由于扰动作用使被控参数偏离给定值,从而产生偏差。
自动控制系统的调节单元将来自变送器的测量值与给定值相比较后产生的偏差进行比例、积分、微分(PID)运算,并输出统一标准信号,去控制执行机构的动作,以实现对温度、压力、流量、也为及其他工艺参数的自动控制。
比例作用P只与偏差成正比;积分作用I是偏差对时间的积累;微分作用D 是偏差的变化率;比例(P)控制比例控制能迅速反应误差,从而减少稳态误差。
除了系统控制输入为0和系统过程值等于期望值这两种情况,比例控制都能给出稳态误差。
当期望值有一个变化时,系统过程值将产生一个稳态误差。
但是,比例控制不能消除稳态误差。
比例放大系数的加大,会引起系统的不稳定。
图2比例(P)控制阶跃响应积分(I)控制在积分控制中,控制器的输出与输入误差信号的积分成正比关系。
为了减小稳态误差,在控制器中加入积分项,积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。
这样,即使误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减少,直到等于零。
积分(I)和比例(P)通常一起使用,称为比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。
如果单独用积分(I)的话,由于积分输出随时间积累而逐渐增大,故调节动作缓慢,这样会造成调节不及时,使系统稳定裕度下降。
图3积分(I)控制和比例积分(PI)控制阶跃相应微分(D)控制在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。
编号:实验一普通PI控制方法的设计与实现一、实验目的1. 掌握数字PI及其算法的实现2. 熟悉在在keil环境下进行单片机程序的设计3. 熟悉仿真软件protues的使用二、实验设备及条件1. 计算机系统2. 编程软件keil4和仿真软件protues7.8三、实验原理及其实验步骤(1) PID算法的数字化实现在模拟系统中,PID算法的表达式为u(t)=K P[e(t)+1T I∫e(t)dt+T Dde(t)dt]式中u(t):调节器的输出信号;e(t):调节器的偏差信号,它等于测量值与给定值之差;Kp:调节器的比例系数;T I:调节器的积分时间;TD:调节器的微分时间;离散化的PID为:u(k)=K P[e(k)+TT I∑e(j)kj=0+T DT(e(k)−e(k−1))]Δt=T:采样周期,必须使T足够少,才能保证系统有一定的精度;E(k):第K次采样时的偏差值;E(k-1) :第K-1次采样时的偏差值;K:采样序号,K=0,1,2……;P(k-1):第K次采样时调节器的输出;上式计算复杂,经过化简为:u(k)=u(k−1)+K P[e(k)−e(k−1)]+K I e(k)+K D[e(k)−2e(k−1)+e(k −2)]式中:K I=K P TT I为积分系数K D=K P T DT为微分系数要计算第K次输出值u(k),只需要知道u(k-1),e(k),E(k-1),e(k-2)即可。
上式也称为位置型PID的位置控制算法。
在很多控制系统中,由于执行机构是采用布进电机进行控制,所以只要给一个增量信号即可。
因此得到增量型PID的位置控制算法。
∆u=K P[e(k)−e(k−1)]+K I e(k)+K D[e(k)−2e(k−1)+e(k−2)] (2) 控制系统的结构框图整个系统的控制框图如下所示:图1 PID控制系统结构框图在本次设计中,经过计算,被控对象的传递函数是:G(s)=1 (SCR)2+3SCR+1其中:C=10uf,R=20K;带入上式后可得:G(s)=10.04S2+0.6S+1显然是一个二阶系统。
工艺管道及仪表流程图(PID)校审提纲1总则1.1 编制目的工艺管道及仪表流程图(PID)是工艺系统专业人员最重要的设计成品,是工厂和装置安装设计的依据。
工艺管道及仪表流程图应能清楚地表示出设备、管道、阀门、管件及仪表等方面的内容。
为了保证工艺管道及仪表流程图编制的完整,确保设计质量,特编制本提纲。
本提纲提出了PID的校核要点和审核要点,指导校核人或审核人进行校核、审核工作,但不约束校核人、审核人注意的范围。
PID的校审由工艺系统专业校审人员、安全专业校审人员及仪表专业校审人员共同完成1.2 适用范围本提纲适用于PID设计成品图的校核、审核。
中间版PID的校核、审核可以参考。
1.3 相关文件《工艺系统专业基础工程设计阶段文件内容规定》《工艺系统专业详细工程设计阶段文件内容规定》《工艺系统专业设计质量控制程序》《管道及仪表流程图的版次及内容规定》《道及仪表流程图图例、符号规定》《工艺管道及仪表流程图绘制规定》《公用系统管道及仪表流程图绘制规定》《管道标志编制规定》《设计文件校审及签署规定》(QW-0407-95)《质量职责规定》(QW-0101)2 PID的校核要点2.1 设备校核2.1.1 设备是否齐全(包括备用设备),并标有正确位号、名称。
2.1.2 成套供货的机组有否清楚表示出制造厂供货内容、范围及界面条件。
2.1.3 塔、容器的安装标高及设备之间的相对标高该注的有否遗漏,已注的是否正确、合理。
2.1.4 设备管口是否表示齐全,其法兰的压力等级、口径与其连接管道的法兰等级、口径是否相一致,法兰体系是否相匹配。
2.1.5 与设备连接的公用系统管道及管径,对于有不同参数或等级的公用系统,有否标注其参数或等级2.1.6 某些表示设备特征的内件,如塔板形式等有否表示。
2.2 工艺管道、阀门、管道的校核2.2.1 检查工艺管道的设计是否满足各种情况下的操作要求(如开车、仃车、切换、不正常情况的处理、事故情况下的紧急处置等)。
基于遗传算法的PID参数整定1引言传统的比例、积分、微分控制,即PID控制具有算法简单、鲁棒性好和可靠性高等优点,已经被广泛用于工业生产过程。
但工程实际中,PID控制器的比例、积分和微分调节参数往往采用实验加试凑的方法由人工整定。
这不仅需要熟练的技巧,往往还相当费时。
更为重要的是,当被控对象特性发生变化,需要控制器参数作相应调整时,PID控制器没有自适应能力,只能依靠人工重新整定参数,由于经验缺乏,整定结果往往达不到最优值,难以满足实际控制的要求。
考虑生产过程的连续性以及参数整定费事费力,这种整定实际很难进行。
所以,人们从工业生产实际需要出发,基于常规PID控制器的基本原理,对其进行了各种各样的改进。
近年来许多学者提出了基于各种智能算法的PID整定策略,比如模糊PID、神经元网络PID等等。
然而,这些先进算法都要求对被控对象有很多的先验知识,在实际应用中往往难于做到。
随着计算技术的发展,遗传算法有了很大的发展。
将遗传算法用于控制器参数整定,已成为遗传算法的重要应用之一。
本文介绍基于遗传算法的PID参数整定设计方法。
这是一种寻求全局最优的控制器优化方法,且无需对目标函数微分,可提高参数优化效果,简化计算过程。
仿真实例表明该方法与其他传统寻优方法相比,在优化效果上具有一定的优势。
2遗传算法简介2.1 遗传算法的基本原理遗传算法是John H.Holland根据生物进化的模型提出的一种优化算法。
自然选择学说是进化论的中心内容。
根据进化论,生物的发展进化主要有三个原因:即遗传、变异和选择。
遗传算法基于自然选择和基因遗传学原理的搜索方法,将“优胜劣汰,适者生存”的生物进化原理引入待优化参数形成的编码串群体中,按照一定的适应度函数及一系列遗传操作对各个体进行筛选,从而使适应度高的个体被保留下来,组成新的群体;新群体包含上一代的大量信息,并且引入了新的优于上一代的个体。
这样周而复始,群体中各个体适应度不断提高,直至满足一定的极限条件。
2.1 介绍PID回路表/T96在S7-200中PID功能是通过PID指令功能块实现。
通过定时(按照采样时间)执行PID指令块,按照PID 运算规律,根据当时的给定、反馈、比例-积分-微分数据,计算出控制量。
PID指令块通过一个PID回路表交换数据,这个表是在V数据存储区中的开辟,长度为80字节(Micro/WIN4.0之前老版本,未增加PID自整定时回路表长度为36字节)。
只接受0.0 - 1.0之间的实数(实际上就是百分比)作为反馈、给定与控制输出的有效数值。
偏移量域格式类型描述0 过程变量(PVn)REAL 输入过程变量,必须在0.0~1.0之间4 设定值(SPn)REAL 输入设定值,必须在0.0~1.0之间8 输出(Mn)REAL 输入/输出输出值,必须在0.0~1.0之间12 增益(Kc)REAL 输入增益是比例常数,可正可负16 采样时间(Ts)REAL 输入采样时间,单位为秒,必须是正数20 积分时间或复位(Ti)REAL 输入积分时间或复位,单位是分钟24 微分时间或速率(Td)REAL 输入微分时间或速率,单位为分钟28 偏差(MX)REAL 输入/输出积分项前项,必须在0.0~1.0之间32 过程变量前值(PVn-1)REAL 输入/输出包含最后一次执行PID指令时存储的过程变量值36~79 保留给自整定变量表2.1.1. PID回路表2.2 通过PID指令块实现PID/35通过指令块实现PID,需要自己编程实现采样,较复杂,容易出错,也不能用PID控制面板进行调节,不建议使用,如果没有特殊要求,尽量使用PID向导。
由于PID指令块只接受0.0 - 1.0之间的实数(实际上就是百分比)作为反馈、给定与控制输出的有效数值。
因此,必须把外围实际的物理量与PID功能块需要的(或者输出的)数据之间进行转换。
这就是所谓输入/输出的转换与标准化处理。
《S7-200系统手册》上有详细的介绍。
(C) COP YRIGHT 2014 ANO Tech ************************************************ 文件名:ANO_FlyControl.cpp*描述:飞行控制***************************************************************** *****************/in clude "ANO_FlyC on trol.h" ANO_FlyCo ntrol fc; /*先整定内环,后整定外环。
参数整定找最佳,从小到大顺序查先是比例后积分,最后再把微分加曲线振荡很频繁,比例度盘要放大曲线漂浮绕大湾,比例度盘往小扳曲线偏离回复慢,积分时间往下降曲线波动周期长,积分时间再加长曲线振荡频率快,先把微分降下来动差大来波动慢。
微分时间应加长理想曲线两个波,前高后低4比1*/*ROLL和PIT轴向按照以上公式计算PID输出,但YAW轴比较特殊,因为偏航角法线方向刚好和地球重力平行,这个方向的角度无法由加速度计直接测得,需要增加一个电子罗盘来替代加速度计。
如果不使用罗盘的话,我们可以单纯的通过角速度积分来测得偏航角,缺点是由于积分环节中存在积分漂移,偏航角随着时间的推移会偏差越来越大。
我们不使用罗盘就没有比例项,只仅使用微分环节来控制。
*/ANO_FlyCo ntrol::ANO_FlyCo ntrol() {yawRate = 120;//重置PID参数PID_Reset();}//重置PID参数void ANO_FlyControl: ID_Reset(void){//因为YAW角度会漂移,所以参数和ROLL、PITCH不一样pid[PIDROLL].set_pid(70, 15, 120, 2000000); //ROLL 角度的内环控制系数,20000:积分上限pid[PIDPITCH].set_pid(70, 30, 120, 2000000);//PITCH 角度的内环控制系数pid[PID YAW].set_pid(100, 50, 0, 2000000); //YAW 角度的内环控制系数pid[PIDLEVEL].set_pid(280, 0, 0, 0); // 外环控制系数pid[PIDMAG].set_pid(15, 0, 0, 0); // 电子罗盘控制系数}/*【扫盲知识】串级PID :采用的角度P和角速度PID的双闭环PID算法------> 角度的误差被作为期望输入到角速度控制器中(角度的微分就是角速度)对于本系统则采用了将角度控制与角速度控制级联的方式组成整个串级PID控制器。
;********增量式PID控制算法程序***********;T、TD、TI、KP依次从30H,33H,36H,39H开始。
;A,B,C的值依次存在BLOCK1,BLOCK2,BLOCK3的地址里; 这里R(k)给的是定值;ORG 0000HBLOCK1 EQU 43H ;A,B ,CBLOCK2 EQU 46HBLOCK3 EQU 49HUK EQU 4CH ;存结果UKRK EQU 50HEK EQU 53H ;存放偏差值E(k)的始址EK1 EQU 56H ;存放E(k-1)的始址EK2 EQU 59H ;存放E(k-2)的始址CK EQU 5CH ;采样数据始址BUFF EQU 60H ;暂存区BUFF1 EQU 63HBUFF2 EQU 66HREC EQU 69HTEST:MOV RK,#01H ;常数Rk的BCD码浮点数MOV RK+1,#12H ;1.25MOV RK+2,#50HMOV 3CH,#01H ;常数1的BCD码浮点数MOV 3DH,#10HMOV 3EH,#00HMOV 40H,#01H ;常数2的BCD码浮点数MOV 41H,#20HMOV 42H,#00HMOV 30H,#01H ;T的BCD 码浮点数MOV 31H,#23H ;2.34MOV 32H,#40HMOV 33H,#01H ;Td的BCD码浮点数MOV 34H,#35H ;3.54MOV 35H,#40HMOV 36H,#01H ;Ti的BCD码浮点数MOV 37H,#11H ;1.12MOV 38H,#20HMOV 39H,#01H ;Kp的BCD码浮点数MOV 3AH,#12H ;1.25MOV 3BH,#50HMOV R0,#RK ;指向BCD码浮点操作数LCALL BTOF ;将其转换成二进制浮点操作数MOV R0,#3CHLCALL BTOFMOV R0,#40HLCALL BTOFMOV R0,#39HLCALL BTOFMOV R0,#36H ;指向BCD码浮点操作数Ti LCALL BTOF ;将其转换成二进制浮点操作数MOV R0,#33H ;指向BCD码浮点操作数Td LCALL BTOF ;将其转换成二进制浮点操作数MOV R0,#30H ;指向BCD码浮点操作数T LCALL BTOF ;将其转换成二进制浮点操作数MOV R1, #BUFF1 ;保存30H中的值即T值LCALL FMOVR0MOV R1, #36H ;计算A值(1+T/Ti+Td/T).Kp LCALL FDIVMOV R1,#3CH ;常数1LCALL FADDMOV R0,#33H ;保存33H中的值MOV R1,#BUFFLCALL FMOVR0MOV R1,#BUFF1LCALL FDIVMOV R1,#30H ;30H里存的是T/Ti+1 LCALL FADDMOV R1,#39HLCALL FMULMOV R1 ,#BLOCK1 ;将结果保存在BLOCK1中LCALL FMOVR0MOV R1,#BUFF1 ;30H恢复原值MOV R0,#30HLCALL FMOVMOV R1,#BUFF ;33H恢复原值MOV R0,#33HLCALL FMOVMOV R0,#40H ;计算B的值Kp.(1+2.Td/T) MOV R1,#33HLCALL FMULMOV R1,#30HLCALL FDIVMOV R1,#3CHLCALL FADDMOV R1,#39HLCALL FMULMOV R1,#BLOCK2 ;保存B值到BLOCK2中LCALL FMOVR0MOV R0,#39H ;计算C的值Kp.Td/TMOV R1,#33HLCALL FMULMOV R1,#30HLCALL FDIVMOV R1,#BLOCK3 ;保存C值到BLOCK3中LCALL FMOVR0MOV R0,#EK1 ;将EK1,EK2设初值0 LCALL FCLRMOV R0,#EK2LCALL FCLRMOV REC,#03H ;设置采样次数LOOP: MOV CK,#7eH ;采样数据暂时给了一个定值MOV CK+1,#21H ;0.002112MOV CK+2,#12HMOV R0,#CKLCALL BTOFMOV R0,#RK ;保存R(k)中的值MOV R1,#BUFFLCALL FMOVR0MOV R1,#CKLCALL FSUB ;计算R(k)-C(k)的值送给E(k)MOV R1,#EKLCALL FMOVR0MOV R1,#BUFF ;恢复RK的值释放BUFFMOV R0,#RKLCALL FMOVMOV R0,#BLOCK2 ;将B.e(k-1)的值暂存在BUFF1中MOV R1,#BUFF ;保存BLCALL FMOVR0MOV R1,#EK1LCALL FMULMOV R1,#BUFF1LCALL FMOVR0MOV R1,#BUFF ;恢复B释放BUFFLCALL FMOVMOV R0,#BLOCK3 ;将C.e(K-2)的值暂存在BUFF2中MOV R1,#BUFF ;保存CLCALL FMOVR0MOV R1,#EK2LCALL FMULMOV R1,#BUFF2LCALL FMOVR0MOV R1,#BUFF ;恢复C释放BUFFLCALL FMOVMOV R0,#BLOCK1 ;A.E(k)MOV R1,#BUFFLCALL FMOVR0MOV R1,#EKLCALL FMULMOV R1,#BUFF1 ;计算Uk值A.E(k)-B.E(k-1)+C.E(k-2) LCALL FSUBMOV R1,#BUFF2LCALL FADDMOV R1,#UK ;保存结果到UK中LCALL FMOVR0MOV R1,#BUFF ;恢复A 释放BUFFLCALL FMOVMOV R0,#UK ;UK转换成BCD码浮点数输出LCALL FTOBMOV R1,#EK1 ;将E(k-1)-->E(k-2),E(k)-->E(k-1)MOV R0,#EK2LCALL FMOVMOV R1,#EKMOV R0,#EK1LCALL FMOVLCALL DELAY ;等待采样时刻DJNZ REC,NEXT1SJMP $NEXT1: LJMP LOOPDELAY: MOV R7,#02HDELAY1: MOV R6,#0FFHDELAY2: DJNZ R6,DELAY2DJNZ R7,DELAY1RET; (1)标号:FSDT 功能:浮点数格式化;入口条件:待格式化浮点操作数在[R0]中。
;出口信息:已格式化浮点操作数仍在[R0]中。
;影响资源:PSW、A、R2、R3、R4、位1FH 堆栈需求:6字节FSDT: LCALL MVR0 ;将待格式化操作数传送到第一工作区中LCALL RLN ;通过左规完成格式化LJMP MOV0 ;将已格式化浮点操作数传回到[R0]中; (2)标号:FADD 功能:浮点数加法;入口条件:被加数在[R0]中,加数在[R1]中。
;出口信息:OV=0时,和仍在[R0]中,OV=1时,溢出。
;;影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节FADD: CLR F0 ;设立加法标志SJMP AS ;计算代数和; (3)标号:FSUB 功能:浮点数减法;入口条件:被减数在[R0]中,减数在[R1]中。
;出口信息:OV=0时,差仍在[R0]中,OV=1时,溢出。
;影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节FSUB: SETB F0 ;设立减法标志AS: LCALL MVR1 ;计算代数和。
先将[R1]传送到第二工作区MOV C,F0 ;用加减标志来校正第二操作数的有效符号CLR A ; ********应加的一条语句RRC AXRL A,@R1MOV C,ACC.7ASN: MOV 1EH,C ;将第二操作数的有效符号存入位1EH中XRL A,@R0 ;与第一操作数的符号比较RLC AMOV F0,C ;保存比较结果LCALL MVR0 ;将[R0]传送到第一工作区中LCALL AS1 ;在工作寄存器中完成代数运算MOV0: INC R0 ;将结果传回到[R0]中的子程序入口INC R0MOV A,R4 ;传回尾数的低字节MOV @R0,ADEC R0MOV A,R3 ;传回尾数的高字节MOV @R0,ADEC R0MOV A,R2 ;取结果的阶码MOV C,1FH ;取结果的数符MOV ACC.7,C ;拼入阶码中MOV @R0,ACLR ACC.7 ;不考虑数符CLR OV ;清除溢出标志CJNE A,#3FH,MV01;阶码是否上溢?******** 应为#40HSETB OV ;设立溢出标志MV01: MOV A,@R0 ;取出带数符的阶码RETMVR0: MOV A,@R0 ;将[R0]传送到第一工作区中的子程序MOV C,ACC.7 ;将数符保存在位1FH中MOV 1FH,CMOV C,ACC.6 ;将阶码扩充为8bit补码MOV ACC.7,CMOV R2,A ;存放在R2中INC R0MOV A,@R0 ;将尾数高字节存放在R3中MOV R3,A ;INC R0MOV A,@R0 ;将尾数低字节存放在R4中MOV R4,ADEC R0 ;恢复数据指针DEC R0RETMVR1: MOV A,@R1 ;将[R1]传送到第二工作区中的子程序MOV C,ACC.7 ;将数符保存在位1EH中MOV 1EH,CMOV C,ACC.6 ;将阶码扩充为8bit补码MOV ACC.7,CMOV R5,A ;存放在R5中INC R1MOV A,@R1 ;将尾数高字节存放在R6中MOV R6,AINC R1MOV A,@R1 ;将尾数低字节存放在R7中MOV R7,ADEC R1 ;恢复数据指针DEC R1RETAS1: MOV A,R6 ;读取第二操作数尾数高字节ORL A,R7JZ AS2 ;第二操作数为零,不必运算MOV A,R3 ;读取第一操作数尾数高字节ORL A,R4JNZ EQMOV A,R6 ;第一操作数为零,结果以第二操作数为准MOV R3,AMOV A,R7MOV R4,AMOV A,R5MOV R2,AMOV C,1EHMOV 1FH,CAS2: RETEQ: MOV A,R2 ;对阶,比较两个操作数的阶码XRL A,R5JZ AS4 ;阶码相同,对阶结束JB ACC.7,EQ3;阶符互异MOV A,R2 ;阶符相同,比较大小CLR CSUBB A,R5JC EQ4EQ2: CLR C ;第二操作数右规一次MOV A,R6 ;尾数缩小一半RRC AMOV R6,AMOV A,R7RRC AMOV R7,AINC R5 ;阶码加一ORL A,R6 ;尾数为零否?JNZ EQ ;尾数不为零,继续对阶MOV A,R2 ;尾数为零,提前结束对阶MOV R5,ASJMP AS4EQ3: MOV A,R2 ;判断第一操作数阶符JNB ACC.7,EQ2;如为正,右规第二操作数EQ4: CLR CLCALL RR1 ;第一操作数右规一次ORL A,R3 ;尾数为零否?JNZ EQ ;不为零,继续对阶MOV A,R5 ;尾数为零,提前结束对阶MOV R2,AAS4: JB F0,AS5 ;尾数加减判断MOV A,R4 ;尾数相加ADD A,R7MOV R4,AMOV A,R3ADDC A,R6MOV R3,AJNC AS2LJMP RR1 ;有进位,右规一次AS5: CLR C ;比较绝对值大小MOV A,R4SUBB A,R7MOV B,AMOV A,R3SUBB A,R6JC AS6MOV R4,B ;第一尾数减第二尾数MOV R3,ALJMP RLN ;结果规格化AS6: CPL 1FH ;结果的符号与第一操作数相反CLR C ;结果的绝对值为第二尾数减第一尾数MOV A,R7SUBB A,R4MOV R4,AMOV A,R6SUBB A,R3MOV R3,ARLN: MOV A,R3 ;浮点数规格化ORL A,R4 ;尾数为零否?JNZ RLN1MOV R2,#0C0H;阶码取最小值RETRLN1: MOV A,R3JB ACC.7,RLN2;尾数最高位为一否?CLR C ;不为一,左规一次LCALL RL1SJMP RLN ;继续判断RLN2: CLR OV ;规格化结束RETRL1: MOV A,R4 ;第一操作数左规一次RLC A ;尾数扩大一倍MOV R4,AMOV A,R3RLC AMOV R3,ADEC R2 ;阶码减一CJNE R2,#0BFH,RL1E;阶码下溢否?;CLR AMOV R3,A ;阶码下溢,操作数以零计MOV R4,AMOV R2,#0C0H ;RL1E: CLR OVRETRR1: MOV A,R3 ;第一操作数右规一次RRC A ;尾数缩小一半MOV R3,AMOV A,R4RRC AMOV R4,AINC R2 ;阶码加一CLR OV ;清溢出标志CJNE R2,#40H,RR1E;阶码上溢否?MOV R2,#3FH ;阶码溢出SETB OVRR1E: RET; (4) 标号:FMUL 功能:浮点数乘法;入口条件:被乘数在[R0]中,乘数在[R1]中。