1、温度采集仪设计如图1.1所示。图1.1 图温度采集仪设计2.2 各模块设计方案本设计是一个基于单片机的温度采集仪,利用单片机的功能强大且体积小、价格低、抗干扰性好等特点,根据需要完成的功能需要在本设计中实现温度的采集、显示、上下限报警温度值设定、报警和与PC机的串行通信等功能。本设计中主要分硬件与软件的设计,硬件包括:主控模块 、温度传感模块、显示模块、按键模块、报警模块、通信模块等,软件包括:温度采集、按键与报警、显示、PC机上的温度界面等。(1)主控模块:可以选用STC89C系列的单片机,这里采用的STC89C52单片机,价格便宜,使用方便,STC89C52的片内RAM已能满足存放要求。(
2、2)温度传感模块:由于本设计中单片机除了要完成数据采集、处理、控制和显示任务外,还要完成按键值的采集、处理。如果用常规的数字加模拟电路实现就会相对困难一些。本设计选用的数字式集成温度传感器DS18B20。DS18B20是DALLAS半导体公司(现属MAXIM公司)设计生产的单总线数字温度传感器,其测量温度范围为55125,在-10+85时精度为0.5。这个传感器最大的特点就是能够从一根总线直接输出二进制的温度信号,不需要A/D转换和信号放大。这样的选择使得整个电路的硬件设计更为简化,节省了单片机的资源。(3)显示模块:可以使用数码管或者液晶显示,两者皆可。在本设计中,主要使用液晶,焊接简单且程
3、序调用方便。(4)按键模块:本设计采用三个按键分别用来设定上限、下限温度。(5)报警模块:就是当设定的温度在门限温度之外,就会报警,蜂鸣器发出响声。(6)通信模块:RS-232电平与单片机TTL电平之间的转换方式,可以使用分立元件焊接而成,也可以直接使用集成芯片MAX232芯片。从电路使用方便的角度来看直接采用集成芯片,适应性更强,加之其价格适中,硬件接口简单。 第3章 系统硬件电路设计3.1 单片机STC89C52简介和最小系统3.1.1 STC89C52单片机简介本设计采用的是STC公司的STC89C52单片机。其特性如下:(1)工作频率:080MHz;(2)3个标准16位定时/计数器;(
4、3)可编程I/O口线32条,中断源5个;(4)8K字节快闪ROM,128字节RAM;(5)工作电压:35V;(6)40引脚,DIP封装;STC89C52引脚图如图1.2所示。图1.2 STC89C52引脚图3.1.2 STC89C52单片机最小系统最小系统包括单片机的电源、时钟电路和复位电路。1.时钟电路 STC89C52单片允许的时钟频率的典型值12MHz或11.0592MHz,也可以是6MHz。本设计要使用串行通信,所以应采用11.0592MHz。接到晶振两端的瓷片电容作用是使振荡器起振和对f 微调补偿,典型值为30PF,本设计中选用30PF瓷片电容。当单片机加电以后延迟约10ms的时间振
5、荡器产生时钟,不受软件控制(XTAL2输出幅度为3V左右的正弦波)。单片机时钟电路如图1.3所示。图1.3 单片机时钟电路2.复位电路 计算机在启动运行时都需要复位,使中央处理器CPU和系统中的其它部件都处于一个确定的初始状态,并从这个状态开始工作。单片机的复位引脚是RST,当振荡器起振后,该引脚上出现2个周期的高电平,是器件复位,只要RST保持高电平,单片机保持复位状态。单片机复位方式有二种:上电复位(如图1.4所示)、人工复位(如图1.5所示)。本设计中两种方法都采用。 图1.4 上电复位电路 图1.5 上电复位和开关复位注:RST与Vss之间的那个电阻在NMOS型单片机中需要接,但是在C
6、MOS型单片机中不接,本设计电路中就可以不接。3.2 数字温度传感模块设计3.2.1 数字温度传感器DS18B20简介 美国Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。全部传感元件及转换电路集成在形如一只三极管的集成电路内。1. DS18B20的主要特性 (1)适应电压范围更宽,电压范围:3.0V5.5V,在寄生电源方式下可由数据线供电。(2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。(3)DS18B20在使用中不需要任何外
7、围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。(4)温度范围55125,在-10+85时精度为(5)可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温。(6)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。(7)测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。(8)负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。2. DS18B20的外形、内部结构及引脚定义 (1)DS18
8、B20的外形及管脚排列如图1.6所示。a. DQ为数字信号输入/输出端;b. GND为地线;c. VDD为外界供电电源输入端(在寄生电源接线方式时接地)。图1.6 DS18B20的外形及管脚排列 (2)DS18B20的内部结构图如图1.7所示。图1.7 DS18B20的内部结构图3. DS18B20与单片机连接电路 DS18B20与单片机连接电路如图1.8所示。图1.8 DS18B20与单片机连接电路3.3 显示模块设计显示模块部分主要采用LCD1602液晶显示。主要实现的功能是通过单片机读取温度传感器转换的温度值,再将其所读取的十六进制数转换成十制数,通过静态显示,最后在LCD显示出温度数值
9、。本设计液晶显示器选用LCD1602,将单片机输出的数据进行动态显示。将采集的温度以直观化的形象显示,与能显示作报警温度的上下范围,这样方便与实际温度进行比较,实用价值更高。3.3.1 LCD1602液晶显示器的工作原理 字符型液晶显示模块是专门用于显示字母、数字、符号等的点阵式的LCD,目前常用的是16*1、16*2,20*2和40*2行等。本次设计中采用的1602字符型液晶显示器,一行是用来实测温度,另一行是用来显示报警温度的上下限。1. 1602的引脚功能 1602采用标准14脚(无背光)或16脚(带背光)接口,各引脚功能如表1-1所示。表1-1 1602引脚功能介绍编号符号引脚说明1V
10、SS电源地9D2数据2VDD电源正极10D33VL液晶显示偏压11D44RS数据/命令选择12D55R/W读/写选择13D66E使能信号14D77D015BLA背光源正极8D116BLK背光源负极(1)VL为液晶显示器对比度调整端, 接正电源时对比度最弱, 接地时对比度最强。若对比度过高会产生“ 鬼影”, 使用时可以通过一只10K电阻来调整对比度。(2)RS为寄存器选择端, RS为高电平时选择数据寄存器, 为低电平时选择指令寄存器。 R/W为读写信号线, 为高电平时进行读操作, 为低电平时为写操作。当R/W和RS同为低电平时可以写人指令或者显示地址;当RS为低电平、R/W为高电平时,可以读忙信
11、号。当RS为高电平、R/W为低电平时,可以读写数据。(3)E为使能端, 当E端由高电平跳变成低电平时, 液晶模块执行命令。(4)D0D7为8位双向数据线。3.3.2 LCD1602液晶显示器的设计本设计中RS,R/W,E/N分别接单片机的P2.5,P2.6,P2.7口,8个数据口接单片机的P0口,如图1.9所示。图1.9 DS18B20与单片机连接电路3.4 报警模块设计报警模块由一个自我震荡型的蜂鸣器(只要在蜂鸣器两端加上超过3 V的电压,蜂鸣器就会一直响)组成,在这次设计中蜂鸣器是通过三极管放大信号在所要求的温度达到一定的上界或者下界时(在文中设置的初始上界温度10,下界温度为20),通过
12、三个按钮可改变上下界温度的范围,一个按钮是用来加,一个按钮是用来减,最后一个按钮是用来确定。只要温度不在其设置范围内,蜂鸣器就会发出响声。3.4.1 蜂鸣器简介1. 蜂鸣器的工作原理 在本设计中主要是用于超过规定温度的范围进行报警。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。蜂鸣器在电路中用字母“H”或“HA”。压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5V15V直流工作电压),多谐振荡器起振,输出1.52.5KHz的音频信号,阻抗匹配器推动压电蜂鸣片发声。在本设计
13、中采用的是压电式蜂鸣器。2. 蜂鸣器连接电路 当P3.2输出高电平时,三极管截止,没有电流流过线圈,蜂鸣器不发声;当P3.2输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,可以通过程序控制P3.2脚的电平来使蜂鸣器发出声音和关闭。蜂鸣器与单片机连接电路如图2.0所示。图2.0 蜂鸣器与单片机连接电路 3.5 温度上下限值电路设计在本设计中主要选用了单片机的P1.0,P1.1,P1.2口进行上限温度、下限温度及温度的确定。本设计中的温度上下值按键控制电路如图2.1所示。图2.1 温度上下值按键控制电路3.6 串口输出电路的设计串口输出电路部分主要是利用MAX232实现RS23
14、2的串行协议的电平转换,以保证采样参数的设置和温度向PC机正常发送。主要实现的功能是利用STC89C52的UART串行通信口和上位PC机实现串行通信。3.6.1 波特率的计算 单片机或计算机在串口通信时的速率用波特率表示,它定义为每秒传输二进制代码的位数,即1位秒表1位/秒,单位是bps(位/秒)。如每秒传送240个字符,而每个字符格式包含10位(1个起始位、1个停止位、8个数据位),这是的波特率为10位*240个/秒=2400bps. 如数据传送的波特率为1200 波特,采用N.8.1 帧格式(10 位),则每秒传送字节为120 个,而字节中每一位传送时间即为波特率的倒数:T=I/1200=
15、0.833ms。同样,如数据传送的波特率为9600 波特,则字节中每一位传送时间为T=1/9600=0.104 ms。根据数据传送的波特率即字节中每一位的传送时间,我们便可用普通I/O 口来模拟实现串行通信的时序。3.6.2 MAX232芯片实现串行通信的电平转换 MAX232芯片引脚如图2.2所示。图2.2 MAX232芯片引脚图MAX232的相关参数如表1-2所示。表1-2 MAX232引脚功能介绍脚号引脚名称引脚功能描述C1+泵电容1正极R2OUT第二组TTL/CMOS电平输出V+正电源滤波T2IN第二组TTL/CMOS电平输入C1-泵电容1负极T1IN第一组TTL/CMOS电平输入C2
16、+泵电容2正极R1OUT第一组TTL/CMOS电平输出C2-泵电容2负极R1IN第一组RS-232电平输入V-负电源滤波T1OUT第一组RS-232电平输出T2OUT第二组RS-232电平输出GND地R2IN第二组RS-232电平输入VCC电源+5V 第4章 系统软件电路设计本设计单片机软件采用C51语言编写,C51语言是ANSI C的扩展集,其语法结构、关键字等与ANSIC绝大部分是相同的。系统程序包括主程序、读出温度子程序、温度转换命令子程序、计算温度子程序、显示程序、报警程序、PC机串行通信程序等。在编写PC机与单片机进行串行通信时采用VB语言编写程序。从有利于实现较复杂的算法(显示效果
17、处理)和有利于程序结构化考虑,程序适宜采用C51语言编写。4.1 LCD液晶显示软件设计 液晶显示主要实现的功能就是对实测温度,报警温度上下限值进行显示。液晶显示子程序流程图如图2.3所示。图2.3 液晶显示子程序流程图液晶显示子程序void write_com(uchar com) /液晶写命令程序 / while(BusyTest()=1); /如果忙就等待 rs=0; /等0输入命令 rw=0; en=0; /液晶使能信号初始化 P0=com; /把com参数,液晶的命令值送到P0口 en=1; /使能信号,0到1表示上升沿打开可以写命令数据到液晶里 delay(100); /延时,按照
18、液晶的时序图的要求 /使能信号回复 void write_data(uchar date) /液晶写数据程序 rs=1; /等1表示输入数据 P0=date; /把date参数,液晶的数据送到P0口 void init() /液晶初始化程序 en=0; write_com(0x38); /设置16X2显示,5X7点阵,8位数据口 write_com(0x0c); /设置开显示,不显示光标 write_com(0x06); /写一个字符后地址指针加1 write_com(0x01); /显示清0,数据指针清0 void writeString(uchar *str, uchar length)
19、uchar i; for(i = 0; i length; i+) write_data(stri);4.2 主控模块软件设计主程序的功能是负责温度的实时显示、读出并处理DS18B20测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其主程序流程图如图2.4所示。图2.4 主程序流程图/获取当前温度值int getTmpValue() unsigned int tmpvalue; int value; /存放温度数值 float t; unsigned char low, high; sendReadCmd(); /连续读取两个字节数据 low = readByte
20、(); high = readByte(); /将高低两个字节合成一个整形变量 /计算机中对于负数是利用补码来表示的 /若是负值, 读取出来的数值是用补码表示的, 可直接赋值给int型的value tmpvalue = high; tmpvalue 0 ? 0.5 : -0.5); /大于0加0.5, 小于0减0.5 return value;4.3 温度采集软件设计1.读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。2.温度转换命令子程序主要是法温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程
21、序延时法等待转换完成。温度转换命令子程序流程图如图2.5所示。图2.5 子程序流程图温度采集仪的子程序/让DS18B20一段相对长时间低电平, 然后一段相对非常短时间高电平, 即可启动 void dsInit() /对于11.0592MHz时钟, unsigned int型的i, 作一个i+操作的时间大于us unsigned int i; ds = 0; i = 100; /拉低约800us, 符合协议要求的480us以上 while(i0) i-; ds = 1; /产生一个上升沿, 进入等待应答状态 i = 4; void dsWait() while(ds); while(ds); /
22、检测到应答脉冲 while(i 0) i-;/向DS18B20读取一位数据/读一位, 让DS18B20一小周期低电平, 然后两小周期高电平,/之后DS18B20则会输出持续一段时间的一位数据bit readBit() bit b; i+; /延时约8us, 符合协议要求至少保持1us /延时约16us, 符合协议要求的至少延时15us以上 b = ds; i = 8; /延时约64us, 符合读时隙不低于60us要求 return b;/读取一字节数据, 通过调用readBit()来实现unsigned char readByte() unsigned char j, dat; dat = 0
23、; for(i=0; i8; j = readBit(); /最先读出的是最低位数据 dat = (j 1); return dat;/向DS18B20写入一字节数据void writeByte(unsigned char dat) unsigned char j; for(j = 0; j = 1; /写1, 将DQ拉低15us后, 在15us60us内将DQ拉高, 即完成写1 if(b) /拉低约16us, 符号要求1560us内 /延时约64us, 符合写时隙不低于60us要求 else /写0, 将DQ拉低60us120us /拉低约64us, 符号要求 /整个写0时隙过程已经超过60us, 这里就不用像写
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1