




已阅读5页,还剩61页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章绪论11课题研究的背景意义柴油发电机广泛应用于野外作业、抗洪救灾及军事等领域,它是一种小型发电设备,系指以柴油等为燃料,以柴油机带动发电机的转子做切割磁力线运动而产生发电。整套机组一般由柴油机、发电机、控制箱、燃油箱、起动和控制用蓄电瓶、保护装置、应急柜等部件组成。整体可以固定在基础上,定位使用,亦可装在拖车上,供移动使用。尽管柴油发电机组的功率较低,但由于其体积小、灵活、轻便、配套齐全,便于操作和维护,所以广泛应用于矿山、铁路、野外工地、道路交通维护、以及工厂、企业、医院等部门,作为备用电源或临时电源。柴油机的转速由油控系统控制,当油控系统增加喷油量时,柴油机转速变快;反之,当油控系统减少喷油量时,柴油机转速变慢,进而决定了输出电压的高低。为了使柴油机输出的电压稳定,就要给发电机组配置一套测控系统。该测控系统的功能就包括检测柴油机的输出电压,通过一定的算法处理得到喷油控制量,并把喷油控制量传送到油控系统以控制柴油机的转速,进而控制输出电压。用发电机测试系统进行测试,是一种全面的性能试验、能够较确切地得到被测电机的有关性能参数的试验。其目的是为了确定发电机的输出性能是否能全面达到技术要求,各种型式的发电机均需要通过测试、试验后才能投产或继续生产。国际标准和英、苏、德等国家都把型式试验当作一种性能试验,用来检查发电机的特性和参数。这种试验一般只对各种型式电机中的第一台或首批的几台样机进行,所以称为型式试验。根据需要,试验可包括标准中规定的所有项目,也可以是其中的一部分项目。以前的电机型式试验系统主要由模拟设备和机械式测量仪表构成,试验人员工作繁重,数据统计工作复杂,且由于人为因素,数据测量不准确。基于上述原因,在中国市场上目前对具有自主知识产权的柴油发电机智能检测系统的需求十分迫切,该设备对于实时检测柴油发电机的输出参数,提高产品竞争力,提高市场消费需求具有巨大的实际作用和意义。本课题的研究对提高柴油发电机测试系统生产品质、效率具有极高的实用价值。另一方面,随着计算机技术和嵌入式技术发展,出现了计算机检测技术在现代工业制造业对机电输出参数测量的高精度、高效率要求的驱动下,自动测试系统以经济实效、快速、非接触、精确以及自动化程度高等特点赢得了广泛的关注,本课题利用单片技术对柴油发电机测试系统进行了深入地探讨与研究具有重大意义,同时可以推广到其它相关领域。12国内外发展概况及发展趋势回顾国内柴油发电机测控系统的发展,大概可以划分为四个阶段1、以时间继电器和中间继电器为主构成的自动化控制系统,这种模式当时在同行业中非常普遍,而且也以相当的批量投向市场,突出的弱点是功能简单、结构复杂、维护调试困难、可靠性差,最终没有得到用户的认可。2、用分离电子元器件组成延时电路和逻辑判断电路来实现的自动化系统,这种模式相对于第一种模式,有了很大的进步,如果精心设计,提高工艺水平,应该能取得很好的效果。但是,在那个企业大而全的年代,每个企业各自为战,造成批量小、工艺落后、质量无法保证,所以这个阶段延续时间也较短。3、随着改革开放,国外各种新鲜器件纷纷出现在国人面前,PLC(可编程序控制器)以性能稳定、方便灵活的优势迅速成为机组自动化控制领域的主力,时至今日仍有企业在应用。这种模式的优点相对于前两种较为明显,但也逐步显露出一些缺陷,如外围电路复杂,需配置转速、电压等判断电路及供电电源、端口扩展继电器等器件;造价相对较高(带AD转换的PLC动辄上万元)。PLC是很可靠的,但它毕竟不是专门为我们这个行业而设计的,所以以PLC为核心构成的柴油发电机组自动化控制系统注定是一个匆匆的过客,随着技术的飞速发展很快失去了优势。4、控制系统功能模块化思路的出现,彻底解决了困扰发电机组控制领域的难题,这即是以专用控制器为核心构成的自动化系统,这些专用控制器为发电机组量身打造,集多种功能于一身,甩掉了复杂的外围电路,使自动化控制系统一下子变得简单了。这些专用控制器大多采用了先进的微处理器及控制技术,可靠性和环境适应能力较PLC大大提高,同时,很多参数可以根据实际情况而设定,使用起来非常灵活。目前,我们已经处在第四个阶段十余年了,这种模式的生命力,随着技术的发展显示了越来越强大的生命力,可以说这种控制系统功能模块化就是柴油发电机组自动化测控的现状。13本课题的研究意义目前,随着我国工业的高速发展,大量的发电机在冶金、能源、化工、制造业、交通等行业得到了极为广泛的应用。但相应地发电机测试的工作量也不断增加,尤其对于一些80年代建设的大型国有企业,随着设备的才华,各类型的发电机的检修测试需要更是与日俱增。结合国家十五计划中提出其的“以信息化带动工业化”的战略决策,开发一种采用先进的信息技术的发电机自动测试系统势在必行,设计可靠,安全,便捷柴油发电机测试系统具有极大地现实必要性。为此,本论文进行了柴油发电机测试系统的研究与实现。本论文的柴油发电机测试系统有很多现实意义1、系统硬件组成灵活方便,易于功能扩展;2、实现程序控制,监视测试过程;3、自动存储、整理并分析测试结果,即将测得的数据进行分析处理,最后以数字显示;4、有一定的经济效益。14论文结构论文主要包括以下七个部分第一章,概括讲述了柴油发电机测试系统研究的背景意义,发展状况,课题研究的目的、意义及背景;第二章,介绍了柴油发电机的硬件设计、详细的说明了柴油发电机测试系统的系统组成结构及分析;第三章,;第四章,叙述了本系统软件整体结构的设计,详细说明了各功能模块的设计;第五章,进行个人总结。第二章系统组成结构与分析21系统组成框图本系统采用STC12C54系列单片机为主的微控制处理器作为柴油发电机测试系统的控制核模块,能够对输出电压,电流频率进行测量;能通过3位LED交替显示测量的电压、电流、频率,且能通过键盘锁定以上3个被测量单独显示;具有报警功能,通过不同标识显示报警内容;能通过键盘设置各种参数,包括门限电压、电流、频率、功率。在保证测试系统可靠运行的前提下,电路的设计尽可能的简洁紧凑,减轻系统负载,同时坚持充分发挥创新原则,以简洁但功能完美为出发点,并以稳定性为首要前提,实现测试的快速运行。系统总设计方案如图所示单片机报警模块键盘模块信号处理模块驱动、显示模块频率测量模块信号采样模块图21系统框图22微处理器的选择根据技术指标要求,系统采用内带A/D,D/A接口的STC12C5410AD单片机作为主控CPU。和传统的8051单片机相比,STC12C5410AD具有如下优点(1)内带一个12位的A/D转换器,且可以通过内部模拟开头外接8个A/D转换输入端。(2)指令完全兼容传统8051,但速度快1012倍,针对电机控制,强干扰场合。(3)内部集成专用复位电路,4路PWM,有6个16位的计数器。22输入模拟信号处理本系统要求采样并计算发电机组输出电压、电流的大小。根据指标要求,拟选用的传感器分别为精度为0。1的电压互感器、精度为0。1的电流互感器,采用CPU内部的12位A/D作为模数转换器。根据输入信号的特点,系统采用交流采样的方式测量电压、电流值。交流采样的原理是三个周期内对输入信号进行等间隔的N个点采样,并同这些采样值计算信号的有效值。设这N个点的采样值分别是X1,X2,XI,,XN,则该周期信号的有效值Y为为测量信号的周期,系统需提供一个测频电路,把周期性的交流信号转变为方波信号。23人机接口设计系统的键盘与显示面板如图22所示。图中LED1LED3代表电压、电流、频率显示标识。当LED1亮时,数码管显示测量的电压值;当LED2亮时,数码管显示测量的电流值;当LED3亮时,数码管显示测量的频率值。一般情况下,电压、电流、频率交替显示。当需要单独显示某一测量值时,可通过按键功能进行切换,同时LED1对应电压独立显示,LED2对应电流独立显示,LED3对应频率独立显示。图22人机接口面板24硬件系统的结构综上所述,基于单片机的测控系统的系统结构如图23所示单片机测频电路X3LED电压互感器74LS164驱动3连体数码管理体制光电耦合电路调理电路电流互感器I/V变换X3按键关油机电路图23硬件系统结构图25数据和状态显示根据指标要求,系统要求除了显示电压、电流、频率测量值外,还要显示各种报警值信息。表21是各种报警信息显示内容。表21报警信息显示码含义显示信息含义显示信息含义UH输出电压过高IH输出电流过高UL输出电压过低FE频率超限PH输出功率过高26键盘功能划分本系统键盘要实现的功能有报警门限值设置。系统键盘个数共有KEY1、KEY2、KEY3共3个,每个键盘都具有多种功能。图24按“倒数”结构罗列了系统键盘功能。由于键盘个数较少,因此采用二级下拉式菜单方式编写键盘程序。系统按功能不同把键盘划7页(PAGE0PAGE6)。每页允许按键个数和各键功能各不相同。如第1页可按2个键,而第1页可按3个键。第0页为第1级,其它为第2级。第2级的第1页利用4个按键完成过压门限值的设置。KEY1的功能是在设置数值时,实现数字按09顺序徨切换;KEY2的功能是实现设置数值位数循环向前移动;KEY3的功能是设置确认,并使菜单回到第1级(PAGE0)。表22列出了各页功能。图24系统键盘结构图表22各页及按键功能页号功能说明页号功能说明0主界面KEY1页号加1;KEY3页号确认按下该键进入相应页面菜单4超频门限值设置KEY1KEY3功能同上1过压门限值设置KEY1数字加1;KEY2数字位前移;KEY3按下后保存过压门限值并返回初始页面5功率超限值设置KEY1KEY3功能同上2欠压门限值设置KEY1KEY3功能同上6主显示页面KEY1按下只显示电压、再按下只显示电流、再按只显示频率,以此循环;KEY3返回初始界面3过流门限值设置KEY1KEY3功能同上27软件功能划分系统软件主要功能有键盘处理、数据采集、数据处理、数据或状态显示等。根据模块化编程思想,软件系统可以分为系统初始化模块、键盘处理模块、显示处理模块、数据采集模块、数据处理模块、检测报警模块。系统初始化模块主要完成显示缓冲、串行行接口、特殊功能寄存器、数据缓冲区及变量的初始化、使系统复位后进入安全、确定的状态。键盘处理模块主要完成键盘扫描、各按键功能的处理等功能。显示处理模块主要完成显示器硬件驱动、按键显示、报警显示和采样电压、电流、频率的显示等功能。数据采集模块主要完成电压、电流采样和频率的测量等功能。数据处理模块主要是实现电压、电流有效值的计算,通过PID控制算法计算出控制量并通过D/A输出,实现输出电压的稳定。检测报警模块主要是检测输出电压、电流、频率等是否超限,当出现超限时,通过数码管显示报警信息,同时关闭油机。第三章系统的硬件设计硬件是整个系统正常工作的基础。通过上文的介绍,由系统的组成框图可知,本系统硬件电路主要由单片机最小系统、人机接口电路、电源电路、模拟输入模块电路组成以及关油门电路,其各部分详细设计如下。31单片机最小系统单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统对STC12系列单片机来说,最小系统一般应该包括单片机、晶振电路、复位电路、程序下载电路STC12C5410AD是片内有ROM/EPROM的单片机,因此,这种芯片构成的最小系统简单可靠。用STC12C5410AD单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可。由于集成度的限制,最小应用系统只能用作一些小型的控制单元。其应用特点1有可供用户使用的大量I/O口线。2内部存储器容量有限。3应用系统开发具有特殊性。单片机最小系统的结构单片机要正常运行,必须具备一定的硬件条件,其中最主要的就是三个基本条件电源正常;时钟正常;复位正常。具体的最小系统原理图如图31所示。图31单片机最小系统32人机接口电路键盘和显示接口是测试系统中的重要组成部分,一方面通过键盘输入参数值,而显示器则可以监视参数输入状态,另一方面,通过显示器显示测量结果和运行的状态。本次设计的显示器采用3连体的共阴数码管,数码管采用串转并芯片74LS164进行驱动。人机接口电路如图32所示,CPU和端口信号连接如表31所示。关于数码管的选择问题1、如果数码管采用静态显示方式,若选用3个独立的数码管,则势必需要用到3个74LS164芯片进行驱动,如此一来,增加硬件电路空间和产品成本。2、若数码管采用动态显示方式,则需选用一个3连体数码管,而它只需一片74LS164芯片驱动,不仅节约芯片,硬件电路还更简单,占用空间缩小,而软件编程也不会很复杂。因此,综合以上两种考虑,选择方案2更好。表31CPU和端口信号连接端口功能端口功能P30输出74LS164的数据输入端P21P23输出3连体数码管位选端P31输出74LS164的数据输入端P16P20输出电压、电流、频率指示灯P24输出关油机控制端P13P15输入键盘图32人机接口电路关于键盘的抖动问题本次键盘采用机械式键盘,由于机械开关的撞击作用,开关在闭合或断开时开关会产生抖动,抖动时间约5MS10MS。抖动波形如图33所示,为了保证系统对按键做出可靠的响应,应消除抖动的影响,消除抖动影响的方法主要有硬件消抖法和软件消抖法。由于硬件消抖法每一个按键都需要相应的消抖电路来支持,如RC滤波器或双稳消抖电路等。在按键较多时,将使整个电路复杂、庞大。因此在带微处理器的系统中很少采用,而主要采用软件消抖法。本次设计中使用的是1X3矩阵式机械键盘,它们都是直接接到单片机的P1口,通过编写判断键盘按下、软件消抖以及执行键盘散转程序来执行相应操作,将在432章节做详细介绍。33电源电路331稳压电路原理图稳压电路在实际应用电路中应用非常广泛。如我们平常常用的78或79系列三端稳压器也是属于它的一种。整流滤波后的电压是不稳定的电压,在电网电压或负载变化时,该电压都会产生变化,而且纹波电压又大。所以,整流滤波后,还须经过稳压电路,才能使输出电压在一定的范围内稳定不变。本次设计直接在输入端加入电压,再对其进行稳压。电源电路为总个系统提供5V的工作电压,电源电路的稳定性直接影响到总个系统的稳定性,5V电源电路如图313所示。直流稳压电源的输出电压是由220V交流电转换而来,其输出电压会因电网电压的变化有所波动,为了得到稳定的5V直流电源,可将直流电源输出的12V进行整流,将整流后的电压输出到三端稳压器LM7805输出5V直流电,外加一些滤波电容后输出的5V直流电趋于稳定,杂波较小,通过接口输出到测量控制电路中,为单片机系统、显示和谐振电路等供电。图33按键抖动信号图34稳压电路33225V直流稳压电源将整流后的5V电压通过芯片TL431,使输出端输出为33V,为电压、电流调理电路提供25V电源。25V直流电路如图35所示。图3525V直流稳压电源电路图34模拟输入模块电路单片机用与检测系统时,总要有与被测对象相联系的前向通道。而这个所谓的前向通道在本设计中可称为模拟输入信号的处理电路。前向通道与被测对象的状态、特征、所处环境密切相关。在前向通道设计时要考虑到传感器或敏感元件选择、通道结构、信号调节、电源配置、抗干扰设计等。在通道电路设计中还涉及到模拟电路诸多问题。当将单片机用作检测系统时,系统中总要有被测信号输入通道,有计算机拾取必要的输入信息。作为检测系统,对被测对象拾取必要的原始参量信号是系统的核心任务,对控制系统来说,对被控对象状态的测试以及对控制条件的监测也是不可缺少的环节。对被测对象的信号的拾取其主要任务就是最忠实地反映被测对象的真实状态,它包括实时性与测量精度。同时使这些测量信号能满足计算机输入接口的电平要求。341电压、电流输入信号处理电路电压、电流输入信号处理电路如图31所示。图中,输入电压先由电流型电压互感器把电压信号转变为电流信号,再由高精度电阻取样,把电流信号转变为电压信号VIN。图36电压、电流输入信号处理电路STC12C5410AD的基准为5V,设计时取抬升电压为25V,则可保证输出电压的值大于0V。电流处理电路和电压处理电路类似。处理后的电流信号AD_I和电流信号AD_U接入STC12C5410AD的两个模拟输入端,供CPU采样。342频率测量电路频率测量电路主要功能是把交流电压信号整形变为方波信号(图32)。整形后的方波信号接入CPU的INT0,供测频用。图37交流信号转变为方波35关油门电路采样电压、电流经过数据分析处理后的值可能会超过系统所设门限值,这时CPU需向外界发送报警信息,而光显示报报警信息是不安全的,因为此时的柴油发电机仍在运转,如果不采取相应措施,发电机可能会造成无法修复的故障。因此必须采取应急措施,即关闭油门。而这个关油门的信号是经CPU分析后,由P24口发出的,当P24口发送一个低电平时,图中继电器断开,后续电路也即开路了,达到关油门的功能。图38关油门电路第四章系统的软件设计系统软件采用C语言,在WINDOWSXP环境下采用KEILUVISION2进行编写,对STC12X5410AD单片机进行编程以实现各项功能。C语言是模块化的高级语言,它的程序可读性和可移植性都强于汇编语言,充分利用原来积累的编程知识和一些典型子程序,并采用模块化、结构化的设计思想,具有易读性,易于移植,功能模块可以很容易的扩展;用C语言编写的硬件控制程序实时性好,编译效率也高,适用于编写柴油发电机测试系统这样软硬结合的系统。在本次设计中,系统通过C语言编写程序,来实现系统软件的功能。系统软件开发工具使用单片机专用KEILUVISION2,程序烧写使用STC_ISP_V479。KEILUVISION2支持C51编程,是一款良好的软件开发环境。41系统软件总体结构及整体设计思路根据本次设计的硬件电路和要求达到的功能,系统软件结构如下柴油发电机测试系统人机接口模块AD采样模块数据处理模块数码管显示模块键盘处理模块频率测量模块电压电流采样模块数据有效值计算报警信息设置模块图41柴油发电机测试系统软件结构图为了使软件设计条理清楚,方便调试和使用,采用依照系统功能模块规划及分析中所划分的功能模块进行相应的设计。而同时在各个模块中可以按照它所要实现的功能将一个模块划分为几个模块进行设计。本次软件系统设计主要分为三个部分人机接口部分、AD采样、数据处理部分,本设计采用的总体思路如下通过单片机的定时器0和计数器1对外部产生的频率信号进行定时计数,得出外部信号的频率,进而单片机根据相关的计算公式处理计算出相应的频率,在在得到信号的频率后,算出其周期,再用周期除以32,将这个时间作为PCA模块0的定时值,对外部信号进行每个周期的32点采样,通过相应的算法将信号的电压、电流值算出,送数码管显示,键盘的功能主要是实现报警门限值的设定。42主程序设计主程序是整个系统软件的运行主体,各个子系统软件都必须经过它的调度,才能运行得当。根据设计项目的功能要求,主程序对系统主要进行了一下工作一、系统初始化,相关模块的初始化工作;二、进入主程序循环,主程序循环就是监控子程序,管理子程序,实现系统功能。421系统初始化系统初始化主要完成显示模式的初始化、键盘页面初始化、STC12C5410AD的PCA定时模块初始化、定时器0外部中断0的初始化、AD采样模块初始化。(1)、显示模式初始化系统的显示模式共有3种,一是电流、电压、频率的循环显示或单独显示,二是键盘设定值的显示,三是报警信息的显示。由全局变量DISPMODE的值控制系统显示模式,系统上电后的初始显示模式为电压、电流、频率循环交替显示,因此DISPMODE0(2)、键盘页面初始化键盘页面值由值由全局变量PAGE决定,系统上电后的初始键盘页面PAGE为0。(3)、PCA模块的初始化主要是对其工作模式寄存器、控制寄存器、捕获寄存器、中断允许寄存器进行初始化。(4)、定时器0、1,外部中断0的初始化T0做定时器,T1做计数器,二者都工作在16位的计数方式;外部中断0的触发方式是下降沿触发,允许定时器0和外部中断0的中断请求。(5)、AD采样模块初始化主要是将单片机P1口采样通道的输入方式配置寄存器、控制寄存器,数据结果寄存器、相应的中断允许位初始化。421主程序流程图主程序的设计思路为上电后,先调用初始化,接着调用AD采样模块程序对经过调理后的电压、电流进行采样,将采样值经过处理后调显示子程序送数码管显示,同时把采样值与限定值进行比较,进行判断,当采样值超过限定值时,则会出现显示器报警信息,同时CPU发出关油门信号等一些操作;当没超过时,显示器正常显示测得的电压、电流、频率值。当有键盘按下时,先读取它的键值,找到它是哪个页面的键值,再去处理这个页面的键值对应的函数操作。键盘扫描是每隔10MS扫描一次,数码管是每隔05S显示一次。开始初始化A/D采样调显示子程序调数据处理子程序调键盘处理子程序图42主程序流程图43显示模块模块设计显示模块是人机接口模块中的一部分。显示模块的软件设计的主要内容是将采样值信息、报警信息送数码管显示,同时相应的LED灯会点亮。其流程图如图43所示,显示模块包括数据拆分,74LS164串转并、送显、循环显示与单独显示、设定值显示等函数。431数据拆分要把一个整型数据送三位数码管显示,首先这个数不能大于999,否则就把它为是999;其次,这个整形据在计算机中是以二进制的形式存储的,必然要用三个存储单元来存储它拆成三位后的值,在本次设计中,用一个全局变量的数组DISPBUF3来存储一个整形数据拆分成十进后的百、十、个位,将二进制数转换为十进制数的拆分函数为VOIDDATASEPARATEUINTINDATA,UCHAROUTDATA。图43显示模块流程图43274LS164串转并74LS164是一个串转并的并的芯片,数据串行输入,8位并行输出,这不仅为数码管提供8BIT数据,同时也是作为一个数码管驱动芯片工作着。本设计中,可有两种方法编写该转串并函数VOIDSHIFT164UCHARIN。(1)、利用串口方式编写该函数,设已经设置好了串行工作于方式0(SCON0)。本软件设计的数据输出采用串行输出的方式,用单片机的RXD作为数据线,TXD作为时钟信号线,分别接到74LS164的数据端和时钟端。(2)、用模拟74LS164时序来编写该函数。其中要数据位循环移入74LS164的寄存器。433查找字形码程序要使数码管能正确显示所需的数字或字母,需要给每个要显示的字符找到其相应的字型码。全局变量SHAPEBUF为存放DISPBUF对应的字型码数组。函数VOIDFINDSHAPEUCHARDISP_BUF,UCHARSHAPE_BUF,UCHARDOT_POS主要负责把DISPBUF数组中的3位数找到其字型码。其中DISP_BUF,要显示的3个数字的存放位置;SHAPE_BUF,对应数字字形码存放位置;DOT_POS,要显示小数点的位置。小数点位置从左到右依次为0,1,2,最后一位不显示小数点,当DOT的值大于等于2时,不显示小数434送显子程序要显示的字符找到字型码之后,就可以通过74LS164把数据送数码管显示了。因此该函数包括74LS164的串转并函数。由于3连体数码管工作在动态显示方式,因此每个数码管点亮一段时间后要有一小段短暂的延时,由于人眼的视觉延缓的作用,看起来三个数码管像是同时亮着,因此该函数也应包括延时程序。该函数的函数名为VOIDSENDDISPUCHARSHAPE_BUF。435电压、电流、频率显示子程序数码管可以单独显示电压、电流、频率中的某一个参数,也可以循环显示三个参数,这是可以依用户的需要而通过键盘功能进行设定的。而决定这三个参数是循环显示、还是只单独显示某个参数,是由全局变量HOLD及WHOHOLD决定的。HOLD0时,WHOHOLD失去作用,此时三个参数循环显示。HOLD1、WHOHOLD0时,单独显示电压;HOLD1、WHOHOLD10时,单独显示电流;HOLD1、WHOHOLD20时,单独显示频率。436按键时设定值的显示子程序系统初始化后,默认的键盘页面为0页面,电压、电流、频率在交替显示。当有KEY1和KEY3按下时,显示器首先显示“D0”字样,这几个字符是放在全局变量SETBUF数组中的。当再次按下KEY3即ENTER键后,数码管显示过压门限值,这是软件程序里设定的初始值,可以通过键盘进行改变,而这个子程序正是显示正在改变的门限设定值。当进入门限值的设定的显示时,处于设定位的数码管会闪烁。437PCA模块0作为定时器STC12C5410AD系列单片机集成了4路可编程计数器阵列(PCA)模块,可用于软件定时器、外部脉冲的捕捉、高速输出以及脉宽调制(PWM)输出,本设计的PCA模块用于定时。与PCA有关的特殊功能寄存器如下666666本系统PCA模块初始化程序如下SFRCH0XF9SFRCL0XE9SFRCCON0XD8SFRCMOD0XD9SFRCCAP0H0XFASFRCCAP0L0XEASFRCCAPM00XDASBITEPCA_LVDIE6SBITEADC_SPIIE5SBITCRCCON6/SBITCFCCON7SBITCCF0CCON0VOIDPCA_INITIATECMOD0X80CCON0X00CL0/PCA计数值初始化CH0CCAP0LC_1MSCOUNT256/1MS的定时值,CCAP0HC_1MSCOUNT/256CCAPM00X49/PCA模块1工作于16位计数器EPCA_LVD1/允许PCA模块中断EA1CR1/定时器开始运行以下为PCA模块0的中断服务程序VOIDPCA_INTERRUPTVOIDINTERRUPT6CL0CH0/计数值清0TICKS/时间滴答加1CCF00/清中断标志CCAPM00X49/PCA模块0工作于16位计数器全局变量TICKS记录时间中断次数(以后称为时间滴答),记录的最大个数为65535个,也即65535MS一个循环。BITTIMEOUTUINTOLDTICKS,UINTTIMEMSUNSIGNEDINTDIFFDIFFTICKSOLDTICKSIFTIMEMS|DIFFTIMEMSOLDTICKSTICKSRETURN1RETURN0在这个函数中,首先时间滴答TICKS在中断的作用下,会不间断地向前计数。假设X时刻DIFFTIMEMS,此时,X时刻的时间滴答TICKS送到OLDTICKS保存(通过指针变量OLDTICKS保存)。过了一段时间(设Y时刻),再调用该函数,则函数计算X到Y时刻经历的时间DIFFTICKSOLDTICKS如果经历的时间DIFF大于设定时间TIMEMS,则返回1,同时又开始新的计时,保存Y时刻的时间滴答OLDTICKSTICKS因此,该函数完成了连续判断是否超时的功能,即从某时刻开始计时,一段时间后,如果经历的时间大于设定的时间TIMEMS,则返回1,并进入下一轮判断。如果没有超时,返回0。函数也提供了立即记录当前的时间滴答的功能。只要在调用该函数时,把TIMEMS对应的实参设置为0即可。438系统显示函数系统显示是根据显示模式实现主界面显示(显示电压、电流、频率),设定状态显示,报警显示。该函数由全局变量DISPMODE决定DISPMODE0,主界面显示;DISPMODE1,设定值显示;DISPMODE2,报警界面显示。该函数每隔05S显示一次。程序如下VOIDSYSDISPIFDISPMODE0/显示模式为0UIFCYCLEDISPHOLD,WHOHOLD/显示测量值ELSEIFDISPMODE1/显示模式为1DISPSETDATASETPOS,DOT,DOTPOS/显示设定值ELSEIFDISPMODE2/显示模式为2SENDDISPSHAPEBUF/显示报警值439系统显示任务该函数每隔05S进行一次系统显示。VOIDSYSDISPTASKVOIDIFTIMEOUT44键盘处理模块按照从最底层到顶层的顺序,键盘处理模块设计总体框图如图44所赤。键盘处理模块的设计又可以分为几个子程序,包括键盘扫描程序,读键值子程序,键盘处理程序。图44键盘处理模块总体框图441读键值子程序一般来说,每个键盘都会有一个键值,单片机测得键值后,就可以知道是哪个键盘按下了,进而处理相关程序。本文中共3个键盘,即有3个键值,KEY1键值是0X80,KEY2是0X81,KEY3是0X82。程序首先定义一个位结构体类型KEY_GPIO,用来保存3个按键值。TYPEDEFSTRUCTUCHARKEY11UCHARKEY21UCHARKEY31UCHARRESERVE5KEY_GPIO同时也定义了一个联合体类型,在该类型中字符成员INKEY和KEYGPIO共用一个存储单元,因此通过判断INKEY是否为0就可以知道有无键按下。TYPEDEFUNIONUCHARINKEYKEY_GPIOKEYGPIOMIX_IN_KEY程序中,如果某键按下但尚未处理,则键值的最高位置1,键盘功能处理完后,其最高位清0。442键盘扫描程序键盘扫描程序可包含下列步骤首先判断有无键按下,如果有键按下,进行去抖处理。方法是10MS后再读键值看是否变化,如无变化说明不是抖动。然后分析键盘是否释放,如果释放了则进行相应的键盘处理。443键盘处理子程序该函数主要完成按键处理功能。为了实现这个函数,定义了一个结构体PAGE_KEYFUN,这个结构体中成员KEYNO表示哪个键按下了,成员(FUN)是指针函数,它指向按下该键所要执行的函数。从前面的介绍可知,本系统键盘分为7页,每页可按的键也不一样。例如第0页可按KEY1和KEY3键。设按KEY1后执行的函数为PAGE0KEY1FUN,按KEY3后执行的函数为PAGE0KEY3FUN,则可用一个PAGE_KEYFUN结构体数组表示它们这样键盘处理函数可按下列方法执行(1)找到某一页对应的结构体数组。(2)查找这一页哪个键按下。(3)由结构体数组,找出执行按下该键对应的函数入口地址(函数名),执行相应程序。函数原型如下444键盘任务子程序本系统每隔10MS进行1次键盘扫描,即每隔10MS调用一次键盘处理子程序。45AD采样模块AD采样模块包括频率测量模块和电压、电流采样模块。451频率测量模块电压、电流的正弦波信号经过波形变换后成为一个50HZ的方波信号。将该信号与单片机外部中断0引脚相连,当CPU检测到外部中断0引脚上出现下隆沿时执行外部中断0的中断服务程序。在该程序中,通过定时器T1的计数值可换算出电压、电流的频率,如果硬件电路误差不大的话,这个频率值就是50HZ。452电压、电流采样模块测到信号的频率后,就可以启动定时器0进行电压、电流的循环采样了。在外部中断0中断服务程序中启动定时器T1进行计数时的同时,以T(信号周期)/32的定时时间隔启动T0中断;在外部中断0关闭定时器T1的同时,才关闭定时器T0,这样,在一个信号周期内,就会出现32次定时器T0中断。另外,在对电压、电流进行采样前,还要分析前面采样的数据是否处理完了。只有前面采样的数据处理完了,才允许当前的采样;否则关定时器T0,取消该次采样。45数据处理模块得到了采样值,接下来就是数据处理了。数据处理模块主要是实现对采样电压、电流有效值的计算以及设置报警信息。在计算电压、电流有效值时,需要注意的是要先判断采样数据是否已计算过,如果已计算过就没必要再计算。计算完有效值后,要置计算完标识,以使采样程序知道可以采样新的数据。程序给每个参数都设置报警标识,当32个采样值中有好几个都超过门限值,说明柴油机输出不正常,则置报警标识为1。当程序检查到某个参数的报警信息为1时,显示模式立即变为2,即此时显示模式为报警信息显示模式,同时,CPU发出关油门信号,关闭油门。第五章系统调试51系统显示子程序的调试在PROTEUS仿真软件中,系统显示完全正常,但是放到硬件上数码管却完全显示乱码,不过LED指示标志灯却是正常亮与灭,既然程序在硬件上能运行,说明硬件电路没什么问题,有可能是字形码的设置问题,或数据的传送是否颠倒。最后锁定为数据位权高低有问题。按照我们的习惯,我们认为数码管的A,B,C,D,E,F,G,DP等段的位权是从低到高的,而通过实验现象的观察分析发现,这些位权其实是从低到高,即A段是最高位,因此,修改相应字形码后显示正常了。在用PROTEUS进行仿真时还碰到一个问题,那就是3连体数码管虽然能同时亮,但还是能发现各个数码管之间的点亮有短暂的先后视觉效应,而且亮的时间都非常短,感觉像是一闪而过。然后就猜想有这个先后视觉效应是正常的,毕竟动态显示的数码点亮都需要延时,而这个一闪而过的现象是否可以改变,让它亮的时间持久一些,于是,在送显子程序中加了一个别FOR循环,用于多次点亮数码管,使它亮的时间长了一些,而之后的先后视觉效应也就消除了,看起来三个数码管是一起点亮的,达到预期效果。52键盘处理调试在硬件电路板还没有制出来之前,一直是使用PROTEUS仿真软件对系统软件进行调试,由于仿真软件的仿真是在理想的环境下运行的,没有外界的干扰,也没有所谓的键盘抖动。因此程序中键盘处理这一模块中的每10MS调用一次键盘任务在仿真软件上行不通,因为在PROTEUS中,键盘一按下,没有所谓抖动,这个时刻应立即读取它的值,否则不可能读到键盘值。然而在实际的硬件电路板上,程序运行时,则必须是10MS调用一次键盘任务子程序。53频率测量的调试在用PROTEUS进行仿真时,一直测不到信号的频率,它总显示为0,经过反复的思考后仍然发现不了程序中有任何错误之处,最后,经同学帮忙,发现可能是数据溢出的问题,因为一个整型数据的最大值是65535,而那个子程序里面的一个整型数据J的值为1000000,数值溢出了,因此才使得后续产生错误的结果,然后把它修改为LONG型数据后,就能没到频率值50HZ了。而这里,其实只是一个纯粹的C语言问题,就看自己考虑是否周全。参考文献1张友德,等单片微型机原理、应用与实践上海复旦大学出版社,20032蔡美琴,等MCS51系列单片机系统及其应用2版北京高等教育出版社,20043苏家健,等单片机原理及应用技术北京高等教育出版社,20044王质朴,等MCS51单片机原理接口及应用北京北京理工大学出版社,20095何宏,等单片机厨师民接口技术北京国防工业出版社,20066张道德,等单片机接口技术(C51)版)北京中国水利水电出版社,20077李全利,等单片机原理及应用技术北京高等教育出版社,20018李群芳,黄建单片微型计算机与接口技术北京电子工业出版社,20019张毅刚,等新编MCS51单片机应用设计哈尔滨哈尔滨工业大学出版社,200310张先庭,向瑛等单片机原理、接口与C51应用程序设计多点温度测试系统北京国防工业出版社,2011附录A硬件系统原理图附录B硬件电路板实物图附录C程序代码“TIME0H”文件INCLUDEINCLUDE/文件包含INCLUDE“PAGEH“/文件包含INCLUDE/文件包含DEFINEC_SAMPLEFREQ32/宏定义UCHARACUSAMPLEVALUE32/全局变量UCHARACISAMPLEVALUE32UCHARDISPBUF3UCHARSHAPEBUF3UCHARBCALUFINUINTFVALUEUINTUVALUEUINTSAMPTIMEHUINTSAMPTIMELUINTX,YUINTDISPTIMEUCHARCH0UCHARC_ACVREF0UCHARC_ACIREF0DEFINEADC_POWER_ON_CHANNAL00XE0/P10为A/D输入DEFINEADC_POWER_ON_CHANNAL10XE1/P11为A/D输入SFRAUXR0X8ESFRADC_CONTR0XC5SFRADC_DATA0XC6SFRADC_LOW20XBESFRP1M00X91SFRP1M10X92DEFINEADC_POWER0X80/宏定义DEFINEADC_FLAG0X10DEFINEADC_START0X08DEFINEADC_SPEEDLL0X00DEFINEADC_SPEEDL0X20DEFINEADC_SPEEDH0X40DEFINEADC_SPEEDHH0X60SFRCH0XF9/寄存器定义SFRCL0XE9SFRCCON0XD8SFRCMOD0XD9SFRCCAP0H0XFASFRCCAP0L0XEASFRCCAPM00XDASBITEPCA_LVDIE6/PCA模块中断允许位定义SBITEADC_SPIIE5/AD采样模块中断允许位定义SBITCRCCON6/SBITCFCCON7SBITCCF0CCON0VOIDADDELAYUINTNUINTXWHILENX5000WHILEXVOIDINITADC/ADC采样初始化P1P1M0P1M10XFF/P1口全部设置为开漏模式ADC_DATA0/转换结果寄存器清0ADC_CONTRADC_POWER|ADC_SPEEDLL/开ADC工作电源,540个时钟周期/转换一次ADDELAY2/初次打开模拟电源,需适当延时UCHARGETADCRESULT/得到ADC采样值UCHARBAI,SHI,GE,TEMPADC_CONTRADC_POWER|ADC_SPEEDLL|ADC_START|CH_NOP_NOP_NOP_NOP_WHILEADC_CONTR/等待转换完成ADC_CONTR/关闭ADTEMPADC_DATABAITEMP100/51/1001010SHITEMP100/51/1010GETEMP100/5110TEMPBAI100SHI10GERETURNTEMPVOIDPCA_INITIATECMOD0X80CCON0X00CL0/PCA计数值初始化CH0CCAP0LC_1MSCOUNT256/1MS的定时值,CCAP0HC_1MSCOUNT/256CCAPM00X49/PCA模块1工作于16位计数器EPCA_LVD1/允许PCA模块中断EA1CR1/定时器开始运行/以下为PCA模块0的中断服务程序/VOIDPCA_INTERRUPTVOIDINTERRUPT6CL0CH0/计数值清0TICKS/时间滴答加1CCF00/清中断标志CCAPM00X49/PCA模块0工作于16位计数器VOIDTIMERINT_INITVOID/外部中断0与定时器0、1的初始化TMOD0X11/定时器0、1都工作在16位计数器TH1TL10/定时器1计数初值清0EX0ET01/开外部中断0和定时器0IT01/外部中断0的触发方式为下降沿触发VOIDEX0_ISRVOIDINTERRUPT0USING1STATICBITSTARTPLUSE0/静态位变量,用来记录下降沿位置STATICBITISFREQGET0/在还没测到周期时为0为启动T0,否则启/动T0UINTIUNSIGNEDLONGJIFSTARTPLUSE0/第一次,启动T1TR11/初次出现下降沿启动定时器1,开始计时IFISFREQGET1/如果前面已测到频率了,则可以启动定时器T0了TH0SAMPTIMEHTL0SAMPTIMELTR01ELSE/第二次,关T1TR10/第二次出现下降,一个完整的周期出现了,关定时器TR00ITH1256TL1/计算T1的计数值JC_SYSCLK/12FVALUEJ/I/测得频率I/32SAMPTIMEH0XFFFFI/256SAMPTIMEL0XFFFFI256/计算定时器T0初始值TH1TL10ISFREQGET1/已测到周期STARTPLUSESTARTPLUSEVOIDTIME0_ISRVOIDINTERRUPT1USING2STATICUCHARSAMPLECOUNT0/采样次数,最大32次STATICBITSAMPLESTEP0/采样电压,STEP1采样电流TH0SAMPTIMEHTL0|SAMPTIMEL/定时器0重新赋初始值/以下是电压采样阶段/IFSAMPLESTEP0IFBCALUFIN0/如果上次采样数据没处理完,关定时器T0,不采样TR00ELSEACUSAMPLEVALUESAMPLECOUNTGETADCRESULT/采样电压值保存SAMPLECOUNT/采样次数加1IFSAMPLECOUNTC_SAMPLEFREQ/如果32点采样完BUISELECT1/模拟开关接电流端BCALUFIN0/置电压采样数据尚未处理标识SAMPLECOUNT0/初始化下次采样的计数器SAMPLESTEP1TR00/关采样,当下一个沿到来时,由外部中断0启动/下一轮的采样/以下为电流采样阶段/ELSEIFBCALUFIN0/如果上次采样数据没处理完,关定时器T0,不采样TR00ELSEACISAMPLEVALUESAMPLECOUNTGETADCRESULT/采样电流保存SAMPLECOUNT/采样次数加1IFSAMPLECOUNTC_SAMPLEFREQ/如果32点采样完BUISELECT0/模拟开关接电压端BCALIFIN0/置电流采样数据尚未处理标识SAMPLECOUNT0/初始化下次采样的计数器SAMPLESTEP0/关采样,当下一个沿到来时,由外部中断0启动TR00/下一轮的采样VOIDMAININITADCTIMERINT_INITPCA_INITIATEDISPMODE0HOLD0PAGE0WHILE1SYSDISPTASKKEYTASK/以下为”DISPH”文件/DEFINEUINTUNSIGNEDINTDEFINEUCHARUNSIGNEDCHARDEFINEC_SYSCLK11059260DEFINEC_1MSCOUNTC_SYSCLK1/1000/12UCHARSHAPECODE160XFC,0X60,0XDA,0XF2,0X66,0XB6,0XBE,0XE0,0XFE,0XF6,0X7A,0X02,0X7C,0XEE,0X8E,0XCE/字型码/D,U,A,F,PUINTTICKSSBITS1P21SBITS2P22SBITS3P23VOIDDELAYUINTIUCHARJFORJ0J999INDATA999OUTDATAINDATA/100INDATAINDATA100OUTDATAINDATA/10OUTDATAINDATA10/查找字型码函数/DISP_BUF,要显示的3个数字的存放位置/SHAPE_BUF,对应数字字形码存放位置/DOT_POS,要显示小数点的位置,小数点位置从左到右依次为0,1,2,最后一位不显示小数点,当DOT的值大于等于2时,不显示小数点。VOIDFINDSHAPEUCHARDISP_BUF,UCHARSHAPE_BUF,UCHARDOT_POSSHAPE_BUF0SHAPECODEDISP_BUF0SHAPE_BUF1SHAPECODEDISP_BUF1SHAPE_BUF2SHAPECODEDISP_BUF2IFDOT_POSTIMEMSOLDTICKSTICKSRETURN1RETURN0/以下为UIFDISPH文件/INCL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论