首页

> 期刊论文知识库

首页 期刊论文知识库 问题

单片机的温度检测系统设计论文

发布时间:

单片机的温度检测系统设计论文

用DS18B20做的电子温度计,非常简单。#include <> #include\"\"#include <>#include <>//********************************************************#define Seck (500/TK) //1秒中的主程序的系数#define OffLed (Seck*5*60) //自动关机的时间5分钟!//********************************************************#if (FHz==0) #define NOP_2uS_nop_()#else #define NOP_2uS_nop_();_nop_()#endif//**************************************#define SkipK 0xcc //跳过命令#define ConvertK 0x44 //转化命令#define RdDs18b20K 0xbe //读温度命令//*******************************************extern LedOut(void);//*************************************************sbit PNP1=P3^4;sbit PNP2=P3^5;sbit BEEP=P3^2;//***********************************#defineDQ PNP2 //原来的PNP2 BEEP//***********************************static unsigned char Power=0;//************************************union{ unsigned char Temp[2]; //单字节温度 unsigned int Tt; //2字节温度}T;//***********************************************typedef struct{ unsigned char Flag; //正数标志 0;1==》负数 unsigned char WenDu; //温度整数 unsigned int WenDuDot; //温度小数放大了10000}WENDU; //***********************************************WENDU WenDu;unsigned char LedBuf[3];//----------------------------------//功能:10us 级别延时// n=1===> 6Mhz=14uS 12MHz=7uS//----------------------------------void Delay10us(unsigned char n){ do{ #if (FHz==1) NOP_2uS;NOP_2uS; #endif }while(--n);}//-----------------------------------//功能:写18B20//-----------------------------------void Write_18B20(unsigned char n){ unsigned char i; for(i=0;i<8;i++){ DQ=0; Delay10us(1);//延时13us 左右 DQ=n & 0x01; n=n>>1; Delay10us(5);//延时50us 以上 DQ=1; }}//------------------------------------//功能:读取18B20//------------------------------------unsigned char Read_18B20(void){ unsigned char i; unsigned char temp; for(i=0;i<8;i++){ temp=temp>>1; DQ=0; NOP_2uS;//延时1us DQ=1; NOP_2uS;NOP_2uS;//延时5us if(DQ==0){ temp=temp&0x7F; }else{ temp=temp|0x80; } Delay10us(5);//延时40us DQ=1; } return temp;}//-----------------------------------void Init (void){ DQ=0; Delay10us(45);//延时500us DQ=1; Delay10us(9);//延时90us if(DQ){ //0001 1111b=1f Power =0; //失败0 }else{ Power++; DQ=1; }}//----------------------------------void Skip(void){ Write_18B20(SkipK); Power++;}//----------------------------------void Convert (void){ Write_18B20(ConvertK); Power++;}//______________________________________void Get_Ds18b20L (void){ [1]=Read_18B20(); //读低位 Power++;}//______________________________________void Get_Ds18b20H (void){ [0]=Read_18B20(); //读高位 Power++;}//------------------------------------//规范化成浮点数// sssss111;11110000// sssss111;1111()//------------------------------------void ReadTemp (void){ unsigned char i; unsigned intF1=0; char j=1; code int Code_F[]={6250,1250,2500,5000}; ; if ([0] >0x80){ //负温度 =~; //取反+1=源吗 +符号S ; } <<= 4; //左移4位 [0]; // 温度整数 //************************************************** [1]>>=4; //--------------------------- for (i=0;i<4;i++){ //计算小数位 F1 +=([1] & 0x01)*Code_F; [1]>>=1; } ; //温度的小数 Power=0;}//----------------------------------void Delay1S (void){ static unsigned int i=0; if (++i==Seck) {i=0ower++;}}//----------------------------------void ReadDo (void){ Write_18B20(RdDs18b20K); Power++;}/**********************************函数指针定义***********************************/code void (code *SubTemp[])()={ Init,Skip,Convert,Delay1S,Init,Skip,ReadDo,Get_Ds18b20L, Get_Ds18b20H,ReadTemp};//**************************************void GetTemp(void){ (*SubTemp[Power])();}//---------------------------------------------------//将温度显示,小数点放大了 GetBcd(void){ LedBuf[0]= / 10; LedBuf[1]= % 10 +DotK; LedBuf[2]=()%10; if(LedBuf[0]==0)LedBuf[0]=Black; if() return; if(LedBuf[0] !=Black){ LedBuf[2]=LedBuf[1]; LedBuf[1]=LedBuf[0]; LedBuf[0]=Led_Pol; //'-' }else{ LedBuf[0]=Led_Pol; //'-' }}/*//---------------------------------------------------void JbDelay (void){ static long i; if (++i>=OffLed){ P1=0xff; P2=0xff; PCON=0x02; }}*//*****************************************************主程序开始1:2002_10_1 设计,采用DS18B20测量2:采用函数数组读取数码管显示正常!3:改变FHz可以用6,12MHz工作!******************************************************/code unsigned char Stop[3] _at_ 0x3b;void main (void){ P1=0xff; ; while (1){ GetTemp(); GetBcd(); // JbDelay(); LedOut(); }}复制代码 20091012_8b1ef92155560c13b5807ZmoDVSacjwD[1].jpg (12 KB) 2009-10-21 23:21 上传下载次数:0

这是我自己用DS18B20做的温度检测程序,复制给你看看,我这是通过串口可以在电脑上的串口助手上显示出实时的温度:#include<>#include<>#define uint unsigned int#define uchar unsigned charsbit ds=P1^0;bit flag;uchar count_t0;float f_temp;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--);}void init() // 串口初始化{TMOD=0x21;SCON=0x50;TH0=0x4c;TL0=0x00;TH1=0xf3;TL1=0xf3;EA=1;ET0=1;TR0=1;TR1=1;}void timer0() interrupt 1{TH0=0x4c;TL0=0x00;if(++count_t0>=20){count_t0=0;flag=1;}}void dsreset(){uint i;ds=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;}bit read_bit(){uint i;bit dat;ds=0;i++;ds=1;i++;i++;dat=ds;i=8;while(i>0)i--;return dat;}uchar read_byte(){uchar i,j,dat;dat=0;for(i=1;i<=8;i++){j=read_bit();dat=(j<<7)|(dat>>1);}return dat;}void write_byte(uchar dat){uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb){ds=0;i++;i++;ds=1;i=8;while(i>0)i--;}else{ds=0;i=8;while(i>0)i--;ds=1;i++;i++;}}}void begin_change(){dsreset();delay(1);write_byte(0xcc);write_byte(0x44);}float get_temp(){uchar a,b;uint temp;float f_temp;dsreset();delay(1);write_byte(0xcc);write_byte(0xbe);a=read_byte();b=read_byte();temp=b;temp<<=8;temp=temp|a;f_temp=temp*;temp=f_temp*10+;f_temp=f_temp+;return f_temp;}void main(){init();while(1){if(flag==1){flag=0;begin_change();TI=1;printf("The tempeature is %f\n",get_temp());while(!TI);TI=0;}}}

