基于LM3S1138的SPWM逆变器设计

更新时间:2024-01-17 23:19:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于LM3S1138的SPWM逆变器设计

A Design of Basing on SPWM-Inverter Controlled by

Micro-Controller LM3S1138

Contestant:Student:Supervisor:

Yangtze University

Cao Chong & Zhang Liangchao & Yu Xiu Hu Jie

目 录

摘要………………………………………………………………………Ⅰ Abstract…………………………………………………………………Ⅱ 1绪论……………………………………………………………………1 1.1课题背景????????????????????????????1 1.2国内外研究现状?????????????????????????2 1.3论文的研究意义????????????????????????????2 1.4本文研究的主要内容和章节安排??????????????????3 2 系统总体方案设计………………………?…………………………?????4 2.1可行性分析??????????????????????????4 2.2总体方案设计??????????????????????????5 2.3功能描述????????????????????????????7 2.4创新点?????????????????????????????8 3硬件电路设计…………………………………………………………9 3.1 LM3S1138微控制器简介?????????????????????9 3.2基于LM3S1138的逆变器工作原理?????????????????9 3.3 逆变电路???????????????????????????10 3.4 驱动电路???????????????????????????? 4 系统软件设计………………………………………………………… 4.1 PWM脉宽调制部分程序????????????????????? 4.2 LCD12684液晶显示部分程序??????????????????? 4.3 ADC转换程序部分???????????????????????? 4.4看门狗程序部分?????????????????????????? 4.5软件总体设计??????????????????????????? 5 系统测试及结果…………………………………………………

5.1预期结果????????????????????????????? 5.2测试及结果?????????????????????????? 结束语…………………………………………………………………… 参考文献………………………………………………………………… 附录…………………………………………………………………………

摘要

中频电源属特种电源范畴,广泛应用于航空、航天、舰船、机车、感应加热以及雷达、通信交换机等对电源性能要求严格的领域。在要求提供失真度小、稳定性高、纯正弦波的同时,还要具有结构紧凑、控制灵活、稳定性好等诸多优点。传统的模拟器件控制方法,由于模拟器件的温漂性容易造成系统性能的不稳定并存在控制电路元件多,系统复杂,灵活性差等缺点。

本文利用广州周立功公司提供的EasyARM1138开发板,设计了一个基于新型32位微控制器LM3S1138的可调频率中频逆变电源,即克服了传统模拟逆变器电路复杂、灵活性差、系统不稳定等缺点,又兼具普通单片机控制系统的低成本和DSP控制系统的高性能等优点,有效解决了特种电源设计中存在的成本和性能矛盾问题,同时也可应用于对电源频率有不同要求的场合。

本文首先对数控SPWM中频逆变电源的需求及设计需达到的性能指标进行了详细分析,随后根据系统需求和性能指标要求进行了总体方案的设计。

接着本文论述了系统硬件电路的设计与实现,进行了硬件电路的模块划分、微控制器引脚资源的分配、具体单元电路的设计等。硬件电路由五大模块即控制器模块、功率器件驱动模块、逆变模块、保护模块和显示模块构成,其中控制器模块由EasyARM1138开发板构成,完成SPWM脉宽调制信号产生、LCD显示信号的输出及A/D转换等工作;驱动模块由两片IR2110及外围电路组成,完成SPWM信号的隔离放大并驱动功率开关管;逆变模块由四片绝缘栅双极晶体管组成的全桥电路和LC低通滤波器构成,在SPWM信号的控制下完成外部直流电压向纯正弦波电压的转换;保护模块由LM393及外围电路构成,实现正弦波输出信号的过压和过流保护;显示模块由LCD12864及辅助电路组成,实现相关数据的显示输出。

在硬件设计的基础上,本文接下来论述了系统软件的设计与实现。首先根据功能需求设计了系统软件的总体结构,接着介绍了几个具体功能模块的实现,包括脉宽调制信号的产生模块、LCD显示模块、AD转换模块和看门狗程序模块等,并在附录中给出了系统主程序及各模块的完整程序。

论文的最后部分对系统的测试方法和测试结果进行了相关论述,并根据测试结果进行了相关的误差分析和说明。

关键词:LM3S1138 SPWM IR2110 IGBT 逆变器

Abstract

Intermediate frequency power which is an area of special power is widely used in aviation,areospace,ships,locomotives,induction heating as well as radar, telecommunication switch which are the field of strict performance requirements for power .It requires small distortion ,high stability and a pure sine wave. At the same time, it also has a compact structure, flexible control, good stability and many other advantages. Owning to the drift of analog devices, traditional method of controlling analog devices easily leads to unstable system performance and remains lots of disadvantage such as many elements in steering circuit, complex system and poor flexibility and the like.

In this paper, we use the development board of EasyARM1138 provided by Guangzhou ZLG Mcu Development Co.,Ltd. to design a kind of intermediate frequency inverter which is adjustable, based on a new 32-bit Micro-Controller LM3S1138.This kind of power not only overcomes many faults of the traditional analogy inverter such as complex circuit, poor flexibility and unstable system, but it also has the advantages of low-cost ordinary MCU control system and high-performance DSP control system, and so on. That solves the contradictions of cost and performance being in designing special power most effectively, at the same time it has the frequency of power applied to the occasions of different requirements. This article, firstly,makes a detail analysis of the demand of SPWM intermediate frequency inverter on numerical control and the performance criteria needed to reach in designing. Later, it carries out the design of the overall program according to system requirements and performance requirements.

Then, this article discusses the design and implementation of the hardware circuit of the system. And then it divides the hardware circuit into module and allocates the resources of microcontroller pin and makes a specific unit such as circuit design, and so on. The hardware circuit consists of controller module, power device driver module, inverter module, the protection module and display module. The controller module which is constituted by the development board of EasyARM1138, achieves the generator of SPWM pulse width modulation signal, LCD display and A/D conversion, etc. .The driver module,which is made up of two pieces of IR2110 and the external circuit, completes the SPWM signal isolation and amplification and drives the power switch. The inverter module is comprised of full-bridge circuit by four pieces of IGBT and LC low-pass filter and achieves the conversion from an external DC voltage to pure sine wave voltage in the under of SPWM signal. The protect module which is formed by the LM393 and the external circuit, implements the over voltage and over current protection of sine wave output signal. The display module which is made

of LCD12864 and auxiliary circuit carries out the data display and output. At the basis of hardware design, this article discusses the design and implementation of system software in the next parts. First of all ,it designs the overall structure of system software according to functional requirements and then introduces the implementation of some specific functional modules including the module of generating pulse width modulation signal, LCD display module, A/D converter module and watchdog program module .Later it gives the main program of the system and complete programs of each module in the appendix.

