电能表毕业论文智能电能表软件设计.docx

上传人:b****7 文档编号:26374487 上传时间:2023-06-18 格式:DOCX 页数:113 大小:193.71KB
下载 相关 举报
电能表毕业论文智能电能表软件设计.docx_第1页
第1页 / 共113页
电能表毕业论文智能电能表软件设计.docx_第2页
第2页 / 共113页
电能表毕业论文智能电能表软件设计.docx_第3页
第3页 / 共113页
电能表毕业论文智能电能表软件设计.docx_第4页
第4页 / 共113页
电能表毕业论文智能电能表软件设计.docx_第5页
第5页 / 共113页
点击查看更多>>
下载资源
资源描述

电能表毕业论文智能电能表软件设计.docx

《电能表毕业论文智能电能表软件设计.docx》由会员分享,可在线阅读,更多相关《电能表毕业论文智能电能表软件设计.docx(113页珍藏版)》请在冰豆网上搜索。

电能表毕业论文智能电能表软件设计.docx

电能表毕业论文智能电能表软件设计

摘要

本论文对智能电能表进行了详细的阐述。

主要讲述了一种对普通电能表进行扩展,从而实现分时计价功能的智能化电能表,并给出了软件设计及调试问题。

在论文完成过程中,主要进行了以下工作:

(1)对系统要求进行分析,并设计系统的整体结构

(2)把整体细分化,对每个模块进行详细设计

(3)绘制原理图和PCB板,并制成实验板

(4)按照硬件电路,编写软件程序

(5)调试阶段,调试各软、硬件模块,编写测试程序,验证系统的可用性,最后制成系统样机。

本论文主要对智能电能表的结构进行了较详细的阐述,并简要讲述了近来电能表的发展及研究动态。

具体分析了软件的两大模块:

键盘模块程序设计、LCD显示模块程序设计,并对主要芯片的使用做了说明。

同时也对硬件总体设计做了一些简要的阐述,并对编辑软件所使用的函数写了一些分析。

另外还介绍了绘制原理图所出现的一些问题,比如各个芯片之间连线及接口问题。

关键词:

键盘模块;LCD显示模块;时钟芯片

 

ABSTRACT

Thisstudywilldiscussabouttheintelligenceelectricenergymeterindetail.Itisanintelligentelectricenergymeterbyexpandingtothenormalelectricenergymeter,carriesoutthedividedchronometerprice,givesthesoftwaredesignandadjuststheproblem.Wedothefollowingworkinthecompletionofthethesis.

(1)Analyzetherequirementofthesystem,anddesignthewholestructureofthesystem.

(2)Subdividethewhole,anddesigneachmoduleinparticular.

(3)ProtractschematicplotandPCBplot,andcrankoutexperimentboard.

(4)Writesoftwareprocedureaccordingtohardwarecircuit.

(5)Indebuggingmoment,debugeachsoftwareandhardwaremodule,writetestingprocedure,validatetheusabilityofthesystem,andfinallycrankoutthesystemsample.

Thisstudywilldiscussabouttheintelligenceelectricenergymeterindetail,andtelloftherecentdevelopmentofelectricenergymeterandtheresearchstatementinbrief.Thisstudyanalyzesmateriallythetwoparts:

keyboardpartprogramdesignandLCDshowpartprogramdesign,anddoestheexplanationtotheuseofmainchip.Alsoitexplainsthehardwaretotaldesigninbrief,andwritessomeanalysisabouteditingthefunctionwhichisusedofsoftware.

Moreoverthisstudyalsointroducedsomeproblemsaboutdrawingtheprinciplediagram.Forexample,theconnectedlineeachchipandinterfaceproblem.

Keywords:

keyboardpart;LCDshowpart;clockchip

 

 

1概述

1.1本课题研究背景及意义

近年来,随着经济的快速发展,电力需求的不断增长和能源价格的不断提升,用电紧张已经成为突出的问题摆在我们面前。

而电力又不是可以储存的特殊商品,某些时段用电多,其他时段用电少。

用电高峰时电力供不应求,用电低谷时又电力过剩。

为了应对这样的难题,可以采用分时电价来缓解供需矛盾,提高电力利用效率。

分时电价是指在不同时段采用不同电价,根据用电需求和电网负荷将每天的时间划分为用电高峰时段(6:

00~22:

00)和用电低谷时间段(22:

00~6:

00),高峰时段执行较高电价(0.8元/度),低谷时段执行较低电价(0.6元/度)。

供电部门通过对不同时段的用电实行不同电价,用经济手段鼓励用户主动采取避峰填谷的措施,从而使电力负荷曲线变缓,以提高发电设备的利用率,同时减小由于负荷曲线变化太大而引起的不安全因素。

