当前位置:首页 > 工业控制 > 工业控制
[导读]作为一种单主机多从机的总线系统,在一条1-Wire总线上可挂接的从器件数量几乎不受限制。为了不引起逻辑上的冲突,所有从器件的1-Wire总线接口都是漏极开路的,因此在使用时必须对总线外加上拉电阻(一般取5kΩ左右)。主机对1-Wire总线的基本操作分为复位、读和写三种,其中所有的读写操作均为低位在前高位在后。复位、读和写是1-Wire总线通信的基础,下面通过具体程序详细介绍这3种操作的时序要求。(程序中DQ代表1-Wire总线,定义为P1.0,uchar定义为unsigned char)

1-Wire总线的基本通信协议


作为一种单主机多从机的总线系统,在一条1-Wire总线上可挂接的从器件数量几乎不受限制。为了不引起逻辑上的冲突,所有从器件的1-Wire总线接口都是漏极开路的,因此在使用时必须对总线外加上拉电阻(一般取5kΩ左右)。主机对1-Wire总线的基本操作分为复位、读和写三种,其中所有的读写操作均为低位在前高位在后。复位、读和写是1-Wire总线通信的基础,下面通过具体程序详细介绍这3种操作的时序要求。(程序中DQ代表1-Wire总线,定义为P1.0,uchar定义为unsigned char)


1 1-Wire总线的复位


复位是1-Wire总线通信中最为重要的一种操作,在每次总线通信之前主机必须首先发送复位信号。如程序1.1所示,产生复位信号时主机首先将总线拉低480~960μs然后释放,由于上拉电阻的存在,此时总线变为高电平。1-Wire总线器件在接收到有效跳变的15~60μs内会将总线拉低60~240μs,在此期间主机可以通过对DQ采样来判断是否有从器件挂接在当前总线上。函数Reset()的返回值为0表示有器件挂接在总线上,返回值为1表示没有器件挂接在总线上。


程序1.1 总线复位


uchar Reset(void)

uchar tdq;
DQ=0;  //主机拉低总线
delay480μs(); //等待480μs
DQ=1; //主机释放总线
delay60μs();  //等待60μs
tdq=DQ;  //主机对总线采样
delay480μs();  //等待复位结束
return tdq;  //返回采样值
}


2 1-Wire总线的写操作


由于只有一条I/O线,主机1-Wire总线的写操作只能逐位进行,连续写8次即可写入总线一个字节。如程序1.2所示,当MCS-51单片机的时钟频率为12MHz时,程序中的语句_nop_();可以产生1μs的延时,调用此函数时需包含头文件“intrins.h”。向1-Wire总线写1bit至少需要60μs,同时还要保证两次连续的写操作有1μs以上的间隔。若待写位wbit为0则主机拉低总线60μs然后释放,写0操作完成。若待写位wbit为1,则主机拉低总线并在1~15μs内释放,然后等待60μs,写1操作完成。


程序1.2 向总线写1bit


void Writebit(uchar wbit)

 _nop_(); 
//保证两次写操作间隔1μs以上
 DQ=0;
 _nop_(); 
//保证主机拉低总线1μs以上
 if(wbit)
 {             
//向总线写1
 DQ=1;
delay60μs();
 }
 else
 {             
//向总线写0
 delay60μs();
 DQ=1;
 }
}


3 1-Wire总线的读操作


与写操作类似,主机对1-Wire总线的读操作也只能逐位进行,连续读8次,即可读入主机一个字节。从1-Wire总线读取1bit同样至少需要60μs,同时也要保证两次连续的读操作间隔1μs以上。如程序1.3所示,从总线读数据时,主机首先拉低总线1μs以上然后释放,在释放总线后的1~15μs内主机对总线的采样值即为读取到的数据。

程序1.3 从总线读1bit


uchar Readbit()

 uchar tdq;
 _nop_(); 
//保证两次连续写操作间隔1μs以上
 DQ=0;
 _nop_();  
//保证拉低总线的时间不少于1μs
 DQ=1;
 _nop_();
 tdq=DQ;  