In the last part, this thesis argues the relevant testing methods and test results of the system. It also makes the error analysis and description in accordance with the relevant test results.

Key Words: LM3S1138 SPWM IR2110 IGBT Inverter

绪论

1 绪论

§1.1 课题背景

科学技术的发展应符合社会发展的需求,现代科技在技术更新的同时以高效、节能、环保为主要的衡量标准。电力电子技术是能源动力的核心技术,现代电力电子技术利用新型的电力电子器件、先进的控制方法,使电力电子产品具有了高效、节能、可靠性高、稳定性好等特点,从而广泛应用于现代社会生产、生活的各个领域中。逆变技术是电力电子技术的重要组成部分,现代逆变技术是一门综合了现代电力电子开关器件的应用、现代功率变换、模拟和数字电子技术、PWM技术、频率及相位调制技术、开关电源技术和控制技术等的综合实用设计技术[1][2]。

输出电压频率为400Hz的正弦波逆变器一般被称为中频逆变电源,属于特种电源的范畴,广泛应用于一些对电源频率和性能有严格要求的领域,如石油开采、冶金、航空、航天、舰船、机车、感应加热以及雷达、通信交换机等。在要求提供失真度小、稳定性高、纯正弦波的同时,还要求具有结构紧凑、控制灵活、稳定性好等诸多优点。

早期的逆变电源多采用传统的模拟器件控制方法,其逆变功率元件主要由快速晶闸管组成,因而控制电路结构复杂、整机的体积和重量较大、效率很低。同时,由于这种电路主要立足于分离元件的控制,工作频率的改变和提高会受到很大的限制,且容易受模拟器件温漂性的影响,造成系统性能的不稳定。随着以IGBT为代表的高性能电力电子器件的发展,与之相适应的逆变电源结构及控制技术也应运而生。

1975年,首次将通信调制技术应用到逆变技术中,即正弦波脉宽调制技术SPWM (Sinusoidal Pulse Width Medulation),使逆变器的性能得到了很大的提高,此后各种不同的PWM技术相继出现。脉宽调制方法具有在一个功率级内同时实现调频、调压且调节速度快等优点,因而在逆变电源控制中得以广泛应用。PWM控制技术虽然有开关频率高造成开关损耗的缺点,但是这一缺点由于功率开关器件性能的不断提高能够得以逐渐克服

[1][2][3]

§1.2 国内外研究现状

传统的逆变器多采用模拟控制方式。模拟控制技术理论成熟且应用广泛,但存在一些固有的缺点,例如:控制电路复杂、系统成本高、受外界环境影响严重、

1

绪论

器件易老化等,使得系统的可靠性低、维护困难、灵活性不够、设备更新升级困难、稳定性不好。随着微电子技术和超大规模集成电路的发展以及单片机和DSP芯片的出现,使控制方式得以数字化。数字闭环控制器精度的提高,克服了模拟电路零漂的影响,可以明显提高电源的精度和稳定度。特别是16位和32位高性能DSP芯片的出现,使得一片DSP芯片既可完成PWM信号及闭环控制的计算,同时又可以对电源状态进行监控和故障处理,极大地简化了控制电路的设计[4]。

逆变器按激励方式可分为自激式振荡逆变和他激式振荡逆变,按输出波形可分为方波逆变器、阶梯波逆变器和正弦波逆变器等。正弦波逆变器输出的交流电压波形为正弦波,具有输出波形好、失真度低、对收音机及通讯设备干扰小、噪声低、保护功能齐全、整机效率高等优点,是国内外逆变器行业的研究重点。该类项目的研究已具有了较高的技术水平并已设计出相关产品,如基于各种系列单片机或DSP控制的SPWM逆变器等。从控制方法上来说,研究比较多的主要有:多环反馈控制、无差拍控制、状态反馈控制、重复控制、滑模变结构控制、模糊控制、神经网络控制等[6]。

[5]

§1.3 论文的研究意义

早期的逆变电源多采用传统的模拟器件控制方法,其逆变功率元件主要由快速晶闸管组成,因而控制电路结构复杂、整机的体积和重量较大、效率很低。同时,由于这种电路主要立足于分离元件的控制,工作频率的改变和提高会受到很大的限制,且容易受模拟器件温漂性的影响,造成系统性能的不稳定。

自从单片机出现后,逆变电源的设计就逐渐用数控的方式代替了传统模拟器件控制的方式。但使用一般的MCU设计逆变电源,由于其运算速度和处理能力的限制,输出的SPWM信号频率不能做得很高,只能输出较低频率的正弦波,在频率要求比较高(如中频逆变电源)的情况下,很难输出比较纯正的正弦波[7],因此,其应用领域相对较窄。使用高性能的DSP芯片产生高频SPWM,虽能设计较理想的中频逆变电源,但成本相对较高。

LM3S1138是群星公司生产的一款低成本、高性能、基于ARM@CortexTM-M3核的新型32位微控制器,兼具DSP芯片的超强运算处理能力和普通单片机的低价格优势[9],利用其设计的频逆变电源既能得到较高频率的纯正正弦波,又能有效降低产品的成本,有效解决了特种电源设计中存在的性能和成本矛盾问题,同时也可应用于对电源频率有不同要求的场合,符合目前国际上“开关技术高频化, 逆变器高性能化, 控制技术智能化”的发展趋势,市场前景相当广阔。

2

[8]

绪论

§1.4 研究的主要内容和章节安排

本课题主要研究输出频率可调的单相逆变器控制技术。基于EasyARM1138开发板设计了一个输出频率可调的逆变器电路,系统逆变部分由4个IGBT管组成的全桥电路及LC低通滤波电路构成,功率开关管的驱动器件选用IR2110,保护电路由LM393及外围电路构成,基于Protel99SE设计了电原理图和PCB图。系统软件用C语言编写,采用C语言加函数库的方式,开发环境选用IAR9.0。

论文的各章节内容如下:

第一章综述了逆变电源的发展历史和技术现状,给出了本论文的研究背景、研究意义和基本研究内容。

第2章详细讲述了方案的可行性分析及总体方案的设计,其中可行性分析包括设计思路、应用技术分析、技术方案比较和设计的重难点;接着简略概括了逆变器的功能特点及技术指标,然后详细阐述了该项目的总体方案设计即系统接口描述和系统总体方案设计。

第3章主要讨论系统硬件的设计与实现。首先给出了系统硬件结构框图,进行了硬件电路的模块划分,然后对各个模块具体电路设计进行了详细介绍。

