• 回答数

    5

  • 浏览数

    327

莹火虫妹妹
首页 > 期刊论文 > 基于单片机的温度检测设计论文

5个回答 默认排序
  • 默认排序
  • 按时间排序

龙舌兰日出shine

已采纳

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

236 评论

一吉一吉

摘要本设计的温度测量计加热控制系统以AT89S52单片机为核心部件,外加温度采集电路、键盘显示电路、加热控制电路和越限报警等电路。采用单总线型数字式的温度传感器DSI8B20,及行列式键盘和动态显示的方式,以容易控制的固态继电器作加热控制的开关器件。本作品既可以对当前温度进行实时显示又可以对温度进行控制,以使达到用户需要的温度,并使其恒定再这一温度。人性化的行列式键盘设计使设置温度简单快速,两位整数一位小数的显示方式具有更高的显示精度。建立在模糊控制理论控制上的控制算法,是控制精度完全能满足一般社会生产的要求。通过对系统软件和硬件设计的合理规划,发挥单片机自身集成众多系统及功能单元的优势,再不减少功能的前提下有效的降低了硬件的成本,系统操控更简便。实验证明该温控系统能达到0.2℃的静态误差,0.45℃的控制精度,以及只有0.83%的超调量,因本设计具有很高的可靠性和稳定性。关键词:单片机 恒温控制 模糊控制引言温度是工业控制中主要的被控参数之一,特别是在冶金、化工、建材、食品、机械、石油等工业中,具有举足重轻的作用。随着电子技术和微型计算机的迅速发展,微机测量和控制技术得到了迅速的发展和广泛的应用。 采用单片机来对温度进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量和数量。MSP430系列单片机具有处理能强、运行速度快、功耗低等优点,应用在温度测量与控制方面,控制简单方便,测量范围广,精度较高。温度传感器将温度信息变换为模拟电压信号后,将电压信号放大到单片机可以处理的范围内,经过低通滤波,滤掉干扰信号送入单片机。在单片机中对信号进行采样,为进一步提高测量精度,采样后对信号再进行数字滤波。单片机将检测到的温度信息与设定值进行比较,如果不相符,数字调节程序根据给定值与测得值的差值按PID控制算法设计控制量,触发程序根据控制量控制执行单元。如果检测值高于设定值,则启动制冷系统,降低环境温度;如果检测值低于设定值,则启动加热系统,提高环境温度,达到控制温度的目的。图形点阵式液晶可显示用户自定义的任意符号和图形,并可卷动显示,它作为便携式单片机系统人机交互界面的重要组成部分被广泛应用于实时检测和显示的仪器仪表中。支持汉字显示的图形点阵液晶在现代单片机应用系统中是一种十分常用的显示设备,汉字BP机、手机上的显示屏就是图形点阵液晶。它与行列式小键盘组成了现代单片机应用系统中最常用的人机交互界面。本文设计了一种基于MSP430单片机的温度测量和控制装置,能对环境温度进行测量,并能根据温度给定值给出调节量,控制执行机构,实现调节环境温度的目的。━、硬件设计1:MSP430系列单片机简介及选型单片机即微控制器,自其开发以来,取得了飞速的发展。单片机控制系统在工业、交通、医疗等领域的应用越来越广泛,在单片机未开发之前,电子产品只能由复杂的模拟电路来实现,不仅体积大,成本高,长期使用后元件老化,控制精度大大降低,单片机开发以后,控制系统变为智能化了,只需要在单片机外围接一点简单的接口电路,核心部分只是由人为的写入程序来完成。这样产品体积变小了,成本也降低了,长期使用也不会担心精度达不到了。特别是嵌入式技术的发展,必将为单片机的发展提供更广阔的发展空间,近年来,由于超低功耗技术的开发,又出现了低功耗单片机,如MSP430系列、ZK系列等,其中的MSP430系列单片机是美国德州仪器(TI)的一种16位超低功耗单片机,该单片机

246 评论

beyond45678

