ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:177.91KB ,
资源ID:5472487      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5472487.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单总线的实时温度监控系统.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于单总线的实时温度监控系统.docx

1、基于单总线的实时温度监控系统基于单总线的实时温度监控系统2硬件电路设计在硬件电路设计时,应着重考虑电子器件的供电方式,以及对器件的限压和限流保护。因为本次设计要求利用单总线技术,所以可以考虑使用寄生供电方式。设计的电路图如下。图2 基于单总线的温度实时监控系统硬件电路总图2.3软件设计2.3.1设计窗体本次设计要求软件的可视化窗体中包含实时温度显示、数据记录、存储管理和ROM数据,并且能将测得的数据保存到指定的数据库中。窗体界面如下。图3 窗体界面实时温度显示中可以看到当前室温,并且可以显示摄氏温度和华氏温度。数据记录包含温度曲线和温度日志,可以显示一天内的温度变化曲线。存储管理和ROM数据用

2、来对数据库中已经保存的温度数据进行管理,如删除、转移等操作。2.3.2软件编程本系统软件部分采用Delphi来实现初始化、数据采集处理、温度报表管理,其主程序的流程图见图4。 图4 主程序流程图本系统软件部分共分为3个部分,分别是:1)初始化程序。a设置串行通信波特率;b串行通讯方式的初始化;c对TO,T1两个计数器的初始化;d中断控制程序的初始化。此外,还负责从E2PROM 中调出以前的采样参数,使器件能够以它采样温度数据。2) 当监控到ONTIME1和NTIME2标记时作相应温度的存储、转换、发送处理。ONTIME1和NTIME2的标记主要有定时电路决定,当到达采样间隔时,做出相应的处理。

3、3)采用动态显示方式即时显示温度,以节省电路规模,使得整个系统的体积变小。3元器件的选择3.1主要元器件知识3.1.1 DS18B20DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO92小体积封装形式;温度测量范围为55125,可编程为9位12位A/D转换精度,测温分辨率可达0.0625,被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离多点温

4、度检测系统。 1) DS18B20的内部结构DS18B20内部结构如图5所示,主要由4部分组成:64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如图7-1-2所示,DQ为数字信号输入输出端;GND为电源地;VDD为外接供电电源输入端,在寄生电源接线方式时接地,见图6。 图5 DS18B20的内部结构 图6 DS18B20的管脚排列ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码,每个DS18B20的64位序列号均不相同。64位ROM的排的循环冗余校验码(CRC=X8X5X41)。ROM的作用是使每一个DS18B2

5、0都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。DS18B20中的温度传感器完成对温度的测量,用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位。例如125的数字输出为07D0H,25.0625的数字输出为0191H,25.0625的数字输出为FF6FH,55的数字输出为FC90H。 高低温报警触发器TH和TL、配置寄存器均由一个字节的EEPROM组成,使用一个存储器功能命令可对TH、TL或配置寄存器写入。其中配置寄存器的格式如下:0 R1 R0 1 1 1 1 1 MSBLSBR1、R0决定温度转换的精度位数:R1R0=“00”,9位

6、精度,最大转换时间为93.75ms;R1R0=“01”,10位精度,最大转换时间为187.5ms;R1R0=“10”,11位精度,最大转换时间为375ms;R1R0=“11”,12位精度,最大转换时间为750ms;未编程时默认为12位精度。高速暂存器是一个9字节的存储器。开始两个字节包含被测温度的数字量信息;第3、4、5字节分别是TH、TL、配置寄存器的临时拷贝,每一次上电复位时被刷新;第6、7、8字节未用,表现为全逻辑1;第9字节读出的是前面所有8个字节的CRC码,可用来保证通信正确。 2) DS18B20的工作时序DS18B20的一线工作协议流程是:初始化ROM操作指令存储器操作指令数据传

7、输。其工作时序包括初始化时序、写时序和读时序,如图7(a)(b)(c)所示。(a)初始化时序(b)写时序(c)读时序图7 DS18B20的工作时序图3) DS18B20与微处理器的连接DS18B20与微处理器的连接如下图8所示。(a)寄生电源工作方式(b)外接电源工作方式图8 DS18B20与微处理器的典型连接图3.1.2 DS2480B1) DS2480B主要特性串口UART/RS232至单总线通信协议的转接桥,可直接连到UART和5V RS232系统中, 支持Dallas全系列单总线器件,如数字温度传感器DS18B20、A/D转换器DS2450等;将主机从单总线时序控制中解脱出来,提供规范

