1、- 1 -物理机电学院课程设计报告课程名称: 单片机原理 系 部: 电子与电气系 专业班级: 学生姓名: 指导教师: 完成时间: 2009.9.25-9.30 报告成绩: 评阅意见:评阅教师 日期 - 2 -数字温度计设计一、设计任务与要求设计一个数字温度计:(1)温度设定范围为 0099;(2)温度精度为 0.1。二、方案设计与论证用温度传感器芯片 DS18B20 用 9 位模式即可满足设计要求,用单片机通过读取 DS18B20 传回的温度数值,将其转化,并用 8 个口输出用七段数码管或LCD 显示。方案:1.元件:AT89S52 单片机一片、12 MHz 晶振一个、510 排阻一个、DS1
2、8B20 芯片一个、SR420401 四位共阴七段数码管一个、微动开关一个、30pF电容两个、100uF 电容一个。2.电路原理图:- 3 -3.DS18B20:1).DS18B20 及其特性A.主要特性: 独特的单线接口仅需一个端口引脚进行通讯。 可通过数据线供电。 测温范围55125,以 0.5 递增。华氏器件67257F,以0.90F 递增。 温度以 9 位数字量读出。B.引脚排列:DS18B20 PR35 PACKAGE1 2 3底部视图引脚说明:GND 接地端DQ 数据输入输出端VDD 可选的 VDDDALLASDS18B20GND VCCDQ1 2 3C. 工作原理:DS1820
3、有三个主要数字部件: 64 位激光 ROM,温度传感器,非易失性温度报警触发器 TH 和 TL。器件用如下方式从单线通讯线上汲取能量:在信号线处于高电平期间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。DS1820 也可用外部 5V 电源供电。64 位 ROM和单线端口电源探测VDDDQ内部VDD存储器和控制逻辑暂存器8 位 CRC产生器温度传感器上限触发 TH下限触发 TLDS1820 依靠一个单线端口通讯。在单线端口条件下,必须先建立ROM 操作协议,才能进行存储器和控制操作。因此,控制器必须首先提供下面5 个ROM 操作命令之
4、一:1)读ROM,2)匹配ROM,3)搜索ROM,4)跳过 ROM,5)报警搜索。这些命令对每个器件的激光 ROM 部分进行操作,在单线总线上挂有多个器件时,可以区分出单个器件,同时可以向总线控制器指明有多少器件或是什么型号的器件。成功执行完一条ROM 操作序列后,即可进行存储器和控制操作,控制器可以提供 6 条存储器和控制操作指令中的任一条。- 4 -一条控制操作命令指示 DS1820 完成一次温度测量。测量结果放在DS1820 的暂存器里,用一条读暂存器内容的存储器操作命令可以把暂存器中数据读出。温度报警触发器 TH 和 TL 各由一个 EEPROM 字节构成。如果没有对 DS1820 使
5、用报警搜索命令,这些寄存器可以做为一般用途的用户存储器使用。可以用一条存储器操作命令对 TH 和TL 进行写入,对这些寄存器的读出需要通过暂存器。所有数据都是以最低有效位在前的方式进行读写。测温操作:DS1820 通过一种片上温度测量技术来测量温度。图4 示出了温度测量电路的方框图。斜坡累加器预置计数器预置比较低温度字数振荡器高温度系数振荡器温度寄存器增加计数器 增加00LSB 置位清零温度/数据关系表温度 数据输出(二进制) 数据输出(十六进制)125 00000000 11111010 00FA25 00000000 00110010 00321/2 00000000 00000001 0
6、0010 00000000 00000000 00001/2 11111111 11111111 FFFF25 11111111 11001110 FFCE55 11111111 10010010 FF92DS1820 是这样测温的:用一个高温度系数的振荡器确定一个门周期,内部计数器在这个门周期内对一个低温度系数的振荡器的脉冲进行计数来得到温度值。计数器被预置到对应于55的一个值。如果计数器在门周期结束前到达 0,则温度寄存器(同样被预置到55)的值增加,表明所测温度大于55。同时,计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加器电路用来补偿感温振荡器的抛物线特性。然后计数器又
7、开始计数直到 0,如果门周期仍未结束,将重复这一过程。- 5 -斜坡式累加器用来补偿感温振荡器的非线性,以期在测温时获得比较高的分辨力。这是通过改变计数器对温度每增加一度所需计数的的值来实现的。因此,要想获得所需的分辨力,必须同时知道在给定温度下计数器的值和每一度的计数值。DS1820 内部对此计算的结果可提供 0.5 的分辨力。温度以16bit 带符号位扩展的二进制补码形式读出,表 1 给出了温度值和输出数据的关系。数据通过单线接口以串行方式传输。DS1820 测温范围55125,以 0.5递增。如用于华氏温度,必须要用一个转换因子查找表。注意 DS1820 内温度表示值为 1/2 LSB,
8、如下所示 9bit 格式:1 1 1 0 0 1 1 1 0 25LSBMSB最高有效(符号)位被复制充满存储器中两字节温度寄存器的高MSB 位,由这种“符号位扩展”产生出了示于表 1 的 16bit 温度读数。可用下述方法获得更高的分辨力。首先,读取温度值,将 0.5位(LSB)从读取的值中截去,这个值叫做 TEMP_READ。然后读取计数器中剩余的值,这个值是门周期结束后保留下来的值(COUNT_REMAIN) 。最后,我们用到在这个温度下每度的计数值(COUNT_PER_C) 。用户可以用下面的公式计算实际温度值: (COUNT_PERCOUNT_EMAI)TEMPRAU=TEP_RAD
9、0.25=单线总线系统:单线总线系统包括一个总线控制器和一个或多个从机。DS1820 是从机。关于这种总线分硬件结构、执行序列和单线信号(信号类型和时序)讨论。单线总线只有一条定义的信号线;重要的是每一个挂在总线上的器件都能在适当的时间驱动它。为此每一个总线上的器件都必须是漏极开路或三态输出。DS1820 的单总线端口(I/O 引脚)是漏极开路式的,内部等效电路见图 9。一个多点总线由一个单线总线和多个挂于- 6 -其上的从机构成。单线总线需要一个约 5K 的上拉电阻。RXTX4.7k总线控制器RX100 OHMMOSFETRX = 接收TX = 发送+2.5V单线总线的空闲状态是高电平。无论
10、任何理由需要暂停某一执行过程时,如果还想恢复执行的话,总线必必须停留在空闲状态。在恢复期间,如果单线总线处于非活动(高电平)状态,位与位间的恢复时间可以无限长。如果总线停留在低电平超过 480s,总线上的所有器件都将被复位。通过单线总线端口访问 DS1820 的协议如下: 初始化通过单线总线的所有执行(处理)都从一个初始化序列开始。初始化序列包括一个由总线控制器发出的复位脉冲和跟有其后由从机发出的存在脉冲。 ROM 操作命令一旦总线控制器探测到一个存在脉冲,它就可以发出 5 个 ROM 命令中的任一个。所有 ROM 操作命令都 8 位长度Read ROM 33h这个命令允许总线控制器读到 DS
11、1820 的 8 位系列编码、唯一的序列号和 8 位 CRC 码。只有在总线上存在单只 DS1820 的时候才能使用这个命令。如果总上有不止一个从机,当所有从机试图同时传送信号时就会发生数据冲突(漏极开路连在一起开成相与的效果) 。Match ROM 55h匹配 ROM 命令,后跟 64 位 ROM 序列,让总线控制器在多点总线上定位一只特定的 DS1820。只有和 64 位 ROM 序列完全匹配的 DS1820 才能响应随后的存储器操作命令。所有和 64 位 ROM 序列不匹配的从机都将等待复位脉冲。这条命令在总线上有单个或多个器件时都可以使用。- 7 -Skip ROM CCh这条命令允许
12、总线控制器不用提供 64 位 ROM 编码就使用存储器操作命令,在单点总线情况下右以节省时间。如果总线上不止一个从机,在 Skip ROM 命令之后跟着发一条读命令,由于多个从机同时传送信号,总线上就会发生数据冲突(漏极开路下拉效果相当于相与) 。Search ROM F0h当一个系统初次启动时,总线控制器可能并不知道单线总线上有多少器件或它们的 64 位 ROM 编码。搜索 ROM 命令允许总线控制器用排除法识别总线上的所有从机的 64 位编码。Alarm Search ECh这条命令的流程图和 Search ROM 相同。然而,只有在最近一次测温后遇到符合报警条件的情况,DS1820 才会
13、响应这条命令。报警条件定义为温度高于 TH 或低于 TL。只要 DS1820 不掉电,报警状态将一直保持,直到再一次测得的温度值达不到报警条件。 I/O 信号DS1820 需要严格的协议以确保数据的完整性。协议包括几种单线信号类型:复位脉冲、存在脉冲、写 0、写 1、读 0 和读 1。所有这些信号,除存在脉冲外,都是由总线控制器发出的。和 DS1820 间的任何通讯都需要以初始化序列开始,初始化序列见图 11。一个复位脉冲跟着一个存在脉冲表明 DS1820 已经准备好发送和接收数据(适当的ROM 命令和存储器操作命令) 。备注:1、温度转换时间可长达 500ms。接到温度转换的协议后,如果器件
14、不是从 VDD 供电的话,I/O 线就必须至少保持 500ms 高电平。这样,发出一个 Convert T 命令之后,单线总线上在这段时间内就不能有其他活动。2、接到 Copy Scratchpad 协议后,如果器件不是从 VDD 供电的话,I/O 线必须至少保持 10ms 高电平。这样,在发出一个 Copy Scratchpad 命令后,这段时间内单线总线上就不能有其他活动3、总线控制器发出(TX)一个复位脉冲(一个最少保持 480s 的低电平信号) ,然后释放总线,进入接收状态(RX) 。单线总线由 5K 上拉电阻拉到高电平。探测到 I/O 引脚上的上升沿后,DS1820 等待1560s,
15、然后发出存在脉冲(一个 60240s 的低电平信号) 。- 8 - 存储器操作命令Write Scratchpad 4Eh这个命令向 DS1820 的暂存器中写入数据,开始位置在地址 2。接下来写入的两个字节将被存到暂存器中的地址位置 2 和 3。可以在任何时刻发出复位命令来中止写入。Read Scratchpad BEh这个命令读取暂存器的内容。读取将从字节 0 开始,一直进行下去,直到第 9(字节 8,CRC)字节读完。如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。Copy Scratchpad 48h这条命令把暂存器的内容拷贝到 DS1820 的 E2 存储器里,即把
16、温度报警触发字节存入非易失性存储器里。如果总线控制器在这条命令之后跟着发出读时间隙,而 DS1820 又正在忙于把暂存器拷贝到 E2 存储器,DS1820 就会输出一个“0” ,如果拷贝结束的话,DS1820 则输出“1” 。如果使用寄生电源,总线控制器必须在这条命令发出后立即起动强上拉并最少保持 10ms。Convert T 44h这条命令启动一次温度转换而无需其他数据。温度转换命令被执行,而后 DS1820 保持等待状态。如果总线控制器在这条命令之后跟着发出读时间隙,而 DS1820 又忙于做时间转换的话,DS1820 将在总线上输出“0” ,若温度转换完成,则输出“1” 。如果使用寄生电
17、源,总线控制器必须在发出这条命令后立即起动强上拉,并保持 500ms。Recall E2 B8h这条命令把报警触发器里的值拷回暂存器。这种拷回操作在 DS1820 上电时自动执行,这样器件一上电暂存器里马上就存在有效的数据了。若在这条命令发出之后发出读时间隙,器件会输出温度转换忙的标识:“0”=忙, “1”=完成。Read Power Supply B4h若把这条命令发给 DS1820 后发出读时间隙,器件会返回它的电源模式:“0”=寄生电源, “1”=外部电源。 时序主机使用时间隙(time slots)来读写 DSl820 的数据位和写命令字的位。- 9 -(1)初始化时序见下图主机总线
18、t0 时刻发送一复位脉冲(最短为 480us 的低电平信号) 接着在 t1 时刻释放总线并进入接收状态 DS1820 在检测到总线的上升沿之后等待 15-60us 接着 DS1820 在 t2 时刻发出存在脉冲(低电平持续 60-240 us) 如图中虚线所示t0400 960s15 60s480 s60 240 st1 t2 t3 t4(2)写时间隙当主机总线 t0 时刻从高拉至低电平时就产生写时间隙见下图 1,下图 2 从 t0 时刻开始 15us 之内应将所需写的位送到总线上 DS1820 在 t 后 15-60us 间对总线采样若低电平写入的位是 0 见下图 2,若高电平写入的位是 1
19、 见图 2。连续写 2 位间的间隙应大于 1ust0 t115 60s60 s151 s图 1 写 0 时序 图 2 写 1 时序60 s151 s15 60st0 t1(3)读时间隙见下图主机总线 t0 时刻从高拉至低电平时总线只须保持低电平1us 之后在 t1 时刻将总线拉高产生读时间隙读时间隙在 t1 时刻后t2 时刻前有效 t2 距 t0 为 15us 也就是说 t2 时刻前主机必须完成读位并在 t0 后的 60us120us 内释放总线。主机起作用DS18B20 起作用上拉电阻起作用t0 t1 t2 t315 s60 1 s- 10 -三、硬件电路设计采用 Altium Designer 6.0 设计,先画原理图,检查网络标号,生成 PCB,适当调整元件位置,并进行布线(可手工也可自动布线,推荐手工布线) ,对每个元件要针对实际元件选择封装连线要尽量做到布交叉,不可避免的交叉处用飞线代替。具体电路、元件布局如下图:PCB 板覆铜面电路如下图: