毕业设计(论文)基于单片机简易温度闭环控制系统设计.doc_第1页
毕业设计(论文)基于单片机简易温度闭环控制系统设计.doc_第2页
毕业设计(论文)基于单片机简易温度闭环控制系统设计.doc_第3页
毕业设计(论文)基于单片机简易温度闭环控制系统设计.doc_第4页
毕业设计(论文)基于单片机简易温度闭环控制系统设计.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘 要2第1章 绪论3第2章 系统总体方案42.1简易温度控制系统的整体设计42.2简易温度控制系统的工作原理5第3章 系统硬件设计53.1 主控芯片介绍53.2 复位电路83.3 时钟电路93.4 直接编码输入键盘电路93.5 显示电路103.6 电平转换电路113.7 a/d转换电路123.8 测温电路13第4章 系统软件设计154.1 主程序模块164.2 lcd显示模块174.3 tlc1543模数转换模块20第5章温度闭环控制系统调试235.1 温度闭环控制系统静态调试235.2温度闭环控制系统动态调试235.3 温度控制系统调试情况23结论25参考文献26摘 要 设计了一种基于sst89e516rd单片机及热敏电阻ttc101的温度闭环控制系统。单片机由于其比较高的性价比,在工业控制中的应用非常广泛,而温度的检测与控制是工业生产过程中比较典型的应用之一,随着传感器在生产和生活中的更加广泛的应用,利用温度传感器实现对温度的检测与控制得到更快的开发。该系统硬件方面主要分为测温电路、模数转换电路以及液晶显示电路三部分。利用热敏电阻和运放构成测温电路,通过tlc1543进行模数转换,最后用lcm1602b作为液晶屏进行温度显示。软件方面运用c语言进行编程,程序分为主程序、lcd1602显示程序、tlc1543模数转换程序。整个设计过程简单,使用方便,具有一定的开发价值。关键词: sst89e516rd;温度测量;液晶显示29第1章 绪论单片机技术作为计算机技术的一个重要分支,广泛应用于工业控制、智能化仪器仪表、家用电器,甚至电子玩具等各个领域,它具有体积小、功能多、价格低廉、使用方便、系统设计灵活等优点,因此具有非常大的应用空间。而作为信息获取的重要手段之一,传感器是将电子系统无法处理的外界物理量或者化学量转换为电信号的主要器件。对于测量与控制系统而言,传感器是构成对外界物理量或者化学量加以检测的前端器件。传感器是实现信息化的基础技术之一,在科学技术领域占有十分重要的地位。目前传感器已经广泛应用于国防、环保、工业、农业、交通运输、日常生活等所有领域,并伴随着现代科学技术的进步而不断发展。本设计介绍了一种基于sst89e516rd单片机及热敏电阻ttc101的温度闭环控制系统,具有读数方便,测温范围广等优点,其温度通过液晶屏采用十进制数字显示,主要用于测量电路板温度。测温传感器使用热敏电阻ttc101,a/d转换电路采用tlc1543,用lcm1602b实现温度的显示。第2章 系统总体方案2.1简易温度控制系统的整体设计温度控制系统是由硬件和软件两部分组成。硬件部分主要由单片机sst89e516rd,负温度系数热敏电阻ttc101,tlc1543模数转换电路,lcm1602b液晶显示器,按键电路,串行通信电路组成。其硬件总体结构图如图2-1所示。热敏电阻(ttc101)电压放大电路a/d转换sst89e516rd串行通信接口液晶显示器(lcm1602b)按键电路图2-1温度传感器结构图本设计主要由单片机、温度采集模块、温度显示模块和按键设定模块组成。本系统能实现温度实时测量,同时显示在1602液晶显示器上;能实现温度的设定;通过串行通信电路,将温度采集数据传送到pc机。2.2简易温度控制系统的工作原理热敏电阻和电压放大电路组成温度采集模块,它通过热敏电阻感应出电路的温度,然后由运放电路将热敏电阻两端的电压进行放大,放大后的电压模拟信号经模数转换后把十位二进制信号输入单片机,然后由单片机进行处理,最后送入1602液晶屏进行显示。同时由单片机控制温度的设定。第3章 系统硬件设计3.1 主控芯片介绍本设计选用的主芯片为sst89e516rd,是sst公司生产的超高性价比、超高灵活性的一款单片机内核芯片,其主要特性如下: (1)兼容80c51系列,内置超级flash存储器。 (2)工作电压,5v工作电压时频率范围为040mhz. (3)与现行的80c52系列单片机硬件pin-to-pin完全兼容,软件、开发工具也完全兼容。 (4)1k*8的内部ram,可放心使用c语言编程。(5)两块超级flash eeprom,分别为64k*8的基本存储块和8k*8的二级存储块(扇区大小为128字节)。 (6)独立的块加密。 (7)iap下的并行操作。 (8)块地址重映射。 (9)最大片外程序/数据地址空间为64k*8(也可以通过i/o口进行切换,实现超64k扩展)。 (10)三个搞电流驱动引脚(每个16ma,可直接驱动led)。(11)三个16位定时器/计数器。(12)全双工增强型uart,具有帧错误检测及自动地址识别。(13)9个中断源,4个中断优先级。(14)看门狗定时器。且看门狗溢出时间可调(15)可编程计数阵列(pca),标准为每个机器周期12个时钟周期,器件可选择在每个机器周期为6个时钟周期上加倍,掉电检测(brow-out缺省为产生复位,也可以设置成产生中断)。(16)降低emi模式(通过auxr sfr部允许ale输出时钟)。(17)四个8位i/o口(32根输入输出线)。(18)双dptr指针(查表,寻址更方便)。(19)spi串行接口。(20)兼容ttl和cmos(21)扩展省电模式。包括以下三种:idle模式、由外部中断唤醒的省电模式、standly模式。(22)温度范围:商业级为070摄氏度,工业级为-40+85摄氏度。 sst89e516rd的芯片封装有dip和plcc两种形式,在本设计中采用的是dip双列直插式,其引脚排列图如图3-1所示 图3-1 sst89e516rd芯片引脚排列其引脚功能如下:port 0:p0是一个漏极开路的8位双向i/o口。作为输出口,每位能驱动多个ls型ttl负载。p0浮空,锁存器为“1”,可作为高阻抗输入。在访问外部存储器时,p0口作为低8位地址和数据总线时分复用。在这种应用中,当转为高电平是,它用了强大的内部上拉。在外部主模式编程状态下,p0接收代码字节,在外部主模式校验过程中输出代码字节。在程序校验过程中需要外部上拉。port 1:p1是一个带内部上拉电阻的8位准双向i/o口。每位能驱动ls型ttl负载。当p1口作为输入口用时,向内部锁存器写入“1”,p1引脚被内部上拉电阻拉为高电平。由于内部上拉电阻,被拉低的p1引脚能向外部提供电流。p15,6,7有16ma的高电流驱动能力。当外部主模式在编程和测试时,p1也接收低8位地址。p1口的每个单独的引脚除了可作为i/o引脚外,还具有第二i/o功能,但是在本设计中,仅作为一般i/o引脚使用。port 2: p2口是一个带内部上拉电阻的8位准双向i/o端口,当被作为输入时,向它写入“1”,p2引脚被内部上拉电阻拉为高电平。作为输入使用时,被内部上拉电阻下拉为低电平的p2会产生电流。当从片外程序存储器取数和访问片外数据存储器时,p2能提供高8位地址。在此应用中,当转为时,它利用了功能极强的内部上拉电阻。当外部主模式在编程和测试时,它还接收控制信号和部分高8位地址。port 3: p3口是一个带内部上拉电阻的8位准双向i/o端口。p3的输出缓冲功能驱动多个ls型ttl。当被作为输入时,向它写入“1”,p3引脚被内不上啦电阻拉为高电平,作为输入使用时,被外部拉为低,能驱动电流。当外部主机在编程和校验时,它还能接收控制信号和部分高8位地址。p3口的每个单独的引脚除了可作为i/o引脚外,还具有第二i/o功能,在此设计中使用的是p3口的第二输入/输出功能。具体如下p3.0:rxd,串行数据接收;p3.1:txd,串行数据发送;p3.2:int0,外部中断0输入;p3.3: int1,外部中断1输入;p3.4:t0,定时/计数器0的外部计数输入;p3.5:t1,定时/计数器1的外部计数输入;p3.6:wr,外部数据存储器写选通,低电平有效;p3.6:rd,外部数据存储器读选通,低电平有效;rst:复位输入,当振荡器复位器件时,要保持rst脚两个机器周期的高电平时间。ale/prog:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在flash编程期间,此引脚用于输入编程脉冲。在平时,ale端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ale脉冲。如想禁止ale的输出可在sfr8eh地址上置0。此时, ale只有在执行movx,movc指令是ale才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ale禁止,置位无效。psen:低电平有效,外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次psen有效。但在访问外部数据存储器时,这两次有效的psen信号将不出现。:当ea保持低电平时,则在此期间外部程序存储器(0000h-ffffh),不管是否有内部程序存储器。注意加密方式1时,ea将内部锁定为reset;当ea端保持高电平时,此间内部程序存储器。在flash编程期间,此引脚也用于施加12v编程电源(vpp)。xtal1:反向振荡放大器的输入及内部时钟工作电路的输入。xtal2:来自反向振荡器的输出。vdd:供电电压。vss:接地。sst89e516rd的程序和数据存储空间分开独立寻址。程序存储器包括两个片内flash存储块。基本flash存储块(block 0)占用64k字节,二级flash存储块(block 1)占用 8k字节。因为整个内部程序空间被限制为64k字节,sfcf1:0位用于控制存储块的低8k之间的切换。当sfcf1:0为00时,由于block 1覆盖了程序空间的低8k即0000h-1fffh的地址空间,所以当pc下降到0000h-1fffh时,指令将从block 1读取而不是从block 0读取。在0000h-1fffh外,block 0可用。block 0被组织成512个扇区,每个扇区有128个字节组成。程序存储块切换是在复位后根据sc0位的状态来初始化的。sc0是根据外部主模式或iap命令来编程的。一旦退出复位,sfcf0能根据设计需要通过编程动态改变。改变sfcf0将不会改变sc0。在动态改变sfcf0时,必须小心谨慎,因为这将导致不同的物理存储器被映射到逻辑程序地址空间。使用者必须避免在空间0000h-1fffh之间执行块切换命令。sst89e516rd具有1k片内数据存储器, 64k的外部数据存储器。1k的片内数据存储器包括:1ram 的低128 字节(00h7fh)通过直接和间接寻址访问。 2ram 的高128 字节(80hffh)只能通过直接寻址访问。 3特殊功能寄存器(sfrs,80hffh)只能通过直接寻址访问。4768 字节(00h2ffh)的内部扩展ram通过清零 extram 和外部传送指令(movx)来实现间接寻址。单片机sst89e516rd的大部分特性都是由特殊功能寄存器的相应位来控制的。本设计中主要用到的是与中断有关的寄存器。3.2 复位电路为确保两点间温度控制系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。一般电路正常工作需要供电电源为5v5%,即4.755.25v。复位是单片机的初始化操作,其目的是使cpu及各专用寄存器处于一个确定的初始状态。如:把pc的内容初始化为0000h,使单片机从0000h单元开始执行程序。除了进入系统的正常初始化之外,当单片机系统在运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需要复位以使其恢复正常工作状态。rst端的外部复位电路有两种操作方式:上电自动复位和按键手动复位。按键手动复位有电平方式和脉冲方式两种,本系统设计采用脉冲式按键手动复位,如图3-2所示。 图3-2 复位电路按键手动复位电路中,未按下复位按钮时,5v电源对电容进行充电,芯片的reset为低电平;当按下按钮时,电容进行放电,放电结束后,芯片的reset引脚变成高电平;松开按键时,电容再次进行充电,使得芯片复位引脚缓慢变为低电平。3.3 时钟电路单片机的时钟信号用来提供单片机内各种微操作的时间基准,时钟电路用于产生单片机工作所需要的时钟信号。单片机的时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用内部振荡或者外部振荡这两种电路形式得到:。本设计采用内部振荡方式,如图3-3所示。 图3-3 时钟振荡电路引脚xtall和xtal2分别是系统时钟信号的输入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式。因为选用的是石英晶体振荡器,所以电容选择电容值为22pf的无极性电容。3.4 直接编码输入键盘电路通过检测单片机i/o口引脚电平状态来判别有无按键输入就构成直接输入键盘,如图3-4所示。之所以采用这种键盘电路形式,是因为在此设计中只有少量需要控制的系统。而直接编码输入键盘的接口电路简单,采用它可以简化电路。 图3-4 键盘电路在本设计中,主芯片的p1口的四个引脚p1.0,p1.1,p1.2,p1.3分别与四个按键k1,k2,k3,k4相连接,且分别外接了10k的上拉电阻。四个按键在设计中作为设定闭环控制系统的温度时的控制按键,由于本次设计只需要通过按键进行数字加减,故实际应用是只用到k1,k2两个按键,按键k1作为加的按键,k2作为减的按键。3.5 显示电路在单片机应用系统中,对于系统的运行状态和运行结果,通常都需要直观交互显示出来。单片机应用系统中最常用的显示器有led和lcd两种。这两种显示器都可以显示数字、字符及系统的状态,本设计采用的是更为环保的lcd显示器。字符型液晶显示模块是一种专门用于显示字母,数字,字符等点阵式lcd,目前常用的有16x1,16x2,20x2,40x2等模块,本设计采用的是lcm1602b,即最多可显示1602即32个字符。1602字符型lcd通常有14条引脚线或16条引脚线的lcd,多出来的2条线是背光电源线。该模块也可以只用d4-d7作为四位数据分两次传送,这样的话可以节省cpu的i/o口资源。lcm1602b引脚图如图3-5所示 图3-5 1602引脚图其详细引脚功能如附录1所示。vss,vcc分别接地和5v电源。v0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10k的电位器调整对比度)。rs为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。r/w为读写信号线,高电平时进行读操作,低电平时进行写操作。e(或en)端为使能(enable)端,下降沿使能。db0db7为双向数据总线。bla为背光电源正极,blk为背光电源负极。另外1602内置了ddram和cgrom。ddram就是显示数据ram,用来寄存待显示的代码,共80个字节,其地址和屏幕的对应关系如表3-1 表3-1 ddram地址与显示位置的对应关系显示位置123456740ddram地址第一行00h01h02h03h04h05h06h27hddram地址第二行40h41h42h43h44h45h46h67h就是说想要在lcd1602屏幕的第一行第一列显示一个“a”字,就要向ddram的00h地址写入“a”字的代码41h就行了。但具体的写入是要按lcd模块的指令格式进行的。而41h这一个字符的代码要在屏幕的阵点上显示“a”字,就需要用到lcd模块的固化了的字模存储器,这就是cgrom,1602内置了192个常用字符的字模,存于cgrom中。本设计中1602用来显示当前温度和所设定的温度。其中第一行用来显示当前温度,第二行用来显示想要设定的温度。它与主芯片的连接如图3-6 图3-6 1602与sst89e516rd的连接图 此设计中将1602的rs,r/w,e分别与主芯片的p2.0,p2.1,p2.2相接,则可以通过控制p2口这三个引脚的高低电平来控制1602的状态。而db0-db7与主芯片的p0口相连接,在主芯片对1602进行写入时,db0-db7先作为地址总线进行地址的传送,控制1602的被写入的位置,然后再作为数据线,传送需要显示的数据的相应的字符代码。3.6 电平转换电路当单片机与pc机进行串行通信时,一般都需要一个电平转换电路,因为pc机所采用的是eia电平,与pc机相连的串口rs232也是采用eia电平,即传送数字“1”时,传输线上的电平在-3v-15v之间;传送数字“0”时,传输线上的电平在+3v+15v之间。但是单片机串行口采用正逻辑的ttl电平,其高电平为+5v,低电平为0v。这样就存在ttl电平与eia电平之间的转换问题。通常这个电路都选择专用的rs232接口电平转换集成电路进行设计,如max232、hin232等。max232芯片集成度高,单+5v电源工作,只需要外接四个小容量的电容即可完成两路rs232与ttl电平之间的转换。故在本设计中采用max232与计算机串口rs232相连接,作为电平转换电路。max232有两个接收器和两个发送器,每一个接收器将eia电平转换成5v的ttl电平,每一个发送器将ttl电平转换成eia电平,在本设计中只用到了接收器2和收发器2,其具体电路如图3-7所示 图3-7 电平转换电路其中txd为主芯片sst89e516rd的串行数据发送端,与max232的t2in连接,当主芯片发送出来的ttl电平的数据由t2in进入,经过max232的作用,从t2out输出相应的eia电平的数据,此数据再经过计算机串口rs232到达pc机,从而完成由单片机到pc机的数据传送。而rxd为sst89e516rd的串行数据接收端,与max232的r2out相连,当由pc机发送过来的eia电平的数据由串口rs232的3脚r2in进入max232,在其内部完成由eia到ttl电平的转换,最后由r2out输出相应的ttl电平的数据,将数据送入主芯片sst89e516rd的串行数据接收端rxd那里,从而完成了由pc机到单片机的数据传送。3.7 a/d转换电路由于测温电路所输出的信号为电压模拟信号,而主芯片sst89e516rd本身只能处理二进制或者十六进制的数字信号,因此,要通过sst89e516rd来控制测温系统正常工作,必须先将需要让主芯片进行处理和控制的模拟信号转换为可被主芯片处理的数字信号。因此,在测温电路与主芯片之间,必须增加一个a/d转换的电路来进行模数信号的转换。a/d转换电路种类很多,在选择模数转换器时,主要考虑以下几个技术指标:转换时间、转换频率、误差、分辨率、转换精度、接口形式。目前,较为流行的a/d转换器件有很多都采用串行接口 ,这使得芯片与单片机的硬件连接非常简单,而软件编程相对要复杂些。综合考虑本设计所需a/d转换器的性能要求和价格问题,在本设计中选用了性价比相对较高的tlc1543作为模数转换芯片。该芯片有如下特点:10位精度、11通道、3种内建的自测模式、提供eoc(转换完成)信号等。该芯片与单片机的接口采用串行接口方式,引线很少,与单片机连接简单。其中a0-a10是11路输入,vcc和gnd分别是电源引脚,ref+和ref-分别是参考电源的正负引脚,使用时一般将ref-接到系统的地,达到一点接地的要求,以减少干扰,在本设计中,将ref+设置为电压可调,并通过外接一个三端可调分流基准电压源tl431来设置ref+的电压值。其余的引脚是tlc1543与单片机主芯片的接口,其中cs为片选端,低电平有效,clk是芯片的时钟端,add是地址选择端,dat是数据输出端。本设计中这4根引脚分别接到主芯片的p2.3,p2.4,p2.5,p2.6这四个i/o端。eoc接到p2.7,当它为低电平时,表示一次a/d转换已经完成,cpu可以读取数据了。在程序中cpu通过查询该引脚的状态来了解当前的状态。其在本设计中的具体电路如图3-8所示 图3-8 模数转换电路右边电路中是由tl431加滑动变阻器构成的稳压基准,温漂小,又有相当的负载能力,且输出电压可调,电路简单,且使得ref+的设置更加灵活。而tlc1543的a0脚与测温电路的输出端相连接,测温电路输出的模拟电压信号由a0脚进入tlc1543进行模数转换,转换出的相应的十位二进制数字信号从dat引脚串行输出,由于p2.4与dat引脚相连,故可将输出的数字信号被送入cpu进行处理。3.8 测温电路测量温度所采用的元器件主要是热敏电阻,之所以采用热敏电阻是由于它具有一下几个特点:热敏电阻的主要特点是:(1)灵敏度较高,其电阻温度系数要比金属大10100倍以上;(2)工作温度范围宽,常温器件适用于-55315,高温器件适用温度高于315(目前最高可达到2000),低温器件适用于-27355;(3)体积小;(4)使用方便,电阻值可在0.1100k间任意选择;(5)稳定性好、过载能力强。在本设计中采用ttc101,即负温度系数热敏电阻(ntc)进行温度感应,ntc是指随温度上升电阻呈指数关系减小、具有负温度系数的热敏电阻和材料。热敏电阻的电阻温度特性可近似地用下式表示: ; :温度时的电阻值;:温度时的电阻值;:值,实际上,热敏电阻的b值并非是恒定的,其变化大小因材料构成而异,本设计中的ttc101在25摄氏度下阻值为100欧姆,b值为3200;其中为热力学温度,单位是k,而是摄氏温度,单位是;具体的测温电路如图3-9所示 图3-9 温度闭环控制电路图中r10即为负温度系数热敏电阻ttc101,而r8为15欧姆的加热电阻,测温电路的输入端与主芯片的p1.4口相接,当对p1.4写入0即写入低电平时,测温电路的三极管q1导通,加热电阻r8有电流流过,温度升高,而另一支路中r9、r10中也有电流流过,热敏电阻r10感应到温度的变化,其电阻值相应的发生变化,从而引起其两端电压也发生变化,由于一般传感器感应出来的电量变化都相对较小,不适合直接作为后续电路的输入信号,因此在后面又接上通过运放电路和稳压电路,最终实现了电压的放大和稳定输出。运放电路的放大倍数可以通过滑动变阻器r12来进行调节,不过一般 为了计算方便,将r12调至1k阻值,即使r12与r11电压相同。限流电阻r13的后面接2.5v的稳压二极管,当稳压管两端电压大于2.5v时,输出电压为2.5v;当稳压管两端电压小于2.5v时,输出电压为实际电压值。输出端电压经过a/d转换电路最终送入cpu进行处理。当设定好了温度,需要对测温电路的温度进行调节时,可以通过对主芯片的p1.4进行高低电平操作来控制发热电阻是否有电流流过,从而控制电路温度的升高或者降低。本设计在后期修改了此图,将r9改为120欧姆的电阻,同时将热敏电阻两端的电压直接接入tlc1543中进行模数转换。且将ref+设为+5v。其具体推到公式如下 (1)为热敏电阻温度为阻值将上面这些值带入公式(1)中可得 (2)其中v为a/d转换前的电压即热敏电阻两端的电压;通过推到求的 (3)后面编程时就是用公式(3)来进行温度与电压间的转换的。第4章 系统软件设计整个系统的功能是由硬件电路与软件相结合来实现的,当硬件基本定型的时候软件也基本定下来了,从软件的功能不同,可以分为两大类:一是主程序,它是整个软件的核心,专门用来协调各个执行模块和操作者的联系;二是子程序,它是用来完成各种实质性的工作的,如测量、计算、显示、通讯等。每一个执行软件就是一个小的执行模块,这里将每一个模块一一列出来,并为每个执行模块进行功能定义和接口定义。各执行模块规划好以后,就可以规划监控软件了。首先要根据系统的总体功能选择一种最合适的主程序结构,然后根据实时性的条件,合理安排监控软件和执行软件之间的调度关系。本系统软件设计主要包括主程序以及各个模块程序:温度采集模块、温度显示模块、按键设定模块和通信模块等,以及扩展功能的若干个控制子程序。主程序分别调用这些子程序实现对液晶显示器、a/d转换和pc机通信的操作控制。4.1 主程序模块 主程序主要完成硬件初始化,子程序调用等功能,其具体流程图如图4-1所示开始初始化数据采集并进行a/d转换cpu计算并得到温度值输入值大于设定值进行温度调节程序启动控制系统结束显示当前温度值ny 图4-1主程序流程图在实际编程中,由于实力有限,并未编写温度调节程序,因此在主程序中,也没有pwm调制的程序,而是直接给p1.4口赋值为0,即给p1.4低电平。主程序函数如下#include #include lcd.hsbit p1_4=p14;void main (void) double ad_res, temp; p1_4=0; /使三极管导通,从而使r8发热 init_lcd( ); /初始化 clear_lcd( ); /清屏 display_lcd_string(ad result:); /第一行固定显示ad result gotoxy(2,1); / 光标定位到第二行 display_lcd_string(temp:); / 在第二行固定显示temp while(1) /* 无穷循环 */ ad_res = adcselchannel(0);/ad_res为经过模数转换后的十位二进制数值 gotoxy(1,11); display_lcd_number(ad_res);/显示热敏电阻的两端的模拟电压值 temp = temperature(ad_res);/temp为热敏电阻测得的温度值 gotoxy(2,6); display_lcd_number1(temp);/显示温度值 delay100us(200); delay100us(200); delay100us(200); delay100us(200); delay100us(200); delay100us(200); delay100us(200); delay100us(200); delay100us(200); delay100us(200); delay100us(200); delay100us(200); delay100us(200); delay100us(200); delay100us(200);4.2 lcd显示模块lcd1602的显示是编程中非常重要的一部分,其具体流程图如图4-2所示入口初始化1602延时检测忙信号lcd_busy=0?获得显示ram地址延时写入相应的数据数据显示完毕返回主程序nyny 图4-2 lcd1602液晶显示流程图lcd液晶显示子程序如下 #include #include #include char code int2charlcd=0123456789;void write_lcd_command(unsigned command) /写指令子程序 rw=write; /write为0,向lcd写入指令 rs=command; /command为0,输入指令enable=enable; /enable为1,读取信息p0=command; delay100us(20);enable=disable; /disenable为0,下降沿执行指令rw=1; /从lcd读取信息void write_lcd_data(unsigned lcddata) /写数据子程序rw=write;rs=data; /data为1,输入数据enable=enable; /enable为1,读取信息p0=lcddata;delay100us(20);enable=disable; rw=1;void init_lcd(void) /初始化write_lcd_command(twoline_8bit); / 0x38 write_lcd_command(cursor_off);/ 0x0cwrite_lcd_command(cursor_right); / 0x06void clear_lcd( ) /清屏write_lcd_command(clear);write_lcd_command(cursor_home);void display_lcd_string(char *p) /显示字符串while(*p)write_lcd_data(*p);p+;void display_lcd_number(double number) /显示ad转换前的电压值unsigned char x,y,z;x = (int)(number*5/1024);y = (int)(number*5/1024*10)%10;z = (int)(number*5/1024*100)%10;write_lcd_data(int2charlcdx);display_lcd_string(.);write_lcd_data(int2charlcdy);write_lcd_data(int2charlcdz);void gotoxy(unsigned x,unsigned y) /光标定位子程序if(x=1) write_lcd_command(goto_line_1+y);else write_lcd_command(goto_line_2+y);double temperature(double num) /计算温度值double t,v;v = num*5/1024;t = 1 / (1 / 298.15 + log(1.2*v/(5-v)/3200) -273.15;return t;void display_lcd_number1(double number) / 显示温度值unsigned char x,y,z;x=(int)(number/10);y=(int)(number-10*x);z=(int)(number*10/10);write_lcd_data(int2charlcdx);write_lcd_data(int2charlcdy);display_lcd_string(.); write_lcd_data(int2charlcdz);4.3 tlc1543模数转换模块tlc1543是一个模数转换芯片,它能将输入其中的模拟电压转换成是为二进制数值,本设计中将热敏电阻两端的电压直接作为tlc1543的单路输入值,从0通道输入,取ref+为5v,取ref-为0v接地。具体程序如下#define wait1us _nop_();#define wait2us _nop_();_nop_();#define wait4us wait2us;wait2us;#define wait8us wait4us;wait4us;#define wait10us wait8us;wait2us;#include intrins.h#include /*定义接口总线*/sbit clock = p26; /时钟口线clksbit datain = p25; /数据输入口线addsbit dataout = p24; /数据输出口线datsbit chipselect = p23; /片选口线cs,低电平选通sbit eoc = p27; /转换完成口线/*接口总线定义结束*/unsigned int adcselchannel(unsigned char channel) /转换指定通道的模拟量为数字量 unsigned int convertvalue; unsigned char i, chan; unsigned char convertvaluel, convertvalueh; unsigned char delay; convertvaluel = convertvalueh = 0; /初始化转换结果 delay = 0; if (eoc) clock = 0; chipselect = 1; wait2us; chipselect = 0; wait2us; channel = channel 4; for (i = 0; i 7; datain = (bit)chan; wait2us; clock = 1; clock = 0; channel = channel 1; for (i = 0; i 6;i +) /输入转换时钟 clock = 1; clock = 0; chipselect = 1; /开始检测转换结束标志,或者转换超时出错 while (!eoc) & (delay 10) wait10us; delay +; if (delay = 10) return (0xffff); /转换超时,返回错误代码 else wait10us; clock = 0; chipselect = 1; wait1us; chipselect = 0; wait1us; for (i = 0; i 2; i +) /读取高二位bit值 clock = 1; dataout = 1; convertvalueh = 1; if (dataout) convertvalueh |= 0x1; clock = 0; wait1us; for (i = 0; i 8; i +) /读取低八位bit值 clock = 1; dataout = 1; convertvaluel = 1; if (dataout) convertvaluel |= 0x1; clock = 0; wait1us; chipselect=1; convertvalue = convertvalueh; convertvalue = 8; convertvalue |= convertvaluel; return (convertvalue); /返回转换结果 第5章 温度闭环控制系统调试系统调试是对所设计的系统进行硬件调试,软件调试以及综合调试。系统调试可分静态调试和动态调试两步进行。5.1 温度闭环控制系统静态调试静态调试是在用户系统未工作时的一种硬件检查。在硬件的检查过程中,一般分三个步骤:一,目测。目测就是通过自己先观察硬件的外表。如焊点是否虚焊,是否与其他焊点粘连,看导线是否有破损等。按照设计的电路图进行检查,看是否出现线路接错的地方。二,用万用表进行测试。用万用表对每一个连接点进行测试,看其导通状态与设计要求是否符合。三,上电检查。给硬件上电,测试是否所有的电路都是符合设计要求的。在对各芯片、器件上电过程中,还要注意观察芯片是否出现、火花、过热、变色、冒烟、异味等现象,如出现这些现象,应立即断电,仔细检查电源加载等情况,找出产生异味的原因并加以解决。5.2温度闭环控制系统动态调试动态调试是在用户系统中的工作的情况下发现和排除系统硬件中存在的故障、器件间连接逻辑错误等的一种硬件检查。由于单片机及应用系统的硬件动态调试是在开发系统的支持下完成的,故又称为联机仿真或联机调试。动态调试的一般方法是由近及远、有分到合。由分到合指的是,首先按逻辑功能将用户系统硬件电路分为若干块,如程序储器电路、ad转换电路等,先分块调试。当调试某块电路时,与该电路无关的器件全部从用户系统中去掉,这样,可将故障范围限定在某个局部电路上。当各块电路的调试无故障后,将各块电路逐块加入系统中,再对各块电路功能及各电路间可能存在的相互联系进行试验。此时若出现故障,则最大可能是出现在各电路的协调关系上,如交互信息的联络是否正确,时序是否达到技术要求等。直到所有电路加入系统后各部分电路能正确工作为止,由分到合的调试即告完成。在经历了这样一个调试过程后,大部分硬件故障基本上可以排除。在有些情况下,由于功能要求高或设备较复杂使某些逻辑功能块电路较为复杂庞大,为故障的准确定位带来一定的难度。这时对每块电路以处理信号的流向为线索,将信号流经的各器件按照距离单片机的逻辑距离进行有近及远的分层,然后分层调试,调试时仍采用去掉无关器件的方法,这样逐次依次调试下去,就可能将故障定位在具体器件上。例如,调试外部数据存储器时,可按层先调试总线电路,然后调试译码电路,最后加上存储芯片,利用开发系统对其进行读写操作,就能有效的调试数据存储器。5.3 温度控制系统调试情况(1)出现漏焊的情况,按照设计电路图进行补焊。(2)接通电源后发现液晶未亮,检查电路发现有飞线没有接。连接号飞线后,电路正常。(3)在电路检查中,由于发现可用资源有限,同时有些电路是可以简化或者省略的,故进行了适当的改动。主要改动有:(1)将热敏电阻输出的电压直接送入tlc1543芯片中进行模数转换,省略掉了运放op07,以及后面的2.5v稳压二极管。原因是op07需要接正负12v的双电源进行工作,这样才能比较稳定。而设计中由于缺少正负12v的电源,且如果将10k的电阻r9换成阻值较小的120欧姆的电阻,同样可以使热敏电阻分压更大,而无需通过op07进行电压放大。综合考虑实际情况,省略了运放及稳压二极管。(2)对tlc1543的参考电压ref+进行了修改。最初设计电路时,考虑到转换精度问题,将参考电压ref+的值通过电压基准电路设计为电压值可调,而在实际编程过程中,发现这样设计的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论