第4章主要论述系统软件的设计与实现。首先介绍了软件的总体结构,然后对各个功能模块进行了详细说明。

第5章给出了系统的测试方案及结果。首先设想了预期结果,然后将程序嵌入开发板测试实际电路得到测试结果并记录数据。

3

系统总体方案设计

2 系统总体方案设计

§2.1可行性分析

2.1.1 设计思路

本课题选用EsayARM1138开发板,以LM3S1138为控制核心,辅以扩展的键盘及显示电路和SPWM逆变电路组成完整的系统。根据采样控制理论,由LM3S1138输出一系列周期性变化的等幅不等宽脉冲,控制IGBT功率开关管的导通和截止,使逆变器输出端获得一系列宽度不等的矩形脉冲波。输出的信号经低通滤波器滤波后,即可得到所需要的正弦波。改变调制脉冲的宽度可以控制输出电压的幅值,改变调制周期可以控制输出电压的频率,从而达到使逆变器的输出电压和幅值同时可调的目的。

2.1.2 应用技术分析:

本课题的实现,需要使用到以下关键技术:

① 基于EastARM1138开发板设计简单外围扩展电路,LM3S1138的GPIO口分配

② LM3S系列ARM驱动库软件包的应用 ③ 键盘及LCD显示器的驱动 ④ IGBT管及驱动器的选型

⑤ 不同幅值、不同频率信号的正弦脉宽数据表的设计

2.1.3 技术方案比较:

在逆变器电路的设计中,控制方法是核心技术。早期的控制方法使得输出为矩形波,谐波含量较高,滤波困难,而SPWM技术较好地克服了这些缺点。目前SPWM的产生方法大致可分为以下4种:

① 利用分立元件,采用模拟、数字混和电路生成SPWM波。此方法电路复杂,实现困难且不易改进;

② 由SPWM专用芯片SA828系列与微处理器直接连接生成SPWM波,SA828是由规则采样法产生SPWM波的,相对谐波较大且无法实现闭环控制;

③ 基于CPLD或FPGA设计,实现数字式SPWM发生器。此方法需重新学习可编程逻辑器件的相关知识及硬件描述语言,项目组成员在此方面的知识积累较少,开发周期长;

4

系统总体方案设计

④ 基于单片机实现SPWM,此方法控制电路简单可靠,利用软件产生SPWM波,减轻了对硬件的要求,且成本低,受外界干扰小。本课题选用此方案。

2.1.4 设计重点难点:

完成本方案设计的重点和难点有以下几点: ① LM3S1138的GPIO口分配和驱动函数的调用 ② LCD显示模块的驱动和相关数据的显示

③ 不同幅值、不同频率信号的正弦脉宽数据表的设计 ④ 过流保护电路的设计

§2.2总体方案设计

2.2.1 系统接口描述

本系统的接口包括电源、数据反馈、控制输出及人机交互等。 1.电源

出于电路设计的简便,本系统设计的电源由两台稳压电源提供。从实际应用的角度考虑,共设计有3路电源输入:1路+5V电压,给IR2110输入部分供电;1路+15V电压提供给IR2110的脉宽输出部分;第3路为可调电压,经继电器保护后,作为提供给IGBT管的直流电压。由于稳压电源的外壳接地,故本系统没有设计给IGBT管提供负偏压的悬浮地。

2.数据反馈

数据反馈输出接口1路,为逆变输出电压经整流、滤波、分压后送LM3S1138A/D转换输入端,用于监控正弦波输出幅值的信号。

3.控制输出

控制输入接口为LM3S1138输出的2路交替工作的脉宽调制信号,用于控制逆变器输出正弦波电压的幅值和频率。

4.人机交互接口

人机交互接口分为两类:一类为键盘接口,直接使用EasyARM1138开发板上的3个按键(1个按设计步长使频率增加、1个使频率减小、1个作为系统复位控制按键);另一类为显示输出,使用自定义的扩展接口,连接LCD显示器12864,显示4行,16列字符。

5.接口功能定义

5

系统总体方案设计

综上所述,系统一共设计3路电源、1路反馈信号、2路脉宽调制信号、2路键盘、1路显示输出接口。具体接口定义如下各表所示。

① 电源接口列表

表2-1 外接电源接口

序号 1 2 3 含义 备注 IR2110输入端电源 +5V电压,网络标号VDD IR2110输出端电源 +15V电压,网络标号VCC IGBT管直流电压 可调电压,网络标号DCIN ② GPIO口信号接口列表

表2-2 GPIO口信号接口

序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 18

GPIO口 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PF0 PF1 PF2 PF3 PF5 PG4 PB0 ADC0 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 CS1 CS2 I/D R/W EN CPP3 CPP0 含义 备注 LCD12864的数据端口 LCD12864的命令端口 PWM输出信号 ADC转换信号 2.2.2 系统总体方案设计

6

系统总体方案设计

本系统由电源模块、控制模块、逆变模块、键盘和显示模块、输出及保护电路等5大部分组成,设计系统的总体结构框图如图2-1所示。

图2-1 SPWM逆变器的总体结构框图

1.电源模块

根据实验室现有的条件,本系统的电源由两台稳压电源提供3路直流电压。 2.控制模块

由EasyARM1138开发板构成,运行系统程序并通过扩展GPIO口控制自主设计的各子模块工作。 3. 逆变模块

由2片驱动芯片IR2110、4只IGBT管FGA25N120AN和LC低通滤波器及外围辅助电路构成,完成DC/AC的逆变、电压变换并得到需要的正弦波电压输出。 4. 键盘和显示模块

由3个按键开关和1个可显示4行、16列字符的LCD显示器12864构成。 5.输出和保护电路模块

由1个2A保险丝、4个并在IGBT管集射极两端的反向偏置二极管和LM393及辅助电路组成的比较电路构成。完成系统的过流、过压及IGBT管的瞬间过流保护工作。

§2.3 功能描述

2.3.1功能特点:

本项目设计一个基于LM3S1138控制的SPWM逆变器,具有如下功能: ① 实现 SPWM 波形的产生和整个系统的检测、保护、智能控制、参数显示等

7

系统总体方案设计

功能

② 可通过扩展的键盘完成输出正弦波频率的设置和调节 ③ 可通过扩展的LCD显示器显示正弦波的频率和幅值 ④ 系统具有过压保护、过流保护和瞬间过流保护功能

2.3.2技术指标:

① 输出频率:20Hz~100Hz可调,步长10Hz。提高开发板晶振频率(原开发板晶振只有6MHz)可使输出正弦波电压的频率达到中频的范围。

② 输出电压:幅值18V~24V可调,由稳压电源提供的IGBT管直流电压决定。 ③ 输出信号失真度:<10%。 ④ 输出电流:<2A。

⑤ 温度范围:-10℃~65℃,具体温度范围由选用的元件决定。

§2.4 创新点

本设计的创新之处有3点:

① 硬件电路基于群星公司的新型ARM7I内核32位微控制器LM3S1138设计,有效地解决了逆变中频电源设计中低成本与高性能的矛盾;软件采用C语言加函数库的方式编写,使程序设计及系统升级变得容易。

② 输出正弦波的频率可调,可满足不同场合的需要。在对程序适当修改的前提下,可以通过改变脉宽调制信号的占空比达到控制正弦波输出电压幅值的目的。

③ 将熔丝断路与电压比较器相结合,完成输出信号的过流保护,在同时保护负载与IGBT管的情况下,又可以有效避免过流保护的误动作(如果将熔丝接在IGBT管电源电压输入端,则可能会因为瞬间电流的过大产生误保护的动作)。

8

硬件电路设计

3 硬件电路设计

§3.1 LM3S1138微控制器简介

LM3S1138是Luminary Micro公司Stellaris?最新推出的一款基于ARMv7-M架构的32位MCU,专门为那些对功耗和成本敏感的嵌入式应用领域实现高系统性能而设计。使用3级流水线哈佛架构,运用分支预测、单周期乘法和硬件除法等功能实现了出色的效率(1.25 DMIPS/MHz)。通过采用非对齐数据存储技术、原子位操作和Thumb-2指令集,使存储容量的需求最小化,能够轻易以8位、16位器件所需的存储空间实现 32位的性能[9]。

芯片内部的通用定时器模块(GPTM),可配置成16位PWM模式,输出频率高达8.4ns,占空比精度1.1ns,通过调节方波的占空比对模拟信号进行编码,可以方便地形成逆变电源的脉宽调制信号,对PWM输出信号的取反可由软件编程决定。芯片内建8路高速ADC输入通道,采样速率高达1MHz,可配置成独立或差分输入模式,完成逆变电源输入信号的检测与控制;另个,该款芯片还有内置硬件看门狗定时器、64KB单周期FLASH、16KB单周期SRAM、输入捕捉、端口电平变化通知等功能,可以极大地简化外围电路的设计[10]。

§3.2 基于LM3S1138的逆变器工作原理

图3-1 SPWM逆变电源总体结构图

基于LM3S1138的逆变器整体结构框图如图3-1所示。其基本工作原理是:LM3S1138内部产生基波脉宽调制信号,经两个驱动集成块(IR2110)隔离放大后,送全桥逆变电路,控制两组绝缘栅双极晶体管(IGBT)的通断,并决定IGBT管

9

硬件电路设计

输出脉冲信号的宽度。逆变电路输出信号送低通滤波器,经低通滤波器滤波后得到正弦基波信号送输出电路输出。低通滤波的另一路输出将当前的输出电压反馈回LM3S1138进行A/D转换,LM3S1138对A/D转换的结果进行运算和处理,并根据处理结果对当前输出电压的幅值和频率进行控制和显示。

§3.3 逆变电路

逆变电路由4个IGBT管(VT1、VT2、VT3、VT4)组成的全桥式逆变电路组成,如图3-2所示。桥臂VT1、4和VT2、3以中频频率交替导通时,可将直流电压转换成梯形脉冲波,经低通滤波器滤波后,负载上得到的实际电压为正弦波[11]。逆变桥的SPWM控制信号由主控芯片LM3S1138产生。

图3-2 正弦逆变电路

§3.3驱动电路

由于LM3S1138产生的SPWM信号不能直接驱动IGBT,故逆变桥的驱动采用专用芯片IR2110。IR2110是一种双通道、栅极驱动、高压高速、单片式集成功率驱动模块,具有体积小(DIP14)、集成度高(可驱动同一桥臂两路)、响应快(典型ton/toff=120/94 ns)、偏置电压高(<600 V)、驱动能力强等特点,同时还具有外部保护封锁端口[12]。

IR2110采用CMOS工艺制作,逻辑电源电压范围为5 V~20 V,适应TTL或CMOS逻辑信号输入,具有独立的高端和低端2个输出通道。由于逻辑信号均通过电平耦合电路连接到各自的通道上,容许逻辑电路参考地(VSS)与功率电路参考地(COM)之间有-5 V~+5 V的偏移量,并且能屏蔽小于50 ns的脉冲,这些特点使得IR2110具有较理想的抗噪声效果。采用CMOS施密特触发输入,可以进一步提高电路抗干扰能力[13]。IR2110自身的保护功能非常完善:对于低压侧通道,当VCC低于规定值(如8.6 V)时,其欠压锁定将会阻断任何一个通道工作;而对于高压侧通道,当VS和VB之间的电压低于限定值(如8.7 V)时,欠压自锁也会关断栅极驱动。利用2片IR2110驱动全桥逆变电路的电路图如图3-3所示。

10

硬件电路设计

图3-3 全桥驱动电路

为改善PWM控制脉冲的前后沿陡度并防止振荡,减小IGBT集电极的电压尖脉冲,一般应在栅极串联十几欧到几百欧的限流电阻。IR2110的最大不足是不能产生负偏压,由于密勒效应的作用,在开通与关断时,集电极与栅极间电容上的充放电电流很容易在栅极上产生干扰。针对这一点,本文在驱动电路中的功率管栅极限流电阻R1、R2上反向并联了二极管D4、D5。

11

系统软件设计

4 系统软件设计

软件设计是逆变控制电路设计的重要组成部分,它决定了逆变器输出的特性,如电压调节范围及稳定程度,理想的正弦波输出电压、保护功能的完善、可靠性等等。

逆变器程序主要分为PWM脉宽调制部分,LCD12864显示部分(即人机交互部分),ADC转换部分,看门狗程序部分。

§4.1 PWM脉宽调制部分程序

4.1.1 PWM调制程序编程思路

本文将一个周期T的信号分成720个点(按X轴等分),两点间的时间间隔由EasyRAM1138通过定时器中断产生。因此,首先需建立正弦脉宽数据表,由EasyARM1138初始化时算好,将其按一定的格式(即考虑相序及同一相中的脉宽次序等)存入片内的FLASH中,建立好数据指针,以便按一定的寻址方式查询。

4.1.2 PWM调制程序详细设计