20世纪30年代,国外就开展了电力负荷控制方面的研究,实行分时计费是一种经济有效地调节负荷曲线的方法。

因此,开发一种简单实用的分时计量电能表变得尤为重要,本课题通过对一般电能表进行扩展,从而实现分时计量功能。

1.2国内外研究的动态

近几年,随着我国国民经济稳步发展,城市居民家庭用电不断增加,用电管理方式也随之改革,上海、武汉等国内大中城市逐步推出分时优惠电价政策,分时电价方式已在国内各大城市得到迅速推广。

分时段计费的复费率电能表用户逐渐由工业用户逐渐由工业用户为主转向居民用户为主,单相复费率电能表的市场需求量不断增长。

据全国电工仪器仪表标准化技术委员会秘书处统计,近一年来,办理复费率电能表产品型号注册的企业近300家,注册频率呈上升趋势。

目前电子式分时电能表已进入非常成熟的阶段。

它是一种静止式无任何机械运动部件的固态电能表,由电压互感器、电流互感器、高精度高速A/D变换器、电能计量专用集成电路、实时时钟、数据存储器、大屏幕液晶驱动及显示器、数据通信接口、开关电源等模块构成,精度通常在1.0级至0.5级,可靠性好,易于实时记录,大部分型号均带有预付费功能可供选用。

采用带有预付费功能时,电量有电钥匙、IC卡等输入,剩余电量不足时,可根据用户负荷性质选择输出音响及告警,显示电量不足,启动表内继电器跳闸等功能。

具有失压断流记录、RS-232、RS-422、RS-485等标准通信接口,可远程定时抄录计量数据、本月及上月最大需求量、峰、平、谷最大需求量、脉冲输出,监控通过密码设定,方可读出与修改数据等,时段设定通常有8个。

目前常用的这一系列产品有DSSD331、D66、DTSD341等。

1.3本课题的可行性分析

电在我们的日常生活中已不足为奇,而电能与当今社会的科学进步、经济发展和人们的生活都密切相关。

它广泛应用于农业生产,照明,信息通讯,交通运输,自动控制,日常生活,科学实验等各个方面,为现代社会的精神文明的发展提供物质基础。

电能是继蒸气时代之后的又一类二次能源。

化学燃料(煤、石油、天然气)、核烯料、太阳能、网通、水能、潮汐能、地热能等一次能转换二次能源——电能。

同时电的对整个人类的影响意义深远,它不公从根本上改变了整个工业生产的面貌,而且还直接改变了人类的生活方式,使人类迅速跨进了电气时代。

由于电是一种高效的便于工作于输送的能源。

电力出现后,很快就被应到炼钢、建筑、纺织等生产行业以及电车、地下铁路等城市公共交通部门,并且已成为家庭主要使用的能源之一。

电能的广泛使用注定了人们需要合理、高效的使用,因此,分时计费电能表就应时而生。

本文介绍了一种简单的分时计费电能表。

该系统可以作为为外的模块安装到普通电能表上,从而实现分时计价功能。

它是用TS150位移传感器对普通电能表进行光电采集,对脉冲进行计数并将计数值转化为电量,由MC146818提供相应的时间来判断用电的时段,并计算相应时段的电量和电费从而实现分时计费的功能。

1.4设计要求及预期研究成果

本设计利用单片机控制普通电能表,实现分时计费的功能。

本系统可以作为额外的模块安装到普通电能表,这样用户已安装的普通电能表不需要更换为新的电能表,仅仅另外安装了本系统后就可以作为一个标准的智能电能表使用。

本系统实现以下功能:

(1)记录高峰用电量

(2)记录低谷用电量

(3)记录总用电量

(4)计算并记录高峰时段用电电费

(5)计算并记录低谷时段用电电费

(6)计算并记录总电费

(7)显示高峰用电量

(8)显示低谷用电量

(9)显示总用电量

(10)显示高峰时段用电电费

(11)显示低谷时段用电电费

(12)显示总用电电费

(13)清除电量记录和电费记录

记录和计算用电量、电费都由单片机编程完成,显示功能由单片机控制LCD实现。

相应的显示功能选项由键盘按键选择。

此外,断电后所有存储数据不丢失,电表绝对时间标准仍正常运转。

 

2系统简介

2.1系统总体方案设计

本系统的设计将整个系统划分为多个模块,简化设计流程。

本系统可以简单的划分为5个模块:

单片机控制模块、电脑时钟模块、光电转换模块、LCD显示模块、键盘控制模块。