我做的课程设计,用的数码管,也做了protues仿真,你有需要的话,我邮箱是。希望对你有帮助,#include<>sbit P11=P1^1;sbit P12=P1^2;sbit P13=P1^3;sbit P14=P1^4;/////数码管1断码控制///////////////sbit P15=P1^5;sbit P16=P1^6;sbit P17=P1^7;sbit P32=P3^2;/////数码管2段码控制////////////////sbit up=P3^7;sbit down=P3^6; ////按键操作端口//////////////////sbit P35=P3^5; ////////控制晶闸管端口/////////sbit DQ =P3^3; ///////温度传感器端口///////// #define THCO 0xee#define THLO 0x00unsigned char code duan[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,}; //////////////////////////////////////////int b=0;char pwm=0;int k;char r=0,q=0;static char wendu_1;char hao=20;//////////////////////////////////////////////void delay(unsigned int i){while(i--);}//////////////////////////////////////////Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay(8); //稍做延时DQ = 0; //单片机将DQ拉低delay(80); //精确延时 大于 480usDQ = 1; //拉高总线delay(14);x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败delay(20);}////////////////////////////////////////////ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay(4);}return(dat);}////////////////////////////////////////////////WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay(5);DQ = 1;dat>>=1;}//delay(4);}/////////////////////////////////////////////////DS18B20程序读取温度ReadTemperature(void){unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar();b=ReadOneChar();t=b;t<<=8;t=t|a;tt=t*;return(t);}xianshi(){/////////////////当前温度显示///////////////////////////// P11=1; P0=duan[wendu_1/1000]; for(k=0;k<1000;k++); P1=0;P12=1; P0=duan[wendu_1/100%10]; for(k=0;k<1000;k++); P1=0;P13=1; P0=duan[wendu_1%100/10]; for(k=0;k<1000;k++); P1=0;P14=1; P0=duan[wendu_1%10]; for(k=0;k<1000;k++); P1=0; ///////////////////////////目标电压显示/////////////// P15=1; P2=duan[hao/1000]; for(k=0;k<1000;k++); P1=0;P16=1; P2=duan[hao/100%10]; for(k=0;k<1000;k++); P1=0;P17=1; P2=duan[hao%100/10]; for(k=0;k<1000;k++); P1=0;P32=1; P2=duan[hao%10]; for(k=0;k<1000;k++); P32=0;////////////////////////////////////////////////////////// }/////////////////////////////////////////////////////////// main(void){ P11=0; P12=0; P13=0; P14=0; P15=0; P16=0; P17=0; P32=0; P35=0; /////////////////////////////////////////////////////////// while(1){ wendu_1=ReadTemperature()/16;//读温度 xianshi(); ///显示系统数据/////////////////////////////////////操作函数//////////////////////////////////// if(down==0) {hao--;} if(up==0){hao++;} ///////////////////////////////////////////////////////////////////hao为理想温度/////wendu_1为实际环境温度/////////////////////////////////////////////////////////////////P35为高时 led灯工作///////////////////////////////////// P35=0; pwm=hao-wendu_1; if(pwm>0) {P35=1;} if(pwm<0) {P35=0;} if(pwm==0) {P35=0;}///////////////////////////////////////////////////////////////// }}

二.系统软件设计图4 系统程序流程图 系统程序流程图系统程序流程图如图4所示。 温度部分软件设计DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输。其工作时序包括初始化时序、写时序和读时序。故主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。程序主要函数部分如下:(1)初始化函数//读一个字节函数ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){ DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay(4);}return(dat);}//写一个字节函数WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay(5);DQ = 1;dat>>=1;}}(2)读取温度并计算函数ReadTemperature(void){unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar();b=ReadOneChar();t=b;t<<=8;t=t|a;tt=t*;t= tt*10+; //放大10倍输出并四舍五入---此行没用(3)主程序部分见前return(t);}三. 结束语AT89C2051单片机体积小、重量轻、抗干扰能力强、对环境要求不高、价格低廉、可靠性高、灵活性好。即使是非电子计算机专业人员,通过学习一些专业基础知识以后也能依靠自己的技术力量来开发所希望的单片机应用系统。本文的温度控制系统只是单片机广泛应用于各行各业中的一例,相信读者会依靠自己的聪明才智使单片机的应用更加广泛化。另外对本例子可以作一些扩展,单片机的应用越来越广泛,由于单片机的运算功能较差,往往需要借助计算机系统,因此单片机和PC机进行远程通信更具有实际意义。目前此设计已成功应用于钻井模拟器实验室室温控制。本文作者创新观点:采用的单片机AT89C2051性价比高,而且温度传感器DS18B20转化温度的方法非常简洁且精度高、测试范围较广。参考文献[1]林伸茂.8051单片机彻底研究基础篇 北京:人民邮电出版社 2004[2]范风强等.单片机语言C51应用实战集锦 北京:电子工业出版社 2005[3]谭浩强.C语言程序设计(第二版) 北京:清华大学出版社 1999[4]夏路易等.电路原理图与电路板设计教程 北京:北京希望电子出版社 2002[5]赵晶.Protel99高级应用 北京:人民邮电出版社 2000[6]聂毅.单片机定时器中断时间误差的分析及补偿[J] 微计算机信息 2002,18(4):37~38

单片机温度检测系统毕业论文

