1、 第 1 页 共 46 页引言随着“信息时代”的到来,作为获取信息的手段传感器技术得到了显著的进步,其应用领域越来越广泛,对其要求越来越高,需求越来越迫切。传感器技术已成为衡量一个国家科学技术发展水平的重要标志之一。因此,了解并掌握传感器的基本结构、工作原理及特性是非常重要的。为了提高对传感器的认识和了解,尤其是对温度传感器的深入研究以及其用法与用途,基于实用、广泛和典型的原则而设计了本系统。本文利用单片机结合传感器技术而开发设计了红外抄表系统。文中把传感器理论与单片机实际应用有机结合,详细地讲述了利用温度传感器 DS18B20 测量环境温度,以及实现红外数据传输的过程。本设计应用性比较强,只
2、要对电路部分稍加改装,就可以实现抄读其它的数字仪表设备:如数字电度表,数字水表等等。设计后的系统具有操作方便,控制灵活等优点。其主要功能和指标如下:1、利用温度传感器(DS18B20)测量某一点环境温度;2、测量范围为5599,精度为0.5; 3、用 4 位数码管进行显示实际温度值显示;4、手持端通过红外发射管发射测温信号;5、测温端通过红外发射管发送到手持端; 6、手持端可以随时查看指定待测物体的温度值。设计的核心是环境温度的测量以及红外数据的发射和接收,和温度的显示。文中对每个部分功能、实现过程作了详细地介绍。第 2 页 共 46 页1 方案选择该系统主要由温度测量和数据采集和发送三部分组
3、成。下面列举两种实现方案:方案一:温度检测可以使用低温热偶或铂电阻,数据采集部分则使用带有 A/D 通道的单片机。考虑到一般的 A/D 输入通道都只能接收大信号,所以还要设计相应的放大电路。而模拟信号在长距离传输过程中,抗电磁干扰是令人伤脑筋的问题。此方案的软件简单,但硬件复杂,且检测点数追加时,各敏感元件参数的不一致性,都将会导致误差的产生,难以完全清除,而且成本会有较大增长幅度。方案二:使用单片机和数字式单总线温度传感器构成。其具有下列特点:具有高的测量精度和分辨率,测量范围大;抗干扰能力强,稳定性好;信号易于处理、传送和自动控制;便于动态及多路测量,读数直观;安装方便,维护简单,工作可靠
4、性高。单总线温度传感器可以采用 DALLAS 公司生产的 DS18B20 系列,这类温度传感器直接输出数字信号,且多路温度传感器可以挂在 1 条总线上,共同占用单片机的1 个 I/O 口即可实现。在提升单片机 I/O 口驱动能力的前提下,理论上可以任意扩充检测的温度点数。比较两个方案后可以发现,方案二更适合于用作本系统的实施方案。尽管方案二不需要 A/D,但考虑到系统扩充等因素,单片机可以选用 AT98C2051。第 3 页 共 46 页2 硬件部分采用方案二的硬件设计比较简单,系统构成如图 1 所示。 图 1温度测试系统和手持接收系统组成框图2.1 DS18B20介绍DALLAS 公司的 D
5、S18B20 单总线数字传感器工作温度范围是-55125,在-3085范围内温度测量精度为0.5;具有温度报警功能,用户可设置最高和最低报警温度,且设置值掉电不丢失;采用 DALLAS 公司特有的单总线通信协议,只用一条数据线就可实现与 MCU 的通信;此外,DS18B20 能够直接从数据线获得电源,无需外部电池供电。DS18B20 通过使用在板(on_board)温度测量专利技术来测量温度。其温度测量电路是通过计数时钟周期来实现的,DS18B20 有两个温度系数振荡器,温度测量时对高温度系数振荡器产生的门开同期内,低温度系数振荡器经历的时钟周期的个数进行计数而得到的。DS18B20 数字温度
6、传感器提供 9 位(二进制)温度读数,指示器件温度,所以无需A/D 转换。信息经过单线接口送入 DS18B20 或从 DS18B20 送出,因此从主机 CPU 到DS18B20 仅需一条线连接,而且 DS18B20 的电源可由数据线本身提供(相对于外部电源,转换时间要延长)。因此每一个 DS18B20 在出厂时已经给定了唯一的序号因此从理论DS18B20数码管 红外发射红外接收AT89C51红外接收红外发射按键数码管AT89C51第 4 页 共 46 页AT89C51DS18B20上说任意多个 DS18B20 可以连接在一条单线总线上。DS18B20 的测量范围从-55到+125,增量为 0.
7、5(最高精度可达 0.1),转换速度小于 1s(典型值)。而在本遥测系统中采用外部电源供电温度测量工作方式,其中电阻 R 是上拉电阻,使得单线总线的空闲状态是高电平。它与 CPU(AT89C51)的接法如图 2。 5 VR地图 2 DS18B20 与单片机的连接由于 DS18B20 只有一根数据线。因此它和主机(单片机)通信是需要串行通信,而 AT89C51 有两个串行端口,所以可以不用软件来模拟实现。经过单线接口访问DC18B20 必须遵循如下协议:初始化、ROM 操作命令、存储器操作命令和控制操作。要使传感器工作,一切处理均从序列开始。主机发送(Tx)-复位脉冲(最短为 480s 的低电平
8、信号)。接着主机便释放此线并进入接收方式(Rx)。总线经过 4.7K 的上拉电阻被拉至高电平状态。在检测到I/O 引脚上的上升沿之后,DS18B20 等待 15-60s,并且接着发送脉冲(60-240s 的低电平信号)。然后以存在复位脉冲表示 DS18B20 已经准备好发送或接收,然后给出正确的 ROM 命令和存储操作命令的数据。DS18B20 通过使用时间片来读出和写入数据,时间片用于处理数据位和进行何种指定操作的命令。它有写时间片和读时间片两种。写时间片:当主机把数据线从逻辑高电平拉至逻辑低电平时,产生写时间片。有两种类型的写时间片:写 1 时间片和写 0 时间片。所有时间片必须有 60
9、微秒的持续期,在各写周期之间必须有最短为 1 微秒的恢复时间。读时间片:从 DS18B20 读数据时,使用读时间片。当主机把数据线从逻辑高电平拉至逻辑低电平时产生读时间片。数据线在逻辑低电平必须保持至少 1 微秒;来自DS18B20 的输出数据在时间下降沿之后的 15 微秒内有效。为了读出从读时间片开始算起 15 微秒的状态,主机必须停止把引脚驱动拉至低电平。在时间片结束时,I/O 引脚经过外部的上拉电阻拉回高电平,所有读时间片的最短持续期为 60 微秒,包括两个读周期间至少 1s 的恢复时间。第 5 页 共 46 页一旦主机检测到 DS18B20 的存在,它便可以发送一个器件 ROM 操作命
10、令。所有 ROM操作命令均为 8 位长。DS18B20 的引脚定义和封装形式如图 3 所示。DQ 为数字信号输入/输出端;GND 为电源地;VDD 为外接电源。DS18B20 的光刻 ROM 中存有 64 位序列号,它可以看作是该 DS18B20 的地址序列码。64 位光刻 ROM 的排列是:开始 8 位(28H)是产品类型标号,接着的 48 位是该DS18B20 自身的序列号,最后 8 位是前面 56 位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻 ROM 的作用是使每一个 DS18B20 拥有惟一的地址序列码,以确保在一根总线上挂接多个 DS18B20。所有的串行通讯,读写每一个
11、 bit 位数据都必须严格遵守器件的时序逻辑来编程,同时还必须遵守总线命令序列,对单总线的 DS18B20 芯片来说,访问每个器件都要遵守下列命令序列:首先是初始化;其次执行 ROM 命令;最后就是执行功能命令(ROM 命令和功能命令后面以表格形式给出)。 如果出现序列混乱,则单总线器件不会响应主机。当然,搜索 ROM 命令和报警搜索命令,在执行两者中任何一条命令之后,要返回初始化。 基于单总线上的所有传输过程都是以初始化开始的,初始化过程由主机发出的复位脉冲和从机响应的应答脉冲组成。应答脉冲使主机知道,总线上有从机,且准备就绪。在主机检测到应答脉冲后,就可以发出 ROM 命令。这些命令与各个
12、从机设备的唯一 64 位 ROM 代码相关。在主机发出 ROM 命令,以访问某个指定的 DS18B20,接着就可以发出 DS18B20 支持的某个功能命令。这些命令允许主机写入或读出 DS18B20 便笺式RAM、启动温度转换。软件实现 DS18B20 的工作严格遵守单总线协议:(1)主机首先发出一个复位脉冲,信号线上的 DS18B20 器件被复位。(2)接着主机发送 ROM 命令,程序开始读取单个在线的芯片 ROM 编码并保存在单片机数据存储器中,把用到的 DS18B20 的 ROM 编码离线读出,最后用一个二维数组保存ROM 编码,数据保存在 X25043 中。(3)系统工作时,把读取了编
13、码的 DS18B20 挂在总线上。发温度转换命令,再总线复位。(4)然后就可以从刚才的二维数组匹配在线的温度传感器,随后发温度读取命令就可以获得对应的温度值了。在主机初始化过程,主机通过拉低单总线至少 480us,来产生复位脉冲。接着,主机释放总线,并进入接收模式。当总线被释放后,上拉电阻将单总线拉高。在单总线器件检测到上升沿后,延时 1560us,接着通过拉低总线 60-240us,以产生应答脉冲。写时序均起始于主机拉低总线,产生写 1 时序的方式:主机在拉低总线后,接着第 6 页 共 46 页必须在 15us 之内释放总线。产生写 0 时序的方式:在主机拉低总线后,只需在整个时序期间保持低
14、电平即可(至少 60us)。在写字节程序中的写一个 bit 位的时候,没有按照通常的分别写 0 时序和写 1 时序,而是把两者结合起来,当主机拉低总线后在 15us 之内将要写的位 c 给 DO:如果 c是高电平满足 15us 内释放总线的要求,如果 c 是低电平,则 DOc 这条语句仍然是把总线拉在低电平,最后都通过延时 58us 完成一个写时序(写时序0 或写时序 1)过程。每个读时隙都由主机发起,至少拉低总线 1us,在主机发起读时序之后,单总线器件才开始在总线上发送 0 或 1。所有读时序至少需要 60us。单片机通过命令实现对 DS18B20 的控制,其支持的主要命令如表 1 所示。
15、表 1 DS18B20 主要命令及其功能说明命令码 功能说明 命令码 功能说明33H 读 ROM 中的 64 位地址序列码 BEH 读 9 字节暂存寄存器55H只有地址码匹配的 DS18B2 才能接收后续的命令4EH写入温度上/下限,紧随其后是 2 字节数据,对应上限和下限值F0H锁定总线上 DS18B20 的个数和识别其 ROM 中的 64 位地址序列码48H将 9 字节暂存寄存器的第 3和 4 字节复制到 EEPROM 中ECH只有温度超过上限或下限的DS18B20 才做出响应B8H将 EEPROM 的内容恢复到暂存寄存器的第 3 和 4 字节44H启动 DS18B20 进行温度转换,结果
16、存入 9 字节的暂存寄存器B4H读供电模式,寄生供电时DS18B20 发送 0,外接电源时DS18B20 发送 1CCH忽略地址序列码,适合单片DS18B202.2 单片机的选择(1)AT89C51 的特性及引脚说明主要特性与MCS-51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环第 7 页 共 46 页数据保留时间:10年全静态工作:0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源 可编程串行通道 低功耗的闲置和掉电模式片内振荡器和时钟电路 AT89C51的引脚功能,图4所示:图 4 AT89C51的引脚功能图管脚说明
17、VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每个管脚可吸收8TTL门电流。当P1口的管脚写“1”时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FLASH编程时,P0口作为原码输入口,当FLASH进行校验第 8 页 共 46 页时,P0输出原码,此时P0外部电位必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入“1”后,电位被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为
18、第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚电位被内部上拉电阻拉高,且作为输入。作为输入时,P2口的管脚电位被外部拉低,将输出电流,这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉的优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P
19、3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入时,由于外部下拉为低电平,P3口将输出电流(ILL),也是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下所示:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 (外部中断0)0INTP3.3 (外部中断1)1P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 (外部数据存储器写选通)WRP3.7 (外部数据存储器读选通)DP3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 :当访问外部存储器时
20、,地址锁存允许的输出电平用于锁存地址的PROGALE/地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令时ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 :外部程序存储器的选通信号。在由外部程序存储器取址期间,每个机器PSEN第 9 页 共 46 页周期 两次有效。但在访问
21、外部数据存储器时,这两次有效的 信号将不出现。PSEN PSEN :当 保持低电平时,访问外部ROM;注意加密方式1时, 将内部VA/ A锁定为RESET;当 端保持高电平时,访问内部ROM。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。内部结构框图如图5所示。图5 AT89C51的内部结构框图(2)AT89C51 的基本操作如图 6 所示,在 X1 和 X2 之间接一只石英振荡晶体构成了单片机的时钟电路,它还有另一种接法,是把外部振荡器的信号直接连接到 XTAL1 端,XTAL2 端
22、悬空不用。AT89C51 复位引脚 RST/VP 通过片内一个施密特触发器(抑制噪声作用)与片内复位电路相连,施密特触发器的输出在每一个机器周期由复位电路采样一次。当振荡电路工作,并且在 RST 引脚上加一个至少保持 2 个机器周期的高电平时,就能使 AT89C51完成一次复位。复位不影响 RAM 的内容。复位后,PC 指向 0000H 单元,使单片机从起始地址 0000H 单元开始重新执行程序。所以,当单片机运行出错或进入死循环时,可按复位键重新启动。MCS-51单片机通常采用上电自动复位和按钮复位两种复位方式。上电复位利用电容器充电来实现。按钮复位又分为按钮电平复位和按钮脉冲复位。前者将复
23、位端通过电阻与Vcc相接;后者利用RC微分电路产生正脉冲来达到复位目的。复位电路参数的选择应能保证复位高电平持续时间大于2个机器周期。本系统采用的是按键脉冲复位,具体电路和原理将在下面的章节介绍。图 6 AT89C51基本操作电路振荡器特性:XTAL1、XTAL2为片内振荡器的反相放大器的输入和输出端。可采用石英晶体或陶瓷振荡器组成时钟振荡器,如需从外部输入时钟AT89C51,时钟信号从XTAL1输入,XTAL2应悬空。由于输入到内部电路是经过一个2分频触发器,所以输入的外部时钟信号无需特殊要求,但它必须符合电平的最大和最小值及时序规范。2.3 其它元器件的选择第 10 页 共 46 页除了测
24、温芯片DS18B20以及单片机AT89C51以外,在电源输入部分还选用了L7805CV稳压芯片和滤波电容,以及用于红外部分的4011四与非门逻辑芯片,当然还有红外发射和接收管,这里接收管采用TO-92三脚封装的一体化接收头,显示不分采用了12PIN的数码管LDS-5461AH,总共可以显示四位数据和小数点,其位选部分使用了NPN三极管来进行位扫描。具体功能及细节详见电路原理部分。2.4 电路设计由于是基于单片机实现,硬件电路就相对简单很多,只需要设计一下电源稳压电路、键盘电路、显示电路、测温电路、红外发射和接收电路以及它们与单片机的连接即可。(1)单片机工作部分由图 6 已知 AT89C51
25、的基本操作电路。但其中的一些参数还得依据具体要求来设计。具体接几兆晶体是基于机器周期考虑。一个机器周期由 6 个状态(S1S6) 组成,每个状态又持续两个振荡周期(分为 P1 和 P2)。这样,一个机器周期由 12 个振荡周期组成,由 S1P1(状态 1 节拍 1)到 S6P2(状态 6 节拍 2)。若是采用 12MHz 的晶体振荡器,则每个周期恰好为 1us,如此对于编程而言相对容易些。因而选择 12MHz 的晶体振荡器。此外在两引脚之间加入一个 20pF 的小电容是为了使系统更稳定,避免杂音干扰而关机。(2)电源部分如图 7 所示,电源接入采用 5V 的直流电对整个系统供电,使用了 L7805CV 芯片来对输入电压进行稳压,在芯片旁边设计了三个电容,它们的目的是虑除外界对电路的干扰,使电路得到一个稳定线性的直流电压。为了确认电路进入工作状态,还在设计时加入了一个发光二极管,用于显示电源是否正常工作,如果电路处于接电状态,二极管就会导通而发光。图 7 电源接入部分