其中测试模块是以AT89C51单片机为核心进行设计的,这里充分利用了单片机的数据处理及实时检测能力,利用单片机接受光电模块送来的电脉冲,对脉冲进行计数,将计数值转化为电量,根据由时钟模块中取得的小时,判断用电的时段,计算相应时段的电量和电费,并记入总电量和电费;接受键盘的中断,根据不同的按键显示不同的功能;控制LCD显示模块,将CPU内部的数据送到LCD上显示,并显示必要的提示信息。

而且此系统可以广泛应用于社会,通过分时计费来控制并约束用户的用电量,从而达到合理使用电能。

同时本系统也采用了四大关键辅助性算法:

这里要说明的几个算法都不参与硬件的驱动,完全是纯软件的算法。

虽然很短小,但是简练的完成了其目的。

在整个系统控制程序中的地位,不亚于其他与硬件接触的函数。

是整个系统中介于外部硬件数据与CPU数据之间的核心。

(1)算法NumsToArray:

这个算法的功能是,将作为第一参数传递的int型整数的各位分离,按照由高位到地位的顺序依次放入作为第二参数传递的数组中。

方便其他函数使用数组中的数字,利用字库得到相应的字型码。

此算法中其实包含2个子算法。

如传递一个整数54321到函数中,第一个子算法将54321的各位分离放入数组,但是此时得到的序列为倒序,即:

数组下标0,1,2,3,4分别存放数字1,2,3,4,5。

第二个子算法将数组中的元素进行倒序运算,得到需要的顺序,即:

数组下标0,1,2,3,4分别存放5,4,3,2,1。

(2)算法:

ArrayToCharacters:

此算法的功能是,将作为第一参数传递的,存放1位数字的数组,通过查字库,将得到的字型码按顺序放入作为第二参数传递的将要显示的字符库中。

此算法运算后得到的字符库就可以送入LCD的显示缓存区,显示出相应的图形了。

此算法利用NumsToArray算法得到的数组,查找字库,产生字符库。

这两个函数作为核心算法被显示电量电费等函数使用。

(3)算法ArrayToDigitalI:

此算法的功能是将作为第一参数传递的存放一位数字的数组,转化为一个整数返回。

此算法一般用来将存放在键盘缓存区的一位数字序列转化为一个整数。

其他函数利用返回的整数设置相应变量的值。

此函数被设置高峰时段,电表转数等函数使用作为核心算法。

(4)算法ArrayToDigitalF:

此算法的功能是将作为第一参数传递的存放一位数字的小数序列数组转换为一个浮点数返回。

此算法一般用来将存放在键盘缓冲区的一个小数序列转化为浮点数返回给调用函数。

此算法实现时将序列以小数点(系统中为D键)为轴心分成两半,每半都是一个一位整数序列,将两个序列传递给ArrayToDigitalI,ArrayToDigitalI返回两个整数。

将小数点后面的整数转换成小数加到小数点前面的整数上完成到浮点数的转换。

此函数被设置电费函数调用作为核心算法。

2.2硬件各模块的设计

本系统的硬件部分主要由主机、LCD显示模块、光电转换模块、电脑时钟模块、键盘控制模块、看门狗模块六部分组成。

系统原理框图如图2.1所示:

2.2.1主机

本课题通过单片机来实现对电脉冲的采集和计数,因为单片机是按工业测控环境要求设计的,抗干扰能力强,环境要求不高,可适应的温度范围宽,灵活性好,体积轻,可以降低系统的成本获得较好的性能。

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM——FlashProgrammableandErasableReadOnlyMemory)的低电压,主性能CMOS8位微处理器,俗称单片机。

该器件ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容,而且芯片上的EEPROM允许在线(+5)电擦除、电写入或采用通用的非易失存储编程器对程序存储器重复编程。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的At89C51是一种高效微控制器,能为很多嵌入式控制系统提供一种灵活性高且价廉的方案,所以我们选用AT89C51[1]。

2.2.2电脑时钟模块

实时时钟电路是控制系统中常用的功能模块。

在本系统中我们采用了Motorola公司的MC146818可编程时钟芯片。

MC146818是专用于稳中有降类微处理器与单片机系统的时钟集成电路。

它带有50字节的低功耗静态RAM,可进行时、分、秒和年、月、日及星期的计数,并有自动的月结束识别和闰年处理功能,具有12/24小时和AM/PM的12小时计时功能,既可与Motorola系列的单片机接口,又可以与Intel的微处理器接口[2]。

我们利用该芯片将计费段的时间存储起来,在各时间段开始向单片机的INT0端口申请中断,在不同的时段使系统执行不同的计费程序。