温度相关的毕业设计 ·基于单片机的数字温度计的设计·基于MCS-51数字温度表的设计·单片机的数字温度计设计·基于单片机的空调温度控制器设计·基于数字温度计的多点温度检测系统·设施环境中温度测量电路设计·DS18B20数字温度计的设计·多点温度采集系统与控制器设计·基于PLC和组态王的温度控制系统设计·温度监控系统的设计·用单片机进行温度的控制及LCD显示系统的设计·单片机电加热炉温度控制系统·全氢罩式退火炉温度控制系统·数字温度计的设计·基于单片机AT89C51的语音温度计的设计·基于单片机的多点温度检测系统·基于51单片机的多路温度采集控制系统·基于单片机的数字显示温度系统毕业设计论文·基于MCS51单片机温度控制毕业设计论文·西门子S7-300在温度控制中的应用·燃气锅炉温度的PLC控制系统·焦炉立火道温度软测量模型设计·温度检测控制仪器·智能温度巡检仪的研制·电阻炉温度控制系统·数字温度测控仪的设计·温度测控仪设计·多路温度采集系统设计·多点数字温度巡测仪设计·LCD数字式温度湿度测量计·64点温度监测与控制系统·温度报警器的电路设计与制作·基于单片机的数字温度计的电路设计·全氢煤气罩式炉的温度控制系统的研究与改造·温度检测与控制系统·红外快速检测人体温度装置的设计与研制·具有红外保护的温度自动控制系统的设计·基于单片机的温度测量系统的设计·数字温度计设计·DS18B20温度检测控制·PN结(二极管)温度传感器性能的实验研究·多功能智能化温度测量仪设计·软胶囊的单片机温度控制(硬件设计)·空调温度控制单元的设计·大容量电机的温度保护——软件设计·大容量电机的温度保护 ——硬件电路的设计·基于DS18B20温度传感器的数字温度计设计·热轧带钢卷取温度反馈控制器的设计·基于单片机的温度采集系统设计·多点温度数据采集系统的设计·基于单片机的数字式温度计设计·18B20多路温度采集接口模块·基于单片机的户式中央空调器温度测控系统设计·单片机电阻炉温度控制系统设计·基于单片机的电阻炉温度控制系统设计·基于ARM的嵌入式温度控制系统的设计·基于DS18B20的多点温度巡回检测系统的设计·基于单片机的多点无线温度监控系统·基于MSC1211的温度智能温度传感器·用集成温度传感器组成测温控制系统·室内温度控制报警器·自动温度控制系统·烤箱温度控制系统·基于单片机的电加热炉温度控制系统设计·基于PLC的温度监控系统设计·基于无线传输技术的室温控制系统设计——温度控制器软件设计·温度箱模拟控制系统·基于无线传输技术的室温控制系统设计——温度控制器硬件设计·数字式温度计的设计·温度监控系统设计·基于单片机的电阻炉温度控制系统·基于plc的温度湿度检测和显示系统设计·基于单片机的3KW电炉温度控制系统的设计·腔型肿瘤热疗仪温度控制系统设计·基于AT89S51单片机的数字温度计设计·吹塑薄膜挤出机温度控制与检测系统设计·电加热炉PLC温度自适应控制系统的研究·高压母线温度自动监测装置的设计·高压母线温度自动检测装置·小型热水锅炉单片机温度控制系统·消毒柜单片机温度控制·嵌入式系统在多点温度控制中的应用·单片机温度控制系统·上下限温度报警器的设计·基于单片机的饮水机温度控制系统设计·基于单片机的温度测量系统设计

这是我自己用DS18B20做的温度检测程序,复制给你看看,我这是通过串口可以在电脑上的串口助手上显示出实时的温度:#include<>#include<>#define uint unsigned int#define uchar unsigned charsbit ds=P1^0;bit flag;uchar count_t0;float f_temp;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--);}void init() // 串口初始化{TMOD=0x21;SCON=0x50;TH0=0x4c;TL0=0x00;TH1=0xf3;TL1=0xf3;EA=1;ET0=1;TR0=1;TR1=1;}void timer0() interrupt 1{TH0=0x4c;TL0=0x00;if(++count_t0>=20){count_t0=0;flag=1;}}void dsreset(){uint i;ds=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;}bit read_bit(){uint i;bit dat;ds=0;i++;ds=1;i++;i++;dat=ds;i=8;while(i>0)i--;return dat;}uchar read_byte(){uchar i,j,dat;dat=0;for(i=1;i<=8;i++){j=read_bit();dat=(j<<7)|(dat>>1);}return dat;}void write_byte(uchar dat){uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb){ds=0;i++;i++;ds=1;i=8;while(i>0)i--;}else{ds=0;i=8;while(i>0)i--;ds=1;i++;i++;}}}void begin_change(){dsreset();delay(1);write_byte(0xcc);write_byte(0x44);}float get_temp(){uchar a,b;uint temp;float f_temp;dsreset();delay(1);write_byte(0xcc);write_byte(0xbe);a=read_byte();b=read_byte();temp=b;temp<<=8;temp=temp|a;f_temp=temp*;temp=f_temp*10+;f_temp=f_temp+;return f_temp;}void main(){init();while(1){if(flag==1){flag=0;begin_change();TI=1;printf("The tempeature is %f\n",get_temp());while(!TI);TI=0;}}}

已把我毕业论文的一部分发给你了,应该是你想要的。还需要其它的说一声

“温度控制系统”应该是一个可以恒温的系统,或者根据一定的情况(时间等)实时的进行调整,那么这肯定就需要一个温度检测器件(一般温度要求不高的话可以考虑用18B20芯片或者精度高点的AD590),然后是温度增减的执行部分(比如空调的制冷和制热控制,最简单的是电风扇的风速控制),这是一个闭环控制,如果需要控制的量比较少,而且想省钱的话就用普通的51系列单片机就OK了,祝你成功!

单片机温度检测系统有关论文