SPWM实际上就是用一组经过调制的幅值相等、宽度不等的脉冲信号代替调制信号,用开关量代替模拟量。调制后的信号中除了含有调制信号外,还含有频率很高的载波频率及载波倍频附近的频率分量,但几乎不含其他谐波,特别是接近基波的低次谐波。因此载波频率也即SPWM的开关频率越高,谐波含量越少。这从SPWM的原理可以直观地看出。当载波频率高时,半周期内开关次数越多,把期望的正弦波分段也越多,SPWM的基波就越接近期望的正弦波[14]。

但是,SPWM的载波频率除了受功率器件的允许开关频率制约外,SPWM的开关频率也不宜过高,这是因为开关器件工作频率提高,开关损耗和换流损耗会随之增加。另外,开关瞬间电压或电流的急剧变化形成很大的du/dt或di/dt,会产生强的电磁干扰;高du/dt、di/dt还会在线路和器件的分布电容和电感上引起冲击电流和尖峰电压;这些也会因频率提高而变得严重。

综上所述,SPWM的开关频率的选择应综合考虑各个方面的因素,本设计实际采用的SPWM开关频率,也即IGBT的开关频率为18MHz,这是一个折中的选择。

设置EasyARM的频率为6MHz,分频后为20MHz。0-180度由定时器TIMER0的TIMA(对应的为CPP1)输出0有效,180-360由TIMER1的TIMB(对应的

12

系统软件设计

为CPP3)输出0有效,两脚轮流输出脉宽调制的正弦半波。

1度时脉宽=2个机器周期90度时脉宽约为111个周期......T2T1调制脉宽T3...T90T91...周期=1/18k1度2度3度?90度91度?图4-1 正弦波脉冲宽度调制波形示意图

关于载波频率和调制波频率的计算:

EasyARM的时钟频率20MHz,一个机器周期为0.5us,载波频率为8KHz~90KHz之间,将一个输出周期T的信号分成1440个点(按X轴等分),两点间的时间间隔由EasyARM的定时器通过计数中断实现,由于EasyARM的内部定时器有PWM的设置,通过在程序中设置定时器的计数值来控制频率,同过设置占空的的计数值来调整脉冲的占空比,这样就保证了输出方波的脉冲宽度按正弦规律变化。

逆变后的方波经滤波后可以得到纯正弦波脉冲,调制频率为14.4KHz~1440KHz,一个周期分为1440个调制脉宽,每个周期时间为:1440*(1/14.4KHz~1/144KHz)=0.1 s~0.01(s),使输出频率为10~100Hz。

表4-1为正弦脉冲的度数与计数值之间的一个换算表(部分)

13

系统软件设计

表4-1 正弦脉冲的度数与计数值之间的一个换算表 4.1.3 PWM调制程序流程图

首先对程序进行初始化,初始化之后程序就进入了中断,连续读取720个PWM的匹配值产生0-180度的PWM。

之后关闭此定时器和中断,并打开TIMER0和它的定时中断,同样的连续读取720个PWM的匹配值产生180-360度的PWM。

主程序中,在while(1)中不断的扫描按键。通过判断是KEY1还是KEY2按下来提高和降低频率。正弦波频率的改变范围是10~100Hz。

PWM调制程序流程图如图4-2所示

14

系统软件设计

开始/复位 系统初始化 调用默认数据表 没按下 Key1键按下? 按下 频率增加 没按下 Key2键按下? 按下 频率减小 表格数据送驱动电路 15

系统软件设计

开始 当表中的数据读取完毕后进入产生180-360的波的中断 CCP3 产生0-180的波 CCP 产生180-360的波 当表中的数据读取完毕后进入产生0-180的波的中断 图4-2 PWM调制程序流程图

§4.2 LCD12684液晶显示部分程序

4.2.1 LCD12864液晶显示编程思路

为了实现人机交互,我们要对逆变器的运行情况有很好的了解。我们要能随时随地的能知道逆变器的运行情况,就必须通过显示程序来实现人机交互。

液晶显示主要是对三组控制端口的控制(数据端口,命令端口,状态控制字)。我们用的是LCD12864的液晶显示器,他的管脚说明如表4-2所示:

16

系统软件设计

表4-2 液晶显示的管脚说明[15] 只要对这些引脚进行正确的控制就能很好的液晶显示。

4.2.2 LCD12864显示程序详细设计

我们利用EasyARM1138的通用标准输入输出端口进行控制,在这里我们用的GPIOA和GPIOF组进行控制的。这是于EasyARM1138的开发板上的引脚引出有关,由于开发板不是所有的通用输入输出端口都引出了,为了方便的对液晶显示器进行控制。我们用的是8个端口都引出的GPIO口进行控制,也就是GPIOA和GPIOF。

液晶数据部分的信号输入是并行的方式,对于GPIOA的控制也应该是并行的进行输入输出的。这样需要对GPIOA管脚定义为并行输入输出方式,采用这样的方式如下:

SysCtlPeriEnable(SYSCTL_PERIPH_GPIOA); // 使能GPIOA端口 GPIOPinTypeOut(LCD_DATA,LCD_PDB0|LCD_PDB1|LCD_PDB2|LCD_PDB3|LCD_PDB4|LCD_PDB5|LCD_PDB6|LCD_PDB7); //将GPIOA定义为输出类型

只要利用EasyARM1138中的函数进行并行读写即可,写过程如下: GPIOPinWrite(LCD_DATA,LCD_PDB0|LCD_PDB1|LCD_PDB2|LCD_PDB3|LCD_PDB4|LCD_PDB5|LCD_PDB6|LCD_PDB7,x);

这样就能很好的实现对数据口的读写。

(注:已经在LCD12864.H中将程序相应的参数定义为需要的管脚了。) 同样的方式实现对GPIOF的并行读写,也就是控制命令端口。

液晶显示部分重要一点是它的初始化部分,由LCD12864控制说明如下: 显示开/关设置 指令码 3EH 3FH 显示初始化设置 指令码 C0H 初始化过程如下:

写指令C0H设置显示初始行,然后写指令3FH开显示即可完成对液晶显示器的初始化程。

当然除了初始化液晶显示器,还要控制屏幕上显示的文字,图形显示就需要对显示的坐标进行定位。对与这个液晶显示器是分左右两边进行写屏的,所以我

17

功能 关显示 开显示 功能 设置显示初始行

系统软件设计

们还要对其左右屏的写屏与清屏也要在初始化函数进行。

4.2.3 LCD12864显示程序流程

