毕业设计(论文)-粮仓温度监控系统数据的传输与设计.docx_第1页
毕业设计(论文)-粮仓温度监控系统数据的传输与设计.docx_第2页
毕业设计(论文)-粮仓温度监控系统数据的传输与设计.docx_第3页
毕业设计(论文)-粮仓温度监控系统数据的传输与设计.docx_第4页
毕业设计(论文)-粮仓温度监控系统数据的传输与设计.docx_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XXXXXxXXXXX 毕业设计论文题目 粮仓温度监控系统数据的传输与设计 2016年 1 2月 1日内容粮仓温度监控系统数据的传输与设计覃丽芬内容摘要本文论述了一种以89C51单片机与DS18B20和SHT11传感器构成的温湿度检测、智能监控子系统。整个系统是由上位计算机、测温湿度分机组成。上位计算机通过通信电缆与各测温分机进行实时通信,取得粮仓温度、湿度等数据,经过智能分析以数据报表、温度曲线图等形式显示给用户,方便直观,最后由智能监控系统根据实际情况做出相应决策。考虑到系统实际应用中,测温分机与测温主机间有较长的传输距离,本设计采用RS-485总线实现远程通信。在本系统中,多点测温是设计的关键部分。选用美国DALLAS公司生产的一线式数字温度传感器DS18B20,可以方便地实现多点测温。关键词:STC89C51单片机;DS18B20;显示电路;RS-485总线目 录第1章绪论- 1 -第2章 系统总设计方案- 3 -2.1数字温度计设计方案论证- 3 -2.1.1方案一- 3 -2.1.2 方案二- 3 -2.2系统总体框图- 3 -2.3系统的功能- 4 -2.4本系统优点- 4 -2.4.1线路简单- 4 -2.4.2温度测量准确- 4 -3.2.3显示电路- 9 -3.2.5温度传感电路- 10 -3.2.6报警电路- 10 -3.3 DS18B20数字温度传感器介绍- 11 -3.3.1 特性介绍- 11 -3.3.2 引脚介绍- 12 -3.3.3 访问18B20的协议- 12 -3.3.4 DS18B20命令设置- 22 -3.3.5 DS18B20内部温度表现形式- 23 -第4章 18B20时序图及相应的软件设计- 25 -4.1复位时序- 25 -4.2 读/写时序- 26 -第6章RS485总线的应用- 33 -6.1 RS485串口通信详解- 33 -6.2 MAX485典型应用电路- 41 -结论- 43 -致谢词- 44 -参考文献- 45 -第1章绪论对中国这样一个13亿多人的发展中大国,粮食安全一直是“天字第一号”的大问题。近些年虽然由于粮食产量还在继续增长,但农业发展形势严峻,农业总体产出率低,粮食价格不高,农业用地不断减少,农民种粮意愿及农业人口的下降,都在持续不断的影响着粮食安全,如果处理不当,有可能会诱发粮食危机,甚至损害经济增长,并危及社会稳定。在这种背景下,中国对粮食安全的担忧大为增加。如何解决粮食安全问题?我想从建立国有战略储备粮制度,以及建立现代粮库管理系统,从科学管理的手段的角度,可以更好的辅助解决粮食安全问题。使用计算机自动监测系统,对粮仓内的温度、湿度的测量,由计算机实现库内温度湿度的高低超限报警,并可智能地控制风机、谷物冷却器及粮食干燥机等辅助设计,从而使仓内粮食达到并保持安全的储藏条件,利于粮食战略安全。粮食储备库中主要的物理参数是粮食的温度和湿度。如何实现这些参数的快速准确的测量是研究粮情监控系统的关键。 本系统是一个基于粮仓温湿度的集散式监控系统。可采集多点温度、湿度数据,并远距离上传到上位机上。可选择定时(每小时或每天)将数据自动打印出来供随时监管或存档。还可将数据存入磁盘形成数据文件,便于保存和随时用微机查看留档的文件。 系统采用智能化软件控制,根据需要可设置温、湿度上下界限报警点,当仓库(粮食或其它)物品的温、湿度超过上、下极限值时,主控微机自动发出音响式警报,高温高湿和低温低湿分别给出上滑音和下滑音的不同音调的警报。管理人员闻讯即可及时采取控温湿措施,此外,计算机还要给下位机发出命令打开控制温、湿度调控设备和通风设备。 本文介绍一套基于单片机的温湿度监控系统,采用计算机实现自动实时检测与控制,能够明显提高粮食的贮存质量,减少仓储保管人员,带来较大的经济效益。- 47 -第2章 系统总设计方案2.1数字温度计设计方案论证2.1.1方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D 转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D 转换电路,其中还涉及到电阻与温度的对应值的计算,感温电路比较麻烦。而且在对采集的信号进行放大时容易受温度的影响出现较大的偏差。2.1.2 方案二考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,电路简单,精度高,软硬件都以实现,而且使用单片机的接口便于系统的再扩展,满足设计要求。从以上两种方案,很容易看出,采用方案二,电路比较简单,费用较低,可靠性高,软件设计也比较简单,故采用了方案二。2.2系统总体框图总体的设计思路是通过温度传感器将温度转换为电量输出,由A/D转换器对模拟信号进行数字化,被数字化的信号经过单片机处理后,送至显示器及执行,完成对温度的告警功能,总体设计框图如图2-1所示。图2-1 总体设计框图2.3系统的功能温度测量功能:利用DS18B20数字温度传感器实现对温度进行准确的测量,使温度值显示到数码管上。2.4本系统优点2.4.1线路简单DS18B20与单片机之间一根导线进行数据传输,不需要对数据进行转换,接线简单。2.4.2温度测量准确DS18B20是常用的温度传感器,具有体积小,硬件开销低,抗干扰能力强,精确度高的特点。DS18B20的温度分辨率为0.0625,所以对温度值可以进行准确的温度转换。第3章 主要硬件模块介绍3.1 SCT单片机介绍单片机是单片机微型计算机(Single Chip Microcomputer )简称,所谓单片机,通俗的来讲,就是把中央处理器CPU(entral Processing Unit),存储器(memrory),定时器,I/O(Input/Output)接口电路等一些计算机的主要功能部件集在一块集成路的芯片上的微型计算机。单片机特别适合于控制领域,故又称为微型控制器MCU (Micro Control Unit)。中文“单片机”的称呼是由英文名称“Single Chip Microcomputer”直接翻译而来的。单片机只要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。3.1.1 单片机功能介绍单片机是随着大规模集成电路的出现极其发展,将计算机的CPU,RAM,ROM,定时/计数器和多种I/O接口集成在一片芯片上,形成了芯片级的计算机,因此单片机早期的含义称为单片微型计算(single chipmicrocomputer).它拥有优异的性价比、集成度高、体积小、可靠性高、控制功能强、低电压、低功耗的显著优点.主要应用于智能仪器仪表、工业检测控制、机电一体化等方面,并且取得了显著的成果.单片机应用系统可以分为:(1)最小应用系统是指能维持单片机运行的最简单配置的系统。这种系统成本低廉,结构简单,常构成一些简单的控制系统,如开关状态的输入/输出控制等。片内ROM/EPROM的单片机,其最小应用系统即为配有晶振,复位电路,电源的单个单片机.片内无ROM/EPROM的单片机,其最小应用系统除了外部配置晶振,复位电路,电源外,还应外接EPROM或EEPROM作为程序存储器用.(2)最小功耗应用系统是指为了保证正常运行,系统的功耗最小.(3)典型应用系统是指单片机要完成工业测控功能所必须的硬件结构系统。3.1.2 STC89C51单片机引脚及功能介绍STC89C51单片机引脚图如图3-1所示 图3-1 单片机引脚图单片机的40个引脚大致可分为4类,电源、时钟、控制、I/O引脚。1、 电源:(1)VCC芯片电源,接+5V; (2)VSS接地端;2、 时钟XTAL1、XTAL2晶体振荡电路反相输入端和输出端。3、 控制线:控制线共有4根(1)ALE/PROG:地址锁存允许/片内EPROM编程脉冲ALE功能:用来锁存PO口送出的低8位地址新门户PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。()PSEN:外ROM读选通信号。()EAVpp:内外ROM选择/片内EPROM编程电源。EA功能:内外ROM选择端。Vpp功能:片内有EPROM的芯片,在EPROM编程期间, 施加编程电源Vpp。4、 I/O线89C51共有4个8位并行I/O端口;P0、P1、P2、P3口,共有32个引脚。P3口还具有第三功能,用于特殊信号输入输出和控制信号(属于控制总线)。拿到一块芯片,想要使用它,首先必须要知道怎样连线,我们用的一块称之为89C51 的芯片,下面我们就看一下如何给它连线。1、 电源:这当然是必不可少的了。单片机使用的是5V电源,其中正极接40的管脚,负极(地)接20管脚。2、 振荡电路:单片机是一种时序电路,必须供给脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。3、 复位管脚EA管脚:EA管脚接到正电源端。至此,一个单片机就接好了,通上电,单片机就开始工作了。3.2 系统模块本系统采用STC89C51单片机作为控制核心,该系统电路主要是由单片机、排阻、显示器、蜂鸣器、DS18B20温度传感器、晶体等器件组成的电路。图3-2 系统模块图3.2.2 主控制器单片机的时钟产生方式有内部时钟和外部时钟两种,本系统采用的内部时钟方式。最常用的内部时钟是外接晶体和电容组成的并联谐振回路。振荡晶体可在1.2M-12M之间。电容值无严格要求,但电容的取值对震荡频率输出的稳定性、大小和震荡电路起振速度有少许影响,一般可在20pF-100pF之间的取值。振荡电路如图3-3 晶振电路所示。图3-3 晶振电路复位电路是单片机应用中重要的一环,它对单片机抗干扰有重要作用。复位电路如图3-4所示。图3-4复位电路3.2.3显示电路显示电路采用4 位共阴极LED 数码管,P0 口由上拉电阻提高驱动能力,作为段码输出并作为数码管的驱动。P2 口的低四位作为数码管的位选端。采用动态扫描的方式显示。图3-5显示电路3.2.4 报警温度调整按键电路本系统设计三个按键,一个用于选择设定,另外两个分别用于设置报警温度的加和减。图3-6按键电路3.2.5温度传感电路温度传感器的种类很多,根据温室使用条件,选择适当的传感器类型才能保证测量的准确可靠,并同时达到增加使用寿命和减低成本的目的。根据温室温度控制的特点,本系统中的温度传感器选用DS18B20温度传感器。温度传感电路主要是由一个电阻和一个DS18B20组成,DS18B20具有三个引脚,管脚的排列如图3-7 所示,DQ为数字信号输入/输出端;GND为电源地;VCC为外接供电电源输入端(寄生)电源。图3-7温度传感电路3.2.6报警电路如图3-8 报警电路所示,该电路主要是由一个电阻,一个PNP三极管,一个蜂鸣器组成,实现电路的告警功能。图3-8报警电路3.3 DS18B20数字温度传感器介绍DS18B20数字温度计提供9位温度读数,指示器件的温度。信息经过单线接口送入DS18B20或从DS18B20送出,因此从中央处理器到DS18B20仅需连接一条线(和地)。读、写和完成温度变换所需的电源可以由数据线本身提供,而不需要外部电源。因为每一个DS18B20有唯一的系列号,因此多个DS18B20可以存在于同一条单线总线上。这允许在许多不同的地方放置温度灵敏器件。此特性的应用范围包括HVAC环境控制,建筑物、设备或机械内的温度检测,以及过程监视和控制中的温度检测。3.3.1 特性介绍(1)独特的单线接口,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。(2)多点能力使分布式温度检测应用得以简化;(3)不需要外部元件;(4)可用数据线供电;(5)不需备份电源,工作电源为3.0-5.5V/DC(可用数据线寄生电源);(6)测量范围从-55至+125,增量值为0.5。等效的华氏温度范围是-67F至257F,增量值为0.9F;(7)以9位数字值方式读出温度;(8)在1秒(典型值)内把温度变为数字;(9)用户可定义的,非易失性的温度告警设置;(10)告警搜索命令识别和寻址温度在编定的极限之外的器件(温度根据情况);(11)应用范围包括恒温控制,工业系统,消费类产品,温度计或任何热敏系统。(12)支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。3.3.2 引脚介绍DS18B20的介绍如图3-9所示。DQ为数字信号输入/输出端;GND为电源地;VDD为外部供电电源输入端(在寄生电源接线方式时接地)可选的+5V电源。图3-9 DS18B203.3.3 访问18B20的协议DSl820 工作过程中的协议如下:初始化 RoM 操作命令 存储器操作命令 处理数据1 初始化单总线上的所有处理均从初始化开始2 ROM 操作品令总线主机检测到 DSl820 的存在 便可以发出 ROM 操作命令之一 这些命令如指令 代码Read ROM(读 ROM) 33HMatch ROM(匹配 ROM) 55HSkip ROM(跳过 ROM CCHSearch ROM(搜索 ROM) F0HAlarm search(告警搜索) ECH3 存储器操作命令指令 代码Write Scratchpad(写暂存存储器) 4EHRead Scratchpad(读暂存存储器) BEHCopy Scratchpad(复制暂存存储器) 48HConvert Temperature(温度变换) 44HRecall EPROM(重新调出) B8HRead Power supply(读电源) B4H4 时 序主机使用时间隙(time slots)来读写 DSl820 的数据位和写命令字的位(1)初始化时序见图 2.25-2 主机总线 to 时刻发送一复位脉冲(最短为 480us 的低电平信号) 接着在 tl 时刻释放总线并进入接收状态 DSl820 在检测到总线的上升沿之后 等待 15-60us 接着 DS1820 在 t2 时刻发出存在脉冲(低电平 持续 60-240 us) 如图中虚线所示以下子程序在 MCS51 仿真机上通过 其晶振为 12M. 初始化子程序RESETPUSH B ;保存 B 寄存器PUSH A 保存 A 寄存器MOV A,#4 ;设置循环次数CLR P1.0 ;发出复位脉冲MOV B,#250 ;计数 250 次DJNZ B,$ ;保持低电平 500usSETB Pl.0 ;释放总线MOV B,#6 ;设置时间常数CLR C ;清存在信号标志WAITL: JB Pl.0,WH ;若总线释放 跳出循环DJNZ B,WAITL ;总线低 等待DJNZ ACC,WAITL;释放总线等待一段时间SJMP SHORTWH: MOV B,#111WH1: ORL C,P1.0DJNZ B,WH1 ;存在时间等待SHORT: POP APOP BRET(2)写时间隙当主机总线 t o 时刻从高拉至低电平时 就产生写时间隙 见图 2 25 3 图 2 254 从 to 时刻开始 15us 之内应将所需写的位送到总线上 DSl820 在 t 后 15-60us 间对总线采样 若低电平 写入的位是 0 见图 2 25 3 若高电平 写入的位是 1 见图 2 25 4连续写 2 位间的间隙应大于 1us写位子程序(待写位的内容在 C 中)WRBIT:PUSH B ;保存 BMOV B,#28 ;设置时间常数CLR P1.0 ;写开始NOP ;1usNOP ;1usNOP ;1usNOP ;1usN0P ;1usMOVPl.0,C ;C 内容到总线WDLT: DJNZ B,WDLT;等待 56UsPOP BSETB Pl.0 ;释放总线RET ;返回写字节子程序(待写内容在 A 中):WRBYTB:PUSH B :保存 BMOV B #8H ;设置写位个数WLOP: RRC A ;把写的位放到 CACALL WRBIT ;调写 1 位子程序DJNZ B WLOP ;8 位全写完?POP BRET(3)读时间隙见图 2 25 5 主机总线 to 时刻从高拉至低电平时 总线只须保持低电平 l 7ts 之后在 t1 时刻将总线拉高 产生读时间隙 读时间隙在 t1 时刻后 t 2 时刻前有效 t z 距 to 为 15捍 s 也就是说 t z 时刻前主机必须完成读位 并在 t o 后的 60 尸 s 一 120 fzs 内释放总线读位子程序(读得的位到 C 中)RDBIT:PUSH B ;保存 BPUSH A ;保存 AMOV B,#23 ;设置时间常数CLR P1.0 ;读开始 图 2 25 5 的 t0 时刻NOP ;1usNOP ;1usNOP ;1usNOP ;1usSETB Pl.0 ;释放总线MOV A,P1 ;P1 口读到 AMOV C,EOH ;P1.0 内容 CNOP ;1usNOP ;1usNOP ;1usNOP ;1usRDDLT: DJNZ B,RDDLT ;等待 46usSETB P1.0POP APOP BRET读字节子程序(读到内容放到 A 中)RDBYTE:PUSH B ;保存 BRLOP MOV B,#8H ;设置读位数ACALL RDBIT ;调读 1 位子程序RRC A ;把读到位在 C 中并依次送给 ADJNZ B,RLOP ;8 位读完?POP B ;恢复 BRET四 实际应用1 ds1820 序列号获得;|-|;| 读出 ds1820 序列号应用程序,P1.6 接 ds1820 |;|-|ORG 0000HAJMP MAINORG 0020HMAIN:MOV SP,#60HCLR EA ;使用 ds1820 一定要禁止任何中断产生LCALL INT ;初始化 ds1820MOV A,#33H LCALL WRITE ;送入读 ds1820 的 ROM 命令LCALL READ ;开始读出当前 ds1820 序列号MOV 40H,ALCALL READMOV 41H,ALCALL READMOV 42H,ALCALL READMOV 43H,ALCALL READMOV 44H,ALCALL READMOV 45H,ALCALL READMOV 46H,ALCALL READMOV 47H,ASETB EASJMP $INT: ;初始化 ds1820 子程序CLR EAL0:CLR P1.6 ;ds1820 总线为低复位电平MOV R2,#200L1:CLR P1.6DJNZ R2,L1 ;总线复位电平保持 400usSETB P1.6 ;释放 ds1820 总线MOV R2,#30L4:DJNZ R2,L4 ;释放 ds1820 总线保持 60usCLR C ;清存在信号ORL C,P1.6JC L0 ;存在吗?不存在则重新来MOV R6,#80L5:ORL C,P1.6JC L3DJNZ R6,L5SJMP L0L3:MOV R2,#240L2:DJNZ R2,L2RETWRITE: ;向 ds1820 写操作命令子程序CLR EAMOV R3,#8 ;写入 ds1820 的 bit 数,一个字节 8 个 bit WR1:SETB P1.6MOV R4,#8RRC A ;把一个字节 data(A)分成 8 个 bit 环移给 CCLR P1.6 ;开始写入 ds1820 总线要处于复位(低)状态WR2:DJNZ R4,WR2 ;ds1820 总线复位保持 16usMOV P1.6,C ;写入一个 bitMOV R4,#20WR3:DJNZ R4,WR3 ;等待 40usDJNZ R3,WR1 ;写入下一个 bitSETB P1.6 ;重新释放 ds1820 总线RETREAD:CLR EAMOV R6,#8 ;连续读 8 个 bitRE1:CLR P1.6 ;读前总线保持为低MOV R4,#4NOPSETB P1.6 ;开始读 总线释放RE2:DJNZ R4,RE2 ;持续 8usMOV C,P1.6 ;从 ds1820 总线读得一个 bitRRC A ;把读得的位值环移给 AMOV R5,#30RE3:DJNZ R5,RE3 ;持续 60usDJNZ R6,RE1 ;读下一个 bitSETB P1.6 ;重新释放 ds1820 总线RETEND2 温度转换和读取;|-|;| 获取单个 ds1820 转化的温度值的应用程序,P1.6 接 ds1820 |;|-|ORG 0000HAJMP MAINORG 0020HMAIN:MOV SP,#60HLCALL GET_TEMPSJMP $GET_TEMP:CLR PSW.4 SETB PSW.3 ;设置工作寄存器当前所在的区域CLR EA ;使用 ds1820 一定要禁止任何中断产生LCALL INT ;调用初使化子程序MOV A,#0CCHLCALL WRITE ;送入跳过 ROM 命令MOV A, #44HLCALL WRITE ;送入温度转换命令LCALL INT ;温度转换完全,再次初使化 ds1820MOV A,#0CCHLCALL WRITE ;送入跳过 ROM 命令MOV A,#0BEHLCALL WRITE ;送入读温度暂存器命令LCALL READMOV R7,A ;读出温度值低字节存入 R7LCALL READMOV R6,A ;读出谩度值高字节存入 R6SETB EARETINT: ;初始化 ds1820 子程序CLR EAL0:CLR P1.6 ;ds1820 总线为低复位电平MOV R2,#200L1:CLR P1.6DJNZ R2,L1 ;总线复位电平保持 400usSETB P1.6 ;释放 ds1820 总线MOV R2,#30L4:DJNZ R2,L4 ;释放 ds1820 总线保持 60usCLR C ;清存在信号ORL C,P1.6JC L0 ;存在吗?不存在则重新来MOV R6,#80L5:ORL C,P1.6JC L3DJNZ R6,L5SJMP L0L3:MOV R2,#240L2:DJNZ R2,L2RETWRITE: ;向 ds1820 写操作命令子程序CLR EAMOV R3,#8 ;写入 ds1820 的 bit 数,一个字节 8 个 bitWR1:SETB P1.6 MOV R4,#8RRC A ;把一个字节 data(A)分成 8 个 bit 环移给 CCLR P1.6 ;开始写入 ds1820 总线要处于复位(低)状态WR2:DJNZ R4,WR2 ;ds1820 总线复位保持 16usMOV P1.6,C ;写入一个 bitMOV R4,#20WR3:DJNZ R4,WR3 ;等待 40usDJNZ R3,WR1 ;写入下一个 bitSETB P1.6 ;重新释放 ds1820 总线RETREAD:CLR EAMOV R6,#8 ;连续读 8 个 bitRE1:CLR P1.6 ;读前总线保持为低MOV R4,#4NOPSETB P1.6 ;开始读 总线释放RE2:DJNZ R4,RE2 ;持续 8usMOV C,P1.6 ;从 ds1820 总线读得一个 bitRRC A ;把读得的位值环移给 AMOV R5,#30RE3:DJNZ R5,RE3 ;持续 60usDJNZ R6,RE1 ;读下一个 bitSETB P1.6 ;重新释放 ds1820 总线RETEND3.3.4 DS18B20命令设置图3-9 DS18B20命令设置3.3.5 DS18B20内部温度表现形式1DS18B20用9位存贮温值度最高位为符号位,下图3-10为18B20的温度存储方式。负温度S=1 正温度S=0 如:00AAH 为+85 ,0032H 为25 FF92H 为55图3-10 18B20 9位温度存储方式2DS18B20用12位存贮温值度最高位为符号位,下图为18B20的温度存储方式。负温度S=1 正温度S=0 如:0550H 为+85,0191H 为25.0625 ,FC90H 为-55图3-11 18B20 12位温度存储方式3 DS18B20温度转换形式(12位存储形式)表3-1 温度转换形式实际温度值数字输出(二进制)数字输出(十六进制)+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00010191H+10.1250000 0000 1010 001000A2H+0.50000 0000 0000 10000008H00000 0000 0000 00000000H-0.51111 1111 1111 1000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6EH-551111 1100 1001 0000FC90H第4章 18B20时序图及相应的软件设计4.1复位时序图4-1void ds_reset()uint i;ds=0; / 数据时钟线拉低i=103; / 延时480us960uswhile(i0)i-;ds=1; / 拉高数据时钟线i=4; / 延时15us60uswhile(i0)i-;while(ds); / 检测18b20的存在while(ds);i=30;while(i0)i-; 4.2 读/写时序/功能:单片机向18b20写一个字节/void ds_write_byte(uchar date)uint i,j;bit a;for(j=8;j0;j-)a=date&0x01; / 先写低位date=date1; if(a) / 要写的位为1ds=0; / 数据时钟线拉低i+;i+; /延时15us之内ds=1; /ds拉低15us之内必须把要写的数据1放到数据时钟线上i=8; / 延时大于1uswhile(i0)i-;else /写0ds=0; /数据时钟线拉低i=8;while(i0)i-;/延时大于15us,15us之后18b20对数据采集ds=1; /数据时钟线拉高释放数据线i+;i+; /延时/功能:单片机读一位/=/bit ds_read_bit()uint i;bit dat;ds=0; /数据时钟线拉低i+; /延时大于1usds=1; /释放数据线i+; / 延时小于15usdat=ds; /读数据i=8; /延时while(i0)i-;return dat;/功能:单片机读一个字节数据uchar ds_read_byte()uchar i,j,date;date=0;for(i=8;i0;i-)j=ds_read_bit();date=(j1);/先读低位数据return date;第5章 程序框图及C语言设计5.1温度采集系统流程图 图 5-1温度采集系统5.2 读取温度流程图 图5-2 读取温度图5.3 温度显示流程图图5-3 温度显示5.4 温度设置流程图图5-4温度设置55 温度采集系统C语言设计第6章RS485总线的应用6.1 RS485串口通信详解RS-422由RS-232发展而来,它是为弥补RS-232之不足而提出的。为改进RS-232通信距离短、速率低的缺点,RS-422定义了一种平衡通信接口,将传输速率提高到10Mb/s,传输距离延长到4000英尺(速率低于100kb/s时),并允许在一条平衡总线上连接最多10个接收器。RS-422是一种单机发送、多机接收的单向、平衡传输规范,被命名为TIA/EIA-422-A标准。为扩展应用范围,EIA又于1983年在RS-422基础上制定了RS-485标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为TIA/EIA-485-A标准。由于EIA提出的建议标准都是以“RS”作为前缀,所以在通讯工业领域,仍然习惯将上述标准以RS作前缀称谓。平衡传输RS-422、RS-485与RS-232不一样,数据信号采用差分传输方式,也称作平衡传输,它使用一对双绞线,将其中一线定义为A,另一线定义为B,如图6-1。图6-1 平衡传输示意图通常情况下,发送驱动器A、B之间的正电平在+2+6V,是一个逻辑状态,负电平在-26V,是另一个逻辑状态。另有一个信号地C,在RS-485中还有一“使能”端,而在RS-422中这是可用可不用的。“使能”端是用于控制发送驱动器与传输线的切断与连接。当“使能”端起作用时,发送驱动器处于高阻状态,称作“第三态”,即它是有别于逻辑“1”与“0”的第三态。接收器也作与发送端相对的规定,收、发端通过平衡双绞线将AA与BB对应相连,当在收端AB之间有大于+200mV的电平时,输出正逻辑电平,小于-200mV时,输出负逻辑电平。接收器接收平衡线上的电平范围通常在200mV至6V之间。参见图6-2。图6-2由于RS-485是从RS-422基础上发展而来的,所以RS-485许多电气规定与RS-422相仿。如都采用平衡传输方式、都需要在传输线上接终接电阻等。RS-485可以采用二线与四线方式,二线制可实现真正的多点双向通信,参见图6-3。 而采用四线连接时,与RS-422一样只能实现点对多的通信,即只能有一个主(Master)设备,其余为从设备,但它比RS-422有改进, 无论四线还是二线连接方式总线上可多接到32个设备。参见图6-4。 图6-3图6-4RS-485与RS-422的不同还在于其共模输出电压是不同的,RS-485是-7V至+12V之间,而RS-422在-7V至+7V之间,RS-485接收器最小输入阻抗为12k剑鳵S-422是4k健;旧峡梢运礡S-485满足所有RS-422的规范,所以RS-485的驱动器可以用在RS-422网络中应用。 RS-485有关电气规定参见表1。 RS-485与RS-422一样,其最大传输距离约为1219米,最大传输速率为10Mb/s。平衡双绞线的长度与传输速率成反比,在100kb/s速率以下,才可能使用规定最长的电缆长度。只有在很短的距离下才能获得最高速率传输。一般100米长双绞线最大传输速率仅为1Mb/s。 RS-485需要2个终接电阻,其阻值要求等于传输电缆的特性阻抗。在矩距离传输时可不需终接电阻,即一般在300米以下不需终接电阻。终接电阻接在传输总线的两端。 RS-422与RS-485的网络安装注意要点RS-422可支持10个节点,RS-485支持32个节点,因此多节点构成网络。网络拓扑一般采用终端匹配的总线型结构,不支持环形或星形网络。在构建网络时,应注意如下几点: 1采用一条双绞线电缆作总线,将各个节点串接起来,从总线到每个节点的引出线长度应尽量短,以便使引出线中的反射信号对总线信号的影响最低。图8所示为实际应用中常见的一些错误连接方式(a,c,e)和正确的连接方式(b,d,f)。a,c,e这三种网络连接尽管不正确,在短距离、低速率仍可能正常工作,但随着通信距离的延长或通信速率的提高,其不良影响会越来越严重,主要原因是信号在各支路末端反射后与原信号叠加,会造成信号质量下降。 2应注意总线特性阻抗的连续性,在阻抗不连续点就会发生信号的反射。下列几种情况易产生这种不连续性:总线的不同区段采用了不同电缆,或某一段总线上有过多收发器紧靠在一起安装,再者是过长的分支线引出到总线。总之,应该提供一条单一、连续的信号通道作为总线。 图6-5RS-422与RS-485传输线上匹配的一些说明对RS-422与RS-485总线网络一般要使用终接电阻进行匹配。但在短距离与低速率下可以不用考虑终端匹配。那么在什么情况下不用考虑匹配呢?理论上,在每个接收数据信号的中点进行采样时,只要反射信号在开始采样时衰减到足够低就可以不考虑匹配。但这在实际上难以掌握,美国MAXIM公司有篇文章提到一条经验性的原则可以用来判断在什么样的数据速率和电缆长度时需要进行匹配:当信号的转换时间(上升或下降时间)超过电信号沿总线单向传输所需时间的3倍以上时就可以不加匹配。例如具有限斜率特性的RS-485接口MAX483输出信号的上升或下降时间最小为250ns,典型双绞线上的信号传输速率约为0.2m/ns(24AWG PVC电缆),那么只要数据速率在250kb/s以内、电缆长度不超过16米,采用MAX483作为RS-485接口时就可以不加终端匹配。 一般终端匹配采用终接电阻方法,前文已有提及,RS-422在总线电缆的远端并接电阻,RS-485则应在总线电缆的开始和末端都需并接终接电阻。终接电阻一般在RS-422网络中取100,在RS-485网络中取120。相当于电缆特性阻抗的电阻,因为大多数双绞线电缆特性阻抗大约在100120。这种匹配方法简单有效,但有一个缺点,匹配电阻要消耗较大功率,对于功耗限制比较严格的系统不太适合。 另外一种比较省电的匹配方式是RC匹配,如图6-6。利用一只电容C隔断直流成分可以节省大部分功率。但电容C的取值是个难点,需要在功耗和匹配质量间进行折衷。 还有一种采用二极管的匹配方法,如图6-7。这种方案虽未实现真正的“匹配”,但它利用二极管的钳位作用能迅速削弱反射信号,达到改善信号质量的目的。节能效果显著。 图6-6图6-7RS-422与RS-485的接地问题电子系统接地是很重要的,但常常被忽视。接地处理不当往往会导致电子系统不能稳定工作甚至危及系统安全。RS-422与RS-485传输网络的接地同样也是很重要的,因为接地系统不合理会影响整个网络的稳定性,尤其是在工作环境比较恶劣和传输距离较远的情况下,对于接地的要求更为严格。否则接口损坏率较高。很多情况下,连接RS-422、RS-485通信链路时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来。而忽略了信号地的连接,这种连接方法在许多场合是能正常工作的,但却埋下了很大的隐患,这有下面二个原因: 1共模干扰问题:正如前文已述,RS-422与RS-485接口均采用差分方式传输信号方式,并不需要相对于某个参照点来检测信号,系统只需检测两线之间的电位差就可以了。但人们往往忽视了收发器有一定的共模电压范围,如RS-422共模电压范围为-7+7V,而RS-485收发器共模电压范围为-7+12V,只有满足上述条件,整个网络才能正常工作。当网络线路中共模电压超出此范围时就会影响通信的稳定可靠,甚至损坏接口。以图6-8为例,当发送驱动器A向接收器B发送数据时,发送驱动器A的输出共模电压为VOS,由于两个系统具有各自独立的接地系统,存在着地电位差VGPD。那么,接收器输入端的共模电压VCM就会达到VCM=VOS+VGPD。RS-422与RS-485标准均规定VOS3V,但VGPD可能会有很大幅度(十几伏甚至数十伏),并可能伴有强干扰信号,致使接收器共模输入VCM超出正常范围,并在传输线路上产生干扰电流,轻则影响正常通信,重则损坏通信接口电路。 图6-82(EMI)问题:发送驱动器输出信号中的共模部分需要一个返回通路,如没有一个低阻的返回通道(信号地),就会以辐射的形式返回源端,整个总线就会像一个巨大的天线向外辐射电磁波。 由于上述原因,RS-422、RS-485尽管采用差分平衡传输方式,但对整个RS-422或RS-485网络,必须有一条低阻的信号地。一条低阻的信号地将两个接口的工作地连接起来,使共模干扰电压VGPD被短路。这条信号地可以是额外的一条线(非屏蔽双绞线),或者是屏蔽双绞线的屏蔽层。这是最通常的接地方法。 值得注意的是,这种做法仅对高阻型共模干扰有效,由于干扰源内阻大,短接后不会形成很大的接地环路电流,对于通信不会有很大影响。当共模干扰源内阻较低时,会在接地线上形成较大的环路电流,影响正常通信。笔者认为,可以采取以下三种措施: (1) 如果干扰源内阻不是非常小,可以在接地线上加限流电阻以限制干扰电流。接地电阻的增加可能会使共模电压升高,但只要控制在适当的范围内就不会影响正常通信。 (2) 采用浮地技术,隔断接地环路。这是较常用也是十分有效的一种方法,当共模干扰内阻很小时上述方法已不能奏效,此时可以考虑将引入干扰的节点(例如处于恶劣的工作环境的现场设备)浮置起来(也就是系统的电路地与机壳或大地隔离),这样就隔断了接地环路,不会形成很大的环路电流。 (3) 采用隔离接口。有些情况下,出于安全或其它方面的考虑,电路地必须与机壳或大地相连,不能悬浮,这时可以采用隔离接口来隔断接地回路,但是仍然应该有一条地线将隔离侧的公共端与其它接口的工作地相连。参见图6-9。 图6-9RS-422与RS-485的网络失效保护RS-422与RS-485标准都规定了接收器门限为200mV。这样规定能够提供比较高的噪声抑制能力,如前文所述,当接收器A电平比B电平高+200mV以上时,输出为正逻辑,反之,则输出为负逻辑。但由于第三态的存在,即在主机在发端发完一个信息数据后,将总线置于第三态,即总线空闲时没有任何信号驱动总线,使AB之间的电压在-200+200mV直至趋于0V,这带来了一个问题:接收器输出状态不确定。如果接收机的输出为0V,网络中从机将把其解释为一个新的启动位,并试图读取后续字节,由于永远不会有停止位,产生一个帧错误结果,不再有设备请求总线,网络陷于瘫痪状态。除上述所述的总线空闲会造成两线电压差低于200mV的情况外,开路或短路时也会出现这种情况。故应采取一定的措施避免接收器处于不确定状态。 图6-10通常是在总线上加偏置,当总线空闲或开路时,利用偏置电阻将总线偏置在一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论