用DS18B20做的电子温度计,非常简单。#include <> #include\"\"#include <>#include <>//********************************************************#define Seck (500/TK) //1秒中的主程序的系数#define OffLed (Seck*5*60) //自动关机的时间5分钟!//********************************************************#if (FHz==0) #define NOP_2uS_nop_()#else #define NOP_2uS_nop_();_nop_()#endif//**************************************#define SkipK 0xcc //跳过命令#define ConvertK 0x44 //转化命令#define RdDs18b20K 0xbe //读温度命令//*******************************************extern LedOut(void);//*************************************************sbit PNP1=P3^4;sbit PNP2=P3^5;sbit BEEP=P3^2;//***********************************#defineDQ PNP2 //原来的PNP2 BEEP//***********************************static unsigned char Power=0;//************************************union{ unsigned char Temp[2]; //单字节温度 unsigned int Tt; //2字节温度}T;//***********************************************typedef struct{ unsigned char Flag; //正数标志 0;1==》负数 unsigned char WenDu; //温度整数 unsigned int WenDuDot; //温度小数放大了10000}WENDU; //***********************************************WENDU WenDu;unsigned char LedBuf[3];//----------------------------------//功能:10us 级别延时// n=1===> 6Mhz=14uS 12MHz=7uS//----------------------------------void Delay10us(unsigned char n){ do{ #if (FHz==1) NOP_2uS;NOP_2uS; #endif }while(--n);}//-----------------------------------//功能:写18B20//-----------------------------------void Write_18B20(unsigned char n){ unsigned char i; for(i=0;i<8;i++){ DQ=0; Delay10us(1);//延时13us 左右 DQ=n & 0x01; n=n>>1; Delay10us(5);//延时50us 以上 DQ=1; }}//------------------------------------//功能:读取18B20//------------------------------------unsigned char Read_18B20(void){ unsigned char i; unsigned char temp; for(i=0;i<8;i++){ temp=temp>>1; DQ=0; NOP_2uS;//延时1us DQ=1; NOP_2uS;NOP_2uS;//延时5us if(DQ==0){ temp=temp&0x7F; }else{ temp=temp|0x80; } Delay10us(5);//延时40us DQ=1; } return temp;}//-----------------------------------void Init (void){ DQ=0; Delay10us(45);//延时500us DQ=1; Delay10us(9);//延时90us if(DQ){ //0001 1111b=1f Power =0; //失败0 }else{ Power++; DQ=1; }}//----------------------------------void Skip(void){ Write_18B20(SkipK); Power++;}//----------------------------------void Convert (void){ Write_18B20(ConvertK); Power++;}//______________________________________void Get_Ds18b20L (void){ [1]=Read_18B20(); //读低位 Power++;}//______________________________________void Get_Ds18b20H (void){ [0]=Read_18B20(); //读高位 Power++;}//------------------------------------//规范化成浮点数// sssss111;11110000// sssss111;1111()//------------------------------------void ReadTemp (void){ unsigned char i; unsigned intF1=0; char j=1; code int Code_F[]={6250,1250,2500,5000}; ; if ([0] >0x80){ //负温度 =~; //取反+1=源吗 +符号S ; } <<= 4; //左移4位 [0]; // 温度整数 //************************************************** [1]>>=4; //--------------------------- for (i=0;i<4;i++){ //计算小数位 F1 +=([1] & 0x01)*Code_F; [1]>>=1; } ; //温度的小数 Power=0;}//----------------------------------void Delay1S (void){ static unsigned int i=0; if (++i==Seck) {i=0ower++;}}//----------------------------------void ReadDo (void){ Write_18B20(RdDs18b20K); Power++;}/**********************************函数指针定义***********************************/code void (code *SubTemp[])()={ Init,Skip,Convert,Delay1S,Init,Skip,ReadDo,Get_Ds18b20L, Get_Ds18b20H,ReadTemp};//**************************************void GetTemp(void){ (*SubTemp[Power])();}//---------------------------------------------------//将温度显示,小数点放大了 GetBcd(void){ LedBuf[0]= / 10; LedBuf[1]= % 10 +DotK; LedBuf[2]=()%10; if(LedBuf[0]==0)LedBuf[0]=Black; if() return; if(LedBuf[0] !=Black){ LedBuf[2]=LedBuf[1]; LedBuf[1]=LedBuf[0]; LedBuf[0]=Led_Pol; //'-' }else{ LedBuf[0]=Led_Pol; //'-' }}/*//---------------------------------------------------void JbDelay (void){ static long i; if (++i>=OffLed){ P1=0xff; P2=0xff; PCON=0x02; }}*//*****************************************************主程序开始1:2002_10_1 设计,采用DS18B20测量2:采用函数数组读取数码管显示正常!3:改变FHz可以用6,12MHz工作!******************************************************/code unsigned char Stop[3] _at_ 0x3b;void main (void){ P1=0xff; ; while (1){ GetTemp(); GetBcd(); // JbDelay(); LedOut(); }}复制代码 20091012_8b1ef92155560c13b5807ZmoDVSacjwD[1].jpg (12 KB) 2009-10-21 23:21 上传下载次数:0

必须要有实物啊,理论的东西都是要靠实物来验证的啊。温度控制系统不难吧,学过电子、单片机的都很轻松的,同学看来你大学过得还挺滋润的啊。去文库看看,基本都会有资料参考的。知识要点:1,AD采样,也就是温度的数据采集。2,中断,采集数据后比较,做相应的处理。

价格合理!信工毕业 就会单片机

我做的课程设计,用的数码管,也做了protues仿真,你有需要的话,我邮箱是。希望对你有帮助,#include<>sbit P11=P1^1;sbit P12=P1^2;sbit P13=P1^3;sbit P14=P1^4;/////数码管1断码控制///////////////sbit P15=P1^5;sbit P16=P1^6;sbit P17=P1^7;sbit P32=P3^2;/////数码管2段码控制////////////////sbit up=P3^7;sbit down=P3^6; ////按键操作端口//////////////////sbit P35=P3^5; ////////控制晶闸管端口/////////sbit DQ =P3^3; ///////温度传感器端口///////// #define THCO 0xee#define THLO 0x00unsigned char code duan[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,}; //////////////////////////////////////////int b=0;char pwm=0;int k;char r=0,q=0;static char wendu_1;char hao=20;//////////////////////////////////////////////void delay(unsigned int i){while(i--);}//////////////////////////////////////////Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay(8); //稍做延时DQ = 0; //单片机将DQ拉低delay(80); //精确延时 大于 480usDQ = 1; //拉高总线delay(14);x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败delay(20);}////////////////////////////////////////////ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay(4);}return(dat);}////////////////////////////////////////////////WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay(5);DQ = 1;dat>>=1;}//delay(4);}/////////////////////////////////////////////////DS18B20程序读取温度ReadTemperature(void){unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar();b=ReadOneChar();t=b;t<<=8;t=t|a;tt=t*;return(t);}xianshi(){/////////////////当前温度显示///////////////////////////// P11=1; P0=duan[wendu_1/1000]; for(k=0;k<1000;k++); P1=0;P12=1; P0=duan[wendu_1/100%10]; for(k=0;k<1000;k++); P1=0;P13=1; P0=duan[wendu_1%100/10]; for(k=0;k<1000;k++); P1=0;P14=1; P0=duan[wendu_1%10]; for(k=0;k<1000;k++); P1=0; ///////////////////////////目标电压显示/////////////// P15=1; P2=duan[hao/1000]; for(k=0;k<1000;k++); P1=0;P16=1; P2=duan[hao/100%10]; for(k=0;k<1000;k++); P1=0;P17=1; P2=duan[hao%100/10]; for(k=0;k<1000;k++); P1=0;P32=1; P2=duan[hao%10]; for(k=0;k<1000;k++); P32=0;////////////////////////////////////////////////////////// }/////////////////////////////////////////////////////////// main(void){ P11=0; P12=0; P13=0; P14=0; P15=0; P16=0; P17=0; P32=0; P35=0; /////////////////////////////////////////////////////////// while(1){ wendu_1=ReadTemperature()/16;//读温度 xianshi(); ///显示系统数据/////////////////////////////////////操作函数//////////////////////////////////// if(down==0) {hao--;} if(up==0){hao++;} ///////////////////////////////////////////////////////////////////hao为理想温度/////wendu_1为实际环境温度/////////////////////////////////////////////////////////////////P35为高时 led灯工作///////////////////////////////////// P35=0; pwm=hao-wendu_1; if(pwm>0) {P35=1;} if(pwm<0) {P35=0;} if(pwm==0) {P35=0;}///////////////////////////////////////////////////////////////// }}

