红外测温系统设计.docx

上传人:b****8 文档编号:10543492 上传时间:2023-02-21 格式:DOCX 页数:14 大小:336.55KB
下载 相关 举报
红外测温系统设计.docx_第1页
第1页 / 共14页
红外测温系统设计.docx_第2页
第2页 / 共14页
红外测温系统设计.docx_第3页
第3页 / 共14页
红外测温系统设计.docx_第4页
第4页 / 共14页
红外测温系统设计.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

红外测温系统设计.docx

《红外测温系统设计.docx》由会员分享,可在线阅读,更多相关《红外测温系统设计.docx(14页珍藏版)》请在冰豆网上搜索。

红外测温系统设计.docx

红外测温系统设计

基于ATMEGA88的红外测温仪

作品采用ATMEL公司的ATMGEA88作为MCU,内部有8KFLASH,1kram。

工作在内部8MRC振荡下,耗电仅为2MA左右。

采用RISC指令集的AVR核心,运算速度大大超过传统的51单片机。

内部带有3个定时器,8路10位AD(模数转换器),串口,硬件SPI,方便使用。

大批量采购价格目前由于炒货的原因涨价到12RMB。

(具体问题可以搜索下,网上吹捧得很多)推荐你看一下中文的PDF,到处都有下载的。

采用这块芯片主要来说就有一点,比51先进,功耗低,内带AD,而且外部不需要加晶振。

使用一块LCD5110手机屏作为显示设备,可以显示输出电压以及当前状态。

液晶屏参数为72*48,点阵式,使用一个驱动库作为支持,方便开发,工作在3.3V电压下。

耗电极低,小于1MA,背光耗电为20MA。

使用一片LDO(低压差线性稳压源)作为系统电源,LM1117-3.3V,输出电压为3.3V,最大电流500MA

以下为单片机的复位电路和烧录程序用的接口

使用OTP-538U红外传感器,该传感器是一种红外线感应型的温度探测器。

主要工作原理是利用红外线的波长在硅片上产生相应的电压,根据检测到的电压不同来检测不同的温度。

由于只要是发热的光源就会辐射红外线,所以可以对温度进行非接触式的检测。

传感器由一个热敏电阻和传感器部分组成。

传感器部分根据外部的温度产生相应的电压,而热敏电阻根据外部温度不同,电阻值产生变化,由此来补充因为外界环境对传感器的影响,因此可以做到比较高的精度。

价格为RMB40每颗,以下是接口电路

下表是温度与电压输出的比例

下表是热敏电阻的变化比率

由于这两个值变化很难算。

应用电路上都是4个电阻做的,而且没有电压偏移和温度的关系。

所以我直接舍弃了温度补偿。

这个图的电阻值我完全计算不出来。

泪流满面。

采用TI公司的仪表放大器INA114,采用仪表放大器最大的好处是增加了输入阻抗,而且放大倍数比较好调整,高CMRR,而且噪声极低,最关键的是,输入失调电压小。

价格为RMB32。

以下是仪放的基本参数

LOWOFFSETVOLTAGE:

50μVmax

LOWDRIFT:

0.25μV/︒Cmax

LOWINPUTBIASCURRENT:

2nAmax

HIGHCOMMON-MODEREJECTION:

115dBmin

INPUTOVER-VOLTAGEPROTECTION:

±40V

WIDESUPPLYRANGE:

±2.25to±18V

LOWQUIESCENTCURRENT:

3mAmax

当R5=100时,放大倍数为500倍。

G=50K/R5。

运放为双电源运放,所以提供了双电源。

放大后的电压大概为75MV(26度),145MV(37度)。

由于没有准确校准,所以必定有偏差。

采用美信公司的反相电荷泵芯片MAX889T作为负向电源的输出。

最大输出电流为200MA,可以满足运放的需求,留有足够的余量。

电荷泵工作在2M开关频率下,只需要1UF的电容就可以工作。

不需要外加电感,最大工作电压为5.5V,漏电流为20MA。

RMB20一个。

软件流程图

程序带注释

#include

#include"lcd5110.h"

#include

floatwendu;//定义float型的函数保存温度,方便计算小数

#defineFIRST_ADC_INPUT5

#defineLAST_ADC_INPUT5

unsignedintadc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];

#defineADC_VREF_TYPE0xC0

//AD初始化,时钟62.5K,内部1.1V基准,采用自动扫描模式,扫描通道AD通道5

//ADCinterruptserviceroutine

//withautoinputscanning

interrupt[ADC_INT]voidadc_isr(void)