热电致冷器件特别适合于小热量和受空间限制的温控领域。改变加在器件上的直流电的极性即可变致冷为加热,而吸热或放热率则正比于所加直流电流的大小。Pe1tier 温控器的设定温度可以在一个较宽的范围内任意选择,可选择低于或高于环境温度。在本系统中我们选用了天津蓝天高科电源有限公司生产的半导体致冷器件 TES1-12739,其最大温差电压 14.7V,最大温差电流3.9A最大致冷功率33.7W。1.5 其它部分系统采用Samsung(三星)公司生产的真空荧光数码显示屏 VFD用来实时显示当前温度,以观察控制效果。键盘和串行通信接口用来设定控制温度和调整PID参数。系统电路原理图如图3所示。2 系统软件设计系统开始工作时,首先由单片机控制软件发出温度读取指令,通过数字温度传感器 DS18B20 采样被控对象的当前温度值T1并送显示屏实时显示。然后,将该温度测量值与设定值T比较,其差值送 PID控制器。PID 控制器处理后输出一定数值的控制量,经DA 转换为模拟电压量,该电压信号再经大电流驱动电路,提高电流驱动能力后加载到半导体致冷器件上,对温控对象进行加热或制冷。加热或制冷取决于致冷器上所加电压的正负,若温控对象当前温度测量值与设定值差值为正,则输出负电压信号,致冷器上加载负电压温控对象温度降低;反之,致冷器上加载正向电压,温控对象温度升高。上述过程:温度采样-计算温差-PID调节-信号放大输出周而复始,最后将温控对象的温度控制在设定值附近上下波动,随着循环次数的增加,波动幅度会逐渐减小到某一很小的量,直至达到控制要求。为了加快控制,在进入PID控制前加入了一段温差判断程序。当温度差值大于设定阈值Δt时,系统进行全功率加热或制冷,直到温差小于Δt才进入PID控制环节。图4为系统工作主程序的软件流程图.3 结论本文设计的基于单片机数字PID控制的精密温度控制系统,在实际应用中取得了良好的控制效果,温度控制精度达到±0.1℃。经48小时连续运行考验,系统工作稳定,有效地降低了辐亮度标准探测器的温度系数,使辐亮度标准探测器在温度变化较大的环境中也能保持其高精度,为实现基于探测器的高精度辐射定标的广泛应用奠定了基础。本文作者创新点:在原来基于PC的PID温控系统的基础上,设计了由单片机、数字式温传感器DS18B20和半导体致冷器组成的精密温度控制系统。该温控系统的应用为高精度光辐射测量仪器-辐亮度标准探测器的小型化、智能化提供了有利条件。

226 评论

龙宝宝lovyle

用DS18B20做的电子温度计,非常简单。#include #include\"AscLed.h\"#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){ T.Temp[1]=Read_18B20(); //读低位 Power++;}//______________________________________void Get_Ds18b20H (void){ T.Temp[0]=Read_18B20(); //读高位 Power++;}//------------------------------------//规范化成浮点数// sssss111;11110000// sssss111;1111(0.5,0.25,0.125,0.0625)//------------------------------------void ReadTemp (void){ unsigned char i; unsigned intF1=0; char j=1; code int Code_F[]={6250,1250,2500,5000}; WenDu.Flag=0; if (T.Temp[0] >0x80){ //负温度 T.Tt =~T.Tt+1; //取反+1=源吗 +符号S WenDu.Flag=-1; } T.Tt <<= 4; //左移4位 WenDu.WenDu=T.Temp[0]; // 温度整数 //************************************************** T.Temp[1]>>=4; //--------------------------- for (i=0;i<4;i++){ //计算小数位 F1 +=(T.Temp[1] & 0x01)*Code_F; T.Temp[1]>>=1; } WenDu.WenDuDot=F1; //温度的小数 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])();}//---------------------------------------------------//将温度显示,小数点放大了10000.void GetBcd(void){ LedBuf[0]=WenDu.WenDu / 10; LedBuf[1]=WenDu.WenDu % 10 +DotK; LedBuf[2]=(WenDu.WenDuDot/1000)%10; if(LedBuf[0]==0)LedBuf[0]=Black; if(WenDu.Flag==0) 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:采用函数数组读取DS18B20.LED数码管显示正常!3:改变FHz可以用6,12MHz工作!******************************************************/code unsigned char Stop[3] _at_ 0x3b;void main (void){ P1=0xff; WenDu.WenDu=0; while (1){ GetTemp(); GetBcd(); // JbDelay(); LedOut(); }}复制代码 20091012_8b1ef92155560c13b5807ZmoDVSacjwD[1].jpg (12 KB) 2009-10-21 23:21 上传下载次数:0

312 评论

秋水伊人ying

我做的课程设计,用的数码管,也做了protues仿真,你有需要的话,我邮箱是。希望对你有帮助,#includesbit 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*0.0625;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;}///////////////////////////////////////////////////////////////// }}

206 评论

相关问答

  • 基于单片机的光照度检测论文

    不知道楼主解决了问题没,我这有一些这方面的论文,给你参考一下吧..单片机应用系统中掉电保护电路的设计研究中文摘要:本文介绍了单片机应用系统中掉电保护的基本原理与

    momohana0217 2人参与回答 2023-12-12
  • 单片机在温度检测的论文

    二.系统软件设计图4 系统程序流程图2.1 系统程序流程图系统程序流程图如图4所示。2.2 温度部分软件设计DS18B20的一线工作协议流程是:初始化→ROM操

    谁的吴邪 6人参与回答 2023-12-07
  • 单片机温度检测论文

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

    zhang太太 4人参与回答 2023-12-05
  • 51单片机温度检测论文长沙学院

    很简单的问题,最好使用18B20来做;使用一个字节保存温度上限,一个字节保存下限。每次测量之后,将测温结果与这两数字做比较就行了。具体的控制量自己根据要求决定。

    开开`心心 7人参与回答 2023-12-12
  • 基于单片机pm25检测系统论文

    毕业设计论文可以找别人帮你做啊,把你的详细要求发不到任务中国网,让高手给你解决这个问题。或者你去抄一片。

    小布丁儿0126 6人参与回答 2023-12-11