温度检测系统设计的论文

1 KM-1 键混器的设计 1 Sw3204V监控器的设计 1 基于射频遥控型(单片机)交通灯的设计1 Sw802V视频切换器的设计 1 无线数控多相位灯从机的设计1 基于RS232遥控型交通灯的设计1 Sw802A音频切换器的设计1 Sw6408V监控器的设计 1 KM-3键混器的设计1 无线数控多相位灯主机的设计1 SW162V数字视频切换器的设计1 基于RS232监控切换器1 SW401V 数字视频切换器的设计1 基于单片机的多路数据采集系统1 RS485转RS232的模块设计1 基于LCD显示的波形发生器的设计1 4-20mA转RS-485模块的设计 1 基于RS232流量计的设计 1 基于PTR2000的交通灯控制器主机的设计1 基于RS485量水仪的设计1 压力采集控制器的设计 1 数字量转4-20mA模拟量输出的模块设计1 正弦波形发生器的设计1 基于PTR2000的交通灯控制器从机的设计1 基于RS485视频切换器的设计1 LCD车速里程表电路设计1 LED车速里程表电路设计1 MSK通信系统的仿真设计1 员工信息管理系统 1 计算机文化基础考试系统的设计和开发1 人事工资管理系统1 员工信息管理系统设计1 超市进销存管理系统的VB实现1 基于单片机的多波形发生器的应用1 基于单片机电动自行车控制器设计1 个人理财管理系统1 基于CAN总线火灾监控系统的研究1 基于DSP平台的FIR滤波器设计1 于Matlab的FIR数字滤波器设计与仿真1 基于TMS320VC5402-DSP的最小系统硬件设计1 基于单片机的热水控制器 1 基于单片机的路灯控制系统的设计1 于单片机远程控制家用电器系统的设计1 基于液晶显示的乘法口诀测试仪的设计1 实验室设备管理系统毕业设计开题报告1 用AT89C51做 洗衣机全自动控制.doc1 数显频率计的设计.doc1 数控车间温度湿度控制系统设计.doc1 三角波斜率测试仪设计.doc1 人脸几何特征提取1 全自动洗衣机的控制程序设计.doc1 乞丐论文.doc1 教学楼毕业设计.doc1 建立海上风电场的技术要求分析与探讨.doc1 基于凌阳61A的数字式温湿度检测仪.doc1 基于几何匹配和分合算法的人脸识别.doc1 基于单片机数字钟的设计.doc1 基于单片机数据通用采集器的设计.doc1 基于单片机数据采集器.doc1 基于单片机的自动报警器的设计.doc1 基于单片机的终端设计.doc1 基于单片机的路灯控制系统控制系统的设计.doc1 基于单片机的交通灯的设计.doc1 基于单片机的简易计算器的设计.doc1 基于单片机的家用安保系统的设计.doc1 基于VHDL的数字频率计.doc1 基于SystemView的OFDM系统仿真设计.doc1 基于SystemView的OFDM系统仿真设计 基于PLC的烧结配料控制系统设计.doc1 基于MSP430的温度检测系统设计 基于MATLAB工具箱的数字滤波器设计.doc1 基于MATLAB的扩频通信系统仿真研究.doc1 基于GSM短信息通信方式的路灯无线监控系统.doc1 基于FPGA的信号源设计.doc1 基于EPP协议的AVR与PC并行通信系统的设计 单片机交通灯.doc1 单片机多点温度巡回检测系统的设计.doc1 单片机的温湿度检测系统 单路口交通信号PLC控制系统的设计.doc1 城市路口多相位自寻优交通信号控制设计.doc1 陈洁(螺旋瓶盖的设计).doc1 八路竞赛抢答器.doc1 matlab信号与系统.doc1 GSM系统的研究与SystemView仿真.doc1 蒯申红智能语音报站系统设计 MT8888在家庭安全电话报警系统中的应用设计1 基于FPGA的频率与功率因数在线测量1 基于FPGA的误码测试仪如果需要定做的话系 Q 273546756