CPU在计数满一度电的时候执行中断程序,此时CPU读取外部RAM中存领教的钟点,判断不同的时段,执行不同的任务。

2.2.3LCD显示模块

由于液晶显示器(LCD)具有工作电压低、微功耗、显示信息量大和接口方便等优点,所以本系统采用16*2液晶显示器。

LCD显示模块通过接口扩展芯片连接到CPU,使用时只需要CPU通过芯片将显示用的字码存储在LCD模块的内部存储区,LCD就可以显示出相应的字符[3]。

2.2.4光电转换模块

光电转换模块用于获取普通电能表记录的用电量,在普通电能表的旋转铝盘上打一个很小的检测孔提取光脉冲。

铝盘每旋转一圈,模块会检测到一个光脉冲,经光电耦合并加以整形放大后转换成电脉冲,送到CPU的T1端用作计数触发脉冲。

普通电能表的铭牌上标有每KW•h多少转,其含义为电能表转数每达这一数值就是用了一度电(即1KW•h)[4]。

将从电能表上提取转换后的电脉冲信号送入单片机的T1端并进行计数,编程时将T1计数器的计数模值设为电能表的转数,当计数器计数溢出时就可以判断电能表已经用了一度电。

测试时可以使用实验室普通的信号发生器送出脉冲信号代替电能表的转数脉冲,送入单片机的T1端。

2.2.5键盘控制模块

键盘模块由普通的16键非编码键盘与Intel8279可编程键盘/显示接口芯片组成完整的编码键盘电路。

当键盘上有键按下时Intel8279会将按键转换为键码存储在一个FIFO(FirstInFirstOut,先入先出)队列中,并向CPU申请中断。

CPU得知中断以后,从Intel8279的存储区读出键码,判断相应的按键,决定执行相应的功能[5]。

2.2.6看门狗模块

本系统的看门狗由一块MAX813L芯片和一个开关组成,主要用于抗干扰和复位。

看门狗实际上是一个计数器,一般给看门狗一个大数,程序开始运行后看门狗开始倒计数。

如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始倒计数。

如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。

此外,WatchDog[5]还可以在程序陷入死循环时让单片机复位而不用整个系统断电,从而保护你的硬件电路。

此外,因为考虑可能遇到停电情况,此时电能表不转,无脉冲信号给出,但绝对时间标准仍须正常运转,否则整个系统将打乱,因此系统还配置了备用电源。

 

3软件设计

软件设计的成功与否关系到整个系统能否具有使用灵活。

操作简便,可靠性强等优点,而设计良好胡软件能够做到在较少地改变硬件电路的情况下,方便地改进系统的功能,这就对软件的设计提供了较高的要求。

遵循“自顶向下,逐步求精“的结构化设计原则,先将任务层次化,然后对每一层再逐步细化,每一层实现的功能尽量是独立的,彼此之间互相影响应该较少,然后按照与划分相反的过程编写,调试程序,待所有子程序都编写设计通过后,依它们之间的逻辑顺序组合起来,构成完整的程序软件。

采用这种方法,不仅使软件可读性好,维护方便且易于修改移植。

如用户有特殊要求需要改动软件时,则只需修改或替换某子任务所对应的子程序即可,从而加快了系统研制进度,缩短了软件开发周期[6]。

本系统要完成的任务有两大部分:

键盘模块任务和LCD显示模块任务。

键盘模块任务通过对不同键的设置,实现分时计费,主要负责对高峰时段电价、低谷时段电价、高峰起始时间、高峰结束时间、低谷起始时间、低谷结束时间和普通电能表每度电的转数的保存记录,并以这些变量作电量计费的标准进行运算,计算出不同时段的电费,每次键盘按键中断,系统函数都会根据不同的键值调用不同的功能函数。

而LCD显示程序则是将CPU处理过后的数据相应的显示在液晶屏上。

本系统的软件编程同样是按照模块设计的。

首先解释本系统软件的部分全局变量。

initset结构用于保存高峰时段电价、低谷时段电价、高峰起始时间、高峰结束时间、低谷起始时间、低谷结束时间和普通电能表每度电的转数。

这些变量用作电量计费的标准。

键盘模块有修改这些变量的功能,以使智能电表系统可以适应不同环境。

initset结构定义的全局变量为Set,Set将initset结构中的变量实例化。

coulometer结构定义电能表在高峰时段使用的电量、低谷时段使用的电量和使用的总电量。

coulometer结构定义的全局变量为Coulo。

fee结构记录当前使用的电费,包括高峰时段使用电量的电费,低谷时段使用电量的电费和使用的总电费。

fee结构定义的全局变量为Fee。

