《基于ATMEGA88的红外测温仪》.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《基于ATMEGA88的红外测温仪》.doc

基于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: 50?V max LOW DRIFT: 0.25?V/?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

文档评论(0)

wgvi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档