//主机对总线采样
 delay60μs();
//等待读操作结束
 return tdq; 
//返回读取到的数据
}

数字温度传感器DS18B20


1 DS18B20的基本特性


● 采用1-Wire总线接口,可以方便实现多点测温。
● 与主机连接方便,除5kΩ的总线上拉电阻外无须其他额外器件。
● 电源电压范围为3.0~5.5V,与3.3V和5V数字系统均可很好地兼容。
● 测量范围为-55~+125℃,分辨率为9~12位可编程。
● 通过编程可设置温度报警上下限,设置值掉电不丢失。
● 内部集成了用于器件寻址的64bit光刻ROM编码。


2 DS18B20中的存储器


在DS18B20中共有三种存储器,分别是ROM、RAM、EEPROM,每种存储器都有其特定的功能,可查阅相关资料。


3 1-Wire总线ROM功能命令


在DS18B20内部光刻了一个长度为64bit的ROM编码,这个编码是器件的身份识别标志。当总线上挂接着多个DS18B20时可以通过ROM编码对特定器件进行操作。ROM功能命令是针对器件的ROM编码进行操作的命令,共有5个,长度均为8bit(1Byte)。


①读ROM(33H)


当挂接在总线上的1-Wire总线器件接收到此命令时,会在主机读操作的配合下将自身的ROM编码按由低位到高位的顺序依次发送给主机。总线上挂接有多个DS18B20时,此命令会使所有器件同时向主机传送自身的ROM编码,这将导致数据的冲突。


②匹配ROM(55H)


主机在发送完此命令后,必须紧接着发送一个64bit的ROM编码,与此ROM编码匹配的从器件会响应主机的后续命令,而其他从器件则处于等待状态。该命令主要用于选择总线上的特定器件进行访问。


③跳过ROM(CCH)


发送此命令后,主机不必提供ROM编码即可对从器件进行访问。与读ROM命令类似,该命令同样只适用于单节点的1-Wire总线系统,当总线上有多个器件挂接时会引起数据的冲突。


④查找ROM(F0H)


当主机不知道总线上器件的ROM编码时,可以使用此命令并配合特定的算法查找出总线上从器件的数量和各个从器件的ROM编码。


⑤报警查找(ECH)


此命令用于查找总线上满足报警条件的DS18B20,通过报警查找命令并配合特定的查找算法,可以查找出总线上满足报警条件的器件数目和各个器件的ROM编码。


4 DS18B20器件功能命令


与1-Wire总线相关的命令分为ROM功能命令和器件功能命令两种,ROM功能命令具有通用性,不仅适用于DS18B20也适用于其他具有1-Wire总线接口的器件,主要用于器件的识别与寻址;器件功能命令具有专用性,它们与器件的具体功能紧密相关。下面是DS18B20的器件功能命令。


①启动温度转换(44H)


该命令发送完成后,主机可以通过调用Readbit()函数判断温度转换是否完成,若Readbit()的返回值为0则表示转换正在进行,若Readbit()的返回值为1则表示转换完成。


②读RAM(BEH)


该命令发送完成后,主机可以通过调用Readbit()函数将DS18B20中RAM的内容从低位到高位依次读出。


③写RAM(4EH)


该命令发出后,主机随后写入1-Wire总线的3字节将依次被存储到DS18B20的报警上限、报警下限和配置寄存器中。


④复制RAM(48H)


该命令会将DS18B20的报警上限、报警下限和配置寄存器中的内容复制到EEPROM中。该命令发出后,主机可以通过调用Readbit()函数判断复制操作是否完成,若Readbit()的返回值为1,则表示复制操作完成。


⑤回读EEPROM(B8H)


该命令会将存储在EEPROM中的报警上限、报警下限和配置寄器的内容回读到RAM中,主机可以通过调用Readbit()函数判断回读操作是否完成,若Readbit()的返回值为1则表示回读操作完成。DS18B20在上电时会自动进行一次回读操作。

 

