• 实验目的
•了解 DS1820数字温度传感器特性 •掌握单片机基本功能的运用、简单接口电路如键盘、 LED显示电路或LCD显示电路设计及其相应驱动软件的编制软、硬件系统的调试
• 实验任务
设计一个具有基于DS1820数字温度传感器的温度检测及显示的系统。要求系统具有以下功能: • 两路温度检测; • 具有显示功能; • 具有用户输入功能; • 可通过输入补偿温度设定校准;
• 实验原理
原理简述:数字温度传感器DS1820把温度信息转换为数字格式;通过“1-线协议”,单片机获取指定传感器的数字温度信息,并显示到显示设备上。通过键盘,单片机可根据程序指令实现更灵活的功能,如单点检测、轮转检测、越限检测等。基于DS1820数字温度传感器的温度检测及显示的系统原理图如图1
|
图 1 基于DS1820的温度检测系统框图 |
• 硬件设计
电路设计--单片机基本系统电路:
|
图 2 单片机基本系统电路原理图 |
电路说明: 综合考虑系统使用到的单片机内部存储资源、系统处理信号的种类、处理数据的速度、系统的 I/O口开销,以及系统的可扩展性能,本系统选用了ATMEL公司的8位低功耗,高性能CMOS单片机,芯片内集成有通用8位中央处理器(兼容标准MCS -51指令系统及80C51引脚结构)和4K/8K Bytes ISP Flash存储单元(可实现在系统编程)。复位电路采用上电复位加按键复位的方式。采用无源晶体提供正弦振荡信号为系统提供时钟,其硬件原理图如图 2所示。 温度检测电路: 由于采用数字传感器,电路不用考虑A/D转换,只需设计指定某个I/O口作为与数字传感器相连,电路原理图如图示。“1-线协议”
电路说明: DS18B20的数字温度输出通过 “ 一线 ” 总线( 1-Wire是被MAXIM公司收购的DALLAS公司新拥有的一种独特的数字信号总线协议,它将独特的 电源线和信号线复合在一起,仅使用一条口线;每个芯片唯一编码,支持联网寻址、零功耗等待等,是所需硬件连线最少的一种总线)这种独特的方式,使多个 DS18B20方便地组建成传感器网络,为整个测量系统的建立和组合提供了更大可能性。 DS18B20可以设置成两种供电方式,即数据总线供电方式和外部供电方式。采取数据总线供电方式可以节省一根导线,但由此带来的缺点是完成温度测量的时间较长;而采取外部供电方式则多用一根导线,但测量速度较快。本设计采用一总线2路温度测量使用外部供电,如图3所示。 键盘控制电路:
电路说明: 为了节约系统硬件开销,设计方案中键盘模块没有采用ZLG7289或者ZLG7290等专用的键盘控制芯片。使用普通的行列扫描键盘的优点是没有更多的外围电路,缺点是如果软件调试不当可能引起按键连击,为系统的运行带来不稳定。系统使用键盘电路为四行四列16个按键的行列扫描式键盘,其电路原理图如图4所示。 从图中的硬件连接看来,键盘接口并没有增加任何其他的附加驱动电路,而是直接和单片机的引脚相连。操作时直接用程序设置单片机相应的端口驱动按键。 显示电路:
电路说明: 采用四位共阴极动态LED显示单元。LED动态显示的基本做法在于分时轮流选通数码管的公共端,使得各数码管轮流导通,在选通相应LED后,即在显示字段上得到显示的字型码。这种方式不但能够提高数码管的发光效率,而且由于各个数码管的字段线是并联使用的,从而大大简化了硬件线路。 动态扫描显示接口是单片机系统中应用最为广泛的一种显示方式。其接口电路是把所有显示器的 8个笔画段a~dp同名端并联在一起,而每一个显示器的公共极COM是各自独立地受I/O控制的。MPU向字段输出口送出字型码时,所有显示器由于同名端并联连接收到相同的字型码,但究竟是哪个显示器亮,则取决于COM端,而这一端是通过MPU对I/O编程控制的,所以就可以自行决定何时那一位显示器被点亮了。这儿所说的动态就是在基于COM端选择,可编程的基础上,采用分时的方法轮流控制各个显示器的COM端,使各个显示器轮流点亮。 在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的 (约1ms),由于人眼的视觉暂留现象及发光二极管的速度足够快,给人的视觉误差就是一组稳定的显示数据,如果做的足够好是不会有闪烁感。 与液晶显示器相比,动态 LED显示单元具有软件编写简单的优点。但是其功耗比LCD显示大,为了达到最佳的显示效果,硬件连接必须考虑段和位驱动的电路的设计;其次LED在显示刷新率,显示稳定性方面也不及LCD显示。 在如图 5的本设计方案中,使用的是四位共阴极LED显示器。典型的硬件设计是使用74HC245提供段a~dp(图中为PB1~PB8)的驱动,74LS139提供位COM1~COM4(图中为LED1~LED4)的驱动。 使用双向总线驱动器 74HC245作为段驱动,由于HC电路输出电阻较大,外部可直接驱动而不需要限流电阻。位驱动使用2~4译码器,具有四个OC门输出,输出低电平有效,直接用来驱动四位公共阴极COM1~COM4。
• 软件设计
1).软件设计工具及调试环境 系统软件采用 C语言开发,与汇编相比,使用C语言开发单片机软件系统,具有程序的可读性、易维护性和可移植性好,对硬件的控制能力强等特点。现代单片机集成大容量的程序存储器一定程度上解决了部分C编译器机器语言生成代码效率低的缺点,解决代码效率问题最重要的还是得靠编译器性能得不断提高。 KeilC51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统。 KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,通过查看编译后生成的汇编代码,我们就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。C51中使用C语言编程与汇编语言编程相比,具有以下的优势。汇编语言虽然有执行效率高的优点,但其可移植性和可读性差,以及本身就是一种编程效率低下的低级语言,这些都使它的编程和维护极不方便,从而导致整个系统的可靠性也较差。而使用C语言进行单片机应用系统的开发,有着汇编语言不可比拟的优势。 当前较好的C语言编译系统的编译效率已经基本达到中高级程序开发人员的水平,尤其是用于开发较为复杂的单片机应用系统时更具优势。 2).主程序控制流程 在软件的设计过程中,为了进一步提高软件的透明度,作者将系统的一些功能菜单写成子程序的形式供主程序(操作系统)调用。此程序中主要包括系统开始状态等待,系统工作模式选择,多通道工作模式操作,单通道工作模式操作,通过键盘输入 -9.99~+9.99之间的误差数据,通过键盘查询和重置各通道的误差量。 本文中详细给出了操作子程序中部分功能模块的流程图,这样有利于对系统工作的了解。 图6给出了系统开始等待程序的流程图,图7中给出了系统工作模式选择流程图,图8中给出了系统的主函数流程图。
3).温度检测流程 DS18B20子程序是结合它的用户使用资料编写,主要完成的是初始化DS18B20,从DS18B20中读出一个字节的数据,向DS18B20中写入一个字节的数据,配置DS18B20包括警报温度的上限和下限、温度转换的精度,读出Scrachpad存储器中的九个字节的数据,读出Rom中的64位Code值,对读出的Scrachpad数据进行CRC校验,然后根据读出的数据得到测量出的十进制温度值。从DS18B20中读出九个字节数据的流程图如图9所示。
DS18B20数据的CRC校验。为了解决单总线串行传输数据可能引起的错误,DS18B20内部具有产生CRC校验码电路,这样程序员可以通过对读出的数据进行CRC校验码,并用这个校验码和获得的数据的最后一个字节比较,若两者相同则证明数据传送没有错误,从而验证通信过程中数据传输的正确性,使采集温度信号的可靠性得到保证。 本系统中 CRC校验在程序中是通过查表来实现。CRC校验数据表保存在程序代码中的一个一维数组中。 CRC检验的求法。M为一个k位长的信息帧。P为n+1位预先确定的用来生成校验码的二进制序列其最高位和最低位必须为1,DS18B20中使用的序列为:P = 1 0011 0001。F为n位FCS,即校验码序列。T为k+n位被传输的帧。因为F是接在M信息帧之后的,因此T=M · 2 n (2 n 为2的n次方)中,M · 2 n 相当于M左移n位,后面添n个零。设M · 2 n 除以P的商和余数分别是Q和R,则有M · 2 n =P · Q+R即M · 2 n /P=Q+R/P若设T=M · 2 n +R,则T定能被整除。因为按模2的加减运算相当于异或运算,故有T/P=(M · 2 n +R)/P=(M · 2 n )/P+R/P =Q+R/P+R/P=Q这样一来,校验码序列F就是M · 2 n 除以P的余数R。通过计算可以得到 256个用于CRC检验的数据。 4).键盘控制 键盘处理子程序主要完成的是通过特定的设置按键端口的状态,并对端口状态进行检测,然后为按键设置特定的值,为主程序提供执行判决。需考虑多键按下和去抖动的问题。图 10给出了键盘扫描的程序流程图。
5).显示控制: 系统硬件选择的是四段共阴极 LED动态显示,LED显示子程序主要是完成对设定的LED段,并通过查七段码表,使它显示制定的图样。图11中描述的是通过选定一段数码管,显示数据的程序流程图。
6).数据处理 完成数据格式的转换、保存;设置误差值的补偿等数据操作。根据不同的应用要求定制,在此不作强制定义。
• 思考题
1、LED动态显示时显示的亮度与什么物理量有关? 2、显示刷新率(单位时间内显示数据改变的次数)和显示稳定性(闪烁感越小)之间的关系? 3、通过怎样的方法解决显示刷新率和显示稳定性之间的关系? 4、你有什么好的硬件方案解决LED显示的驱动(增加流过LED段的电流)问题,请给出电路图? 5、LCD显示和动态LED显示的区别?
6、在单片机的RAM中,30H单元存放着一个无符号类型数据,请你通过编程得到这个数各位上的数字?如果是一个有符号数呢?如果是一个压缩BCD编码的数呢?
7、如果你使用的单片机系统没有在线编程调试器(有程序烧写器),你有什么样的办法在软硬件联调时,以最快的速度找出问题出在那个地方?
8、如果单片机的GPIO口线在硬件连接时已经连接到高电平或者低电平,在进行软件编程时,你可以把这个口线用软件进行置低或者置高吗?
9、请你说说单片机和PC机的相似和差别,并就工业运用中单片机和PC机相比存在那些优势和不足,并就这个谈谈单片机的生命力在哪儿?
10、请结合DS18B20的用户资料,和相关的设计报告,说说单总线的通信协议?
|