版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业设计(论文)题目:电特性测量系统软件设计院(系)电子信息工程学院专业自动化班级姓名学号导师2012年6毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名:日期:
学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。作者签名: 日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。涉密论文按学校规定处理。作者签名: 日期:年月日导师签名:日期:年月日
注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。3.附件包括:任务书、开题报告、外文译文、译文原文(复印件)。4.文字、图表要求:1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画3)毕业论文须用A4单面打印,论文50页以上的双面打印4)图表应绘制于无格子的页面上5)软件工程类课题应有程序清单,并提供电子文档5.装订顺序1)设计(论文)2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订
指导教师评阅书指导教师评价:一、撰写(设计)过程1、学生在论文(设计)过程中的治学态度、工作精神□优□良□中□及格□不及格2、学生掌握专业知识、技能的扎实程度□优□良□中□及格□不及格3、学生综合运用所学知识和专业技能分析和解决问题的能力□优□良□中□及格□不及格4、研究方法的科学性;技术线路的可行性;设计方案的合理性□优□良□中□及格□不及格5、完成毕业论文(设计)期间的出勤情况□优□良□中□及格□不及格二、论文(设计)质量1、论文(设计)的整体结构是否符合撰写规范?□优□良□中□及格□不及格2、是否完成指定的论文(设计)任务(包括装订及附件)?□优□良□中□及格□不及格三、论文(设计)水平1、论文(设计)的理论意义或对解决实际问题的指导意义□优□良□中□及格□不及格2、论文的观念是否有新意?设计是否有创意?□优□良□中□及格□不及格3、论文(设计说明书)所体现的整体水平□优□良□中□及格□不及格建议成绩:□优□良□中□及格□不及格(在所选等级前的□内画“√”)指导教师:(签名)单位:(盖章)年月日
评阅教师评阅书评阅教师评价:一、论文(设计)质量1、论文(设计)的整体结构是否符合撰写规范?□优□良□中□及格□不及格2、是否完成指定的论文(设计)任务(包括装订及附件)?□优□良□中□及格□不及格二、论文(设计)水平1、论文(设计)的理论意义或对解决实际问题的指导意义□优□良□中□及格□不及格2、论文的观念是否有新意?设计是否有创意?□优□良□中□及格□不及格3、论文(设计说明书)所体现的整体水平□优□良□中□及格□不及格建议成绩:□优□良□中□及格□不及格(在所选等级前的□内画“√”)评阅教师:(签名)单位:(盖章)年月日教研室(或答辩小组)及教学系意见教研室(或答辩小组)评价:一、答辩过程1、毕业论文(设计)的基本要点和见解的叙述情况□优□良□中□及格□不及格2、对答辩问题的反应、理解、表达情况□优□良□中□及格□不及格3、学生答辩过程中的精神状态□优□良□中□及格□不及格二、论文(设计)质量1、论文(设计)的整体结构是否符合撰写规范?□优□良□中□及格□不及格2、是否完成指定的论文(设计)任务(包括装订及附件)?□优□良□中□及格□不及格三、论文(设计)水平1、论文(设计)的理论意义或对解决实际问题的指导意义□优□良□中□及格□不及格2、论文的观念是否有新意?设计是否有创意?□优□良□中□及格□不及格3、论文(设计说明书)所体现的整体水平□优□良□中□及格□不及格评定成绩:□优□良□中□及格□不及格教研室主任(或答辩小组组长):(签名)年月日教学系意见:系主任:(签名)年月日
三相电特性测试软件设计摘要近年来随着社会对电力需求量的不断增长,电能紧缺问题日趋严重,极大地制约着社会经济的发展。我国电力工业的迅速发展,电能质量对于电网的安全经济运行,保证工业产品质量和科学实验的正常进行以及降低能耗等均有重要意义。为做到节约电能并合理高效地利用电能,这就需要对电力参数进行准确、实时地监测;此外,对于电力参数进行高精度、多参数的测量,又是充分了解电网的运行状况,寻找并解决电力系统中出现问题的重要途径。因此,对于电力参数的测量,尤其是高精度、多参数、低价格、便携、稳定的实时测量就显得尤为重要,也一直是人们研究的一个重要的方向。为解决以上问题,本设计选用ARM7核的LPC2124芯片为测量系统的核心,主要针对我国电力系统供配电的实际情况,通过ARM7单片机为核心,配以相应的外围电路和功能软件,采用交流采样技术实现多种电力参数的在线实时测量和数据分析,为电网的安全经济运行提供可靠保证。以提高三相电参数的测量速度和精度。关键字:三相电;交流采样;实时测量ThreephaseelectriccharacteristicmeasurementsoftwaredesignAbstractInrecentyearsalongwiththesocialdemandofelectricpowerincreasing,energyshortageisbecomingmoreandmoreserious,whichrestrictsthedevelopmentofsocialeconomy.Therapiddevelopmentofpowerindustry,powerqualityforpowersystemsafeandeconomicoperation,ensurequalityofindustrialproductsandscientificexperimentwithnormalandreducedenergyconsumptionhasimportantsignificance.Inordertoachieveenergysavingandhighefficientuseofenergy,whichisneededforpowerparametersforaccurate,real-timemonitoring;inaddition,theelectricparameterswithhighaccuracy,multiparametermeasurement,andfullyunderstandtheoperationofpowersystem,findandsolveemerginginpowersystemtheimportantwayoftheproblem.Therefore,forthemeasurementofelectricpowerparameters,especiallyhighaccuracy,multiparameter,lowprice,portable,stableandreal-timemeasurementisparticularlyimportant,peoplehasalwaysbeenanimportantdirectioninthestudy.Inordertosolvetheproblemabove,thisdesignusesARM7nuclearLPC2124chipmeasurementsystemforthecore,mainlyforthepowersystemofourcountrydistributionoftheactualsituation,throughtheARM7single-chipmicrocomputerasthecore,withacorrespondingperipheralcircuitandsoftware,adoptingACsamplingtechnologytoachieveavarietyofelectricalparameteron-linereal-timemeasurementanddataanalysis,asthepowersystemsafeandeconomicoperationtoprovideareliableguarantee.Inordertoimprovetheelectricparametermeasuringspeedandaccuracy.Keywords:three-phase;ACsampling;measurement目录摘要 iAbstract ii1绪论 11.1前言 11.2本课题的研究背景、研究意义及国内外相关研究情况 12三项电特性测量软件设计方案 12.1基本功能要求 12.2总体方案设计 12.2.1硬件平台 12.2.2开发环境与仿真 12.2.3开发语言 12.2.4软件总体结构 13系统的初始化 13.1系统的初始化的含义 13.1.1初始化的执行顺序 13.1.2系统的启动代码 14数据采集程序和数据处理 14.1数据采集技术简介 14.2A/D寄存器的描述 14.2.1A/D控制寄存器ADCR 14.2.2A/D数据寄存器ADDR 24.3A/D的基本操作 34.4数据处理 34.5A/D采集功能介绍及软件编程 75键盘显示模块 125.1关于键盘使用的简单介绍 125.2键盘控制模块的功能介绍及程序 135.2.1键盘扫描头文件Keyboard.h 145.2.2按键扫描去抖程序 146液晶显示模块 176.1液晶简介 176.1.1LCD介绍 176.1.2LCD显示的原理 176.1.3LCD的分类 186.2液晶显示模块 186.2.1点阵式液晶显示器LM12864简介 186.2.2液晶显示流程图以及LCD驱动 196.3LCD显示的应用程序 296.3.1LCD的简单GUI实现 296.3.2LCD实时时钟显示模块 306.3.3LCD的实时时钟软件编程 316.3.4外部扩展I2C 356.3.5LCD显示电特性参数 377电特性参数的计算 417.1电特性参数 417.2采用过零点检测测量周期的软件编程Guolindian.C 427.3电特性参数软件程序 448Proteus仿真 458.1proteus简介 458.2电路仿真 458.3分散加载文件 468.4系统的电路图以及proteus中的仿真结果 488.4.1系统的电路图 488.4.2proteus中的仿真结果 48结束语 51致谢 52参考文献 53毕业设计(论文)知识产权声明 54毕业设计(论文)独创性声明 551绪论1.1前言能源是人类社会赖于生存和发展的基础,电能作为能源的第二次形式,具有简单、方便、可靠等特点,是现代社会运行的主要能源之一。充足、可靠的能源是提高经济高速发展、社会正常运行的基本前提。上世纪六十年代以来,微电子、计算机、电力电子技术在各个领域广泛应用,位现代工业的自动化、提高劳动生产率开辟了广阔的前景。近年来随着大功率电力电子技术的发展以及它们的广泛应用,使得非线性负载大量的增加,给供电设备造成了很大的影响。本文主要研究基于数字采样测量的三相电参数测量系统,主要包括电压、电流、频率、相位、功率因数、有功功率、无功功率,视在功率,电能等的测量。1.2本课题的研究背景、研究意义及国内外相关研究情况电力是国家经济发展的命脉,随着社会对电力需求量的不断增长,工业、农业、商业、居民用电的日益增长,供电量日益增加,电能作为一种具有多种参数指标、直接反映电力企业经济效益的商品备受重视。随着工业技术的不断进步,对电力的需要越来越大,电能紧缺问题日趋严重,极大地制约着社会经济的发展。近年来,我国电力负荷急剧增大,各种非线性负载,特别是新型电力电子器件在电力系统、工业各部门和家用电器产品中的日益广泛应用,给供电设备的电能质量造成了极大的影响。因此,在大多数情况下,电力信号己不是标准的正弦信号,而是一种复杂的周期信号。国内电力参数检测技术的研究和开发起步较晚,目前对电力参数测量的方式基本上可分为芯片转化为有效值测量,直接离散时序测量和多谐波测量等。相对国内而言,国外对电能质量的研究起步就比较早,也已经取得了很多关于这方面的研究和应用成果,世界对电能质量的认识程度也越来越高,每隔两年就召开一次电能质量与电力谐波学术会议。在电能质量检测产品研究领域,尤其是这些领域的高端产品在全球市场的份额,几乎是被美国的FLUKE公司、瑞士的LEM公司、瑞典的UNIPOWER公司等国际知名公司占据,这些公司的技术水平为国际最先进,当然价格也非常昂电能质量对于电网的安全经济运行,保证工业产品的质量和科学实验的正常进行以及降低能耗等均有重要意义。为了改善这一状况,对电力系统进行完整分析和监测是成功的关键。此外,对于电力参数进行高精度、多参数的测量,又是充分了解电网的运行状况,寻找并解决电力系统中出现的问题的重要途径。因此,对于电力参数的测量,尤其是高精度、多参数、低价格、便携、稳定的实时测量就显得尤为重要,也一直是人们研究的一个重要方向。在我国电力工业领域,电网质量的问题已经成为关键,电力参数的分析和监测已经成为国际上讨论和研究的重点。2三项电特性测量软件设计方案2.1基本功能要求(1)熟悉工厂供电技术;(2)熟悉测量系统硬件电路原理;(3)设计软件结构;(4)掌握ADS1.2开发工具;(5)熟练运用PROTEUS仿真;(6)编写程序代码及调试;(7)软、硬件系统联调。2.2总体方案设计2.2.1硬件平台课题主要研究电特性测量系统的软件程序设计。选用的是ARM为核的LPC2000系列的芯片,LPC2000系列是NXP公司生产的以ARM7TDMI-S核为基础的嵌入式处理器,在芯片内部配置了大量的接口及功能模块。本设计选用的是LPC2124芯片,LPC2124具有较小的64引脚封装,低功耗的特点,以及多个片内外设(如32位定时器、A/D转换器、外部中断等),多个32位定时器,4路10位ADC,内置多种串行通信接口以及多达9个外部中断,因此特别适用于工业控制、医疗系统访问控制、通信网关、协议转换器、嵌入式MODEM等各种类型的应用。2.2.2开发环境与仿真本课题选用的是ADS1.2开发工具,ADS1.2是ARM公司推出的ARM集成开发工具,具有用户多、编译效率高、支持的ARM内核多的特点。ARMADS全称为ARMdeveloperSuite,是ARM公司推出的ARM集成开发工具,成熟版本为ADS1.2,他的前身是SDT,SDT是ARM公司几年前的开发环境软件。ADS1.2支持ARM10之前的所有ARM系列微控制器,支持软件调试,支持汇编、C语言、C++源程序,具有编译效率高、系统库功能强等特点。本课题用ADS1.2开发工具围绕LPC2124片上的基本功能模块实现三相电特性的测试,最终通过了PROTEUS的仿真验证。PROTEUS是英国Labcenter公司推出的适合嵌入式设计仿真与开发的仿真软件,使用PROTEUS软件可以完全脱离硬件平台来学习嵌入式系统,可以说是嵌入式学习的一次革命。2.2.3开发语言本课题软件用的语言主要有C语言,还有启动代码中所用到的汇编语言。本文选用C语言主要是由于C语言有以下优点:(1)寄存器分配,数据类型等由编译器管理;(2)编程及调试的时间减少,大大缩短开发周期;(3)明显增加软件可读性,便于改进和扩展。2.2.4软件总体结构本系统主要针对我国电力系统供配电的实际情况,通过ARM7单片机为核心,配以相应的外围电路和功能软件,采用交流采样技术实现多种电力参数的在线实时测量和数据分析,为电网的安全经济运行提供可靠保证。本课题主要研究电特性测量系统的软件程序设计。本课题的软件部分主要是通过实时采样电流电压的瞬时值,以及过零检测,进而计算出电流电压的有效值、频率值、有用功率、无用功率、视在功率、功率因数等电力参数。本测量系统的软件设计主要分为以下几个模块:(1)主程序模块(2)电压、电流采集程序(3)频率采集程序(4)数据处理程序(5)时钟日历程序(6)键盘服务程序(7)显示服务程序本设计拟采用ADS1.2集成开发工具编写C语言程序实现测量系统的相关功能。数据的处理与计算是程序设计的主要部分。系统基本测量的参数主要包括:电流有效值、电压有效值、有功功率、无功功率、视在功率、功率因数等。首要环节是对输入的电气信号进行离散化,即采样。根据被采集信号的不同,数据采集可分为直流采样和交流采样两大类。对比分析后,系统选用交流采样,数值的计算采用离散的电压电流有效值计算公式来实现。为了提高ARM7核的LPC2124芯片程序编写效率,系统软件采用了分模块编写的方法,用C语言和汇编语言混合编写。对于LPC2124和各模块的初始化、数据采集程序采用汇编编程,对于主程序、键盘显示等通用性较强程序,采用C语言编写。本系统的主要功能模块有数据采集模块、数据处理模块、时钟模块,按键显示模块等。所有软件模块的功能都在主控模块的调配下协调执行,主控模块首先对系统进行初始化操作,包括CPU初始化、I/O初始化、A/D初始化、LCD初始化、时钟初始化、异步通讯初始化等。随即对数据进行采集、处理、显示。然后判断是否有键按下,根据判断结果,执行相应按键服务程序。系统的主要电特性参量介绍:(1)电压有效值:让恒定电压和交变电压分别加在阻值相等的电阻上,使它们在相同时间内产生的热量相等,就可以把该恒定电压的数值规定为这个交变电压的有效值.(2)电流有效值:将一直流电与一交流电分别通过相同阻值的电阻,如果相同时间内两电流通过电阻产生的热量相同,就说这一直流电的电流值是这一交流电的有效值。(3)有功功率:在交流电路中,电源在一个周期内发出瞬时功率的平均值(或负载电阻所消耗的功率),称为"有功功率"。(4)无功功率:在正弦电流电路中,复功率的虚部:,且供给电感的无功功率为正值。(5)视在功率:在电工技术中,将单口网络端钮电压和电流有效值的乘积,称为视在功率(apparentpower),记为S=UI。(6)功率因数:在交流电路中,电压与电流之间的相位差(Φ)的余弦叫做功率因数,用符号cosΦ表示,在数值上,功率因数是有功功率和视在功率的比值,即cosΦ=P/S。系统主程序流程图如2.1图所示。3系统的初始化3.1系统的初始化的含义首先来讲讲系统初始化,什么是系统初始化呢?初始化就是把变量(variable)赋为默认值,把控件设为默认状态,把没准备的准备好。但是如果是整个系统初始化那就不一样了。每个软件,或是工具,系统等都有一个初始化。如系统的初始化就是将你的系统还原到一开始做的备份的状态。把设置等都还原至那个位置。如果是一个软件的初始化,基本都是将一些功能的设置都还原为开始设置,意思就和恢复默认设置差不多。3.1.1初始化的执行顺序每一个初始化部分里面的代码在程序运行后,或库的begin-end块运行之前。delphi使用对单元相关树的深度优先遍历来运行初始化部分。换句话说,就只在一个单元的初始化代码运行前,delphi就运行了特他使用的每一个单元的初始化部分。每一个单元仅初始化一次。程序代码当中可以有Initialization声明部分。这部分里面的代码的执行,是在windows加载包含该单元(指Initialization所属单元)的模块(应用程序,DLL或者包)时运行的。一般来说是:先Initialization单元,然后interface单元,然后implementation单元。程序中Intialize过程。可以在这里初始化字符串、动态数组、接口和Variants系统为什么要初始化呢?第一,信息系统是以数据库为主的软件系统,是数据库应用系统,必须设定数据库应用的安全体系否则无法保证数据安全;第二,信息系统是组织的管理方法,必须具备组织使用的共享数据才能供组织使用;第三,初始化的核心是数据准备,没有历史数据不能实现系统切换,无法使用;第四,数据必须定期存档和更新才能使信息系统有较高的运转效率;3.1.2系统的启动代码系统初始化主要是由软件来完成的,一般在32位ARM应用系统中,大多数软件采用C语言来进行编程,并且以嵌入式操作系统作为平台,这样能大大提升开发效率及软件性能。但是,由于C语言生成的代码不能上电后立马运行的,因为此时还不具备运行条件,比如全局变量还没有初始化,系统堆栈还没有设置等。因此从系统上电,到正式运行用户的main函数之前,要运行一段代码,这段代码就称为启动代码。启动代码大部分由汇编指令构成,它可以实现向量表定义、堆栈初始化、系统变量初始化、中断初始化、外围初始化、地址重映射等操作。见图2-2。图2.2首先是应该完成头文件的编写,下面就是系统初试化的头文件(target.h)和系统的初始化软件(target.c)、(Startup.s)。(1)系统初试化的头文件(target.h)#ifndef__TARGET_H#define__TARGET_H#ifdef__cplusplusextern"C"{#endif#ifndefIN_TARGETexternvoidReset(void);externvoidTargetInit(void);#endif#ifdef__cplusplus}#endif#endi(2)系统的初始化软件(Startup.s);definethestacksize;定义堆栈的大小SVC_STACK_LEGTHEQU0FIQ_STACK_LEGTHEQU0IRQ_STACK_LEGTHEQU256ABT_STACK_LEGTHEQU0UND_STACK_LEGTHEQU0NoIntEQU0x80NoFIQ EQU 0x40USR32ModeEQU0x10SVC32ModeEQU0x13SYS32ModeEQU0x1fIRQ32ModeEQU0x12FIQ32ModeEQU0x11;IMPORT__use_no_semihosting_swi;Theimportedlabels;引入的外部标号在这声明IMPORTFIQ_Exception;快速中断异常处理程序IMPORT__main;C语言主程序入口IMPORTTargetResetInit;目标板基本初始化 ;Theemportedlabels;给外部使用的标号在这声明EXPORTbottom_of_heapEXPORTStackUsrEXPORTResetEXPORT__user_initial_stackheapCODE32AREAvectors,CODE,READONLYENTRY;interruptvectors;中断向量表ResetLDRPC,ResetAddrLDRPC,UndefinedAddrLDRPC,SWI_AddrLDRPC,PrefetchAddrLDRPC,DataAbortAddrDCD0xb9205f80LDRPC,[PC,#-0xff0]LDRPC,FIQ_AddrResetAddrDCDResetInitUndefinedAddrDCDUndefinedSWI_AddrDCDSoftwareInterruptPrefetchAddrDCDPrefetchAbortDataAbortAddrDCDDataAbortNouseDCD0IRQ_AddrDCD0FIQ_AddrDCDFIQ_Handler;未定义指令UndefinedBUndefined;软中断SoftwareInterrupt ;BSoftwareInterruptCMPR0,#4LDRLOPC,[PC,R0,LSL#2]MOVSPC,LRSwiFunctionDCDIRQDisable;0DCDIRQEnable;1DCD FIQDisable ;2DCD FIQEnable ;3IRQDisable;关IRQ中断MRSR0,SPSRORRR0,R0,#NoIntMSRSPSR_c,R0MOVSPC,LRIRQEnable;开IRQ中断MRSR0,SPSRBICR0,R0,#NoIntMSRSPSR_c,R0MOVSPC,LRFIQDisable;关FIQ中断MRSR0,SPSRORRR0,R0,#NoFIQMSRSPSR_c,R0MOVSPC,LRFIQEnable;开FIQ中断MRSR0,SPSRBICR0,R0,#NoFIQMSRSPSR_c,R0MOVSPC,LR;取指令中止PrefetchAbortBPrefetchAbort;取数据中止DataAbortBDataAbort;快速中断FIQ_HandlerSTMFDSP!,{R0-R3,LR}BLFIQ_ExceptionLDMFDSP!,{R0-R3,LR}SUBSPC,LR,#4InitStackMOVR0,LR;BuildtheSVCstack;设置管理模式堆栈MSRCPSR_c,#0xd3 LDRSP,StackSvc ;BuildtheIRQstack ;设置中断模式堆栈MSRCPSR_c,#0xd2LDRSP,StackIrq;BuildtheFIQstack;设置快速中断模式堆栈MSRCPSR_c,#0xd1LDRSP,StackFiq;BuildtheDATAABORTstack;设置中止模式堆栈MSRCPSR_c,#0xd7LDRSP,StackAbt;BuildtheUDFstack;设置未定义模式堆栈MSRCPSR_c,#0xdbLDRSP,StackUnd;BuildtheSYSstack;设置系统模式堆栈MSRCPSR_c,#0xdfLDRSP,=StackUsrMOVPC,R0ResetInitBLInitStack;初始化堆栈BLTargetResetInit;目标板基本初始化;跳转到c语言入口B__main__user_initial_stackheapLDRr0,=bottom_of_heap;LDRr1,=StackUsrMOVpc,lrStackSvcDCDSvcStackSpace+(SVC_STACK_LEGTH-1)*4StackIrqDCDIrqStackSpace+(IRQ_STACK_LEGTH-1)*4StackFiqDCDFiqStackSpace+(FIQ_STACK_LEGTH-1)*4StackAbtDCDAbtStackSpace+(ABT_STACK_LEGTH-1)*4StackUndDCDUndtStackSpace+(UND_STACK_LEGTH-1)*4IF:DEF:EN_CRPIF.>=0x1fcINFO1,"\nThedataat0x000001fcmustbe0x87654321.\nPleasedeletesomesourcebeforethisline."ENDIFCrpDataWHILE.<0x1fcNOPWENDCrpData1DCD0x87654321;/*WhentheDatais为0x87654321,usercodebeprotected.当此数为0x87654321时,用户程序被保护*/ENDIF;/*分配堆栈空间*/AREAMyStacks,DATA,NOINIT,ALIGN=2SvcStackSpaceSPACESVC_STACK_LEGTH*4;管理模式堆栈空间IrqStackSpaceSPACEIRQ_STACK_LEGTH*4;中断模式堆栈空间FiqStackSpaceSPACEFIQ_STACK_LEGTH*4;快速中断模式堆栈空间AbtStackSpaceSPACEABT_STACK_LEGTH*4;中止模式堆栈空间UndtStackSpaceSPACEUND_STACK_LEGTH*4;未定义模式堆栈AREAHeap,DATA,NOINITbottom_of_heapSPACE1AREAStacks,DATA,NOINITStackUsrEND(3)系统的初始化软件(target.c)#defineIN_TARGET#include"config.h"#include"guolindian.h"voidTargetResetInit(void);voidIRQ_Exception(void){while(1);}voidFIQ_Exception(void){while(1);}voidTimer0_Exception(void){T0IR=0x01;VICVectAddr=0;//通知中断控制器中断结束}voidVICInit(void){}/*过零点检测功能初试化函数*/voidGuoLinDianInit(void){ PINSEL1=0x00000001; EXTMODE=0x01;//边沿触发 VICIntSelect=0x00000000; VICDefVectAddr=(int)IRQ_Eint1; EXTINT=0x01; VICIntEnable=0x00004000;}#defineTARGET_DEBUG_BY_LCMvoidTargetInit(void){#ifdefTARGET_DEBUG_BY_LCM TargetResetInit(); GuoLinDianInit();GUI_Initialize();//初始化LCM GUI_SetColor(1,0); //设置前景色和背景色#endif }voidInitialiseUART0(uint32bps){ }voidTargetResetInit(void){#ifdef__DEBUG_RAMMEMMAP=0x2;//remap#endif#ifdef__DEBUG_FLASHMEMMAP=0x1;//remap#endif#ifdef__IN_CHIPMEMMAP=0x1;//remap#endif/*设置系统各部分时钟*//*Setsystemtimersforeachcomponent*/PLLCON=1;#if(Fpclk/(Fcclk/4))==1VPBDIV=0;#endif#if(Fpclk/(Fcclk/4))==2VPBDIV=2;#endif#if(Fpclk/(Fcclk/4))==4VPBDIV=1;#endif#if(Fcco/Fcclk)==2PLLCFG=((Fcclk/Fosc)-1)|(0<<5);#endif#if(Fcco/Fcclk)==4PLLCFG=((Fcclk/Fosc)-1)|(1<<5);#endif#if(Fcco/Fcclk)==8PLLCFG=((Fcclk/Fosc)-1)|(2<<5);#endif#if(Fcco/Fcclk)==16PLLCFG=((Fcclk/Fosc)-1)|(3<<5);#endifPLLFEED=0xaa;PLLFEED=0x55;while((PLLSTAT&(1<<10))==0);PLLCON=3;PLLFEED=0xaa;PLLFEED=0x55;/*设置存储器加速模块*//*Setmemoryacceleratermodule*/MAMCR=0;#ifFcclk<20000000MAMTIM=1;#else#ifFcclk<40000000MAMTIM=2;#elseMAMTIM=3;#endif#endifMAMCR=2;/*设置串行口*//*initializeUART*/CCR=1;PREINT=Fpclk/32768-1;PREFRAC=Fpclk-(Fpclk/32768)*32768;YEAR=2012;MONTH=4;DOM=26;HOUR=21;MIN=10;SEC=0;}#include"rt_sys.h"#include"stdio.h"4数据采集程序和数据处理4.1数据采集技术简介从广义上来讲,数据采集(DAQ),是指从传感器和其它待测设备等模拟和数字被测单元中自动采非电量或者电量信号,送到上位机中进行分析,处理。数据采集系统是结合基于计算机或者其他专用测试平台的测量软硬件产品来实现灵活的、用户自定义的测量系统。采集又称取样、抽样,对模拟信号在时间上的离散化、幅值离散化,这样用在电参量测量中可以克服模拟运算准确度较低且模拟器件易受各种干扰影响的缺点,从同一批数据中可获得许多电参量信息。本文所述的数字采样技术主要应用于电参量测量领域。就是对周期或非周期交流待测信号,在CPU的控制下,由采样保持器进行采样和保持,再送给A/D转换器进行模数转换,量化处理,将模拟量变为数字量,送存储器存储,最后由CPU进行一系列运算,处理,得到结果送到LCD显示。本文用的是LPC2124,LPC2124具有一个A/D转换器,A/D转换器的基本时钟由VPB时钟提供。可编程分频器可将时钟调整至4.5MHZ(逐步逼近最大时钟)。10位精度要求的转换需要11个A/D转换时钟。LPC2124具有一个A/D转换器。A/D转换具有如下特性:(1)10位逐次逼近模式转换器;(2)测量范围:0~3.3V;(3)10位转换时间≥2.4us;(4)转换触发信号可选择:输入引脚的跳变或定时器匹配;(5)具有掉电模式。4.2A/D寄存器的描述A/D寄存器包含控制寄存器ADCR和数据寄存器ADDR。A/D寄存器的使用情况详见下表4.1。表4.1A名称描述访问复位值地址ADCRA/D控制寄存器。A/D转换开始前,必须写入ADCR寄存器来选择工作模式R/W0x000000010xE0034000ADDRA/D数据寄存器。该寄存器包含ADC的DONE标志位和10位的转换结果(当前DONE位为1时,转换结果才是有效的)R/WNA0xE00340004.2.1A/D控制寄存器ADCRADCR寄存器描述如表4.2所列。表4.2A/D控制寄存器ADCR名称功能复位值7:0SEL从AIN3~AIN0中选择采样引脚。SEL段中的bit0~bit3分别对应AIN3~AIN0引脚,为1表示选中。在64脚封装的LPC2124有bit0~bit3可置位。软件控制模式下,只有一位可被置位;硬件扫描模式下,SEL可为1~0x0F中的任何一个值。SEL为0时,等效于0x01。0x0115:8CLKDIV将VPB时钟(PCLK)进行(CLKDIV的值加1)分频得到A/D转换时钟,该时钟必须小于或等于45MHz。016BURST如果该位为0,转换由软件控制,需要11个时钟方能完成。如果该位为1,A/D转换器以CLKS字段选择的速率重复执行转换,并从SEL字段为1的位对应的引脚开始扫描。A/D转换器启动后,第一次转换的时SEL字段中为1的位中的最低有效位程度模拟输入,然后时为1的更高有效为对应的模拟输入(如果可用)。重复转换通过清零该位终止,但该位被清零时并不会中止正在进行的转换。019:7CLKS该字段用来选择Burst模式下每次转换使用的时钟数和所得ADDR转换结果放入LS位中可确保精度的位的数目,CLKS可在11个时钟(10位)~4个时钟(3位)之间选择:000=11个时钟/10位,……,111=4个时钟/3位。00021PDN1:A/D转换器处于正常模式。0:A/D转换器处于掉电模式。023:22TEST[1:0]这些位用于器件测试,00为正常测试,01为数字测试模式,10为DAC测试模式,11为一次转换测试模式。026:24START当BURST为0时,这些位控制着A/D转换是否启动和何时启动;000:不启动001:立即启动转换010:当ADCR寄存器bit27选择的边沿出现P0.1/ENT0/MAT0.2/CAP0.2脚时启动转换注意:START选择100~111时,MAT信号不必输出到引脚上100:当ADCR寄存器bit27选择的边沿在MAT0.1出现时启动转换101:当ADCR寄存器bit27选择的边沿在MAT0.3出现时启动转换110:当ADCR寄存器bit27选择的边沿在MAT1.0出现时启动转换111:当ADCR寄存器bit27选择的边沿在MAT1.1出现时启动转换00027EDGE该位只有在START字段为010~111时有效0:在所选CAP/MAT信号的下降沿启动转换1:在所选CAP/MAT信号的上升沿启动转换04.2.2A/D数据寄存器ADDRADDR寄存器描述见表4.3。其中ADDR[15:6]为10位的A/D转换结果,bit5为最高位。表4.3数据寄存器ADDRADDR名称功能复位值31DONEA/D转换完成标志位,当A/D转换结束时该位置位。该位在ADDR被读出和ADCR被写入时清零。如果ADCR在转换过程中被写入,并启动一次新的转换。030OVERUNBrust模式下,如果产生LS位结果前,一个或多个转换结果被丢失和覆盖,该位置位。读位通过读ADDR寄存器清零。029:27这些位读出为0.他们用于未来CHN字段的扩展,使之兼容包含更多通道的转换器。026:24CHN这些位包含的是LS位的转换通道X23:16这些位读出时为0.他们允许连续A/D值的累加,而不需要使用与门屏蔽处理,使得至少有256个值不溢出到CHN字段015:6V/Vdda当DONE为时,该字段包含一个二进制数,用来代表SEL字段选中的Ain脚的电压接近于、等于或大于VddaX5:0这些位读出时为0.专门用于未来的扩展和功能更强大的A/D转换器。04.3A/D的基本操作ADC(模数转换器)转换时钟分频计算公式如下:CLKDIV=Fpclk/Fadclk-1其中Fpclk为所要设置的ADC时钟,其值不能大于4.5MH值。ADC转换的基本操作方法:(1)将测量通道引脚设置为AINx功能;(2)通过ADCR寄存器设置ADC的工作模式,ADC转换通道,转换时钟(CLKDIV时钟分频值);(3)启动ADC转换;(4)通过查询或中断方式等待ADC转换完毕,转换数据存在ADDR寄存器中。4.4数据处理由于本课题用的是交流采样,所以就要进行数据处理,数据处理主要是进行滤波,然而滤波的方法是多种多样的,本文对常用的几种方法进行比较:(1)限幅滤波法(又称程序判断滤波法)a.方法:根据经验判断,确定两次采样允许的最大偏差值(设为A),每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效;如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值。b.优点:能有效克服因偶然因素引起的脉冲干扰c.缺点:无法抑制那种周期性的干扰;平滑度差。滤波方法:/*A值可根据实际情况调整value为有效值,new_value为当前采样值滤波程序返回有效的实际值*/#defineA10charvalue;charfilter(){charnew_value;new_value=get_ad();if((new_value-value>A)||(value-new_value>A)returnvalue;returnnew_value;}(2)中位值滤波法a.方法:连续采样N次(N取奇数),把N次采样值按大小排列,取中间值为本次有效值。b.优点:能有效克服因偶然因素引起的波动干扰;对温度、液位的变化缓慢的被测参数有良好的滤波效果。c.缺点:对流量、速度等快速变化的参数不宜。滤波方法:/*N值可根据实际情况调整排序采用冒泡法*/#defineN11charfilter(){charvalue_buf[N];charcount,i,j,temp;for(count=0;count<N;count++){value_buf[count]=get_ad();delay();}for(j=0;j<N-1;j++){for(i=0;i<N-j;i++){if(value_buf>value_buf[i+1]){temp=value_buf;value_buf=value_buf[i+1];value_buf[i+1]=temp;}}}returnvalue_buf[(N-1)/2];}(3)算术平均滤波法a.方法:连续取N个采样值进行算术平均运算,N值较大时,信号平滑度较高,但灵敏度较低;N值较小时,信号平滑度较低,但灵敏度较高。N值的选取:一般流量,N=12;压力:N=4。b.优点:适用于对一般具有随机干扰的信号进行滤波;这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动。c.缺点:对于测量速度较慢或要求数据计算速度较快的实时控制不适用;比较浪费RAM滤波方法:#defineN12charfilter(){intsum=0;for(count=0;count<N;count++){sum+=get_ad();delay();}return(char)(sum/N);}(4)递推平均滤波法(又称滑动平均滤波法)a.方法:把连续取N个采样值看成一个队列,队列的长度固定为N,每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则)。把队列中的N个数据进行算术平均运算,就可获得新的滤波结果。N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4。b.优点:对周期性干扰有良好的抑制作用,平滑度高;适用于高频振荡的系统。c.缺点:灵敏度低;对偶然出现的脉冲性干扰的抑制作用较差;不易消除由于脉冲干扰所引起的采样值偏差;不适用于脉冲干扰比较严重的场合;比较浪费RAM。滤波方法:#defineN12charvalue_buf[N];chari=0;charfilter(){charcount;intsum=0;value_buf[i++]=get_ad();if(i==N)i=0;for(count=0;count<N,count++)sum=value_buf[count];return(char)(sum/N);}(5)中位值平均滤波法(又称防脉冲干扰平均滤波法)a.方法:此方法相当于“中位值滤波法”+“算术平均滤波法”,连续采样N个数据,去掉一个最大值和一个最小值,然后计算N-2个数据的算术平均值。N值的选取:3~14。b.优点:融合了两种滤波法的优点;对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差。c.缺点:测量速度较慢,和算术平均滤波法一样;比较浪费RAM。滤波方法:#defineN12charfilter(){charcount,i,j;charvalue_buf[N];intsum=0;for(count=0;count<N;count++){value_buf[count]=get_ad();delay();}for(j=0;j<N-1;j++){for(i=0;i<N-j;i++){if(value_buf>value_buf[i+1]){temp=value_buf;value_buf=value_buf[i+1];value_buf[i+1]=temp;}}}for(count=1;count<N-1;count++)sum+=value[count];return(char)(sum/(N-2));}经过比较,所以选择了一种比较简单容易实现的滤波方法—限幅滤波。4.5A/D采集功能介绍及软件编程首先对A/D进行初始化,初始化的详细设置见表4.2-2。初始化后,A/D就开始选择通道,选择通道1,并进行第一次转换,等待转换结束,再启动,再转换;读取ADC结果,提取AD转换值;最后进行数值转换。以此选择2、3、4等通道,并重复上述操作。采集电流和电压值各3路,进行滤波,最后显示。具体的实现见流程图4.1。图4.1A/D采集以及滤波处理的软件编程:#include"config.h"#include"stdlib.h"#include<math.h>uint8F_flag;#defineA10uint32value_IA;uint32value_IB;uint32value_IC;uint32value_VA;uint32value_VB;uint32value_VC;uint32filer(uint32adVlaueNew,uint32adVlaueOld){uint32new_value;new_value=adVlaueNew;if((new_value-adVlaueOld>A)||(adVlaueOld-new_value>A))returnadVlaueNew;returnadVlaueOld;}VoidFunction_1_ADC(void){externuint8*title2[11];uint32ADC_Data;uint32i;charstr[14];if((F_flag&0x01)==0){PINSEL1=PINSEL1|0x01400000;ADCR=(1<<0)|//SEL=1,选择通道0((Fpclk/1000000-1)<<8)|//CLKDIV=Fpclk/1000000-1,即转换时钟为1MHz(0<<16)|//BURST=0,软件控制转换操作(0<<17)|//CLKS=0,使用11clock转换(1<<21)|//PDN=1,正常工作模式(非掉电转换模式)(0<<22)|//TEST1:0=00,正常工作模式(非测试模式)(0<<24)|//START=1,直接启动ADC转换Q(0<<27);//EDGE=0(CAP/MAT引脚下降沿触发ADC转换)}F_flag=0x01;ADC_Data=ADDR;ADCR=(ADCR&0x00FFFF00)|0x01|(1<<24);//设置通道1,并进行第一次转换while((ADDR&0x80000000)==0);//等待转换结束ADCR=ADCR|(1<<24);//再次启运转换while((ADDR&0x80000000)==0);//等待转换结束ADC_Data=ADDR;//读取ADC结果ADC_Data=(ADC_Data>>6)&0x3FF;//提取AD转换值ADC_Data=filer(ADC_Data,value_IA);ADC_Data=ADC_Data*3300/1024;//数值转换F_flag=0;ADC_Data=ADC_Data-200;sprintf(str,":%dA\r",ADC_Data//显示GUI_PutString(60,16,str);ADC_Data=ADDR;ADCR=(ADCR&0x00FFFF00)|0x02|(1<<24);//设置通道2,并进行第一次转换while((ADDR&0x80000000)==0);//等待转换结束ADCR=ADCR|(1<<24);//再次启运转换while((ADDR&0x80000000)==0); //等待转换结束ADC_Data=ADDR;//读取ADC结果ADC_Data=(ADC_Data>>6)&0x3FF;//提取AD转换值ADC_Data=ADC_Data*3300/1024;//数值转换ADC_Data=filer(ADC_Data,value_IB);ADC_Data=ADC_Data-200;sprintf(str,":%dA\r",ADC_Data);//显示GUI_PutString(60,32,str);ADC_Data=ADDR;ADCR=(ADCR&0x00FFFF00)|0x03|(1<<24);//设置通道3,并进行第一次转换while((ADDR&0x80000000)==0);//等待转换结束ADCR=ADCR|(1<<24);//再次启运转换while((ADDR&0x80000000)==0);//等待转换结束ADC_Data=ADDR;//读取ADC结果ADC_Data=(ADC_Data>>6)&0x3FF;//提取AD转换值ADC_Data=ADC_Data*3300/1024;//数值转换ADC_Data=filer(ADC_Data,value_IC);ADC_Data=ADC_Data-200;sprintf(str,":%dA\r",ADC_Data);//显示GUI_PutString(60,48,str);ADC_Data=ADDR;ADCR=(ADCR&0x00FFFF00)|0x04|(1<<24);//设置通道4,并进行第一次转换while((ADDR&0x80000000)==0);//等待转换结束ADCR=ADCR|(1<<24);//再次启运转换while((ADDR&0x80000000)==0);//等待转换结束ADC_Data=ADDR;//读取ADC结果ADC_Data=(ADC_Data>>6)&0x3FF;//提取AD转换值ADC_Data=ADC_Data*3300/1024;//数值转换ADC_Data=filer(ADC_Data,value_VA);ADC_Data=ADC_Data-200;sprintf(str,":%dV\r",ADC_Data);//显示GUI_PutString(60,82,str);ADC_Data=ADDR;ADCR=(ADCR&0x00FFFF00)|0x05|(1<<24);//设置通道5,并进行第一次转换while((ADDR&0x80000000)==0); //等待转换结束ADCR=ADCR|(1<<24);//再次启运转换while((ADDR&0x80000000)==0);//等待转换结束ADC_Data=ADDR;//读取ADC结果ADC_Data=(ADC_Data>>6)&0x3FF;//提取AD转换值ADC_Data=ADC_Data*3300/1024;//数值转换ADC_Data=filer(ADC_Data,value_VB);ADC_Data=ADC_Data-200;sprintf(str,":%dV\r",ADC_Data);//显示GUI_PutString(60,98,str);ADC_Data=ADDR;ADCR=(ADCR&0x00FFFF00)|0x06|(1<<24);//设置通道6,并进行第一次转换while
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河北省2017年中考生物真题试题(含解析)
- 2024年度灯具安装施工合同
- 出国留学贷款代理服务协议2024
- 二零二四年度云计算平台建设与运营合作协议2篇
- 2024年度建筑施工合同标的建筑工程的设计和施工2篇
- 拆墙施工2024年度合同协议
- 二零二四年度农业种植与技术指导合同
- 二零二四年度技术服务合同标的及履行细则2篇
- 二零二四年度艺人经纪合同(含演出及广告代言)
- 二零二四年度碧桂园国际物流枢纽建设合同
- 中国骨关节炎诊疗指南(2024版)
- 小学一年级数学连加连减练习题(100道)
- 2025届河北省新高考全国统考预测密卷生物试卷含解析
- JBT 10554.2-2015 无损检测 轴类球墨铸铁超声检测 第2部分:球墨铸铁曲轴的检测
- SY-T 5374.2-2023 固井作业规程 第2部分-特殊固井
- ISO 55000-2024 资产管理 术语、综述和原则(中文版-雷泽佳翻译-2024)
- 监理见证取样工作计划
- 合规风控岗位职责
- 天津2024年天津职业技术师范大学附属高级技术学校招聘笔试历年典型考题及考点附答案解析
- 大学生职业规划书奶茶店
- 国开(浙江)2024年《用法律基础》形考作业1-4答案
评论
0/150
提交评论