我做的课程设计,用的数码管,也做了protues仿真,你有需要的话,我邮箱是。希望对你有帮助,#include<>sbit P11=P1^1;sbit P12=P1^2;sbit P13=P1^3;sbit P14=P1^4;/////数码管1断码控制///////////////sbit P15=P1^5;sbit P16=P1^6;sbit P17=P1^7;sbit P32=P3^2;/////数码管2段码控制////////////////sbit up=P3^7;sbit down=P3^6; ////按键操作端口//////////////////sbit P35=P3^5; ////////控制晶闸管端口/////////sbit DQ =P3^3; ///////温度传感器端口///////// #define THCO 0xee#define THLO 0x00unsigned char code duan[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,}; //////////////////////////////////////////int b=0;char pwm=0;int k;char r=0,q=0;static char wendu_1;char hao=20;//////////////////////////////////////////////void delay(unsigned int i){while(i--);}//////////////////////////////////////////Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay(8); //稍做延时DQ = 0; //单片机将DQ拉低delay(80); //精确延时 大于 480usDQ = 1; //拉高总线delay(14);x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败delay(20);}////////////////////////////////////////////ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay(4);}return(dat);}////////////////////////////////////////////////WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay(5);DQ = 1;dat>>=1;}//delay(4);}/////////////////////////////////////////////////DS18B20程序读取温度ReadTemperature(void){unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar();b=ReadOneChar();t=b;t<<=8;t=t|a;tt=t*;return(t);}xianshi(){/////////////////当前温度显示///////////////////////////// P11=1; P0=duan[wendu_1/1000]; for(k=0;k<1000;k++); P1=0;P12=1; P0=duan[wendu_1/100%10]; for(k=0;k<1000;k++); P1=0;P13=1; P0=duan[wendu_1%100/10]; for(k=0;k<1000;k++); P1=0;P14=1; P0=duan[wendu_1%10]; for(k=0;k<1000;k++); P1=0; ///////////////////////////目标电压显示/////////////// P15=1; P2=duan[hao/1000]; for(k=0;k<1000;k++); P1=0;P16=1; P2=duan[hao/100%10]; for(k=0;k<1000;k++); P1=0;P17=1; P2=duan[hao%100/10]; for(k=0;k<1000;k++); P1=0;P32=1; P2=duan[hao%10]; for(k=0;k<1000;k++); P32=0;////////////////////////////////////////////////////////// }/////////////////////////////////////////////////////////// main(void){ P11=0; P12=0; P13=0; P14=0; P15=0; P16=0; P17=0; P32=0; P35=0; /////////////////////////////////////////////////////////// while(1){ wendu_1=ReadTemperature()/16;//读温度 xianshi(); ///显示系统数据/////////////////////////////////////操作函数//////////////////////////////////// if(down==0) {hao--;} if(up==0){hao++;} ///////////////////////////////////////////////////////////////////hao为理想温度/////wendu_1为实际环境温度/////////////////////////////////////////////////////////////////P35为高时 led灯工作///////////////////////////////////// P35=0; pwm=hao-wendu_1; if(pwm>0) {P35=1;} if(pwm<0) {P35=0;} if(pwm==0) {P35=0;}///////////////////////////////////////////////////////////////// }}

这是我自己用DS18B20做的温度检测程序,复制给你看看,我这是通过串口可以在电脑上的串口助手上显示出实时的温度:#include<>#include<>#define uint unsigned int#define uchar unsigned charsbit ds=P1^0;bit flag;uchar count_t0;float f_temp;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=122;y>0;y--);}void init() // 串口初始化{TMOD=0x21;SCON=0x50;TH0=0x4c;TL0=0x00;TH1=0xf3;TL1=0xf3;EA=1;ET0=1;TR0=1;TR1=1;}void timer0() interrupt 1{TH0=0x4c;TL0=0x00;if(++count_t0>=20){count_t0=0;flag=1;}}void dsreset(){uint i;ds=0;i=103;while(i>0)i--;ds=1;i=4;while(i>0)i--;}bit read_bit(){uint i;bit dat;ds=0;i++;ds=1;i++;i++;dat=ds;i=8;while(i>0)i--;return dat;}uchar read_byte(){uchar i,j,dat;dat=0;for(i=1;i<=8;i++){j=read_bit();dat=(j<<7)|(dat>>1);}return dat;}void write_byte(uchar dat){uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb){ds=0;i++;i++;ds=1;i=8;while(i>0)i--;}else{ds=0;i=8;while(i>0)i--;ds=1;i++;i++;}}}void begin_change(){dsreset();delay(1);write_byte(0xcc);write_byte(0x44);}float get_temp(){uchar a,b;uint temp;float f_temp;dsreset();delay(1);write_byte(0xcc);write_byte(0xbe);a=read_byte();b=read_byte();temp=b;temp<<=8;temp=temp|a;f_temp=temp*;temp=f_temp*10+;f_temp=f_temp+;return f_temp;}void main(){init();while(1){if(flag==1){flag=0;begin_change();TI=1;printf("The tempeature is %f\n",get_temp());while(!TI);TI=0;}}}

单片机多路温度检测论文

大学是干嘛的地方?无论多高的学历和职称,不会设计、制造教具,不会设计、制造教学仪器,不会维修仪器和设备;用你父母的钱进口教学仪器模仿了委托工厂仿制就是佼佼者;用你父母的钱请校外的人来维修设备、从校外采购配件;用你父母的钱请教学仪器生产企业提供教学实验讲义,将作者填上他们的名字就有教学突出成就奖;教你背诵的公式和外语,永远也比不上美国麻省理工学院在网上公开的教材内容。学生也不要埋怨学费贵,除了上面教师的原因,你们自己的基础实验、专业课就上的迷迷糊糊的,高额投资下的创新实验项目、挑战杯、科技竞赛、毕业论文、商业开发,都见不得阳光,将真金白银变成了一堆堆的垃圾!!!!

二.系统软件设计图4 系统程序流程图 系统程序流程图系统程序流程图如图4所示。 温度部分软件设计DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输。其工作时序包括初始化时序、写时序和读时序。故主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。程序主要函数部分如下:(1)初始化函数//读一个字节函数ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){ DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay(4);}return(dat);}//写一个字节函数WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay(5);DQ = 1;dat>>=1;}}(2)读取温度并计算函数ReadTemperature(void){unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar();b=ReadOneChar();t=b;t<<=8;t=t|a;tt=t*;t= tt*10+; //放大10倍输出并四舍五入---此行没用(3)主程序部分见前return(t);}三. 结束语AT89C2051单片机体积小、重量轻、抗干扰能力强、对环境要求不高、价格低廉、可靠性高、灵活性好。即使是非电子计算机专业人员,通过学习一些专业基础知识以后也能依靠自己的技术力量来开发所希望的单片机应用系统。本文的温度控制系统只是单片机广泛应用于各行各业中的一例,相信读者会依靠自己的聪明才智使单片机的应用更加广泛化。另外对本例子可以作一些扩展,单片机的应用越来越广泛,由于单片机的运算功能较差,往往需要借助计算机系统,因此单片机和PC机进行远程通信更具有实际意义。目前此设计已成功应用于钻井模拟器实验室室温控制。本文作者创新观点:采用的单片机AT89C2051性价比高,而且温度传感器DS18B20转化温度的方法非常简洁且精度高、测试范围较广。参考文献[1]林伸茂.8051单片机彻底研究基础篇 北京:人民邮电出版社 2004[2]范风强等.单片机语言C51应用实战集锦 北京:电子工业出版社 2005[3]谭浩强.C语言程序设计(第二版) 北京:清华大学出版社 1999[4]夏路易等.电路原理图与电路板设计教程 北京:北京希望电子出版社 2002[5]赵晶.Protel99高级应用 北京:人民邮电出版社 2000[6]聂毅.单片机定时器中断时间误差的分析及补偿[J] 微计算机信息 2002,18(4):37~38

电梯控制系统设计基于西门子PLC的电梯控制系统