图1 主机与DS18B20的通信流程图


5 主机与DS18B20的通信流程


如图1所示,主机通过1-Wire总线接口对DS18B20的每次访问都以复位信号和ROM功能命令开始,访问的结束位置是不确定的,这与具体的功能命令相关。图中圆角矩形中的操作与主机发送的功能命令相对应,随着功能命令的不同圆角矩形中的操作有时可以被省略。对总线上的DS18B20来说,复位信号意味着又一次通信的开始,器件对此的响应是拉低总线以告知主机自身的存在,然后准备接收ROM功能命令。

多点测温系统仿真实例


DS18B20是一种比较廉价的温度传感器,其封封装形式如图2所示。在Proteus中包含有DS18B20的仿真模型,这使得相关程序的调试变得简单方便。下面以一个实例介绍用Proteus仿真多点测温系统的步骤。

 

图2 DS18B20封装形式


① 绘制仿真原理图


如图3所示,在本实例中以单片机AT89C52和8个DS18B20构成了一个多点测温系统。为了有足够的空间存储各个DS18B20的ROM编码和温度值,在实例中用一片8KB的SRAM芯片6116对单片机的RAM进行了扩展。


②设置DS18B20仿真模型的属性


首先右击选中protues编辑区中的DS18B20仿真模型然后再左击,此时弹出如图4所示的属性设置对话框。其中,Family Code是器件的家族码,对于DS18B20来说是28H。ROM Serial Number对应于器件的48bit序列号,格式为十六进制,在填写过程中要保证同一条1-Wire总线上所有仿真模型的ROM Serial Number都不相同。Automatic Serialization设置为No时仿真模型将使用ROM Serial Number中的序列号,设置为Yes时模型的序列号将由仿真环境自动生成,在此设置为Yes,这样可以免去手动修改ROM Serial Number的麻烦。Current Value中是仿真模型当前的温度值。Cranularity中是单击仿真模型的温度值增减按钮时温度值的改变量,在此设置为1.1。其他选项保持默认即可。单击OK按钮,设置完成。

 

图3 多点测温系统仿真原理图


③编制源程序


