首页 温度控制的PID算法的C语言程序

温度控制的PID算法的C语言程序

举报
开通vip

温度控制的PID算法的C语言程序我的题目是:基于PID算法的温度控制系统 89C51单片机,通过键盘输入预设值,与DS18B20测得的实际值做比较,然后驱动制冷或加热电路。用keil C语言来实现PID的控制。 最佳答案 //PID算法温控C语言2008-08-17 18:58 #include #include #include #include struct PID { unsigned int SetPoint; // 设定目标 Desired Value unsigned int Proport...

温度控制的PID算法的C语言程序
我的 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 目是:基于PID算法的温度控制系统 89C51单片机,通过键盘输入预设值,与DS18B20测得的实际值做比较,然后驱动制冷或加热电路。用keil C语言来实现PID的控制。 最佳 答案 八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案 //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<2;i++){} value_bit=DQ; EA=1; return(value_bit); } /*********************************************************** 读一字节数据子程序 ***********************************************************/ unsigned char read_byte() { unsigned char i,value=0; EA=0; for(i=0;i<8;i++) { if(read_bit()) /*读一字节数据,一个时序中读一次,并作移位处理*/ value|=0x01<>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 //积分项 + 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;i<10;i++) { get_temper(); rin = s; // Read Input rout = PIDCalc ( &spid,rin ); // Perform PID Interation } if (high_time<=100) high_time=(unsigned char)(rout/800); else high_time=100; low_time= (100-high_time); } } else if(set_temper<=temper) { if(temper-set_temper>0) { high_time=0; low_time=100; } else { for(i=0;i<10;i++) { get_temper(); rin = s; // Read Input rout = PIDCalc ( &spid,rin ); // Perform PID Interation } if (high_time<100) high_time=(unsigned char)(rout/10000); else high_time=0; low_time= (100-high_time); } } // else // {} } /***************************************************** T0中断服务子程序,用于控制电平的翻转 ,40us*100=4ms周期 ******************************************************/ void serve_T0() interrupt 1 using 1 { if(++count<=(high_time)) output=1; else if(count<=100) { output=0; } else count=0; TH0=0x2f; TL0=0xe0; } /***************************************************** 串行口中断服务程序,用于上位机通讯 ******************************************************/ void serve_sio() interrupt 4 using 2 { /* EA=0; RI=0; i=SBUF; if(i==2) { while(RI==0){} RI=0; set_temper=SBUF; SBUF=0x02; while(TI==0){} TI=0; } else if(i==3) { TI=0; SBUF=temper; while(TI==0){} TI=0; } EA=1; */ } void disp_1(unsigned char disp_num1[6]) { unsigned char n,a,m; for(n=0;n<6;n++) { // k=disp_num1[n]; for(a=0;a<8;a++) { clk=0; m=(disp_num1[n]&1); disp_num1[n]=disp_num1[n]>>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;a<5;a++) for(b=0;b<102;b++){} if(plus==0) { set_temper++; flag=0; } } else if(subs==0) { for(a=0;a<5;a++) for(b=0;a<102;b++){} if(subs==0) { set_temper--; flag=0; } } else if(stop==0) { for(a=0;a<5;a++) for(b=0;b<102;b++){} if(stop==0) { flag=0; break; } EA=1; } get_temper(); b=temper; if(flag_2==1) a=b; if((abs(a-b))>5) 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;a<5;a++) for(b=0;b<102;b++){} if(stop==0) disp_1(phil); // break; } EA=1; } } //DS18b20 子程序 #include sbit DQ=P2^1; //定义端口 typedef unsigned char byte; typedef unsigned int word; //延时 void delay(word useconds) { for(;useconds>0;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; DQ=1; delay(1); if(DQ)value|=0x80; delay(6); } return(value); } //向1-wire总线上写一个字节 void write_byte(char val) { byte i; for (i=8;i>0;i--) //一次写一个字节 { DQ=0; DQ=val&0x01; delay(5); DQ=1; val=val/2; } delay(5); } //读取温度 char Read_Temperature(void) { union{ byte c[2]; int x; }temp; ow_reset(); write_byte(0xcc); write_byte(0xBE); temp.c[1]=read_byte(); temp.c[0]=read_byte(); ow_reset(); write_byte(0xCC); write_byte(0x44); return temp.x/2; } 参考资料:你把这两个程序组合就可以了 PID算法         温底控制PID的算法 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 及实现 - PID 简介     PID(Proportional Integral Derivative)控制是控制工程中技术成熟、应用广泛的一种控制策略,经过长期的工程实践,已形成了一套完整的控制方法和典型的结构。它不仅适用于数学模型已知的控制系统中,而且对于大多数数学模型难以确定的工业过程也可应用,在众多工业过程控制中取得了满意的应用效果。     PID 工作基理:由于来自外界的各种扰动不断产生,要想达到现场控制对象值保持恒定的目的,控制作用就必须不断的进行。若扰动出现使得现场控制对象值(以下简称被控参数)发生变化,现场检测元件就会将这种变化采集后经变送器送至PID 控制器的输入端,并与其给定值(以下简称SP 值)进行比较得到偏差值(以下简称e 值),调节器按此偏差并以我们预先设定的整定参数控制规律发出控制信号,去改变调节器的开度,使调节器的开度增加或减少,从而使现场控制对象值发生改变,并趋向于给定值(SP 值),以达到控制目的 ,如图 1 所示,其实PID 的实质就是对偏差(e 值)进行比例、积分、微分运算,根据运算结果控制执行部件的过程。   图1 模拟PID 控制系统原理图     PID 控制器的控制规律可以描述为:   (1)     比例(P)控制能迅速反应误差,从而减小稳态误差。但是,比例控制不能消除稳态误差。比例放大系数的加大,会引起系统的不稳定。积分(I)控制的作用是:只要系统有误差存在,积分控制器就不断地积累,输出控制量,以消除误差。因而,只要有足够的时间,积分控制将能完全消除误差,使系统误差为零,从而消除稳态误差。积分作用太强会使系统超调加大,甚至使系统出现振荡。微分(D)控制可以减小超调量,克服振荡,使系统的稳定性提高,同时加快系统的动态响应速度,减小调整时间,从而改善系统的动态性能。根据不同的被控对象的控制特性,又可以分为P、PI、PD、PID 等不同的控制模型。 数字PID 的实现     在连续-时间控制系统(模拟PID 控制系统)中,PID 控制器应用得非常广泛。其设计技术成熟,长期以来形成了典型的结构,参数整定方便,结构更改灵活,能满足一般的控制要求。随着计算机的快速发展,人们将计算机引入到PID 控制领域,也就出现了数字式PID 控制。     由于计算机基于采样控制理论,计算方法也不能沿袭传统的模拟PID 控制算法(如公式1 所示),所以必须将控制模型离散化,离散化的方法:以T 为采样周期,k 为采样序号,用求和的形式代替积分,用增量的形式(求差)代替微分,这样可以将连续的PID 计算公式离散:  (2) 式1 就可以离散为:  (3) 或者:  (4)     这样就可以让计算机或者单片机通过采样的方式实现PID 控制,具体的PID 控制又分为位置式PID 控制和增量式PID 控制,公式4 给出了控制量的全部大小,所以称之为全量式或者位置式控制;如果计算机只对相邻的两次作计算,只考虑在前一次基础上,计算机输出量的大小变化,而不是全部输出信息的计算,这种控制叫做增量式PID 控制算法,其实质就是求Δμ的大小,而   Δμk =μk -μk-1 ;所以将式4 做自减变换有:  (5) 其中   温度控制PID 算法设计     本设计利用了上面所介绍的位置式PID 算法,将温度传感器采样输入作为当前输入,然后与设定值进行相减得偏差ek,然后再对之进行PID 运算产生输出结果fOut,然后让fOut 控制定时器的时间进而控制加热器。为了方便PID 运算,首先建立一个PID 的结构体数据类型,该数据类型用于保存PID 运算所需要的P、I、D 系数,以及设定值,历史误差的累加和等信息: typedef struct PID { float SetPoint; // 设定目标 Desired Value float Proportion; // 比例系数 Proportional Const float Integral; // 积分系数 Integral Const float Derivative; // 微分系数 Derivative Const int LastError; // 上次偏差 int SumError; // 历史误差累计值 } PID; PID stPID; // 定义一个stPID 变量     下面是PID 运算的算法程序,通过PID 运算返回fOut,fOut 的值决定是否加热,加热时间是多少。 PID 运算的C 实现代码: float PIDCalc( PID *pp, int NextPoint ) { int dError,Error; Error = pp->SetPoint*10 - NextPoint; // 偏差,设定值减去当前采样值 pp->SumError += Error; // 积分,历史偏差累加 dError = Error-pp->LastError; // 当前微分,偏差相减 pp->PrevError = pp->LastError; // 保存 pp->LastError = Error; + pp->Integral * pp->SumError // 积分项 - pp->Derivative * dError // 微分项 ); }     在实际运算时,由于水具有很大的热惯性,而且PID 运算中的I(积分项)具有非常明显的延迟效应所以不能保留,我们必须把积分项去掉,相反D(微分项)则有很强的预见性,能够加快反应速度,抑制超调量,所以积分作用应该适当加强才能达到较佳的控制效果,系统最终选择PD 控制 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 ,下面C 代码所示为PD 控制的实现过程: float PIDCalc( PID *pp, int NextPoint ) { int dError,Error; Error = pp->SetPoint*10 - NextPoint; // 偏差,设定值减去当前采样值 dError = Error-pp->LastError; // 当前微分,偏差相减 pp->PrevError = pp->LastError; // 保存 pp->LastError = Error; return (pp->Proportion * Error // 比例项 - pp->Derivative * dError // 微分项 ); } 温度控制实现     通过温度的PID 运算,产生结果fOut,该参数决定是否加热,加热时间是多长。该程序如下: stPID.Proportion = 2; //设置PID 比例值 stPID.Integral = 0; //设置PID 积分值 stPID.Derivative = 5; //设置PID 微分值 fOut = PIDCalc ( &stPID,(int)(fT*10) ); //PID 计算 if(fOut<=0) *P_IOA_Buffer &= 0xff7f; //温度高于设定值,关闭加热器 else *P_IOA_Buffer |= 0x0080; //温度低于设定值,打开加热器     加热时间由主函数计算,由TimerB 中断控制。主程序中通过PIDCalc 函数得到fOut 参数,如果该参数大于“0”,则开启加热器。IRQ2_TMB 中断一直处于允许状态,每进入一次IRQ2_TMB 中断,fOut 参数减1,直到fOut = 0,停止加热。如果PIDCalc 计算结果比较大说明离目标温度相差较大,则加热时间比较长,如果计算结果比较小,说明离目标温度相差较小,加热时间相对较短。   基于PID算法和89C52单片机的温度控制系统 作者:张艳艳 安徽电子信息职业技术学院  来源:现代电子技术  发布时间:2009-12-22 17:36:09  [收 藏] [评 论 HYPERLINK "http://www.elecfans.com/user/favorite.asp?action=add&topic=基于PID算法和89C52单片机的温度控制系统" ] 基于PID算法和89C52单片机的温度控制系统 0 引 言     温控技术无论是在工业生产,还是日常生活中都起着非常重要的作用。在冶金、石油、化工、电力和现代农业等行业,温度是极为重要而又普遍的热工参数之一,在普通家庭里热水器、电饭煲、电烤箱等依赖于温控技术的家电设备也是必不可少。可以说温度控制技术无处不在。     常规的温度控制方法以设定温度为临界点,超出设定允许范围即进行温度调控:低于设定值就加热,反之就停止或降温。这种方法实现简单、成本低,但控制效果不理想,控制温度精度不高、容易引起震荡,达到稳定点的时间也长,因此,只能用在精度要求不高的场合。     而采用PID算法进行温度控制,它具有控制精度高,能够克服容量滞后的特点,特别适用于负荷变化大、容量滞后较大、控制品质要求又很高的控制系统。     单片机作为控制系统中必不可少的部分,在各个领域得到了广泛的应用,用单片机进行实时系统数据处理和控制,保证系统工作在最佳状态,提高系统的控制精度,有利于提高系统的工作效率。本系统采用单片机编程实现PID算法进行温度控制。 1 PID控制的原理和特点     在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。PID控制器以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型,控制理论的其他技术也难以采用,系统控制器的结构和参数必须依靠 经验 班主任工作经验交流宣传工作经验交流材料优秀班主任经验交流小学课改经验典型材料房地产总经理管理经验 和现场调试来确定时,应用PID控制技术最为方便。     PID控制器的参数整定是控制系统设计的核心内容。它是根据被控过程的特性确定PID控制器的比例系数、积分时问和微分时间的大小。PID控制器参数整定的方法概括起来有两大类:一是理论计算整定法。它主要是依据系统的数学模型,经过理论计算确定控制器参数。这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改。二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。     PID一般算式及模拟控制规律如式(1)所示:         式中:u(t)为控制器的输出;e(t)为偏差,即设定值与反馈值之差;KC为控制器的放大系数,即比例增益;TI为控制器的积分常数;TD为控制器的微分时间常数。PID算法的原理即调节KC,TI,TD三个参数使系统达到稳定。     由于计算机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量。因此在计算机控制系统中,必须首先对式(1)进行离散化处理,用数字形式的差分方程代替连续系统的微分方程,此时积分项和微分项可用求和及增量式表示:         将式(2)和式(3)代入式(1),则可得到离散的PID表达式:         式中:△t=T为采样周期,必须使T足够小,才能保证系统有一定的精度(采样定理);E(K)为第K次采样时的偏差值;E(K-1)为第K-1次采样时的偏差值;P(K)为第K次采样是调节器的输出。 2 系统的硬件构成     本系统由传感器A/D采样输入、单片机控制、人机交互、控制信号输出四部分组成,其中温度传感部分由测试采样电路实现,人机交互由矩阵键盘和LCD液晶屏构成,PID控制算法由89C52单片机实现,控制信号输出部分则由功率放大和开关控制电路组成。系统框图如图1所示。 3 主程序流程     软件程序是本控制系统的核心,它包括从温度采样到信号输出的整个流程控制,其示意图如图2所示。     程序功能主要由以下的几部分组成:     (1)初始化:设定各参数的初始值,设定各中断及定时器。     (2)接收/发射:此部分程序主要完成数据的控制及显示,主要通过89C52单片机的全双工串行口完成和键盘部分的双向通信。     (3)PC机通信:此部分完成与微机控制接口RS 232的连接及通信的控制。     (4)数值转换子程序:由于主程序中用到了很多的数值转换及数值的运算(如十进制转换成十六进制、双字节与单字节的除法运算等),为了程序调用的方便,特将其编写成子程序的形式。     (5)PID算法。 4 实验测试     系统的性能与稳定度需要通过具体实验测试完成。现用1 kW的电炉将电热杯中的1 L清水进行加热。     观测设定值和实测值之间的误差(当水温达到稳定时的值),计算绝对误差和相对误差,见表1。     设定温度为50℃,每隔30 s记录实测温度,如表2所示。     从表2中的数据可知,系统运行5 min时基本达到稳定。 5 结 语     由实验结果可以看出,系统的误差基本稳定在±0.3℃,可见系统的精度很好。此外,系统运行5 min时温度基本达到稳定,稳定所需时间较短。可以看出,基于PID算法的单片机温度控制系统具有较高的精确度和稳定性,在温度调节阶段平衡温度时间较短。因此本系统可以应用于各种对精度要求较高的温度控制场合。 温度控制中,用PID算法得到的是一个数值,这个数值如何转换为占空比? 回复数:5,点击数:1528 【楼主位】 xuxianhai 积分:2 派别: 等级:------ 来自: 我在用MEGA16控制电加热调节水温时,采用PID算法,输出采用占空比通断控制。为求阶跃响应,我用15%占空比达到稳定后,将占空比调至30%,开始测量温度。得到阶跃响应曲线后,为求加热器的静态增益K,采用K=△Y/△X公式。我知道△Y用温度值的单位,但△X的单位该如何取呢?是用15,还是0.15? 另外,我用PID算法得到的是一个数值,这个数值如何转换为占空比?是要先设定一个较大的值吗?如果是的话,这个数值是否有一个经验值,大概取多少? 恳请各位高手帮忙看一下,谢谢!   2006-02-17,10:51:03 HYPERLINK "http://www.ourdev.cn/bbs/user_information.jsp?user_name=xuxianhai" \t "_blank" 资料 邮件 HYPERLINK "http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=585901&bbs_page_no=1&bbs_id=1000" \l "#####" 回复 HYPERLINK "http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=585901&bbs_page_no=1&bbs_id=1000" \l "#####" 引用回复   ↑↑   ↓↓ INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET 编辑 删除 INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET 【1楼】 sanol 积分:8 派别: 等级:------ 来自: 哥们,我也做这个,交流下? qq 940353508   2009-04-23,09:42:23 HYPERLINK "http://www.ourdev.cn/bbs/user_information.jsp?user_name=sanol" \t "_blank" 资料 邮件 HYPERLINK "http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=585901&bbs_page_no=1&bbs_id=1000" \l "#####" 回复 HYPERLINK "http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=585901&bbs_page_no=1&bbs_id=1000" \l "#####" 引用回复   ↑↑   ↓↓ INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET 编辑 删除 INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET 【2楼】 huangstone 积分:47 派别: 等级:------ 来自: 关于PID有点心得,供LZ参考:     1、PID运算出来是一个数据没有量纲,在这里这个数据和占空比没有什么直接的关系,这个数据的大小表示的PID调节的强度,数据大调节度就大。     2、占空比的输出一般通过定时器,我们假设当定时器的值为255时,占空比为100%。第1点计算的数据是和你PID的三个参数密切相关的,在相同的被控量测量值下,不同的PID参数会得出不同的值,这其实就是PID参数要调节的原因。因此要对PID参数加以调整,将计算出的数据可以直接赋给定时器控制占空比,但是要对最大和最小值加以限定。     3、想象一下,如果你的PID参数不合适,计算出的数据要么大于255,要么小于0,这就变成了开关控制了。          其实最关键的就是我写的第一点,只要理解了PID计算出的数据是表示的调节强度的大小,和占空比和温度都没有直接的对应关系的。那PID就没有什么困难的。   2009-04-23,11:52:49 HYPERLINK "http://www.ourdev.cn/bbs/user_information.jsp?user_name=huangstone" \t "_blank" 资料 邮件 HYPERLINK "http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=585901&bbs_page_no=1&bbs_id=1000" \l "#####" 回复 HYPERLINK "http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=585901&bbs_page_no=1&bbs_id=1000" \l "#####" 引用回复   ↑↑   ↓↓ INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET 编辑 删除 INCLUDEPICTURE "http://www.ourdev.cn/bbs/images/pixel.gif" \* MERGEFORMATINET 【3楼】 deepin 积分:402 派别: 等级:------ 来自: 【2楼】 huangstone  学习了!!!   2009-04-24,14:48:14 HYPERLINK "http://www.ourdev.cn/bbs/user_information.jsp?user_name=deepin" \t "_blank" 资料 邮件 HYPERLINK "http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=585901&bbs_page_no=1&bbs_id=1000" \l "#####" 回复 HYPERLINK "http://www.ourdev.cn/bbs/bbs_content.js
本文档为【温度控制的PID算法的C语言程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_038858
暂无简介~
格式:doc
大小:1MB
软件:Word
页数:40
分类:工学
上传时间:2012-05-07
浏览量:148