在程序中由于要用到外部存储器或者IO端口的直接地址,所以利用KeilC51中绝对定址关键字_at_定义了各种外部端口和IO端口的地址。

其中RAM6264定义为外部RAM中存储的时刻的地址。

CommandPortOf8279为键盘控制芯片8279的命令口地址,DataOf8279定义为8279数据口的地址。

CommandPortOf89C51定义为LCD接口芯片89C51的控制口地址,APortOf89C51定义为89C51的P0口地址,CPortOf89C51定义为89C51的P2口地址,但是在程序中没有直接使用P2口地址,而是通过89C51的命令口使P2口的各位分别置位来控制P2口的。

全局函数Init_CPU()和Init_89C51andLCD()用来对CPU和液晶显示模块进行初始化。

Init_CPU()用于开放必要的中断允许,将T1口配置为计数器,用来检测电脉冲信号。

Init_89C51andLCD()将89C51的P0、P1、P2口配置成方式0输出模式。

打开LCD显示并清屏。

下面是系统总体程序框图,由主程序和中断服务程序组成,如图3.1和图3.2。

电能表上电后执行初始化,包括将各时段、时间、日期、表号、用电数据等读入内部数据缓冲区,接着清WDT,然后检查时段是否需要更新,若需要,则转入中断处理部分。

执行一系列操作后转到LCD显示程序,根据显示缓冲区的内容按要求循环显示各种电能参数,并根据相关数据处理达到从那时起计量电能的目的。

当CPU对T1端的脉冲不断计数,直至计数到满一度电的时候,T1产生一个中断。

CPU执行中断,首先读取MC146818的RAM的钟点值,判断不同的时段。

根据不同的时段将不同时段的用电量加1,计算出相应时段的电费,并计算出总用电量和总电费。

3.1键盘模块

本系统的编码键盘每按下一个键,就中断一次。

假如设置某个功能时需要按功能键B和输入数字24,就需要按键3次,键盘模块会发出3次中断申请。

这样就带来一个问题:

由于每次中断都是调用同一个中断函数,这样,在按下功能键B后,如何将接下来按下的2和4识别为一个整数24并放入相应变量中,而不是认为按下2键是显示总电量,按下4键是显示低谷时段电费?

智能识别技术的原理是在B键别按下时系统将标记一个标志位,表明B键已经被按下,然后2键被按下时,系统首先查看标志位有没有被设置,当它发现标志位已经被标记为B时,它即了解到这是一个功能设置,将2放入一个输入缓冲区,而不是显示总电量。

并等待下次按键。

接着4键被按下后,系统发现标志位被标记为B,它将4放入2后面的缓冲区,等待下次按键。

然后结束键(本系统中为E)被按下,系统发现标志位被标记为B,又发现E为结束键,系统利用算法将缓冲区中的2和4转换为一个整数送入到相应的变量中完成设置。

然后系统中的标志位被清除,以后的按键回归到正常状态。

系统利用智能识别技术,接受键盘输入,对内部的计费标准,如高峰电费、电表转数/KW•h等进行设置[7]。

键盘程序框图如图3.3所示:

键盘模块包含两个中断函数,KeyBoard和DogSniffer,KeyBoard函数用于处理键盘按键事件,每次键盘按键中断,KeyBoad函数会检查按键的键值,根据不同的键值调用不同的功能函数。

DogSniffer函数为侦探狗技术的实现函数,当在键盘上按下功能键时KeyBoard函数调用WakeupDog函数,唤醒侦探狗,其实质是向T0定时器送入定时初值,并使T0开始计时。

当T0每65ms定时中断一次。

每次中断后系统调用中断处理函数DogSniffer,DogSniffer函数判断功能键标志是否被标记,如果功能键标志被标记,而且按键时间超过T0的100次计数,即6.5S。

则DogSniffer使功能键标志复位。

如果功能键标志没有被标记,则DogSniffer使T0中断计数复位。

并且不在向T0送入定时初值。

如果功能键标志被标记,但是T0中断计数未达100次,则将T0中断计数加1,并向T0送入定时初值,开始下次定时。

以下是键盘模块程序中使用的函数列表,其中NumsToArray等四个辅助算法函数在第二部分,系统整体设计中已经详细描述,这里不在说明。

voidDogSniffer(void)interrupt1using0;

voidKeyBoard(void)interrupt2using0;

voidShowHighCoulometer(void);

voidShowLowCoulometer(void);

voidShowAllCoulometer(void);

voidShowHighFee(void);

voidShowLowFee(void);

voidShowAllFee(void);

voidClear(void);

voidWakeupDog(void);

voidSetHighFee(ucharkey);

voidSetLowFee(uchar

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1