8、的、灵活的和强驱动的单总线定时;支持标准UART通信,支持9.6(默认)、19.2、57.6和115.2 kbps速率;具有较强的总线驱动能力,通信距离可达300 m;可编程下拉摆率控制和有源上拉,工作范围 5 V,-40 +85 ,8引脚SOIC封装。2)管脚图及引脚说明图9 DS2480B的封装和引脚DS2480B为8脚贴片式封装,如图9所示。引脚功能如表1所列引脚号引脚名称引 脚 功 能1GND地线21-W单总线输入输出端3NC悬空4VDD4.55.5V电压5VPPEPROM编程电压6POLRXD/TXD选择端7TXD发送端8RXD接收端表1 引脚功能说明DS2480B工作原理框图如图1

9、0所示。图10 DS2480B工作原理框图3) DS2480B与RS232的接口技术:DS2480B与RS232的接口如图11所示。 图11 DS2480B与RS232的接口图 3.2元件清单序号元件个数1PC机串行口UART/RS2321 个2转接桥DS2480B1 个3数字温度传感器DS18B201 个4电容U07HF1 个5稳压管2 个6二极管M72 个7电路板XF071 个 表2 元件清单4 学习心得通过该温度监控实验,我们可以发现:基于DS18B20数字温度传感器构成的实时监控系统确实具有精度高、抗干扰能力强、电路简单等诸多优点,温度传感器得到电缆长度达到几十米都可以正常读取温度数据

10、,并且已经在站长开发的机房安全监控系统中得到了实际考验,那可是要365天从不间断地对机房及相关设备提供实时温度监控的哦。 相比之下,传统的温度检测系统采用热敏电阻等温度敏感元件,热敏电阻成本低,但需要后续信号调理、AD转换处理电路才能将温度信号转换成数字信号,不但电路复杂,而且热敏电阻的可靠性相对较差,测量温度的精度差,很难保证热敏电阻的一致性和线性,在应用中需要很好的解决引线误差补偿问题、共模干扰问题和放大电路零点漂移误差等技术问题。 因此,如果你开发的系统对温度监控精度要求不是非常高,而且测温的范围DS18B20的-55+125 之间的话,那么采用DS18B20是一个不错的选择,通过软件的

11、插值运算,其实DS18B20的测温精度还可以进一步提高的,具体的实现方法大家可以参考DALLAS公司相关技术资料。当然,如果你有条件的话,也可以预先对每一个DS18B20进行一次校验,在标准恒温箱中测量并记录下每个传感器的测温误差,在实际应用中,我们就可以根据每个传感器的实际校准对读出的实时温度进行适当的误差纠正,这样也不失为提高DS18B20测温精度的一个好办法。可惜的是,并非大家都有这种高精度的恒温箱来校验传感器,如果你的参考温度不准确,那么校准将会适得其反。 通过对这个课程设计的学习,为我们掌握单片机实时温度监控的开发、串口通信程序的开发及计算机串口实时控制开发原理及PC监控软件的开发,

12、以及开发其他功能更加完善的单片机综合应用系统打好基础。5 参考文献1 DS18B20 Programmable Resolution 1-Wire Digital Thermometer2 DS2480B Serial 1-Wire Line Driver with Load Sensor3 左冬红,谢瑞和.实现单总线搜索ROM命令的一种算法4 求是科技.单片机典型模块设计实例导航附:源程序清单- TEMPDL32 : This utility uses TMEX to view a read the temperature from a DS18B20. It requires the 32

