收藏 分销(赏)

红外测温专业系统设计.doc

上传人:w****g 文档编号:2954664 上传时间:2024-06-12 格式:DOC 页数:14 大小:405.54KB
下载 相关 举报
红外测温专业系统设计.doc_第1页
第1页 / 共14页
红外测温专业系统设计.doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述
基于ATMEGA88红外测温仪 作品采用ATMEL公司ATMGEA88 作为MCU,内部有8K FLASH,1kram。工作在内部8M RC振荡下,耗电仅为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。。 如下是仪放基本参数 LOW OFFSET VOLTAGE:50mV max LOW DRIFT:0.25mV/°C max LOW INPUT BIAS CURRENT:2nA max HIGH COMMON-MODE REJECTION:115dB min INPUT OVER-VOLTAGE PROTECTION:±40V WIDE SUPPLY RANGE:±2.25 to ±18V LOW QUIESCENT CURRENT:3mA max 当R5=100时,放大倍数为500倍。G=50K/R5。运放为双电源运放,因此提供了双电源。 放大后电压大概为75MV(26度),145MV(37度)。由于没有精确校准,因此必然有偏差。 采用美信公司反相电荷泵芯片MAX889T作为负向电源输出。最大输出电流为200MA,可以满足运放需求,留有足够余量。电荷泵工作在2M开关频率下,只需要1UF电容就可以工作。不需要外加电感,最大工作电压为5.5V ,漏电流为20MA。RMB20一种。。。 软件流程图 程序带注释 #include <mega88.h> #include "lcd5110.h" #include <delay.h> float wendu;//定义float型函数保存温度,以便计算小数 #define FIRST_ADC_INPUT 5 #define LAST_ADC_INPUT 5 unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1]; #define ADC_VREF_TYPE 0xC0 //AD初始化,时钟62.5K,内部1.1V基准,采用自动扫描模式,扫描通道AD通道5 // ADC interrupt service routine // with auto input scanning interrupt [ADC_INT] void adc_isr(void) { static unsigned char input_index=0; // Read the AD conversion result adc_data[input_index]=ADCW; // Select next ADC input if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT)) input_index=0; ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index; // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=0x40; } // Declare your global variables here void main(void) //系统初始化 { // Declare your local variables here // Crystal Oscillator division factor:1 #pragma optsize- CLKPR=0x80; CLKPR=0x00; #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif // Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0xff; // Port C initialization // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00; // Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x00; // Timer/Counter 0 initialization // Clock source:System Clock // Clock value:Timer 0 Stopped // Mode:Normal top=FFh // OC0A output:Disconnected // OC0B output:Disconnected TCCR0A=0x00; TCCR0B=0x00; TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source:System Clock // Clock value:Timer1 Stopped // Mode:Normal top=FFFFh // OC1A output:Discon. // OC1B output:Discon. // Noise Canceler:Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt:Off // Input Capture Interrupt:Off // Compare A Match Interrupt:Off // Compare B Match Interrupt:Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source:System Clock // Clock value:Timer2 Stopped // Mode:Normal top=FFh // OC2A output:Disconnected // OC2B output:Disconnected ASSR=0x00; TCCR2A=0x00; TCCR2B=0x00; TCNT2=0x00; OCR2A=0x00; OCR2B=0x00; // External Interrupt(s) initialization // INT0:Off // INT1:Off // Interrupt on any change on pins PCINT0-7:Off // Interrupt on any change on pins PCINT8-14:Off // Interrupt on any change on pins PCINT16-23:Off EICRA=0x00; EIMSK=0x00; PCICR=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=0x00; // Timer/Counter 1 Interrupt(s) initialization TIMSK1=0x00; // Timer/Counter 2 Interrupt(s) initialization TIMSK2=0x00; // Analog Comparator initialization // Analog Comparator:Off // Analog Comparator Input Capture by Timer/Counter 1:Off ACSR=0x80; ADCSRB=0x00; // ADC initialization // ADC Clock frequency:1000.000 kHz // ADC Voltage Reference:Int.,cap. on AREF // ADC Auto Trigger Source:Free Running // Digital input buffers on ADC0: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; //打开背光 // Global enable interrupts #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," Just for a "); LCD_write_6_8string(0,5," simple test "); delay_ms(200); //延时0.2S // Place your code here }; }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服