基于单片机和K型热电偶的温度测量仪表设计.docx
1 .概述1.1 题目名基于单片机和K型热电偶的温度测量仪表设计1.2 功能和技术指标要求(1)温度测量范围:室温200C:(2)温度检测元件:K型分度号热电偶;(3)具有热电偶冷端温度自动补偿功能;(4)温度测量精度:1C±FS*2%:(5)温度显示:LED或LCD数字显示,显示分辨率0.1C(6)具有温度上限、下线设置功能,当温度测量值越限时,进行声光报警;(7)电源:电网AC220V,要求在电网电压变化土15%范围内能够正常工作。1.3 国内外相关情况概述温度的测量的历史:第一个温度传感器是伽利略做出来的。而温度测量的里程碑是由法勒海特设计的水银温度计。1740年瑞典人摄氏提出在标准大气压下,把冰水混合物的温度规定为0度,而水的沸腾度为100度。温度测量在保证产品的质量,节约能源,平安生产起到至关重要的作用。技术现状有点到线,线到面温度分布的测温技术:由外表到内部的测温技术。开展趋势是由于环境的多样化,复杂化,测温对象的多样化,智能检测成为现在温度测试的趋势。所以要加强新工艺的开发:向着智能化开展。2 .技术方案2.1 温度测量的根本方法与原理常见的温度测量方法和测温原理有:接触式,原理是热胀冷缩,这种方法测温方便。液体式(如毛细管,水银温度计),原理是受热,液体膨胀系数变大,从而液体上升。这种方法测温比拟准确。2.2 总技术方案温度测量仪表功能结构先读取环境温度,热电偶测得温度经过ADC转换器变成数字,测得冷端温度,用补偿法再计算出温度值,送到显示器显示。如果温度超过上限设置,下限设置那么蜂鸣器报警,且LED灯变红。3.4稳压电源电路学生电源。3.5 微处理器STC52单片机,芯片MAX7765:按键;显示系统采用四位共阳极数码管7SEG-MPX4-CA,报警电路由PNP型三极管Ql和蜂鸣器构成。3.6 总体电路原理图3.7 硬件调试用热电偶采集温度,把采集信号送到MAX7765中,在MAX6675中进行AD转换成数字信号,把数字信号送到STC52单片机进行处理,再送到显示屏显示。4 .软件设计4.1 软件功能说明具有热电偶冷端温度自动补偿功能;具有温度上限、下线设置功能,当温度测量值越限时,进行声光报警;4.2 软件总流程开始,初始化52,AD初始化后动AD数值滤波(取平均值),调用采集转换子程序,用补偿法计算出温度值,检测是否超量程,超过量程那么调用报警程序报警,否的话就继续调用子程序进行循环。开始v是系统初始化4.3 各功能软件include"reg52.h"头#include"inlrins.h"/nop();时函数用#defineucharUr调用采集转换子程序亨unsignedchar.1字节0-255#definieuintunsignedint7uintIiCfTnsignedint,2字节026653sbit SO=P l0; /Pl计算温度值孑连sbit SCK=PlA1;/Pl#include "reg52hV/头文件超量程?#define uint unsigned intUint 代替 nsignedar, 1 字节 0-255#include ,'intrins.hr7/#define uchar unsi调用报警子程序sbitSO=Pl0;P1.0口与SO相连sbit SCK=P11;/D1 1sbit CS=P I 2;调用子程序sbitbuzzer=Pl6;/P13.6S声光报警Uinlj,h;floatwendu;4字节(6位数字)uintRjConvertO;热电偶数据读取,返回温度voidDisp_temp();温度显示ucharqian=0,bai=0,shi=0,ge=0,xiao=0;uintP_Temp;uinttemp;codeuchartab_l10=OxCO,0xF9,OxA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;/共阳LED段码表ucharcodetab_210=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10;/含小数点共阳段码"0”"2""3"”4""5"”6"”7”"8""9”ucharcodetab_34=OxOl,0x02,0x04,0x08;位码uinlRe-Convert()热电偶数据读取,返回温度uchari;unsignedlongTemp_2;Temp_2=0;CS=;SCK=O;_nop_0;_nop_0;/这个_nop_()等效与汇编里面的NOP指令,也就是空一个机器周期,/在51单片机中_nop_()等于空12个时钟周期【即一个机器周期】CS=O;for(i=0;i<16;i+)/16位数据读取TemP_2<<=1;/向右移一位_nop_();SCK=1;上升if(SO=1)Temp_2=TemP_2|0x01;elseTemP_2=TemP_2|0x00;_nop_();SCK=O;_nop_();ITemp_2=Temp2«1;/向左移一位,取0-14位TemP_2=TemP_2>>4;/向右移4位,取3-14位TemP_2=TemP_2*1024/4096;/变换为温度值TemP_2=TemP_2-23;TemP_2=TemP_2;if(Temp_2>200)f0iXj=3OOJ>OJ-);buzze-0;elsebuzzer=1;return(Temp_2);voidDi*pjemp()温度显示uinttem=wendu;tem=temp*10;if(wendu<=200)"最高读取温度设定为200摄氏度(Xiao=(IemP&OxOf)*10/16;取小数位数字temp=temp10;ge=temp%10;取个位数字temp=temp10;shi=temp%10;"取十位数字bai=temp10;/去百位数字动态扫描显示各位数字,P3.1-P3.4口输出位码P3=0x00;PO=tab_lbai;P3=tab_30;for(j=300;j>0;j-);P3=0x00;PO=tab_lshi;P3=tab.3l;for(j=3j>0-);P3=0x00;P0=tab-2ge;P3=tab_32;for(j=300y>0-);P3=0x00;PO=tab_lxiao;P3=tab_33;forC=3005j>0J-;voidmain()/主程序for(j=3OOJ>Oy-;while(l)(WendU=Re_Convert();"热电偶数据读取,返回温度DispJempO;温度显示sbitCS=P12;P1.2口与CS相连sbitbuzzer=Pl6;/P13.6S声光报警uintj,h;floatwendu4字节(6位数字)uintRe_Convert();热电偶数据读取,返回温度voidDisp_temp();温度显示UCharqian=0,bai=0,shi=0,ge=0,xiao=0;uintP_Temp;uinttemp;ucharcodetab_l10=OxCO,0xF9,0xA4,OxBO,0x99,0x92,0x82,0xF8,0x80,0x90;/共阳LED段码表ucharcodetab_210=0x40,0x79,0x24,0x30,OX19,0X12,0x02,0x78,0x00,0x10;/含小数点共阳段码mQm”“”2""3“”4"”5""6”7”"8''UCharCOdetab_34=OxOl,0x02,0x04,OxO8;位码uiniRe_Convert()"热电偶数据读取,返回温度uchari;unsignedlongTemp_2;Temp_2=0;CS=I;SCK=O;_nop_();_nop_();"这个_nop_0等效与汇编里面的NOP指令,也就是空一个机器周期,"在51单片机中_nop_()等于空12个时钟周期【即一个机器周期】CS=O;for(i=0;i<16;i+)/16位数据读取TemP_2<<=1;向右移一位_nop_();SCK=I力上升if(SO=l)Temp_2=Temp_2|0x01;elseTemP_2=TemP_2|0x00;_nop_();SCK=O;_nop_0;TemP_2=TemP_2<<1;"向左移一位,取0-14位Temp_2=Temp_2»4;向右移4位,取3-14位TemP_2=TemP_2*1024/4096;变换为温度值TemP_2=TemP_2-23;Temp_2=Temp_2;if(Temp_2>200)for(j=300;j>0;j-;buzze-O;elsebuzzer=l;return(Temp_2);voidDisp_temp()温度显示I:uinttemp=wendu;tem=temp*10;if(wendu<=200)"最高读取温度设定为200摄氏度Xiao=(IennP&OxOf)*10/16;取小数位数字tem=tem10;ge=temp%10;"取个位数字tem=tem10;Shi=temp%10;取十位数字bai=temp10;/去百位数字"动态扫描显示各位数字,P3.1-P3.4口输出位码P3=0x00;PO=tab_lbai;P3=lab_30;for(j=300y>0y-);P3=0x00;PO=tab_lshi;P3=tab_3l;forG=300;j>0;j-);P3=0x00;P0=tab-2ge;P3=tab_3;foXj=300y>0y-);P3=0x00;PO=tab_lxiao;P3=tab_33;forU=300J>0y-);voidmain()主程序forG=300J>0J-);while(l)WendU=Re_Convert();热电偶数据读取,返回温度Disp_temp();温度显示4.4 软件测试软件能运行成功,数码管有温度变化显示。5 .温度测量仪器测试与校准5.1 温度测量仪器测试方法用热水器烧开的热水进行测试;用手温来测法。5.2 相应记录热水器烧开的热水手心温度88355.3对实验数据进行分析误差变动大稍低于实验要求,由于温度不能进行连续变化,耍按复位键,所以功能不能满足要求。误差的原因有放大倍数与其误差的稳定性;热电偶;本身电路;转换电路(基准电源);程序没有完善好。由于我负责硬件方面,所以改良设想是尽量减少本身电路产生的误差,而且由于跳线较多使得焊电路的时候变得麻烦,以后一定要注意。