您好,欢迎访问三七文档
自然界一切温度高于绝对零度(-273.15℃)的物体。由于分子的热运动都在不停地向周围空间辐射包括红外波段在内的电磁波。其辐射能量密度与物体本身的温度关系符合普朗克(Plank)定律。红外测温的原理是一样的,都是根据普朗克原理。一般理解红外测量的是物体的温度.其实测的是目标物与传感器或者说是物体与环境温度之间的差值。物体辐射能量的大小直接与该物体的温度有关.具体地说,是与该物体热力学温度的4次方成正比.用公式可表达为:E=δε(T4-T4o)(1)式中,E是辐射出射度.单位是W/m3;δ是斯蒂芬一波尔兹曼常数,5.67x10-8W/(m2·K4);ε是物体的辐射率:T是物体的温度(K);To是物体周围的环境温度(K)。人体主要辐射波长为9μm—10μm的红外线.通过对人体自身辐射红外能量的测量便能准确地测定人体表面温度。由于该波长范围内的光线不被空气所吸收,因而也可利用人体辐射的红外能量精确地测量人体表面温度。红外测温仪工作原理:红外测温仪由光学系统,光电探测器,信号大器及信号处理.显示输出等部分组成。光学系统汇聚其视场内的目标红外辐射能量,红外能量聚焦在光电探测器上并转变为相应的电信号,该信号再经换算转变为被测目标的温度值红外测温模块输出的有效数据就是温度值,只需要把这些数据换算成10进制就可以了#includereg52.h#defineucharunsignedchar#defineuintunsignedint/*----------------------------------工程说明--------------------------------------;工程名称:ZyTemp.Uv2;功能描述:测量环境温度和目标温度,并用键盘控制显示温度值,;按K1,显示目标温度;按K2,显示环境温度;IDE环境:KeiluVision3V3.31;硬件连接:VCC-------VCC;P1.0------Data;P1.2------Clk;P1.4------ACK;GND-------GND;------------------------------------定义接口------------------------------------*/sbitTN_Data=P1^0;sbitTN_Clk=P1^2;sbitTN_ACK=P1^4;sbitkey_1=P2^2;sbitkey_2=P2^3;/*-----------------------------------变量列表------------------------------------*/unsignedcharcodekeytab_1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89};//H:0x89;//L:0x87;//P:0x8a;//Q:0X98;unsignedcharcodekeytab_2[]={0xef,0xdf,0xbf,0x7f};ucharReadData[5],iShow[5];/*-----------------------------------函数列表------------------------------------*/voiddisplay_1(uchari,ucharnum);//定位显示单个字符voiddisplay_2(void);//定位显示四个字符voidTN_ReadData(ucharFlag);//读数据voidTN_GetData(void);//计算数据/*----------------------------------主程序入口-----------------------------------*/voidmain(){TN_ACK=1;while(1){if(!key_1){TN_ACK=0;TN_ReadData(0x4c);//目标温度的第一个字节为0x4c}elseif(!key_2){TN_ACK=0;TN_ReadData(0x66);//环境温度的第一个字节为0x66}if((ReadData[0]==0x4c)&&(ReadData[4]==0x0d))//每帧的最后一个字节为0x0d{TN_GetData();display_2();}elseif((ReadData[0]==0x66)&&(ReadData[4]==0x0d))//每帧的最后一个字节为0x0d{TN_GetData();display_2();}}}/*------------------------------定位显示单个字符-------------------------------*/voiddisplay_1(uchari,ucharnum){P0=keytab_1[i];P2=keytab_2[num];}/*------------------------------定位显示四个字符-------------------------------*/voiddisplay_2(void){ucharkk;display_1(iShow[3]&0x0f,3);//显示十位for(kk=200;kk0;kk--);//延时display_1(iShow[2]&0x0f,2);//显示个位for(kk=200;kk0;kk--);//延时display_1(iShow[1]&0x0f,1);//显示小数第一位for(kk=200;kk0;kk--);//延时display_1(iShow[0]&0x0f,0);//显示小数第二位for(kk=200;kk0;kk--);//延时}/*------------------------------------读数据-------------------------------------*/voidTN_ReadData(ucharFlag){uchari,j,k;bitBitState=0;for(k=0;k7;k++)//每次发七帧{for(j=0;j5;j++)//每帧五个字节{for(i=0;i8;i++){while(TN_Clk);BitState=TN_Data;ReadData[j]=ReadData[j]1;ReadData[j]=ReadData[j]|BitState;while(!TN_Clk);}}if(ReadData[0]==Flag)k=8;}TN_ACK=1;}/*-----------------------------------计算数据------------------------------------*/voidTN_GetData(void){intTemp;Temp=(ReadData[1]8)|ReadData[2];Temp=Temp/16-273.15;Temp=Temp*100;//温度值乘100,以方便计算小数点后两位iShow[4]=Temp/10000;//计算温度值的百位数iShow[3]=(Temp/1000);//计算温度值的十位数iShow[3]=iShow[3]%10;iShow[2]=(Temp/100);//计算温度值的个位数iShow[2]=iShow[2]%10;iShow[1]=(Temp/10);//计算温度值的小数点后第一位数iShow[1]=iShow[1]%10;iShow[0]=(Temp);//计算温度值的小数点后第二位数iShow[0]=iShow[0]%10;}chardataBUFFER[1]={0};//定时器计数变量SbitPR=P2^2;//定义播放/录音的控制端口SbitEOM=P2^2;//定义结束信号SbitPD=P2^4;//定义芯片电源开关SbitCE=P2^5;//定义片选Voidplay(void){PD=1;//打开芯片电源开关CE=0;//选中该芯片PR=1;//开始播放While(!EOM);//等待播放内容结束信号Delays();//延时PD=0;CE=0;PR=0;}Main(){EA=1;IT=1;ET0=1;//开中断TMOD=0x01;//T0方式1计时1秒TH0=-5000/256;TL0=-5000%256;TR0=1;//开中断,启动定时For(;;);}/*定时计数器0的中断服务子程序*/Voidtimer0(void)interrupt1using1{TH0=-5000/256;//定时器T0的高4位赋值TL0=-5000%256;//定时器T0的低4位赋值BUFFER[0]=BUFFER[0]+1;//百分秒进位If(BUFFER[0]=1000)Play();//调用播放子程序}
本文标题:红外温度传感器原理
链接地址:https://www.777doc.com/doc-4716469 .html