个人博客:http://brainware360.cn/
Dallas 半导体公司(2001年被Maxim半导体公司收购)出品的数字化温度传感器DS1820是世界上第一片支持 "一线总线"接口的温度传感器。测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。DS1820开辟了温度传感器技术的新概念。
以下就是DS1820 的外观:
GND – 接地
DQ – 数据输入输出端,也可以为芯片供电
VDD – 可选的外部电源
外部的VDD是可选的,DQ引脚既可以用来传输数据,又可以用来给芯片供电。即在DQ处于高电平时,通过内部集成的电容将能量存储起来,而当DQ处于低电平时,通过内部电容的放电给各模块供电。DS1820由外部电源供电时,一般在MCU对应I/O端接一个弱上拉电阻,但DS1820不接外部电源时。为保证DS1820在温度转换或拷贝至E2RAM时1mA的电流供应,则需要在MCU对应I/O端通过MOSFET直接和电源连接,并能在涉及拷贝至E2RAM和温度转换等操作的10 us内切换到强上拉状态(即导通MOSFET),两种方式如下图所示:
DS1820的内部结构如下图所示:
可以看出DS1820主要分为四个模块:1)64-bit光刻ROM;2)温度传感器;3)非易失性的温度报警触发器TH和TL;4)存储和控制模块。
每一片DS1820都包含一个独特的64位的编码,前八位是在单总线器件中的编码(DS1820是10h),接下来的48位是一串独特的代号,最后八位是前56位的校验和。这64位编码是DS1820以单总线协议工作的基础。
温度传感器测完温度并转换成数字量后会与TH和TL进行比较,由于TH和TL各只有8位,所以数字量的小数位将被忽略。如果测得的温度值大于TH或小于TL均将产生一个报警标志位,每次温度测量完成都会导致该标志位的更新。
DS1820的内存由两部分组成:scratchpad RAM和E2RAM,其中TH和TL存储于E2RAM中,其内容如下“
每完成一次温度测量,数据首先保存至scratchpad当中。scratchpad前两个字节保存的是温度值的低字节和高字节,第三个字节和第四个字节保存的是TH和TL的备份,第五第六字节保留,执行读操作时,均为1,第七个字节和第八个字节用于获取更高的温度测量的精度。其使用如下所示:
TEMP_READ为去除小数位后的温度测量值。第九个字节保存的是前面所有字节的CRC。
DS1820的工作流程如下所示:
l 初始化
l ROM操作指令
l 内存操作指令
l 数据传输
1) 初始化
单总线形式互连的器件所有操作的第一步均要执行初始化操作,该操作由MCU发送的重置脉冲和从机响应的存在脉冲构成。MCU收到存在脉冲后即知道DS1820在线并已经做好进行下一步操作的准备了。
与DS1820的任何通信都以下图所示的时序序列开始,MCU发送重置脉冲,之后从机以存在脉冲进行响应,完成这些后DS1820才可以执行下一步的ROM操作指令和内存操作指令等。
重置脉冲是一段至少为480us的低电平,MCU发送重置脉冲后释放总线,进入接收模式。单总线之后通过上拉电阻进入高电平,DS1820检测到单总线上的上升沿后,等待15-60us,发送存在脉冲,即一段60-240us的低电平。
2) ROM操作指令
ROM操作指令长度为8位,共有五个操作指令。
Read ROM[33h]:让MCU读取DS1820长度为64位的编码,读取了该编码,即确定了全球唯一的DS1820器件。这条指令只有当单总线上只有一片DS1820时可用。
Match ROM[55h]:该条指令后面会紧跟着一串64位的编码,用于单总线上接单个或多个器件时,匹配上的器件会对MCU进行响应。
Skip ROM[CCh]:该条指令和上一条指令的区别在于不需要提供一串64位的编码而直接进想下一步操作,用于单总线上接单个器件。
Search ROM[F0h]:当一个系统初次启动时MCU可能并不知道单总线上有多少器件。搜索ROM命令允许MCU用排除法识别总线上的所有从机的64位编码。
Alarm Search[ECh]:这条指令和Search ROM相同。然而只有在最近一次测温后遇到符合报警条件的情况,DS1820才会响应这条指令。报警条件定义为温度高于TH或低于TL。只要DS1820不掉电,报警标志位将一直保持,直到再一次测得的温度值达不到报警条件。
3) 内存操作指令
内存操作指令长度同样也为8位,共有六个操作指令。
Write Scratchpad [4Eh]:这个命令向DS1820的暂存器中写入数据。写入的开始位置在Scratchpad的第三个字节(即前两个温度测量值不能写入)。接下来写入的两个字节将被存到暂存器中的地址位置2和3。可以在任何时刻发出复位命令来中止写入。
Read Scratchpad [BEh]:这个命令读取暂存器的内容。读取将从第一个字节开始一直进行下去,直到第九个字节读完。如果不想读完所有字节,MCU可以在任何时间发出复位命令来中止读取。
Copy Scratchpad [48h]:这条命令把Scratchpad的内容拷贝到DS1820的E2RAM里,即把温度报警触发字节存入非易失性存储器里。如果MCU在这条命令之后跟着发出读时间隙,而DS1820又正在忙于把暂存器拷贝到E2RAM,DS1820就会输出一个“0”,如果拷贝结束的话,DS1820则输出“1”。如果不使用外部电源,MCU必须在这条指令发出后立即起动强上拉(即上文提到的导通MOSFET)并最少保持10ms。
Convert T [44h]:这条指令启动一次温度转换。而后DS1820保持空闲状态。如果MCU在这条指令之后跟着发出读时间隙,而DS1820又忙于做温度转换的话,DS1820将在总线上输出“0”,若温度转换完成,则输出“1”。如果不使用外部电源,MCU必须在发出这条命令后立即起动强上拉(即上文提到的导通MOSFET),并保持500ms。
Recall E2 [B8h]:这条指令把报警触发器里的值拷回Scratchpad。这种拷回操作在DS1820上电时自动执行,这样器件一上电Scratchpad里马上就存在有效的数据了。若在这条命令发出之后发出读时间隙器件会输出温度转换忙的标识:“0”=忙,“1”=完成。
Read Power Supply [B4h]:若把这条指令发给DS1820后再发出读时间隙,器件会返回它的电源模式:“0”=寄生电源,“1”=外部电源。
4) 数据传输
DS1820的数据是通过读/写时隙来对传输进行控制和确认的。
写时隙:当MCU将数据线DQ从高电平拉到低电平,写时隙开始。写时隙分为两种,一种是写“1”时隙,一种是写“0”时隙。所有的写时隙至少持续60us并且两个写周期之间至少1us的恢复时间。在MCU接DS1820的DQ端的对应I/O线上电压降到低电平后,DS1820在15~60us内对I/O线上电压进行采样,采得的电压为高,则写“1”,否则写“0”。时序如下图所示:
如上图中所示,MCU将DQ端拉到低电平15us后,释放数据线,进行写“0”操作则保持,进行写“1”操作则将电压拉到高电平。
读时隙:同样的,当MCU将数据线DQ从高电平拉到低电平,读时隙开始。数据线在低电平保持至少1us。DS1820输出的数据在读时隙开始后的15us内有效,也就是MCU需要在这个15us内读取数据线上的状态。所有的读时隙需至少保持60us,并且两个读时隙之间要有一个至少1us 得恢复时间。如下图所示:
推荐的读“1”操作:下图有三个时间TINIT、TRC和TSAMPLE。TINIT、TRC的时长被尽量压缩,以确保足够的时间裕量,图中可以看出主机采样时间靠近15us的结束段。