商用节水淋浴器的设计与实现毕业论文.doc_第1页
商用节水淋浴器的设计与实现毕业论文.doc_第2页
商用节水淋浴器的设计与实现毕业论文.doc_第3页
商用节水淋浴器的设计与实现毕业论文.doc_第4页
商用节水淋浴器的设计与实现毕业论文.doc_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

烟台大学毕业论文(设计)商用节水淋浴器的设计与实现毕业论文目录1绪 论11.1本课题的研究意义及必要性11.2目前发展趋势及研究的主攻方向22系统分析42.1系统的功能概述42.2系统I/O分配情况83系统硬件103.1单片机最小系统板103.11 系统的控制核心-单片机103.12 晶振电路及其原理、测试方法113.13 系统供电及稳压电路113.14 指示灯电路及其测试123.15 复位电路143.16 MAX232下载电路、USBRS232转换以及串行通信143.17 蜂鸣器的连接183.18 热电阻与AD模块的使用及其调试方法193.19 温度调节、水量调节与中断模块调试方法223.2流量计及其调试方法243.3红外模块的测试263.4继电器模块及其调试273.5数码管模块及其调试293.6 浮球开关及其自动上水功能编程354系统软件374.1KEIL开发环境374.2STC-ISP烧录工具394.3波特率计算器414.4串口调试助手414.5Visual Basic 6.0424.5.1 VB的编程界面434.5.2 MSCCOM串行通信控件444.5.3 ADO DATA 数据访问控件45设计中遇到的困难及其解决方案48结语50参考文献51附录A 部分代码521 绪 论1.1 本课题的研究意义及必要性我国属于缺水国之列,人均淡水资源仅为世界人均量的14,居世界第109位。中国已被列入全世界人均水资源13个贫水国家之一。专家们警告:“20年后中国将找不到可饮用的水资源”。美国民间有影响的智囊机构世界观察研究所发表的一份报告中称:“由于中国城市地区和工业地区对水需求量迅速增大,中国将长期陷入缺水状况。”中国的黄河在过去的10多年年年断流,其中1997年断流226天。流经中国一些人口稠密集地区的淮河去年也断流了90天。根据卫星拍摄的照片,数百个湖泊正在干涸,一些地方性的河流也在消失。目前全国600多座城市中,有300多座城市缺水,其中严重缺水的有108个。其中北京市的人均占有水量为全世界人均占有水量的113,连一些干旱的阿拉伯国家都不如。如果节水从点滴做起,从身边做起,让我们把目光投向身边大大小小的澡堂,它们普遍的存在严重浪费水资源的现象,许多人觉得花钱买的,就不节约使用,开长流水,洗澡的时间一再拖延,殊不知,水是一种极其特殊的商品,节约水不但是经济层面的事情,更是一种社会责任。虽然比起工业用水,这点水量可谓是九牛一毛但是积少成多,如果将全国的澡堂都进行节水改造,那节省的用水量也是相当客观的,想想西部的家庭取水困难,想想我们的国家即将面对的水资源困乏,对澡堂的节水改造是相当有意义的,对人们节水观念的培养也起到积极的作用。我所设计的就是一种对旧式澡堂进行节水改造的自动化设备-商用智能淋浴器。它的节水功能不但是因为采用了红外感应出水,而且对于每一个消费者而言,缴费后都拥有固定的用水量,洗澡过程中能实时地显示剩余水量,超量用水后蜂鸣器报警,并且显示超量信息,服务结束后按量收费。一切手续在服务台的电脑上完成。为了提高服务质量,该系统还有会员消费模式,从数据库中调出会员的余额等信息,发送到淋浴器直接进行消费,十分方便。如果成功研制并推广,它必将造福于社会,对我国经济社会的可持续发展做出贡献。1.2 目前发展趋势及研究的主攻方向对整个智能淋浴系统来说,国内已经有过大量类似的实践应用,一小部分澡堂已经进行了节水改造,但这方面的工作做得远远不够。据网上调查,类似的智能淋浴系统(大部分为IC卡淋浴)售价昂贵,动辄几万元的改造费用让一些小的洗浴场所望而却步,我研究这个系统的目的就是探究以最精简的方式,实现智能节水,并且大幅降低改造费用。另一方面,现有的很多节水淋浴系统,或者是只注重于节水(如七餐浴池的红外淋浴),而忽略了淋浴器的智能,导致了洗浴的愉悦感很差,消费者故意延长洗浴时间,对培养节水的意识并无太大的作用。而我设计的这个系统,不但使用了红外感应出水,而且每个消费者缴费后有固定的用水量,超额消费后,要另外交钱。多用多交,少用少交,实现有效节水,该淋浴器的智能还体现在洗浴中断不进行任何操作,只显示余额和超额信息,所有的操作均在PC界面完成,PC与淋浴器控制核心-单片机使用串口进行通信。从单项技术来讲,该系统用到的技术,除了单片机晶振、下载口电路焊接、红外模块、调压模块焊接、流量计的使用,数码管显示、蜂鸣器报警电路,关键技术有三项:PC与单片机的RS232串行口通信,VB控制界面编程、会员ACCESS数据库编程(包含VB与ACCESS数据库的接口程序设计)。随着计算机技术尤其是单片微型机技术的发展,人们已越来越多地采用单片机来对一些工业控制系统中如温度、流量和压力等参数进行检测和控制。PC机具有强大的监控和管理功能,而单片机则具有快速及灵活的控制特点,通过PC机的RS-232串行接口与外部设备进行通信,是许多测控系统中常用的一种通信解决方案。因此如何实现PC机与单片机之间的通讯具有非常重要的意义。当需要处理较复杂数据或需要对多个采集数据进行综合处理单片机的算术运算和逻辑运算能力显的不足,这时往往需要借助计算机系统。将单片机采集的数据通过串行口传给PC机,由PC机高级语言或数据库语言进行处理,或者实现PC机对远程单片机进行控制。因此,实现单片机与PC机之间的远程通信更具有实际意义。使用VB语言是面向对象的编程语言,可以方便的设计出在window环境下友好的人机界面,通过调用AIP接口函数对串口数据的操作,用户可以轻点几下鼠标就能实现计算机控制。ACCESS是微软开发的小型数据库,旨在强占数据库领域的低端市场,微软虽然强大,但非专业做数据库的公司, ACCESS的性能根本无法与ORACLE和DB2相媲美.但由于微软WINDOWS操作的普及,使得ACCESS和WINDOWS操作系统兼容的非常的好,稳定性极佳,通过许多加密技术后,安全性也有了提升,受到个人开发者甚至中小型企业的欢迎,牢牢的控制着数据库的低端市场. 只要WINDOWS操作系统不被淘汰,ACCESS就会经久不衰的致霸数据库领域的低端市场,前途非常光明。2 系统分析2.1 系统的功能概述图2.1 系统部件图示本设计比起已经出现的类似设备拥有六大特色:1、 红外感应出水,安全性好,在水加热的过程中和水温超限时不可出水。2、 实时显示水量(上位机显示已用水量,服务端显示剩余水量)且用户水量自主设置。3、 温度实时显示(上位机与服务端同时显示),且用水温度可自主设置。4、 水温上下限报警,水量下限报警。5、 上位机消费模式,上位机通过RS232通信可控制服务的启停,并且拥有会员信息数据库库,可在会员模式下结账。6、 自动上水功能。通过两个浮球开关可检测水容器的水位,利用水泵补水。作为一个节水的商用淋浴设备,我的设计目的突出三点一个是“节水”一个是“智能”,再就是“商用”。上述特色中前两个体现了节水的理念,第三、第四和第六个特色体现了智能的理念,第五个特色体现了商用的理念。系统的工作过程如下:打开“淋浴器.exe”可执行文件,服务界面展开,在界面点击“开启服务”按钮,界面及中控台前后对比如图2.2及图2.3图2.2 点击“开启服务”按钮后界面对比图2.3 中控台在开启服务前后的对比(将已用水量初始化为2.00是调试需要)此时系统在满足:红外感应到障碍、水温适中(在设定温度上下5度范围内)、有剩余水量的三个条件后,普通继电器闭合、固态继电器输出端导通,水泵工作,可以出水。图2.4 感应到障碍并出水服务过程中可以对水量和温度进行设定。消费结束后点击“停止服务按钮”,弹出选择结账方式窗口,可以选择“普通用户结账”和“会员结账”两种方式。普通用户结账,输入当前水价,弹出付款窗口,付款成功后,由管理员发送消息记录,点击“已收款”退出系统。如图2.5。图2.5 普通用户结账界面会员消费时,在选择结账方式界面选择“会员结账”,由客户提供的密码查询会员相关信息,输入会员水价,进行结账,结账后新的余额信息返存回数据库,管理员发送消息记录消费结束。如图图2.6 会员付款查询界面图2.7 会员付款界面付款结束后弹出“服务结束”对话框,退出系统。图2.8 服务结束对话框在服务界面的首页也可以选择进行“会员信息管理”和“账单管理”,在会员信息管理界面可以实现对会员信息的增添、删除、修改、查询等基本操作;在账单管理界面可以查看所有账单,也可以只保留当月的账单。图2.9 会员信息管理界面图2.10 账单管理界面 系统硬件连接系统的硬件大概包括三大部分:上位机控制端、中控台、服务端。上位机控制端为运行控制软件的微型计算机,中控台即单片机及其周边模块,上位机与中控台以RS232-USB的通信线连接。服务端主要有流量计、红外模块、水位计、热电阻、加热器等功能构件和水泵、喷头、水池等淋浴设施。系统连接示意图如下:图2.11 系统硬件连接示意图(红线为电源线,蓝色线为信号线)2.2 系统I/O分配情况对于了解系统的结构及运行情况,清楚系统的IO分配情况至关重要,即外围的各个模块与单片机的连接方式,这一部分内容在系统代码工程文件的头文件IO.h中有详细解释。单片机选用的是40引脚双列直插STC12C5A60S2。热电阻使用一路AD,即SCLK/ADC7/P1.7。流量计介入单片机使用计数器TO即CLKOUT0/INT/T0/P3.4引脚。红外模块、指示灯等所定义的IO口名称如下(即自编的头文件):sbit p1_0 = P10; /外部中断0点亮(设定用水量按键)低电平点亮sbit p1_1 = P11; /外部中断1点亮 (设定温度按键)sbit p1_2 = P12; /串行数据接受完成标志sbit p1_3 = P13; /串行数据发送完成标志sbit p1_4 = P14; /高水位灯sbit p1_5 = P15; /低水位灯sbit p1_6 = P16;/代码中不可直接使用P16sbit jidianqi1 = P36; /高电平接通sbit jidianqi2 = P37; /高电平接通sbit hongwai = P00; /红外模块信号线sbit DIN = P01; /MAX7219串行数据输入sbit CLK = P03; /MAX7219串行时钟sbit LOAD = P02; /MAX7219显示数据锁存控制sbit shuiwei_high=P04; /高水位测量sbit shuiwei_low=P05; /低水位测量sbit fengmingqi=P06; /蜂鸣器sbit jidianqi3=P07; /水位控制继电器/开发环境中自带头文件中没有包含的寄存器地址sfr ADC_CONTR=0XBC; /AD控制寄存器sfr ADC_RES=0XBD; /AD结果寄存器sfr P1ASF=0X9D; /选择哪一路为AD其余为IOsfr IPH=0XB7;sfr BRT=0X9C; /独立波特率发生器sfr AUXR=0X8E; /辅助寄存器3 系统硬件3.1 单片机最小系统板3.11 系统的控制核心-单片机此次设计选用了51单片机系列中的高端型号STC12C5A60S2,是宏晶生产的高速、低功耗、抗干扰的以8051为CPU的新一代单片机。其指令代码与传统的8051单片机完全兼容但是执行速度最高能快12倍。而且它内部集成了2路PWM,8路高速10位AD,完全符合系统的设计要求,而且它的串行通信口有独立的波特率发生器,这就大大减小的系统的负担,可以更好地实现实时控制。它的引脚分布如下:图3.1 单片机引脚图与系统的相关的模块功能参数如下(主要是AD、串口、中断、定时器):工作电压5.5V-3.5V(5V单片机)工作频率:0-35MHZ每个I/O口的驱动电流可以达到20mA,但是整片不能超过120mA无需专用的下载器,直接使用串行口配合ISP软件可以直接下载用户程序共4个16位定时器,其中T0和T1与传统的8051完全兼容两路外部触发中断,可以使用下降沿触发或者低电平触发中断共有8路10位精度的AD转换,最高速度可达25万次/秒通用全双工异步串行口(双串口)3.12 晶振电路及其原理、测试方法这部分电路是整个控制系统的“脉搏”,单片机的机器周期就是晶振提供的。它为系统提供基本的时钟信号。各部分公用一个晶振信号以保持同步。单片机的一切指令执行都是建立在这个基础之上的,晶振提供的频率越高,单片机运行的速度越快。它的工作是否正常关乎着系统能不能正常工作,它有晶振和起振电容组成,起振电容的作用十分关键,不能大小的晶振要选择相应大小的晶振电容,但是选择的范围比较宽松。本设计选择使用了11.0592MHZ的晶振和20PF的起振电容。晶振的两只管脚分别连接单片机的18和19号脚。图3.2 晶振电路使用时晶振片的引脚不能太长,而且要尽量靠近单片机,起振电容接地端要离单片机的接地引脚近一些,此外如果单片机底座引线过长也会影响晶振起振。晶振电路的原理是:单片机的内部有个高增益的反向放大器,当外接晶振后,就构成了自激振荡器,并产生震荡时钟,简单说就是利用了正反馈的原理。测试晶振有没有正常运行的方法除了用示波器之外,更加便捷的方法是,用万用表测量晶振的两个引脚的电压是不是芯片工作电压的一半,如5v单片机的晶振引脚电压是不是2.5V左右。如果用镊子触碰另外一个引脚,电压有明显变化的话,此时晶振是起振状态。3.13 系统供电及稳压电路单片机工作需要稳定的5V电压,干电池或普通的蓄电池不能满足需求,系统的一些功能部件一般都是需要5V或者更高的电压,另一个方面负载过大的话(如系统中有电机等功耗较大的部件时),干电池和蓄电池都显得力不从心,电压下降太多的话,会导致单片机低电压复位,系统无法正常工作。需要供电的部件如下:单片机 5V数码管 5V继电器1 5V继电器2 5V固态继电器 12V红外模块 5V流量计 5VAD分压电路、蜂鸣器、指示灯电路、MAX232电路都需要5V电压。系统供电的解决方案是采用直流稳压电源,将交流电整流再稳压提供12V的电压,这样的直流电带负载能力要远比干电池或者蓄电池更好。12V电压经过7805稳压芯片,为系统各个部件提供稳定的5V电压。实际上系统采用了两个直流稳压电源,因为经过测试之后,单个电源提供给整个系统的5V电压,如果再用它的12V给固态继电器提供导通电压会导致负载过大,固态继电器不能正常导通。固态继电器的导通虽然宽泛,332V,但是经过测试之后发现单片机的I/O口5V无论加不加上拉电路都是不能驱动的,只有外接单独的12V才能使其输出端导通。这样固态继电器控制水泵,就要通过另外一个普通继电器控制其输入端12V的通断才能间接的控制水泵。由于需要提供的5V电压接口太多,为了电压更加稳定,系统采用了3片7805来提供5V电压。7805供电电路示意图如图3.5,12V电压示意图如3.6。系统供电的示意图如下:图3.3系统供电示意图3.14 指示灯电路及其测试指示灯在系统代码调试、状态指示、判断是否正常工作等方面的作用是不言而喻的,系统使用单片机的P1口作为指示灯的I0.需要注意的是在KEIL编程环境里不能使用P11的用法,要在头文件中定义为P1_1或者其它名称。Stc12c5a60s2单片机每个IO口的驱动能力达到了20mA,但是整块板子的驱动能力不超过120mA,P1口没有内部上拉电路,所以要外接上拉电阻,以增强驱动能力,降低单片机的功耗。系统总共用到了共接了7个指示灯,运行时用到了4个,调试程序的时候起到了非常大的作用。电路图如下:图3.4 指示灯电路如上图,在程序运行的时候,给单片机P1口复位为高电平,指示灯全灭,程序运行时,根据需要将相应I/O口置零或者置1,让指示灯亮或灭。系统设计时,用到了4个指示灯,P1.0是外部中断0的(调水量按钮)指示灯,P1.1是外部中断1(调温度)的指示灯,P1.2是串行数据接受完成标志位,P1.3是串行数据发送完成标志位。在电路焊接时,对这部分电路进行测试的方法比较简单,就给相应的I/O口赋值观察灯亮或者灭就可以,测试代码如下:main()unsigned char LED;LED = 0xfe;P1 = LED;while(1)delayms(250);/延时函数LED = _crol_(LED,1);/循环右移1位,点亮下一个LED 此函数位库函数P1 = LED;程序下载之后,如果电路焊接正确的话P1口所接的指示灯会有跑马灯的效果。图3.5 7805芯片12V5V稳压电路图3.6 直流电源电路图3.15 复位电路本设计单片机采用上电复位的方式,STC12C5A60S2的复位引脚在9号引脚,即RST/P4.7引脚,采用这样的设计后,单片机在上电的同时复位,其优势在于方便快捷,实现起来很简单,虽然比起按键复位有缺点,但也基本满足了系统需求,其电路如图3.7:图3.7 复位电路需要注意的是,当时钟频率低于12MHZ时,可以不用电容,直接接1K电阻到地。当时钟频率高于12MHZ时,可以使用第二复位引脚,在RST2/EX_LVD/P4.6引脚。有了晶振和复位电路,有了供电电路,这已经满足了单片机工作的条件,已经可以配合指示灯电路做一些联合实验了(当然如果想自主下载程序,还需要焊接下载电路,在后面会有论述)。3.16 MAX232下载电路、USBRS232转换以及串行通信要想实现单片机与计算机的通信,无论是下载程序还是普通的串行通信,必定要进行的一个步骤就是电平转换,因为单片机和计算机在内部使用的表示0和1的电平信号不属于一个类型,就像两个人说话语言得一样,所以必须进行电平转换,我们常用的方式是使用MAX232芯片完成这项工作,将单片机的COMOS电平与计算机的TTL电平进行相互转换以实现它们之间的通信。(只使用发送、接受、地线三根线)。图3.8 MAX232应用电路在上图中需要注意的是MAX232的6号引脚上的电解电容正极接地,15和16引脚之间使用10UF的电解电容,图中所有的0.1uf的电解电容都可以用瓷片电容104代替。因为开发本系统使用的为笔记本电脑,同时也使用笔记本电脑作为上位机,而普通笔记本电脑并没有9针的RS232串口供直接使用,所以要进行接口转换,解决方案为购买RS232USB的转换线,因为其使用方便,电路图可以查到,但是不提成本,用普通的电子线做出的转换线,没有屏蔽电磁干扰等等措施,可能做出的东西根本不能用(在设计中,使用普通杜邦线做通信线耽误了很多时间,有后续的论述)。系统使用的转换线采用的是CH340转换芯片,比较常用的还有PL2303,电路图都可以很容易查到,但是有一点需要注意,那就是,光有转换线还是不行的,一定要在电脑端安装驱动程序才可以,电脑才能通过USB口正确的识别设备,要根据驱动芯片型号选择驱动程序。有了上述两部分器件(加上驱动程序),就架起了笔记本电脑和单片机之间的通信(10m之内)桥梁,要想实现它们之间的通信,上位机要配合串口调试助手,单片机端我们也要有相应的程序,我们下面就来了解一下单片机的串行通信功能。STC12C5A60S2拥有两个全双工的串行通信接口,他们可以使用定时器1作为波特率发生器,也可以使用独立波特率发生器。经过实验,若使用定时器1作为串行口的波特率发生器会大大加重系统的负担(定时器1与系统共用一个时钟源)。所以在最终的程序中使用独立波特率发生器,但是在下面的测试程序中使用定时器1作为波特率发生器。单片机的两个串行通信接口都是由四部分构成:两个数据缓冲器(接受、发送,功能不同,但是不同时使用,所以使用了同一个地址码)、一个移位寄存器、一个串行控制寄存器、一个波特率发生器。两个通信接口都有四种工作方式。我们通常使用模式1,即8位数据位UART,波特率可变。无奇偶校验。一个起始位、一个停止位。设计中下载程序和串行通信都是使用串口1,工作模式是模式1。名称寄存器地址作用独立波特率发生器重装数BRT9CH确定独立波特率发生器的频率串行口1控制寄存器SCON98H选择工作方式、中断标志位等数据缓冲器SBUF99H暂存发送和接受的数据波特率选择寄存器PCON87H波特率是否加倍辅助功能寄存器AXUR8EH是否使用独立波特率发生器IE IP IPH中断相关表3.2 与串行通信相关的寄存器SCON中的SMO 和SM1、SM2选择串行口1的工作模式,REN是允许接受标志位,如果要双向通信就需要软件置。TI与RI分别是串行口接收与发送标志位。PCON的前两位SMOD 和SMOD0都置0,这样波特率就不加倍。对于SBUF进行写操作,代表要发送写的内容,对SBUF进行读操作,代表要获取接收到的数据。其实它是两个寄存器,一个只读一个只写。在AUXR辅助寄存器中可以定义使用定时器1作为波特率发生器还是使用独立波特率发生器。是工作在1T模式还是工作在12T模式。(即要不要对系统的时钟进行12分频)。模式1的工作方式:一帧信息为10位,1位起始位,8位数据位、1位停止位,波特率可变,TXD发送,RXD接收,全双工通信。发送的过程是:写SBUF、数据到移位寄存器、逐位通过TXD发送,完成一帧后,置TI为1,申请中断。接收的过程是:置REN=1允许接受,接收到移位寄存器,载入SBUF,置RI为1,申请中断。确定使用独立波特率发生器之后,模式1的波特率除了与系统时钟SYSLK和PCON有关之外,还与BRT的值有关系,BRT的载入值决定了串行口1的波特率。串行口的初始化函数如下(波特率计算器的结果):PCON &= 0x7f;/波特率不倍速SCON = 0x50;/8位数据,可变波特率BRT = 0xB8;/设定独立波特率发生器重装值 4800 n 8 1 AUXR |= 0x04;/独立波特率发生器时钟为Fosc,即1TAUXR |= 0x01;/串口1选择独立波特率发生器为波特率发生器AUXR |= 0x10;/启动独立波特率发生器*/我使用的是串行通行,采用了TXD RXD 和GND三根线实现最简单的串行通信,用到了9针RS232串行口中的3根,即2、3、5引脚。串行通信在计算机控制方面用处非常广泛,我们数字设备之间的通信常用的方式有两种,即串行通信和并行通信。顾名思义,并行通信是设备间一次传送8位数据。串行通信就是一位一位的传输(双方约定好起始、终止、数据格式、和通信的速度即波特率,COM口,这样才能准确得发送和接收)。两者的传输速率相差了七倍,那么串行通信还能存在那么久并且越来越广泛应用是有其原因的,因为并行通信虽然可以一次传送8位数据,但是在传送过程中容易因为线路问题发生标准电位变化(通常是因为信号衰减和信号间串音干扰),使传输数据错误,若传输线路长的话,这种错误将更加明显。而串行通信一次只传送一位,处理的数据电压只有一个标准电位,因此不容易发生数据遗失现象,加上防范措施就更准确了。但是在短距离通信中,并行通信可以使数据传输速度更快,部分科学仪器、医学仪器由于短时间要传送大量数据,所以要使用并行接口,常用的并行数据传输接口有GPIB和LTP。常用的串行通信有RS232和RS485两种。最近几年还有USB和IEEE1394。RS232接口是台式计算机的必备接口,一般是COM1和COM2。新式的计算机一般是都是以9针的形式接出来,需要注意的是计算机上的均是公头。在计算机上连接通信设备后,在电脑的设备管理窗口可以看到该设备。在工业领域上,RS232通信大多使用正负9V分别表示0和1。但它常常受到各种干扰,为了解决这个问题RS485应运而生。随着时代的发展,串行通信也朝高速化发展,串行通信有了USB接口,这种规格可以整合计算机连接的外围设备,不必要每个设备都有专用接口,都是通用的USB接口。到了USB2.0以后,速度达到了480Mbps。而且可以使用USB集线器,最多在5M内可以连接127台设备。但是无论如何要比RS232最高115Kbps要快很多。IEEE-1394即WIRE FIRE,也称“火线”。它与USB一样都具有即插即用的功能,也为了解决外围产品与计算机复杂连接的问题,也同样是串行通信,但不一样的是IEEE-1394在高速方面占尽了优势,速度正在向1000Mbps迈进,但这并不否认USB存在的价值,1394接口主攻高速方向,而USB则应用于中低速场合。为了验证上述硬件的正确性,单片机与上位机之间串行通信功能测试是必要的。上位机所使用的程序为“串口调试助手”。单片机验证程序如下:main (void) SCON = 0x50; /REN=1允许串行接受状态,串口工作模式1 TMOD|= 0x20; /定时器工作方式2 /使用定时器作为串口波特率发生器PCON|= 0x80; TH1 = 0xFD; /波特率 19200、数据位8、停止位1。效验位无 (晶振11.0592) TL1 = 0xF3; /装载计数值,需要仔细计算TR1 = 1; ES = 1; /开串口中断 EA = 1; / 开总中断 while(1) if (Flag=1) SBUF=SenData; /SUBF接受/发送缓冲器 while(TI=0); /等待发送完成 TI=0; /发送完成后清除标志位 Flag=0; /标志位清零 /串口中断程序void ser_int (void) interrupt 4 using 1 if(RI = 1) /RI接受中断标志,需要判断,因为串口中断分接受和发送两个 RI = 0; /清除RI接受中断标志ReData = SBUF; /SUBF接受/发送缓冲器SenData=ReData; /接受给发送 Flag=1; /置标志位 上述程序能够实现的功能是使用串口助手发送一个值,单片机接收到之后,再将这个值发送给串口助手,串口助手将其在屏幕上显示,如图3.9。需要注意的是,串行通信在普通C51单片机中只能使用定时器1来作为波特率发生器,而定时器1的时钟来源与系统一样都来自晶振,这样就大大加重了系统的负担,经过测试,本系统如果采用定时器1作为波特率发生器,控制的实时性将大打折扣。STC12C5A60S2不但拥有双串口,而且可以使用独立的波特率发生器,而且性能相当稳定,本设计采用独立波特率发生器,其初始化参数都可以通过宏晶公司提供波特率计算器来计算,这个工具十分好用,因为自己通过公式计算出来的波特率不光容易发生错误,而且过程很麻烦,装载值要使波特率与目标值的误差控制在3%,这样才能保证正确的通信。图3.9 测试程序运行时串口调试助手界面3.17 蜂鸣器的连接经过测试,用单片机的P0口直接驱动蜂鸣器效果不理想,所以方案为外接电源以增加驱动能力(本系统的指示灯、继电器驱动、蜂鸣器均使用外接电源增加驱动能力)。连接图如图3.10图3.10 蜂鸣器连接图经过测试,当P06赋值为0时蜂鸣器声音十分响亮,当P06赋值为1时蜂鸣器不发声。不要为了限流给蜂鸣器接上电阻,要限流也要很小的电阻,因为实验中在VCC与蜂鸣器之间接上10K电阻后,在测试时蜂鸣器是没有声音的,1K电阻时声音比较微弱。3.18 热电阻与AD模块的使用及其调试方法要进行温度的显示、可调,首先要对温度进行测量和获取,本设计没有使用温度测量模块18B20,而是采用的热电阻进行温度测量,它虽然不是很精确,但基本满足系统需要,同时降低了成本。热电阻通过分压电路接入ADC.7,这样将通过AD的模块的模数转换功能可以将温度值的数字量计算出来,系统的一个显而易见的缺点是温度误差大概在3摄氏度左右,这是在单片机内部提取温度值时,将0120摄氏度对应的电阻值关系完全线性化。这一部分所涉及的硬件有热电阻和AD模块,下面将详细介绍硬件与测试程序。图3.11 AD分压电路本设计所使用的热电阻为饮水机用的测温电阻(如图3.12),灵敏度比较高,误差是线性化后产生的,误差是可以通过一定的补偿措施来消除的。通过这样的分压电路,温度可以由相应的电阻值反映,电阻值可以通过一定的电压值来测量,05V的电压又可以通过AD转换后的0255来衡量(5V参考电压,只使用8位精度,即提取结果寄存器的前8位),以下各值均是通过实验得来,没有相关资料,难免有粗漏之处。温度值050120电阻值163K18K2K电压值4.7V3.21V0.833V转换后24016443表3.2 线性化计算表格图3.12 热电阻STC12C5A60S2共有8路10位精度的高速AD转换。在P1.0P1.7引脚。可以做温度检测、电池电压检测、按键扫描、频谱检测等等。上电后P1口为弱上拉IO口,用户可以通过给寄存器赋值来定义哪一路为AD转换,其余的仍然做为普通的IO口使用(一般没有定义就作为第一功能引脚)。由于KEIL环境自带的头文件中没有对AD模块所涉及的寄存器进行定义,所以在编程之前要在自建的头文件中对寄存器地址进行定义,如下:名称寄存器地址作用P1ASF模拟功能控制寄存器9DH控制P1的哪一位为AD转换ADC_CONTRADC控制寄存器BCHADC功能控制寄存器ADC_RES转换结果寄存器BDH存储AD转换结果ADC_RESL转换结果(低位)寄存器BEH存储AD转换结果AUXR1辅助功能寄存器A2H一系列辅助功能控制IE中断允许寄存器A8H开关全部中断IP中断优先级寄存器(低)B8H设定中断优先级IPH中断优先级寄存器(高)B7H设定中断优先级表3.2 AD模块所涉及的寄存器P1ASF:给这个8位寄存器的8位赋值可以控制P1的那一位为AD转换引脚。如P1ASF.0=1就是P1.0为AD转换引脚。ADC_CONTR:BIT 7是ADC_POWER,它是ADC模块电源控制位,ADC_POWER=1即打开转换电源。开始转换前要确定电源是打开的。转换完成后可以选择关闭电源,这样可以降低功耗。B6和B5是转换速度联合控制位,两位都置1时转换速度最快,CPU工作频率为21MHZ时转换速度为250KHZ(最高速度)。B4为ADC_FLAG即转换完成标志位,转换完成后会自动置1,要注意的是必须要软件清零。B3为ADC_START即转换开始标志位,等转换完成为0.B2/B1/B0为当前选择的转换通道是哪一路。也就是说若是选择多路AD转换,它们工作时并不是同时转换的,而是以扫描的方式进行的。AUXR1的B2位ADRJ为转换结果格式调整控制位,ADRJ=0时,10位的转换结果八位存储在ADC_RES,低两位存储在ADC_RESL。只取八位结果的话(8位精度)只读ADC_RES就行了。IE为中断允许寄存器,B7为EA,EA=1标志CPU开放中断,相当于所有中断的总开关。其他的7位分别为低电压检测转换、AD转换、串行口中断、两个定时器中断、两个外部中断,给相应的位置1,相当于打开相应的中断。相当于两级开关控制。通过给IP和IPH赋值,可以设置7个中断的优先级为4级。本设计采用查询的方式读取AD转换值,所以在这里不用对中断相关的寄存器进行设置。一般情况下中断优先级采用默认方式就好。针对AD模块进行了几次测试,分别是AD基本功能测试、AD与指示灯、AD温度显示测试等等,下面是一段综合的测试程序(程序中使用了许多的延时函数,经过测试,对于高速AD来说些许延时是有必要的,这一点DATASHEET上有说明,程序中保留调试程序时加上的指示灯亮灭语句,本程序要注意浮点数运算)。main()int AD=0;/初始化P1ASF=0X80;/使用第八路,其余只做IOADC_RES=0;/结果寄存器清零delay(5); /必要的延时p1_1=0; /运行到这一步的指示灯,下同while(1) p1_6=0;ADC_CONTR=0xe7; /开电源、全速、第八通道 delay(5); p1_4=0;ADC_CONTR=ADC_CONTR|0x08;/开始转换delay(5);while(ADC_CONTR&0x10)=0)p1_0=0;/等待完成后,转换标志位置1ADC_CONTR&=0xe7; /标志位清零delay(5);AD=ADC_RES; /取数据delay(5);/随温度的变化,指示灯依次亮灭if(AD164)p1_0=0;if(AD130)p1_1=0;if(AD100)p1_2=0;if(AD60)p1_3=0;/获取实际的温度值wendu=240.00-AD;wendu=wendu*0.60; /获得浮点温度值wendu1=wendu*100; /获取整数温度值e=wendu1/10000; /获取温度百位值f=wendu1%10000/1000;/获取温度的十位值g=wendu1%1000/100;/获取温度的个位值if(e=0)e=0x0f;/如果高位是零则置零上述程序的功能是获取第7路AD转换的结果,并把它转换成对应温度值,根据温度值的大小相应的指示灯有亮灭,程序还提取了实际温度值的各个位,配合数码管,可以对温度进行显示,也可以将温度值各位分别发送给上位机,关键是单片机可以通过该温度值进行温度控制。测试时用打火机加热热电阻,可以看到有指示灯依次亮灭。3.19 温度调节、水量调节与中断模块调试方法设计中有两个按钮,温度调节按钮和水量调节按钮,通过出发中断执行中断子程序的方式进行,在中断子程序中对相应的全局变量进行递增操作和递减操作并且让相应的指示灯亮灭,程序中温度值和剩余水量值都是全局变量。单片机触发中断的方式有两种,一种是下降沿触发,一种是低电平触发,本设计采用的是低电平触发,它实现起来比较容易,电路也简单。如下:图3.13 中断按钮中断功能是为了处理外部突发事件而设置的,当某个中断被触发后,CPU放下当前的工作(设置断点、状态值压栈等等),根据其中断向量,去执行相应的中断子程序,中断响应完成之后,继续之前的工作。实现这些功能的部件叫中断系统。申请中断的设备成为中断源,CPU一般允许有多个中断源,当多个中断源同时申请中断时,这就存在CPU先响应哪个中断的问题,这就引出了中断优先级的问题。如果在CPU正在响应中断,另一个优先级更高的中断发生,CPU暂停相应当下的中断转而去相应更高级的中断,响应完之后再去继续相应之前的中断,这个过程叫中断嵌套,具有这样功能的中断系统叫多级中断系统,否则称为单级中断系统。STC12C5A60S2提供了十个中断源:两个外部中断、两个定时器中断、两个串口中断,AD转换中断、PCA中断、SPI中断、低电压检测中断。所有的中断都具有4个优先级,优先级可以通过IP和IPH两个寄存器来设置。每个中断都可以独立的通过寄存器赋值来进行开关。高优先级的中断可以打断低优先级的中断,低优先级的中断不可以打断高优先级的中断,同级的中断同时发生时按照查询次序分别响应。下面分别介绍中断的查询次序、中断号、及与中断相关的寄存器,如下各图。图3.14 同级中断查询次序图3.15 各中断源的中断号图3.16 中断的触发方式外部中断0和外部中断1可以下降沿也可以低电平触发,申请中断的中断标志位在IE0/TCON.1和IE1/TCON.3,中断响应完之后标志位自动清除。TCON.0/IT0和TCON.1/IT1控制触发方式。IE和IE2是中断允许寄存器,IP/IPH/IP2/IP2H可以对10个中断源设置4级优先级。下面是程序中的对中断模块进行调试的代码即中断子程序/*外部中断初始化* TCON|=0X00; /外部中断低电平触发 IPH=0X05; IP=0X03;/中断优先级为INT0 INT1 T0 IE=0X9F;/开中断,允许除了低压检测和AD之外的所有中断/*外部中断0*void Int0_Routine(void) interrupt 0p1_0=0;/按键点亮sum+;if(sum50.00)sum=2.00;delay(1000);p1_0=1;/*外部中断1*void Int1_Routine(void) interrupt 2 uint m,n; p1_1=0;/按键点亮 wendu_set+; if(wendu_set50)wendu_set=10; p1_1=1;通过上述程序,我们可以通过外部按钮实现对水量在250之间的调节,对温度在1050摄氏度之间的调节。3.2 流量计及其调试方法要实现在服务端实时显示剩余水量,在上位机端实时显示已用的水量,就要对水量进行测量,直接测量剩余水量水量和已用水量几乎是不可行的,本设计的解决方案是利用流量计实时得对流量进行测量,从而得出水量信息,使用的流量计如下图:图3.17 流量计该流量计属于涡轮流量计,当有水流通过是内部涡轮转动产生脉冲信号,该脉冲信号可以直接通过单片机的定时/计数接口进行计数,通过计数的多少来衡量通过的水量,这样就可以确定剩余的水量(设定水量递减)和已用的水量(递加)。如图涡轮流量计有三根引线,其中红色为VCC,黑色的是GND,白色的是脉冲信号线。因为本设计只是为了验证方案可行性和技术可靠性,所以并没有仔细计算水量与脉冲数量的对应关系,通过观察的方法确定了50个脉冲数对应0.01单位的水量的方案,这样可以使实验效果比较好。用来捕捉流量计脉冲信号的是单片机的定时/计数器0。连接方式如下图:图3.18 流量计与单片机连接方式STC12C5A60S2的定时器0和1与传统的8051单片机完全兼容,此外,两路PWM可以再实现两个16位定时/计数器。定时器0和定时器1都可以分别工作在定时和计数两种工作状态(TMOD寄存器选择)。定时/计数器的核心部件是一个加法(也有减法)器,对脉冲进行计数,只是脉冲的来源不同,定时器的脉冲来自于系统时钟(每个系统周期或者12个系统周期得到一个技术脉冲)。计数器的脉冲来自于外部。定时/计数器0和1都有4种工作状态,模式0是13位定时/计数器,模式1是16位定时/计数器,模式2是8位自动重装定时/计数器,模式3是两个8位的定时/计数器。设计中使用了模式2计数器,即8位自动重装计数器,满足系统测量水流量的需要。名称寄存器地址作用定时器/计数器控制寄存器TCON88H定时器0和1的中断标志位和运行控制位定时器/计数器工作模式寄存器TMOD89H定时器0和1的开关,和工作模式选择计数值低位TL08AH计数值低位计数值低位TL18BH计数值低位计数值高位TH08CH计数值高位计数值高位TH18DH计数值高位辅助寄存器AUXR8EH定时器脉冲源是否分频(1T或者12T?)表3.3 与定时/计数器相关寄存器TCON中的TR0和TR1分别是定时/计数器T0和T1的运行控制位,置1开始计数(当然门控位得打开)。TF0和TF1分别是溢出标志位,知道CPU完中断,才由硬件清零。TMOD的8位分别属于T0与T1,GATE为门控位,配合TR决定定时器的工作与否,C/T决定是定时器方式还是计数器方式,M1和M0选择4中工作模式。其中工作方式2是M1 M0 置位1 0.THX存放计数初值,TLX溢出后,自动装入TLX。AUXR的B1和B6分别决定定时器0和定时器1的时钟速度,置0则速度是传统8051单片机的速度,即系统时钟的12分频。置1则与系统时钟同速。下面是定时器模块的初始化代码和功能测试代码:main() TMOD|=0X06; /TO计数器,模式为8位自动重装 TH0=0XD0; /保证计数50次溢出中断 TL0=0XD0; IE=0X8F;/开启中断使能:TO T1 INT0 INT1,但不开启AD转换中断和串口中断 TCON|=0X10;/开启TO计数 P1=0XFF;/全灭 while(1) if(sum=1)p1_0=0;/满足

温馨提示

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

评论

0/150

提交评论