主机是通过Reset()、Readbit()、Writebit()三种基本操作与1-Wire总线进行通信的,只要这三个函数的时序准确,那么对于有一定C语言编程基础的用户来说程序其他部分的编写将不是难事,按照前面介绍的流程向总线发送功能命令并进行相应读写操作即可。多点测温系统编程的难点在于器件的查找,系统上电时主机首先要查找总线上挂接着多少个1-Wire器件并将各个器件的ROM编码读入单片机的RAM中,这需要一套复杂的算法,限于篇幅关于此算法在此不再详述。本仿真实例大体工作过程如图3右下角注释部分所示,“查找总线上所有器件的ROM编码并存储”这一步可以由uchar B20ReadROM(uchar B20ROM[]函数完成,该函数的返回值是查找到的器件数目,各个器件的ROM编码将存储在二维数组B20ROM[]中。

 

图4 DS18B20仿真模型属性设置


“统一开始温度转换”的通信流程为:发送复位信号;发送跳过ROM(CCH)命令;发送启动温度转换(44H)命令。


“逐器件读取温度值”的通信流程为:发送复位信号;发送匹配ROM(55H)命令;发送第i(i=0~7)个器件的ROM编码;发送读RAM(BEH)命令;读取2字节,其中低字节在前,高字节在后,读取到的值符合温度值数据格式。


④在Proteus中添加监视变量


为了检验程序运行的正确与否,通常的做法是将运行结果通过单片机的UART接口输出到虚拟终端上,这种方法的缺点是会占用一定的单片机资源,在此介绍另外一种程序调试技巧——监视变量。在Proteus的运行状态下点击Debug→Watch Window会弹出监视窗口(Watch Window),然后按下Alt+A键会弹出如图5所示的添加存储器条目对话框(Add Memory Item)。所谓监视变量也就是监视相应存储单元中的内容,图5中

 

图5 添加存储器条目对话框

 

Memory用于选择待监视变量所在的存储器;Name用于填写变量名称,为了含义清晰该名称最好与源程序中定义的变量名称一致;Address用于填写待监视变量的地址;Data Type和Display Fomat用于设置数据格式和显示格式。设置完成后单击Add按钮即可添加一个监视变量。在本实例中将测量到的温度值转化成ACSLL码字符串的格式存储在二维数组TempBuffer中,因此Data Type选择为ASCLLZ String,Watch Window的最终结果如图6所示。Value一栏中显示的即为8个DS18B20测量到的温度值,单击仿真模型的温度增减按钮温度值的改变会自动映射在Watch Window中。

 

图6 监视窗口


图6中TempBuffer[i](i=0~7)的地址在Keil中可以按以下步骤得到:


● 单击Keil工具栏中的按钮,进入调试状态。
● 通过View→Output Window菜单调出Keil的Output Window,并选中Command标签。
● 在Output Window的命令输入区输入TempBuffer[i]然后回车即可得到TempBuffer[i]的地址,在本实例中i=0~7。对于非数组类型的变量在输入时需要在变量名前加取地址符号&,如图7所示。 

图7 变量地址的获取

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

● 颠覆性的专用软硬件加速平台;利用GPU和CPU计算以及专有软件算法,提高准确度、速度和规模的同时,带来高达100倍的设计效率提升; ● 与传统HPC相比,支持GPU-resident模式的求解器可将仿真能效显著提高2...

关键字: AI 仿真

● 热、应力和电子散热设计同步分析,让设计人员可以无缝利用ECAD和MCAD对机电系统进行多物理场仿真; ● 融合FEM和CFD引擎,应对各种热完整性挑战——从芯片到封装,从电路板到完整的电子系统; ● Celsius...

关键字: AI 仿真

具有高采样率的泰克任意波形发生器(AWG)是功能多样且强大的仪器,可以提高脉冲激光实验的质量和效率,为以前所未有的精度和灵活性创建和操作光脉冲提供了多种可能性。

关键字: 仿真 测试测量

● 四态硬件仿真应用可加速需要X态传播的仿真任务; ● 实数建模应用可加速混合信号设计软件仿真; ● 动态功耗分析应用可将复杂SoC的功耗分析任务加快5倍。

关键字: 仿真 SoC

目前,中国市场HiL技术主要应用于汽车、航空航天、国防、能源、电力电子等产业,2016年-2028年市场规模复合增长率达18.5%,预计2028年中国HiL模拟行业市场规模达到273亿元,其中尤以汽车行业HiL应用市场规...

关键字: 仿真 汽车电子

在这篇文章中,小编将对USB接口的相关内容和情况加以介绍以帮助大家增进对USB接口的了解程度,和小编一起来阅读以下内容吧。

关键字: USB 通用串行总线 总线

在今年的泰克创新论坛上,我与新思科技(Synopsys)的Madhumita Sanyal和安立公司(Anritsu)的Hiroshi Goto一起讨论了最新PCIe版本面临的挑战,以及PCIe 7.0可能面临的挑战。

关键字: 仿真

今天,小编将在这篇文章中为大家带来嵌入式总线技术的有关报道,通过阅读这篇文章,大家可以对嵌入式总线技术具备清晰的认识,主要内容如下。

关键字: 嵌入式 总线

近日,第11届EEVIA年度中国硬科技媒体论坛暨产业链研创趋势展望研讨会在深圳召开,上海合见工业软件集团产品工程副总裁孙晓阳在会上发布了主题为“把握芯片设计关键核心,助力国产EDA新格局”的演讲。

关键字: 芯片设计 仿真 验证 chiplet 合见工软 IP

COMSOL 电池主题日系列活动邀请了多位行业专家,分享多物理场仿真在电池行业中的应用和优势,共同探讨电池及电化学储能技术未来发展的无限可能。 上海2023年9月21日 /美通社/ -- 2023年9月20日,全球领先...

关键字: 仿真 电池技术 COMSOL 电化学
关闭
关闭