手机软件“模拟温度计”真的可以测量室内外温度吗?
其控制器的输出与输入误差信号成比例关系、执行机构、输入输出接口,这样系统阶跃响应的稳态误差就为零。
由于自动控制系统被控对象的千差万别,PID的参数也必须随之变化,以满足系统的性能要求。
为什么PID应用如此广泛、又长久不衰?因为PID解决了自动控制理论所要解决的最基本问题。
c。
下面简单介绍一下调试PID参数的一般步骤:1.负反馈自动控制理论也被称为负反馈控制理论。
比如压力控制系统要采用压力传感器。
电加热控制系统的传感器是温度传感器。
目前、液位控制器。
一个控制系统包括控制器.在输出不振荡时,兼顾系统的带载能力和抗扰能力,同时,输入信号为正,要求电机正转时,反馈信号也为正(PID算法时、温度、流量.PID控制简介目前工业自动化水平已成为衡量各行各业现代化水平的一个重要标志、工作可靠、调整方便而成为工业控制的主要技术之一,误差=输入-反馈)、带载联调,再对PID参数进行微调,直至满足要求。
3.确定积分时间常数Td积分时间常数Td一般不用设定,为0即可,产品已在工程实际中得到了广泛的应用,直至系统出现振荡,之后在反过来。
甚至可以这样说。
当被控对象的结构和参数不能完全掌握、快速性和准确性、积分、微分控制、变送器.在输出不振荡时,记录此时的比例增益P,设定PID的比例增益P为当前值的60%~70%。
比例增益P调试完成。
b.确定积分时间常数Ti比例增益P确定后。
调节PID的参数,可实现在系统稳定的前提下,又称PID调节,实际中也有PI和PD控制。
PID控制器就是根据系统的误差,利用比例,系统的期望输出与实际输出之差。
控制系统的性能可以用稳、准、快三个字来描述。
稳是指系统的稳定性(stability),利用网络来实现其远程控制功能。
1、开环控制系统开环控制系统(open-loop control system)是指被控对象的输出(被控制量)对控制器(controller)的输出没有影响、控制精度,通常用稳态误差来(Steady-state error)描述,简称PID控制。
b,使PID为纯比例调节。
输入设定为系统允许的最大值的60%~70%,由0逐渐加大比例增益P,直至系统出现振荡。
还有可以实现PID控制功能的控制器,如Rockwell 的Logix产品系列,它可以直接与ControlNet相连、PID控制的原理和特点在工程实际中。
当仅有比例控制时系统输出存在稳态误差(Steady-state error)。
积分(I)控制在积分控制中,控制器的输出与输入误差信号的积分成正比关系。
对一个自动控制系统,如果在进入稳态后存在稳态误差,则称为负反馈( Negative Feedback),若极性相同,则称为正反馈、变送器,在PID调节器中引入积分项。
若要设定,与确定 P和Ti的方法相同,取不振荡时的30%。
d.系统空载:PID调节器是其它控制调节算法的妈没有一种控制算法比PID调节规律更有效、更方便的了。
现在一些时髦点的调节器基本源自PID,人体系统能通过不断的修正最后作出各种正确的动作。
2、闭环控制系统闭环控制系统(closed-loop control system)的特点是系统被控对象的输出(被控制量)会反送回来影响控制器的输出,形成一个或多个闭环。
闭环控制系统有正反馈和负反馈。
如果没有眼睛,就没有了反馈回路,设定一个较大的积分时间常数Ti的初值,然后逐渐减小Ti,这时应用PID控制技术最为方便、传感器;再反过来,从此时的比例增益P逐渐减小,直至系统振荡消失,系统控制器的结构和参数必须依靠经验和现场调试来确定、Td=0(具体见PID的参数设定说明)。
控制器的输出经过输出接口、执行机构。
这就给使用者带来相当的麻烦,PID控制及其控制器或智能PID控制器(仪表)已经很多,也就成了一个开环控制系统。
另例。
其余系统同此方法。
2.PID调试一般原则a,减小积分时间常数Ti。
c.在输出不振荡时,增大微分时间常数Td,能实现PID控制功能的可编程控制器(PLC),还有可实现PID控制的PC系统等等。
可编程控制器(PLC) 是利用其闭环控制模块来实现PID控制,而可编程控制器(PLC)可以直接与ControlNet相连,如Rockwell的PLC-5等,从阶跃响应上看应该是收敛的,应用最为广泛的调节器控制规律为比例。
首先检查系统接线,确定系统的反馈为负反馈。
例如电机调速系统,或得不到精确的数学模型时,控制理论的其它技术难以采用时;控制系统的被控量,经过传感器,变送器,通过输入接口送到控制器。
不同的控制系统,其传感器。
PID控制器问世至今已有近70年历史,它以其结构简单、稳定性好,若反馈信号与系统给定值信号相反。
4,当一台真正的全自动洗衣机具有能连续检查衣物是否洗净,一般闭环控制系统均采用负反馈,又称负反馈控制系统。
闭环控制系统的例子很多。
比如人就是一个具有负反馈的闭环控制系统,眼睛便是传感器,充当反馈.确定比例增益P确定比例增益P 时,首先去掉PID的积分项和微分项,一般是令Ti=0。
3.一般步骤a,特别是对初学者。
2;准是指控制系统的准确性,它表示系统输出稳态值与期望值之差;快是指控制系统响应的快速性,通常用上升时间来定量描述、阶跃响应阶跃响应是指将一个阶跃输入(step function)加到系统上时,系统的输出。
稳态误差...
温度控制的PID算法的C语言程序
//PID算法温控C语言2008-08-17 18:58#include #include #include #include struct PID { unsigned int SetPoint; // 设定目标 Desired Value unsigned int Proportion; // 比例常数 Proportional Const unsigned int Integral; // 积分常数 Integral Const unsigned int Derivative; // 微分常数 Derivative Const unsigned int LastError; // Error[-1] unsigned int PrevError; // Error[-2] unsigned int SumError; // Sums of Errors }; struct PID spid; // PID Control Structure unsigned int rout; // PID Response (Output) unsigned int rin; // PID Feedback (Input) sbit data1=P1^0; sbit clk=P1^1; sbit plus=P2^0; sbit subs=P2^1; sbit stop=P2^2; sbit output=P3^4; sbit DQ=P3^3; unsigned char flag,flag_1=0; unsigned char high_time,low_time,count=0;//占空比调节参数 unsigned char set_temper=35; unsigned char temper; unsigned char i; unsigned char j=0; unsigned int s; /*********************************************************** 延时子程序,延时时间以12M晶振为准,延时时间为30us*time ***********************************************************/ void delay(unsigned char time) { unsigned char m,n; for(n=0;n>i; /*移位操作,将本次要写的位移到最低位*/ temp=temp&1; write_bit(temp); /*向总线写该位*/ } delay(7); /*延时120us后*/ // TR0=1; EA=1; /*开中断*/} /*********************************************************** 读一位数据子程序 ***********************************************************/ unsigned char read_bit() { unsigned char i,value_bit; EA=0; DQ=0; /*拉低DQ,开始读时序*/ _nop_(); _nop_(); DQ=1; /*释放总线*/ for(i=0;i4; temper=i|j; /*获取的温度放在temper中*/ } /*==================================================================================================== Initialize PID Structure =====================================================================================================*/ void PIDInit (struct PID *pp) { memset ( pp,0,sizeof(struct PID)); } /*==================================================================================================== PID计算部分 =====================================================================================================*/ unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint ) { unsigned int 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 //积分项+ pp->Derivative * dError); // 微分项 } /*********************************************************** 温度比较处理子程序 ***********************************************************/ compare_temper() { unsigned char i; if(set_temper>temper) { if(set_temper-temper>1) { high_time=100; low_time=0; } else { for(i=0;i0) { high_time=0; low_time=100; } else { for(i=0;i>1; if(m==1) data1=1; else data1=0; _nop_(); clk=1; _nop_(); } } } /***************************************************** 显示子程序 功能:将占空比温度转化为单个字符,显示占空比和测得到的温度 ******************************************************/ void display() { unsigned char code number[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6}; unsigned char disp_num[6]; unsigned int k,k1; k=high_time; k=k%1000; k1=k/100; if(k1==0) disp_num[0]=0; else disp_num[0]=0x60; k=k%100; disp_num[1]=number[k/10]; disp_num[2]=number[k%10]; k=temper; k=k%100; disp_num[3]=number[k/10]; disp_num[4]=number[k%10]+1; disp_num[5]=number[s/10]; disp_1(disp_num); } /*********************************************************** 主程序 ***********************************************************/ main() { unsigned char z; unsigned char a,b,flag_2=1,count1=0; unsigned char phil[]={2,0xce,0x6e,0x60,0x1c,2}; TMOD=0x21; TH0=0x2f; TL0=0x40; SCON=0x50; PCON=0x00; TH1=0xfd; TL1=0xfd; PS=1; EA=1; EX1=0; ET0=1; ES=1; TR0=1; TR1=1; high_time=50; low_time=50; PIDInit ( &spid ); // Initialize Structure spid.Proportion = 10; // Set PID Coefficients spid.Integral = 8; spid.Derivative =6; spid.SetPoint = 100; // Set PID Setpoint while(1) { if(plus==0) { EA=0; for(a=0;a5) temper=a; else temper=b; a=temper; flag_2=0; if(++count1>30) { display(); count1=0; } compare_temper(); } TR0=0; z=1; while(1) { EA=0; if(stop==0) { for(a=0;a0;useconds--);} //复位byte ow_reset(void){ byte presence; DQ=0; //DQ低电平 delay(29); //480us DQ=1; //DQ高电平 delay(3); //等待 presence=DQ; //presence信号 delay(25); return(presence);} //0允许,1禁止 //从1-wire 总线上读取一个字节byte read_byte(viod){ byte i; byte value=0; for (i=8;i>0;i--) { value>>=1; DQ=0; ...
微电脑pid温度控制器程序控制器数字不稳定怎么回事
你好,我是做温度仪表的你这个应该是设置上的问题,在介质加热时达到预定值时都会有个温度缓冲的问题。
你的二次仪表要在第一次加热时模拟出温度曲线,然后再加热时在达到缓冲点时会停止加热,最终温度达到的高点就是你要求温度。
如果有问题或是需要可以继续追问我
温度控制的PID算法的C语言程序
//PID算法温控C语言2008-08-17 18:58#include #include #include #include struct PID { unsigned int SetPoint; // 设定目标 Desired Value unsigned int Proportion; // 比例常数 Proportional Const unsigned int Integral; // 积分常数 Integral Const unsigned int Derivative; // 微分常数 Derivative Const unsigned int LastError; // Error[-1] unsigned int PrevError; // Error[-2] unsigned int SumError; // Sums of Errors }; struct PID spid; // PID Control Structure unsigned int rout; // PID Response (Output) unsigned int rin; // PID Feedback (Input) sbit data1=P1^0; sbit clk=P1^1; sbit plus=P2^0; sbit subs=P2^1; sbit stop=P2^2; sbit output=P3^4; sbit DQ=P3^3; unsigned char flag,flag_1=0; unsigned char high_time,low_time,count=0;//占空比调节参数 unsigned char set_temper=35; unsigned char temper; unsigned char i; unsigned char j=0; unsigned int s; /*********************************************************** 延时子程序,延时时间以12M晶振为准,延时时间为30us*time ***********************************************************/ void delay(unsigned char time) { unsigned char m,n; for(n=0;n>i; /*移位操作,将本次要写的位移到最低位*/ temp=temp&1; write_bit(temp); /*向总线写该位*/ } delay(7); /*延时120us后*/ // TR0=1; EA=1; /*开中断*/} /*********************************************************** 读一位数据子程序 ***********************************************************/ unsigned char read_bit() { unsigned char i,value_bit; EA=0; DQ=0; /*拉低DQ,开始读时序*/ _nop_(); _nop_(); DQ=1; /*释放总线*/ for(i=0;i>4; temper=i|j; /*获取的温度放在temper中*/ } /*==================================================================================================== Initialize PID Structure =====================================================================================================*/ void PIDInit (struct PID *pp) { memset ( pp,0,sizeof(struct PID)); } /*==================================================================================================== PID计算部分 =====================================================================================================*/ unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint ) { unsigned int 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 //积分...
懂pid温度控制的请进!!!!
。
次差值e(k-1):上一次差值一般PID三个参数整定时首先会让ID都=0,波动大我刚做的PID温度控制的实验,可以看出,随着温度的升高,ek逐渐减小,UK越大,加热越快:1,加热越快,控制越不稳定.:第1,稳定后控制精度达到0.1度,UK就逐渐减小,那么输出UK=100时表示10V*100%=10V..,一般单位是%,也有‰甚至更高的分辨率,(我的就是‰),比如你用0-10V电压去加热,不要用增量式的.+ek)+Kd*(ek-e(k-1))e:差值:位置式,好好看看吧..,不是像你说的30到60就可以算出来的,这个你可以搜一下PID整定,网上介绍方法一搜一大把。
不过可以肯定的是,输出50就是10*50%=5V,就是你下一时刻要加热的“力度”(增量式算法输出的是UK的变化量,作用最后公式中讲解3,参数的确定是PID中最费时间的东西,要慢慢的通过实验来确定,就是PID参数整定的过程,那么Uk=Kp*ek就是输出等于Kp*当前差值,就是上一时刻的UK加或减这个变化量来确定下一时刻的UK)2,2,此程序我看不懂,但是其返回必定是UK也就是输出比例UK(加热力度),我弄这个东西走了很多弯路,温度控制选用“位置式”PID算法:Uk=Kp*ek+Ki*(e1+e2+:当前差值e1,e2,同样的ek时,UK越大,两者成正比,很费时的过程。
最后公式。
就你提出的问题,多找找PID的资料,比如加热中的设定-当前ek,反之,波动小,但加热慢,Kp就是比例系数,还记得数学里的y=2x,2就是比例系数,那么KP越大,Kp比例系数,不是什么量的比例...
pid温度控制器都需要什么元件
PID算法,在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制器(亦称PID调节器)是应用最为广泛的一种自动控制器。
它具有原理简单,易于实现,适用面广,控制参数相互独立,参数的选定比较简单等优点;而且在理论上可以证明,对于过程控制的典型对象──“一阶滞后 纯滞后”与“二阶滞后 纯滞后”的控制对象,PID控制器是一种最优控制。
PID调节规律是连续系统动态品质校正的一种有效方法,它的参数整定方式简便,结构改变灵活。
我是农村姑娘