系统开始先进行复位,后进入系统初始化程序(其中包括了LCD初始化程序)。写字符串也就是让液晶显示对应的文字信息,把进ADC转换的数值传给液晶显示程序。显示逆变器的电压数值,实现人机交互。流程图如图4-3所示。

液晶初始化也就是对液晶显示器的一个测试函数。目的是为判断液晶显示是否工作正常,如果工作正常的话液晶的数据、控制、命令端口就会处于工作状态。液晶初始化流程图如图4-4。

开始/复位 系统初始化 写字符串 写ADC转换数值 给显示延时 LCD清屏

图4-3 LCD显示程序流程图

18

液晶初始化 写左关 写右关 写左开 写右开 写左一 写右一 LCD清屏 定位与(0,0)

图4-4 液晶初始化的流程图

系统软件设计

§4.3 ADC转换程序部分

4.3.1 ADC转换程序设计思路

之所以要进行ADC转换,是为了得到逆变电路的工作电压值,让我们能实时的了解逆变器的工作情况。

ADC(Analog-Digital Converter)的功能是将输入模拟电压量转换为与其成比例的数字量,它是智能化测量与控制系统中的一种重要组成器件。按其工作原

[16]

理,可分为比较式ADC、积分式ADC以及电荷平衡(电压-频率转换)式ADC等。

在实用中,应根据具体情况选用合适的ADC芯片,本项目中用到了-----(ADC的型号)。

在这里我根据的是EasyARM1138的内部电路来设计ADC转换。ADC的模块框图如图4-5所示。片的内部

图4-5 ADC模块框图

该Stellaris?ADC通过使用一种基于序列的可编程方法来收集数据,取代了传统ADC模块使用的单次采样或双采样的方法。每个采样序列均为一系列程序化的连续(back-to-back)采样,使得ADC可以从多个输入源中收集数据,而无需控制器对它进行重新配置或处理。对采样序列内的每个采样进行编程,包括对某些参数进行编程,如输入源和输入模式(差分输入还是单端输入),采样结束时的中断产生,以及只是序列最后一个采样的指示符。

4.3.2 ADC转换程序流程图

19

系统软件设计

图4-6是ADC的工作过程流程图,ADC初始化在系统初始化中。由于ADC模块转换时间的限制。因此再采样过程中要给些延时,来等待ADC转换完毕。在采样完成后就要将得到的数值传回给液晶显器进行显示,注意在显示时注意一个刷新时间的问题。则显示可能会因为刷新时间太慢,而不能正确的显示得到的数值。

ADC的初始化过程就是ADC模块的配置过程,流程图如图4-7所示。可以看到,配置ADC模块前先要使能ADC模块(Stellaris外设的驱动一般编程过程)。设置采样频率我们要根据系统采样速度的要求来定,采样序列和步进设置也就是进行ADC采样前,进行PLL锁相环配置以防因为错误的配置导致系统进入异常。配置完使能ADC采样序列即可实现ADC模块的初始化,ADC也就进入了正常的工作。

开始/复位

ADC初始化 系统初始化 使能ADC模块 触发样本序列 设置采样频率 等待采样结果 采样序列配置 获取采样结果 采样步进设置 结果送去显示

使能采样序列 图4-6 ADC转换程序流程图

图4-7 ADC初始化流程图

§4.4看门狗程序

4.4.1看门狗程序设计思路