{

staticunsignedcharinput_index=0;

//ReadtheADconversionresult

adc_data[input_index]=ADCW;

//SelectnextADCinput

if(++input_index>(LAST_ADC_INPUT-FIRST_ADC_INPUT))

input_index=0;

ADMUX=(FIRST_ADC_INPUT|(ADC_VREF_TYPE&0xff))+input_index;

//DelayneededforthestabilizationoftheADCinputvoltage

delay_us(10);

//StarttheADconversion

ADCSRA|=0x40;

}

//Declareyourglobalvariableshere

voidmain(void)//系统初始化

{

//Declareyourlocalvariableshere

//CrystalOscillatordivisionfactor:

1

#pragmaoptsize-

CLKPR=0x80;

CLKPR=0x00;

#ifdef_OPTIMIZE_SIZE_

#pragmaoptsize+

#endif

//Input/OutputPortsinitialization

//PortBinitialization

//Func7=InFunc6=InFunc5=InFunc4=InFunc3=InFunc2=InFunc1=InFunc0=In

//State7=TState6=TState5=TState4=TState3=TState2=TState1=TState0=T

PORTB=0x00;

DDRB=0xff;

//PortCinitialization

//Func6=InFunc5=InFunc4=InFunc3=InFunc2=InFunc1=InFunc0=In

//State6=TState5=TState4=TState3=TState2=TState1=TState0=T

PORTC=0x00;

DDRC=0x00;

//PortDinitialization

//Func7=InFunc6=InFunc5=InFunc4=InFunc3=InFunc2=InFunc1=InFunc0=In

//State7=TState6=TState5=TState4=TState3=TState2=TState1=TState0=T

PORTD=0x00;

DDRD=0x00;

//Timer/Counter0initialization

//Clocksource:

SystemClock

//Clockvalue:

Timer0Stopped

//Mode:

Normaltop=FFh

//OC0Aoutput:

Disconnected

//OC0Boutput:

Disconnected

TCCR0A=0x00;

TCCR0B=0x00;

TCNT0=0x00;

OCR0A=0x00;

OCR0B=0x00;

//Timer/Counter1initialization

//Clocksource:

SystemClock

//Clockvalue:

Timer1Stopped

//Mode:

Normaltop=FFFFh

//OC1Aoutput:

Discon.

//OC1Boutput:

Discon.

//NoiseCanceler:

Off

//InputCaptureonFallingEdge

//Timer1OverflowInterrupt:

Off

//InputCaptureInterrupt:

Off

//CompareAMatchInterrupt:

Off

//CompareBMatchInterrupt:

Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

//Timer/Counter2initialization

//Clocksource:

SystemClock

//Clockvalue:

Timer2Stopped

//Mode:

Normaltop=FFh

//OC2Aoutput:

Disconnected

//OC2Boutput:

Disconnected

ASSR=0x00;

TCCR2A=0x00;

TCCR2B=0x00;

TCNT2=0x00;

OCR2A=0x00;

OCR2B=0x00;

//ExternalInterrupt(s)initialization

//INT0:

Off

//INT1:

Off

//InterruptonanychangeonpinsPCINT0-7:

Off

//InterruptonanychangeonpinsPCINT8-14:

Off

//InterruptonanychangeonpinsPCINT16-23:

Off

EICRA=0x00;

EIMSK=0x00;

PCICR=0x00;

//Timer/Counter0Interrupt(s)initialization

TIMSK0=0x00;

//Timer/Counter1Interrupt(s)initialization

TIMSK1=0x00;

//Timer/Counter2Interrupt(s)initialization

TIMSK2=0x00;

//AnalogComparatorinitialization

//AnalogComparator:

Off

//AnalogComparatorInputCapturebyTimer/Counter1:

Off

ACSR=0x80;

ADCSRB=0x00;

//ADCinitialization

//ADCClockfrequency:

1000.000kHz

//ADCVoltageReference:

Int.,cap.onAREF

//ADCAutoTriggerSource:

FreeRunning

//DigitalinputbuffersonADC0:

On,ADC1:

On,ADC2:

On,ADC3:

On

//ADC4:

On,ADC5:

On

DIDR0=0x00;

ADMUX=FIRST_ADC_INPUT|(ADC_VREF_TYPE&0xff);

ADCSRA=0xEF;

ADCSRB&=0xF8;

LCD_init();//液晶初始化

PORTB.5=1;//打开背光

//Globalenableinterrupts

#asm("sei")

while

(1)

{//LCD_write_6_8string(0,0,"");

//LCD_write_number(24,0,adc_data[0]);

wendu=adc_data[0];//采集电压

wendu=wendu/6+12;//计算温度

LCD_write_6_8string(0,1,"Temperature");

LCD_write_6_8string(0,2,"");

LCD_write_float(24,2,wendu);//将计算后的温度输出到屏幕上

LCD_write_6_8string(0,4,"Justfora");

LCD_write_6_8string(0,5,"simpletest");

delay_ms(200);//延时0.2S

//Placeyourcodehere

};

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1