电特性测量系统软件设计毕业论文(编辑修改稿)内容摘要:

量软件设计方案 基本功能要求 (1) 熟悉工厂供电技术; (2) 熟悉测量系统硬件电路原理; (3) 设计软件结构; (4) 掌握 开发工具; (5) 熟练运用 PROTEUS 仿真; (6) 编写程序代码及调试 ; (7) 软、硬件系统联调。 总体方案设计 硬件平台 课题主要研究电特性测量系统的软件程序设计。 选用的是 ARM 为核的LPC20xx 系列的芯片, LPC20xx 系列是 NXP 公司生产的以 ARM7TDMIS 核为基础的嵌入式处理器,在芯片内部配置了大量的接口及功能模块。 本设计选用的是 LPC2124 芯片, LPC2124 具有较小的 64 引脚封装,低功耗的特点,以及多个片内外设(如 32 位定时器、 A/D 转换器、外部中断等),多个 32 位定时器, 4路 10 位 ADC,内置多种串行通信接口以及多达 9 个外部中断,因此特别适用于工业控制、医疗系统访问控制、通信网关、协议转换器、嵌 入式 MODEM 等各种类型的应用。 开发环境与仿真 本课题选用的 是 开发工具, 是 ARM 公司推出的 ARM 集成开发工具,具有用户多、编译效率高、支持的 ARM 内核多的特点。 ARM ADS全称为 ARM developer Suite,是 ARM 公司推出的 ARM 集成开发工具,成熟版本为 ,他的前身是 SDT, SDT 是 ARM 公司几年前的开发环境软件。 支持 ARM10 之前的所有 ARM 系列微控制器,支持软件调试,支持汇编、C 语言、 C++源程序,具有编译效率高、系统库功能强等特点。 本课题用 开发工具围绕 LPC2124 片上的基本功能模块实现三 相 电特性的测试,最终通过2 三相电特性测量软件设计方案 2 了西安工业大学毕业设计(论文) 1 PROTEUS 的仿真验证。 PROTEUS 是英国 Labcenter 公司推出的适合嵌入式设计仿真与开发的仿真软件,使用 PROTEUS 软件可以完全脱离硬件平台来学习嵌入式系统,可以说是嵌入式学习的一次革命。 开发语言 本课题软件用的语言主要有 C 语言,还有启动代码中所用到的汇编语言。 本文选用 C 语言主要是由于 C 语言有以下优点: (1) 寄存器分配,数据类型等由编译器管理; (2) 编程及调试的时间减少, 大大缩短开发周期; (3) 明显增加软件可读性,便于改进和扩展。 软件总体结构 本系统主要针对我国电力系统供配电的实际情况,通过 ARM7 单片机为核心,配以相应的外围电路和功能软件,采用交流采样技术实现多种电力参数的在线实时测量和数据分析,为电网的安全经济运行提供可靠保证。 本课题主要研究电特性测量系统的软件程序设计。 本课题的软件部分主要是通过实时采样电流电压的瞬时值,以及过零检测,进而计算出电流电压的有效值、频率值、有用功率、无用功率、视在功率、功率因数等电力参数。 本测量系统的软件设计主要分为以 下几个模块: (1) 主程序模块 (2) 电压、电流采集程序 (3) 频率采集程序 (4) 数据处理程序 (5) 时钟日历程序 (6) 键盘服务程序 (7) 显示服务程序 本设计拟采用 集成开发工具编写 C 语言程序实现测量系统的相关功能。 数据的处理与计算是程序设计的主要部分。 系统基本测量的参数主要包括:电流有效值、电压有效值、有功功率、无功功率、视在功率、功率因数等。 首要环节是对输入的电气信号进行离散化,即采样。 根据被采集信号的不同,数据采集可分为直流采样和交流采样两大类。 对比分析后, 系统选用交流采样,数值的计算采用离散的电压电流有效值计算公式来实现。 为了提高 ARM7 核的 LPC2124 芯片程序编写效率,系统软件采用了分模块编写的方法,用 C 语言和汇编语言混合编写。 对于 LPC2124 和各模块的初始化、数据采集程序采用汇编编程,对于主程序、键盘显示等通用性较强程序,采用 C西安工业大学毕业设计(论文) 2 语言编写。 本系统的主要功能模块有数据采集模块、数据处理模块、时钟模块,按键显示模块等。 所有软件模块的功能都在主控模块的调配下协调执行,主控模块首先对系统进行初始化操作,包括 CPU 初始化、 I/O 初始化、 A/D 初始化、LCD 初始 化、时钟初始化、异步通讯初始化等。 随即对数据进行采集、处理、显示。 然后判断是否有键按下,根据判断结果,执行相应按键服务程序。 系统的主要电特性参量介绍: (1) 电压有效值: 让恒定电压和交变电压分别加在阻值相等的电阻上 ,使它们在相同时间内产生的热量相等 ,就可以把该恒定电压的数值规定为这个交变电压的有效值 . (2) 电流有效值: 将一直流电与一交流电分别通过相同阻值的电阻,如果相同时间内两电流通过电阻产生的热量相同,就说这一直流电的电流值是这一交流电的有效值。 (3) 有功功率: 在交流电路中,电源在一个周 期内发出瞬时功率的平均值 (或负载电阻所消耗的功率 ),称为 有功功率。 (4) 无功功率: 在正弦电流电路中,复功率的虚部: ,且供给电感的无功功率为正值。 (5) 视在功率: 在电工技术中,将单口网络端钮电压和电流有效值的乘积,称为视在功率( apparent power),记为 S=UI。 (6) 功率因数: 在交流电路中, 电压 与电流之间的相位差 (Φ)的余弦叫做功率因数,用符号 cosΦ表示,在数值上,功率因数是有功功率和 视在功率 的比值,即 cosΦ=P/S。 系统主程序流程图 如 图 所示。 西安工业大学毕业设计(论文) 3 系统初始化送液晶显示切换A / D 通道配置A / D 采集环境推算电特性参数 A / D 数据处理(滤波)开始一路A / D 是否结束N所有A / D 结束Yk e y A 按下。 Yk e y C 按下。 k e y B 按下。 NNYY调k y e A 子程序 调k y e C 子程序调k y e B 子程序中断0 服务入口 中断服务程序1记录E I N T 0 上升沿时间中断1 服务入口 中断服务程序1记录E I N T 1 上升沿时间中断2 服务入口 中断服务程序1记录E I N T 2 上升沿时间 3 系统初始化 1 3 系统的初始化 系统的初始化 的含义 首先来讲讲系统初始化 , 什么是系统初始化呢。 初始化就是把变量 (variable)赋为默认值,把控件设为默认状态,把没准备的准备好。 但是如果是整个系统初始化那就不一样了。 每个软件,或是工具,系统等都有一个初始 化。 如系统的初始化就是将你的系统还原到一开始做的备份的状态。 把设置等都还原至那个位置。 如果是一个软件的初始化,基本都是将一些功能的设置都还原为开始设置,意思就和恢复默认设置差不多。 初始化的执行顺序 每一个初始化部分里面的代码在程序运行后,或库的 beginend 块运行之前。 delphi使用对单元相关树的深度优先遍历来运行初始化部分。 换句话说,就只在一个单元的初始化代码运行前, delphi 就运行了特他使用的每一个单元的初始化部分。 每一个单元仅初始化一次。 程序代码当中可以有 Initialization 声明部分。 这部分里面的代码的执行,是在 windows 加载包含该单元(指 Initialization 所属单元)的模块(应用程序, DLL或者包)时运行的。 一般来说是:先 Initialization 单元,然后 interface 单元,然后 implementation 单元。 程序中 Intialize 过程。 可以在这里初始化字符串、动态数组、接口和 Variants 系统为什么要初始化呢。 第一, 信息系统是以数据库为主的软件系统,是数据库应用系统,必须设定数据库应用的安全体 系否则无法保证数据安全; 第二,信息系统是组织的管理方法,必须具备组织使用的共享数据才能供组织使用; 第三,初始化的核心是数据准备,没有历史数据不能实现系统切换,无法使用; 第四,数据必须定期存档和更新才能使信息系统有较高的运转效率;西安工业大学毕业设计(论文) 1 系统的启动代码 系统初始化主要是由软件来完成的,一般在 32 位 ARM 应用系统中,大多数软件采用 C 语言来进行编程,并且以嵌入式操作系统作为平台,这样能大大提升开发效率及软件性能。 但是,由于 C 语言生成的代码不能上电后立马运行的,因为此时还不具备运行条件,比如全局变量还没有 初始化,系统堆栈还没有设置等。 因此从系统上电,到正式运行用户的 main 函数之前,要运行一段代码,这段代码就称为启动代码。 启动代码大部分由汇编指令构成,它可以实现向量表定义、堆栈初始化、系统变量初始化、中断初始化、外围初始化、地址重映射等操作。 见 图 22。 异常向量表设置引脚功能初始化外部总线(l p c 2 1 2 4 ) 初始化各模块堆栈初始化系统硬件初始化执行环境进入m a i n 函数设置存储器 重映射设置系统时钟 设置存储器加速 设置中断向量控制器 图 首先是应该完成头文件的编写,下面就是系统初试化的头文件( )和系统的初始化软件( ) 、( )。 (1) 系统初试化的头文件 ( ) ifndef __TARGET_H define __TARGET_H ifdef __cplusplus extern C { 西安工业大学毕业设计(论文) 2 endif ifndef IN_TARGET extern void Reset(void)。 extern void TargetInit(void)。 endif ifdef __cplusplus } endif endi (2) 系统的初始化软件 ( )。 define the stack size。 定义堆栈的大小 SVC_STACK_LEGTH EQU 0 FIQ_STACK_LEGTH EQU 0 IRQ_STACK_LEGTH EQU 256 ABT_STACK_LEGTH EQU 0 UND_STACK_LEGTH EQU 0 NoInt EQU 0x80 NoFIQ EQU 0x40 USR32Mode EQU 0x10 SVC32Mode EQU 0x13 SYS32Mode EQU 0x1f IRQ32Mode EQU 0x12 FIQ32Mode EQU 0x11。 IMPORT __use_no_semihosting_swi。 The imported labels。 引入的外部标号在这声明 IMPORT FIQ_Exception。 快速中断异常处理程序 IMPORT __main。 C 语言主程序入口 IMPORT TargetResetInit。 目标板基本初始化。 The emported labels。 给外部使用的标号在这声明 EXPORT bottom_of_heap EXPORT StackUsr EXPORT Reset EXPORT __user_initial_stackheap CODE32 AREA vectors,CODE,READONLY 西安工业大学毕业设计(论文) 3 ENTRY。 interrupt vectors。 中断向量表 Reset LDR PC, ResetAddr LDR PC, UndefinedAddr LDR PC, SWI_Addr LDR PC, PrefetchAddr LDR PC, DataAbortAddr DCD 0xb9205f80 LDR PC, [PC, 0xff0] LDR PC, FIQ_Addr ResetAddr DCD ResetInit UndefinedAddr DCD Undefined SWI_Addr DCD SoftwareInterrupt PrefetchAddr DCD PrefetchAbor。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。