看门狗,又叫watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗(kicking the dog or service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给 WDT 清零,如果

20

系统软件设计

超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就回给出一个复位信号到MCU,是MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞[17]。

其工作原理如下:

在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位[18]。

之所以要设计看门狗程序,是因为程序在长期运行过程中,可能受到外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果。因此这里我们需要一个复位电路,或者是复位程序实现在没有人的干预下的复位。

而在这里我们用的EasyARM产品,由于它内部已经有了看门狗定时模块。因此我再设计看门狗程序时,也就是对他的参数进行一下设值就可完成任务。

Stellaris系列的内部结构如图4-8所示:

图4-8 WDT模块的结构图

当32位计数器在使能后到达0状态时,看门狗定时器模块产生第一个定时信

21

系统软件设计

号,使能计数的同时还使能看门都定时器中断。在产生了第一个超时事件后,用看门都定时器装载(WDTLOAD)寄存器的值重装32位计数器,并且定时器从该值回复递减计数。一旦配置了看门狗定时器,看门狗定时器锁定(WDTLOAD)寄存器被写,以防止定时器配置通过软件以外更改。

在清楚第一个超时中断之前,如果定时器的值再次递减为0,且复位信号已使能(通过看门狗复位使能功能),则看门狗定时器向系统提交其复位信号。如果中断在32位计数器到达其第二次超时之前被清零,则把WDTLOAD寄存器中的值载入32位计数器,并且从该值开始重新计数。

如果看门狗定时器计数器正在计数时把新的值写入WDTLOAD,则计数器将装入新的值并继续计数。

写入WDTLOAD并不会清楚已经激活的中断,必须通过写看门狗中断清零(WDTICR)寄存器来清除中断。可根据需要使能或禁能看门狗模块中断和产生复位。当中断被重新使能的时候,会被预先载入到32位计数器中的是载入寄存器的值,而不是其最后的状态值[19]。

4.4.2看门狗程序流程图

参数的设置和中断定义的问题即可,由于LM3S1138中集成了开门狗模块,使得硬件电路设计比较简单,软件设计方面由于IAR的集成了C语言的开发环境。软件设计对于底层控制就没有这么复杂了。但是由于ADC采样序列模块的影响,在进行初始化的时候我们不能用系统中断来实现,中断定义在外部中断表中,已实现定时中断来检测是否有异常。看门狗与ADC模块一样初始化过程比较简单,同样也是先要使能模块,关闭计数(为看门狗模块的定时器来计算)后再来配置看门狗的值。因为我们用的中断方式来实现的,这里我们就要使能中断模块已实现中断控制。看门狗初始化流程图如图4-9所示。

22

系统软件设计

看门狗初始化 使能看门狗模块 使能调试器停止看门狗计数 设置看门狗装载值 使能看门狗中断/模块中断 使能处理器中断

图4-9 看门狗初始化程序流程图

§4.5总体设计

软件程序的总体设计主要就是PWM程序与LCD12864显示程序的管脚定义发生了冲突,在定时分开他们的管脚即可,统一初始化能够自动的将所有程序的初始化部分很好的结合。我们还需要解决的就是自定义中断与系统中断的优先级问题,因此我们在这将ADC模块的中断定义为优先级较高。自定义中断优先级低于系统中断和ADC模块中断,便能很好的实现中断的控制。

23

系统测试及结果

5 系统测试及结果

§5.1预期结果

各扩展板印刷电路制作完成,元件焊接无误,软件设计完好,下载成功后,系统能正常运行,基本完成前述系统所要求实现的各项功能。

§5.2测试及结果

仪器用具:示波器、EasyARM开发板、自做逆变器电路板、直流稳压电源、电容电感、万用表、负载

测试方法:

1.PWM信号输入(两路波形)的频率、幅值、波形描述 2.IR2110 PWM信号输出的频率、幅值、波形描述 3.IGPT管 栅极的频率、幅值、波形描述 4.上半周信号的频率、幅值、有效值、波形描述 5.下半周信号的频率、幅值、有效值、波形描述 6.完整信号的频率、幅值、有效值、波形描述 7.整流输出端的频率、幅值、有效值、波形描述 8.AD转换的实测值、显示值 9.过、欠压保护

24

系统测试及结果

测试的数据如下表所示:

用100uH的电感测试的结果如下:

项目 1.PWM信号输入 理论频率(Hz) 实测频率(Hz) 20 30 40 50 60 2.IR2110 PWM信号输出 40 50 60 3.IGBT管 栅极 20 30 40 50 60 37.65 46.89 58.75 17.32 28.10 38.64 49.13 57.46

12.2 12.8 12.3 20 30 17.24 26.31 37.73 48.02 56.65 17.21 26.42 幅值(v) 5.0 5.3 5.4 5.1 5 12.5 12.7 有效值(v) / / / 8.91 9.04 8.96 8.99 9.07 25

系统测试及结果

项目 6.完整信号 理论频率(Hz) 实测频率(Hz) 20 30 40 50 60 7.整流输出端 20 30 40 50 60 17.24 28.46 37.51 49.17 58.63 17.24 28.51 37.86 46.94 59.62

项目 8.AD转换 实测值(V)

显示值(V) 幅值(v) 15.6 14.9 15.0 14.8 15.1 19.8 20.1 19.7 19.9 20.4 有效值(v) 10. 25 10.38 10.52 10.47 10.61 13.44 14.12 13.76 13.85 14.23 26

系统测试及结果

用2.2mH的电感测试如下: 上半周信号 接负载 理论频率(Hz) 实测频率(Hz) 20 30 40 50 60 接地 20 30 40 50 60 17.24 28.49 37.85 49.76 56.98 17.24 29.47 36.96 48.49 57.81

幅值(v) 12.0 11.5 11.8 12.1 11.7 12.0 11.8 11.6 11.4 11.9 有效值 2.32 2.12 2.26 2.41 2.23 7.47 7.38 7.61 7.26 7.42 27

结束语

结束语

1.主要工作

基于致远公司的EaryARM1138开发板研制了一个纯正弦波中频逆变电源,实验测试取得了较好的效果:带负载时的最大谐波含量为3.7%,最高效率可达到92%。由于电路采用了具有ARMv7-M架构的高性能32位MCU芯片LM3S1138和集成驱动芯片IR2110,使电路方便地实现了载波频率为500kHz的高频逆变,减少了谐波含量,同时控制参数可由键盘输入调整,能适应不同谐振频率负载的启动要求。

2.设计体会

通过这次项目的设计和测试,我们收获颇多。首先要对该项目先进行需求分析,

然后再进行可行性分析,若可行后再查询资料,选择最合理的方案。同时我们还要考虑到项目的可靠性,可靠性对一个成熟的系统来说非常重要,在前期方案选择、硬件设计、软件设计都需要对此进行考虑。在设计时考虑的问题越多,那么调试的时候出现问题的概率就会越小。设计时最好留有一定的余量,以便于调试、修改。在硬件设计时应该仔细研究电路相关资料,事先拟定调试方案,为后面调试工作打下坚实的基础。此外,调试也很重要。在实际测试时通常都会发现一些前期考虑时预想不到的问题,如何通过对系统进行合理的修改来解决这些问题非常重要。

在项目完成过程中还深深体会到团队合作精神的重要性。只有合作我们才能把这个项目做得更好更完善。只有相互紧密配合,整个项目才能得以顺利完成。

28

参考文献

参 考 文 献

[1] 刘凤君.正弦波逆变器[M].北京:科学出版社,2002.

[2] 李爱文,张承慧.现代逆变技术及其应用[M].北京:科学出版社,2000. [3] 陈道炼.DC一AC逆变技术及其应用[M].北京:机械工业出版社,2005.

[4] 王春生,郭彦军.小功率115V/400Hz中频电源的设计研制.自动化技术与应用[J],

2006,25(8),85~87.

[5] 刘涛,魏巍,张世杰.通信用USP及逆变器[M].北京:人民邮电出版社,2008. [6] 谢力华,苏彦民.正弦波逆变电源的数字控制技术.电力电子技术[J],2001(6):52~55. [7] 孟元东,娄承芝.基于dsPIC30F1010高频正弦波逆变器的研究,电力电子技术[J],

2007,41(7),75~77.

[8] 罗泠,周永鹏等.DSP控制400Hz中频在线式不间断电源的研究,电力电子技术[J],

2004,38(2),48~50.

[9] Luminary Micro Inc.LM3S1138 Microcontroller DATA SHEET[Z].Luminary Micro Inc, 2007. [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20]

[5]苏玉刚等.电力电子技术[M].重庆:重庆大学出版社,2003. [6]张燕宾.SPWM变频调速应用技术.北京:机械工业出版社,2005. [7] 廖东初,聂汉平.电力电子技术.湖北:华中科技大学出版社,2007 [8] 王兆安,黄俊.电力电子技术.北京:机械工业出版社,2005 [9]

29

附录

附 录 系统主程序

#include \#include \

/*************************************************************************** //

//一般main中所包含的一些系统定义的头文件 //

/***************************************************************************/

#include //Stellaris系列芯片的内存地址映射表 #include //Stellaris系列芯片通用类型的宏指令与类型定义

#include //Stellaris系列芯片系统驱动控制模型定义

#include //Stellaris系列芯片通用标准输入输出定义

#include //Stellaris系列芯片启动模数转换的时所用的宏指令

#include //Stellaris系列芯片用于模数转换驱动时头指令

#include //Stellaris系列芯片用于中断分配的头指令

#include //Stellaris系列芯片的终端控制模型定义

#include \#include \

30

附录

#include \

// 将较长的标识符定义成较短的形式

#define SysCtlPeriEnable SysCtlPeripheralEnable //系统外围设备的使能(是外围设备工作函数)

#define SysCtlPeriDisable SysCtlPeripheralDisable //系统外围设备的不使能(是系统外围设备不工作)

#define GPIOPinTypeIn GPIOPinTypeGPIOInput //通用标准输入输出的针脚类型

#define GPIOPinTypeOut GPIOPinTypeGPIOOutput #define GPIOPinTypeOD GPIOPinTypeGPIOOutputOD

#define WdogStallEnable WatchdogStallEnable #define WdogReloadSet #define WdogIntEnable #define WdogIntClear

#define uchar unsigned char // 定义全局的系统时钟变量

unsigned long TheSysClock = 12000000UL;

/**************************************************************************** //

// ADC模块的初始化过程 //

/****************************************************************************/

WatchdogReloadSet WatchdogIntEnable WatchdogIntClear

31

附录

void ADC_Init() {

SysCtlPeriEnable(SYSCTL_PERIPH_ADC); // 使能ADC模块

SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); // 设置ADC采样率

ADCSequenceDisable(ADC_BASE , 0); // 止采样序列

ADCSequenceConfigure(ADC_BASE , // 样序列配置

0 , // 样序列编号

ADC_TRIGGER_PROCESSOR , // 处理器触发

0); // 置优先级

ADCSequenceStepConfigure(ADC_BASE , // 样步进设置

0 , // 样序列编号

0 , // 置步进

ADC_CTL_END | ADC_CTL_CH0); // 道设置 从ADC0口读入数据

ADCSequenceEnable(ADC_BASE , 0); // 32

禁采采由设采采设通使

附录

能采样序列 }