13、-Bit Windows TMEX drivers to be present. Compiler : Borland Delphi 5.0 procedure TForm1.FormCreate(Sender: Tobject;Var ztbuf : array0.200 of Char; Typebuf : array 0.200 of Char; i,k,RetValue : smallint; RetStr : array0.200 of Char; SetupDone: Boolean; PortNum, PortType : smallint; begindieer :=false

14、; SetupDone := FALSE; TMSetup not done yet Label4.Caption := ; Read default Port Number and Port Type from registry RetValue := TMReadDefaultPort(PortNum, PortType); if (RetValue 0) Then begin if (TMSetup(SHandle) = 1) then The device that will be found is Temperature Device DS18B20, so Family Type

15、is set to $28 FindFirstFamily($28,SHandle) else begin TMEndSession(SHandle); ShowMessage(Fail to setup MicroLan!); Halt; end; end else begin if (SHandle 0) Then begin if (TMSetup(SHandle) = 1) then The device that will be found is Temperature Device DS18B20, so Family Type is set to $28 FindSecondFa

16、mily($28,SHandle) else begin TMEndSession(SHandle); ShowMessage(Fail to setup MicroLan!); Halt; end; end else begin if (SHandle 0 ) then Begin ShowMessage(The Default Port Type does not have a driver !); Halt; end; end; Release control back to window Application.ProcessMessages; until (Done); label1

17、8.Caption :=keke1; label19.caption :=keke2; table1.Active :=true; if table1.CanModify then begin table1.Append; table1.Fields0.AsDateTime :=now; table1.Fields1.AsString :=floattostr(diwei1); table1.Fields2.AsFloat :=shangxian1; table1.Fields3.AsFloat :=xiaxian1; table1.Fields4.AsString :=floattostr(

18、diwei2); table1.Fields5.AsFloat :=shangxian2; table1.Fields6.AsFloat:=xiaxian2; table1.Post; end; end;end;procedure TForm1.FindFirstFamily(family : smallint; SHandle: longint); var i , flag : smallint; romstr : string; rom : array0.8 of smallint;begin Set up to find the first device with the family

19、family if (TMFamilySearchSetup(SHandle,stateBuf,family ) = 1 ) then begin if (TMNext(SHandle, stateBuf)= 1) then begin Read the rom number by setting rom0 to 0 for reading and using TMRom rom0 := 0; TMRom(SHandle,stateBuf,rom); Check if correct type romstr := ; if (family and $7F )= (rom0 and $7F) t

20、hen begin for i := 7 downto 0 do romstr := romstr + IntToHex(ROMi,2); Label3.caption := Serial ROM ID1 : + romstr; ReadTemperature1(SHandle); end else begin ShowMessage(There is no Temperature Device on the port); halt; end; end else begin TMEndSession(SHandle); ShowMessage(There is no Temperature D

21、evice on the port); halt; end; end else begin TMEndSession(SHandle); ShowMessage(There is no Temperature Device on the port); halt; end;end;procedure TForm1.ReadTemperature1(session_handle : longint);var tsht, i, tmp1 : smallint; cr,cpc, tmpf,tmp : Extended; rbuf : array0.9 of smallint ; st : longin

22、t; CRCByte,xiaxianbyte : Byte;begin tmp := 0.00; access the device if (TMAccess(session_handle,StateBuf)= 1) then begin Send the recall E2 command (by setting $B8 to outbyte in TMTouchByte) make sure Scratch is correct TMTouchByte(session_handle, $B8); Send the start T command if (TMAccess(session_h

23、andle,StateBuf) = 1) then begin Prepare the strong pullup after next TMTouchByte TMOneWireLevel(session_handle,LEVEL_SET,LEVEL_STRONG_PULL_UP, PRIMED_BYTE); Send the conversion command (by setting $44 to outbyte in TMTouchByte) TMTouchByte(session_handle, $44); Sleep for a second st := GetTickCount

24、+ 1000; While (GetTickCount st) do TMValidSession(Session_handle); Disable the strong pullup TMOneWireLevel(session_handle, LEVEL_SET,LEVEL_NORMAL,PRIMED_NONE); verify conversion is complete by setting $01 to outbit in TMTouchBit and check the return value with 1 if (TMTouchBit(session_handle,$01) =

25、 $01) then begin Access device If (TMAccess(session_handle,StateBuf) = 1 ) then begin Send read scratch command by setting $BE to outbyte in TMTouchByte TMTouchByte(session_handle,$BE); CRC8 := 0; Read scratch (setting $FF to outbyte in TMTouchByte) and check crc for each byte for i := 0 to 7 do beg

26、in rbufi:= TMTouchByte(session_handle, $FF); CRCByte := Byte(rbufi); the byte to run through CRC8 routine CRC8 := TMCRC(1, CRCByte, CRC8, 0); end; Check crc CRCByte := Byte(TMTouchByte(session_handle, $FF); the byte to run through CRC8 routine CRC8 := TMCRC(1, CRCByte, CRC8, 0); if ( CRC8 = 0 ) then

27、 begin Calculate the temperarure tsht := rbuf0; if (rbuf1 and $01)= 1) then tsht := tsht or (-256); tmp1 := Round(tsht)/2); tmp := tmp1; cr := rbuf6; cpc := rbuf 7; if (rbuf7 0) then tmp := tmp - (0.25) + (cpc-cr)/cpc; if (rbuf1 and $F8)= $F8) then BEGIN END ELSE BEGIN case (rbuf4 and $60) of $00: begin fenbianlv1 :=9; tmp:=(rbuf1 and $07)*16+(rbuf0 and $f8)/16; diwei1 :=

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

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