液压伺服系统设计 液压伺服系统设计 在液压伺服系统中采用液压伺服阀作为输入信号的转换与放大元件。液压伺服系统能以小功率的电信号输入,控制大功率的液压能(流量与压力)输出,并能获得很高的控制精度和很快的响应速度。位置控制、速度控制、力控制三类液压伺服系统一般的设计步骤如下: 1)明确设计要求:充分了解设计任务提出的工艺、结构及时系统各项性能的要求,并应详细分析负载条件。 2)拟定控制方案,画出系统原理图。 3)静态计算:确定动力元件参数,选择反馈元件及其它电气元件。 4)动态计算:确定系统的传递函数,绘制开环波德图,分析稳定性,计算动态性能指标。 5)校核精度和性能指标,选择校正方式和设计校正元件。 6)选择液压能源及相应的附属元件。 7)完成执行元件及液压能源施工设计。 本章的内容主要是依照上述设计步骤,进一步说明液压伺服系统的设计原则和介绍具体设计计算方法。由于位置控制系统是最基本和应用最广的系统,所以介绍将以阀控液压缸位置系统为主。 全面理解设计要求 全面了解被控对象 液压伺服控制系统是被控对象—主机的一个组成部分,它必须满足主机在工艺上和结构上对其提出的要求。例如轧钢机液压压下位置控制系统,除了应能够承受最大轧制负载,满足轧钢机轧辊辊缝调节最大行程,调节速度和控制精度等要求外,执行机构—压下液压缸在外形尺寸上还受轧钢机牌坊窗口尺寸的约束,结构上还必须保证满足更换轧辊方便等要求。要设计一个好的控制系统,必须充分重视这些问题的解决。所以设计师应全面了解被控对象的工况,并综合运用电气、机械、液压、工艺等方面的理论知识,使设计的控制系统满足被控对象的各项要求。 明角设计系统的性能要求 1)被控对象的物理量:位置、速度或是力。 2)静态极限:最大行程、最大速度、最大力或力矩、最大功率。 3)要求的控制精度:由给定信号、负载力、干扰信号、伺服阀及电控系统零飘、非线性环节(如摩擦力、死区等)以及传感器引起的系统误差,定位精度,分辨率以及允许的飘移量等。 4)动态特性:相对稳定性可用相位裕量和增益裕量、谐振峰值和超调量等来规定,响应的快速性可用载止频率或阶跃响应的上升时间和调整时间来规定; 5)工作环境:主机的工作温度、工作介质的冷却、振动与冲击、电气的噪声干扰以及相应的耐高温、防水防腐蚀、防振等要求; 6)特殊要求;设备重量、安全保护、工作的可靠性以及其它工艺要求。 负载特性分析 正确确定系统的外负载是设计控制系统的一个基本问题。它直接影响系统的组成和动力元件参数的选择,所以分析负载特性应尽量反映客观实际。液压伺服系统的负载类型有惯性负载、弹性负载、粘性负载、各种摩擦负载(如静摩擦、动摩擦等)以及重力和其它不随时间、位置等参数变化的恒值负载等。 拟定控制方案、绘制系统原理图 在全面了解设计要求之后,可根据不同的控制对象,按表6所列的基本类型选定控制方案并拟定控制系统的方块图。如对直线位置控制系统一般采用阀控液压缸的方案,方块图如图36所示。图36 阀控液压缸位置控制系统方块图表6 液压伺服系统控制方式的基本类型伺服系统 控制信号 控制参数 运动类型 元件组成机液电液气液电气液 模拟量数字量位移量 位置、速度、加速度、力、力矩、压力 直线运动摆动运动旋转运动 1.阀控制:阀-液压缸,阀-液压马达2.容积控制:变量泵-液压缸;变量泵-液压马达;阀-液压缸-变量泵-液压马达3.其它:步近式力矩马达 动力元件参数选择 动力元件是伺服系统的关键元件。它的一个主要作用是在整个工作循环中使负载按要求的速度运动。其次,它的主要性能参数能满足整个系统所要求的动态特性。此外,动力元件参数的选择还必须考虑与负载参数的最佳匹配,以保证系统的功耗最小,效率高。 动力元件的主要参数包括系统的供油压力、液压缸的有效面积(或液压马达排量)、伺服阀的流量。当选定液压马达作执行元件时,还应包括齿轮的传动比。 供油压力的选择 选用较高的供油压力,在相同输出功率条件下,可减小执行元件——液压缸的活塞面积(或液压马达的排量),因而泵和动力元件尺寸小重量轻,设备结构紧凑,同时油腔的容积减小,容积弹性模数增大,有利于提高系统的响应速度。但是随供油压力增加,由于受材料强度的限制,液压元件的尺寸和重量也有增加的趋势,元件的加工精度也要求提高,系统的造价也随之提高。同时,高压时,泄漏大,发热高,系统功率损失增加,噪声加大,元件寿命降低,维护也较困难。所以条件允许时,通常还是选用较低的供油压力。 常用的供油压力等级为7MPa到28MPa,可根据系统的要求和结构限制条件选择适当的供油压力。 伺服阀流量与执行元件尺寸的确定 如上所述,动力元件参数选择除应满足拖动负载和系统性能两方面的要求外,还应考虑与负载的最佳匹配。下面着重介绍与负载最佳匹配问题。 (1)动力元件的输出特性 将伺服阀的流量——压力曲线经坐标变换绘于υ-FL平面上,所得的抛物线即为动力元件稳态时的输出特性,见图37。 图37 参数变化对动力机构输出特性的影响a)供油压力变化;b)伺服阀容量变化;c)液压缸面积变化 图中 FL——负载力,FL=pLA; pL——伺服阀工作压力; A——液压缸有效面积; υ——液压缸活塞速度, ; qL——伺服阀的流量; q0——伺服阀的空载流量; ps——供油压力。 由图37可见,当伺服阀规格和液压缸面积不变,提高供油压力,曲线向外扩展,最大功率提高,最大功率点右移,如图37a。 当供油压力和液压缸面积不变,加大伺服阀规格,曲线变高,曲线的顶点A ps不变,最大功率提高,最大功率点不变,如图37b。 当供油压力和伺服阀规格不变,加大液压缸面积A,曲线变低,顶点右移,最大功率不变,最大功率点右移,如图37c。 (2)负载最佳匹配图解法 在负载轨迹曲线υ-FL平面上,画出动力元件输出特性曲线,调整参数,使动力元件输出特性曲线从外侧完全包围负载轨迹曲线,即可保证动力元件能够拖动负载。在图38中,曲线1、2、3代表三条动力元件的输出特性曲线。曲线2与负载轨迹最大功率点c相切,符合负载最佳匹配条件,而曲线1、3上的工作点α和b,虽能拖动负载,但效率都较低。 (3)负载最佳匹配的解析法 参见液压动力元件的负载匹配。 (4)近似计算法在工程设计中,设计动力元件时常采用近似计算法,即按最大负载力FLmax选择动力元件。在动力元件输出特性曲线上,限定 FLmax≤pLA= ,并认为负载力、最大速度和最大加速度是同时出现的,这样液压缸的有效面积可按下式计算: (37) 图38 动力元件与负载匹配图形 按式37求得A值后,可计算负载流量qL,即可根据阀的压降从伺服阀样本上选择合适的伺服阀。近似计算法应用简便,然而是偏于保守的计算方法。采用这种方法可以保证系统的性能,但传递效率稍低。 (5)按液压固有频率选择动力元件 对功率和负载很小的液压伺服系统来说,功率损耗不是主要问题,可以根据系统要求的液压固有频率来确定动力元件。 四边滑阀控制的液压缸,其活塞的有效面积为 (38) 二边滑阀控制的液压缸,其活塞的有效面积为 (39) 液压固有频率ωh可以按系统要求频宽的(5~10)倍来确定。对一些干扰力大,负载轨迹形状比较复杂的系统,不能按上述的几种方法计算动力元件,只能通过作图法来确定动力元件。 计算阀控液压马达组合的动力元件时,只要将上述计算方法中液压缸的有效面积A换成液压马达的排量D,负载力FL换成负载力矩TL,负载速度换成液压马达的角速度 ,就可以得到相应的计算公式。当系统采用了减速机构时,应注意把负载惯量、负载力、负载的位移、速度、加速度等参数都转换到液压马达的轴上才能作为计算的参数。减速机构传动比选择的原则是:在满足液压固有频率的要求下,传动比最小,这就是最佳传动比。 伺服阀的选择 根据所确定的供油压力ps和由负载流量qL(即要求伺服阀输出的流量)计算得到的伺服阀空载流量q0,即可由伺服阀样本确定伺服阀的规格。因为伺服阀输出流量是限制系统频宽的一个重要因素,所以伺服阀流量应留有余量。通常可取15%左右的负载流量作为伺服阀的流量储备。 除了流量参数外,在选择伺服阀时,还应考虑以下因素: 1)伺服阀的流量增益线性好。在位置控制系统中,一般选用零开口的流量阀,因为这类阀具有较高的压力增益,可使动力元件有较大的刚度,并可提高系统的快速性与控制精度。 2)伺服阀的频宽应满足系统频宽的要求。一般伺服阀的频宽应大于系统频宽的5倍,以减小伺服阀对系统响应特性的影响。 3)伺服阀的零点漂移、温度漂移和不灵敏区应尽量小,保证由此引起的系统误差不超出设计要求。 4)其它要求,如对零位泄漏、抗污染能力、电功率、寿命和价格等,都有一定要求。 执行元件的选择 液压伺服系统的执行元件是整个控制系统的关键部件,直接影响系统性能的好坏。执行元件的选择与设计,除了按本节所述的方法确定液压缸有效面积A(或液压马达排量D)的最佳值外,还涉及密封、强度、摩擦阻力、安装结构等问题。 反馈传感器的选择 根据所检测的物理量,反馈传感器可分为位移传感器、速度传感器、加速度传感器和力(或压力)传感器。它们分别用于不同类型的液压伺服系统,作为系统的反馈元件。闭环控制系统的控制精度主要决定于系统的给定元件和反馈元件的精度,因此合理选择反馈传感器十分重要。 传感器的频宽一般应选择为控制系统频宽的5~10倍,这是为了给系统提供被测量的瞬时真值,减少相位滞后。传感器的频宽对一般系统都能满足要求,因此传感器的传递函数可近似按比例环节来考虑。 确定系统方块图 根据系统原理图及系统各环节的传递函数,即可构成系统的方块图。根据系统的方块图可直接写出系统开环传递函数。阀控液压缸和阀控液压马达控制系统二者的传递函数具有相同的结构形式,只要把相应的符号变换一下即可。 绘制系统开环波德图并确定开环增益 系统的动态计算与分析在这里是采用频率法。首先根据系统的传递函数,求出波德图。在绘制波德图时,需要确定系统的开环增益K。 改变系统的开环增益K时,开环波德图上幅频曲线只升高或降低一个常数,曲线的形状不变,其相频曲线也不变。波德图上幅频曲线的低频段、穿越频率以及幅值增益裕量分别反映了闭环系统的稳态精度、截止频率及系统的稳定性。所以可根据闭环系统所要求的稳态精度、频宽以及相对稳定性,在开环波德图上调整幅频曲线位置的高低,来获得与闭环系统要求相适应的K值。 由系统的稳态精度要求确定K 由控制原理可知,不同类型控制系统的稳态精度决定于系统的开环增益。因此,可以由系统对稳态精度的要求和系统的类型计算得到系统应具有的开环增益K。 由系统的频宽要求确定K 分析二阶或三阶系统特性与波德图的关系知道,当ζh和K/ωh都很小时,可近似认为系统的频宽等于开环对数幅值曲线的穿越频率,即ω-3dB≈ωc,所以可绘制对数幅频曲线,使ωc在数值上等于系统要求的ω-3dB值,如图39所示。由此图可得K值。 图39 由ω-3dB绘制开环对数幅频特性a)0型系统;b)I型系统 由系统相对稳定性确定K 系统相对稳定性可用幅值裕量和相位裕量来表示。根据系统要求的幅值裕量和相位裕量来绘制开环波德图,同样也可以得到K。见图40。 实际上通过作图来确定系统的开环增益K,往往要综合考虑,尽可能同时满足系统的几项主要性能指标。 系统静动态品质分析及确定校正特性 在确定了系统传递函数的各项参数后,可通过闭环波德图或时域响应过渡过程曲线或参数计算对系统的各项静动态指标和误差进行校核。如设计的系统性能不满足要求,则应调整参数,重复上述计算或采用校正环节对系统进行补偿,改变系统的开环频率特性,直到满足系统的要求。 仿真分析 在系统的传递函数初步确定后,可以通过计算机对该系统进行数字仿真,以求得最佳设计。目前有关于数字仿真的商用软件,如Matlab软件,很适合仿真分析。

相关百科

热门百科

首页
发表服务