/****************************************************************************************** //

// 看门狗程序 //

*******************************************************************************************/

/* 看门狗初始化 */ void wdogInit ( void ) {

SysCtlPeriEnable( SYSCTL_PERIPH_WDOG ) ;

// 使能调试器暂停

// 使能看门狗模块

WdogStallEnable ( WATCHDOG_BASE ) ;

看门狗计数

WdogReloadSet ( WATCHDOG_BASE , 3000000UL ) ;

// 设置看

门狗装载值 }

WdogIntEnable ( WATCHDOG_BASE ) ;

//使能看门狗中断

IntEnable ( INT_WATCHDOG ) ;

//使能看门狗模块中断

//IntMasterEnable ( ) ;

//使能处理器中断

/* 看门狗中断服务函数 */

33

附录

void Watchdog_Timer_ISR ( void ) {

WdogIntClear ( WATCHDOG_BASE ) ;

// 反转LED

// 清除看门狗中断

状态 }

LED_Toggle(LED1);

/************************************************************************************ //

// 系统初始化过程 //

/************************************************************************************/ void SystemInit(void) {

SysCtlLDOSet(SYSCTL_LDO_2_75V); // 配置PLL前须将LDO电压设置为2.75V AD转换必须的电压设置

SysCtlClockSet(SYSCTL_USE_PLL | // 系统时钟设置,采用PLL

SYSCTL_OSC_MAIN | // 主振荡器

SYSCTL_XTAL_6MHZ | // 外接6MHz晶振

SYSCTL_SYSDIV_10); // 分频结果为20MHz

34

附录

TheSysClock = SysCtlClockGet(); // 获取系统时钟,单位:Hz

GPIOD_Init(); // 通用输入输出端口D的初始化

GPIOG_Init(); // 通用输入输出端口G的初始化 FreInit();

ADC_Init(); // 数模转换模块的初始化

LED_Init(LED1); // 初始化LED1灯

Lcminit(); // 液晶显示初始化

GPIOPinIntEnable(GPIO_PORTD_BASE , GPIO_PIN_1); //使能GPIOD的1号管脚中断

GPIOPinIntEnable(GPIO_PORTG_BASE , GPIO_PIN_5); //使能GPIOG的5号管脚中断

GPIOIntTypeSet(GPIO_PORTD_BASE

,

GPIO_PIN_1,GPIO_LOW_LEVEL);

//GPIOD的1号管脚下降沿时产生中断信号 GPIOIntTypeSet(GPIO_PORTG_BASE

,

GPIO_PIN_5,GPIO_LOW_LEVEL);

//GPIOG的5号管脚下降沿时产生中断信号 IntEnable(INT_GPIOD); IntEnable(INT_GPIOG);

//开GPIOD中断 //开GPIOG中断

wdogInit( ); //看门狗初始化

IntMasterEnable ( ); }

//开处理器中断

35

附录

//***************************************************************************************** // //主函数 //

//***************************************************************************************** int main(void) {

SystemInit(); //系统初始化 select();

unsigned long ulVal = 0x00; //用来保存转换后的数字量 uchar Val; while(1) {

ADCProcessorTrigger(ADC_BASE , 0);

//触发样本序列

while ( HWREG(ADC_BASE+ADC_O_X_SSFSTAT) & 0x00000100 ); //等待样本序列采集完成

ADCSequenceDataGet(ADC_BASE , 0 , &ulVal); 的结果

ulVal = ((ulVal * 3000) / 1024)/1000; 行转换 单位mV 2)

//ADC处理器分辨率位2的10次方 (公式

//将结果进 //获取采集

36

附录

Val=(uchar)ulVal;

vWrite8x16String(\写字符串

vWrite8x16String(\ vWrite8x16String(\ //vWrite8x16String(\ if(ulVal<1&&ulVal>=0) {

vWrite8x16String(\ }

if(ulVal<2&&ulVal>=1) {

vWrite8x16String(\ }

if(ulVal<3&&ulVal>=2) {

vWrite8x16String(\ }

if(ulVal<4&&ulVal>=3) {

vWrite8x16String(\ }

if(ulVal<5&&ulVal>=4) {

vWrite8x16String(\ }

if(ulVal<6&&ulVal>=5) {

vWrite8x16String(\

37

附录

}

if(ulVal<7&&ulVal>=6) {

vWrite8x16String(\ }

if(ulVal<8&&ulVal>=7) {

vWrite8x16String(\ }

if(ulVal<9&&ulVal>=8) {

vWrite8x16String(\ }

if(ulVal<10&&ulVal>=9) {

vWrite8x16String(\ }

if(ulVal<11&&ulVal>=10) {

vWrite8x16String(\ }

if(ulVal<12&&ulVal>=11) {

vWrite8x16String(\ }

if(ulVal>=12||ulVal<0) {

vWrite8x16String(\ }

38

附录

//vWrite8x16Character(Val,6,(12*8+8),0);

Delay(1000 * (TheSysClock / 4000)); //这个个延时有没有必要 Lcmcls(); } }

39

本文来源:https://www.bwwdw.com/article/muvo.html

Top