基于ARM的PWM波输出

基于ARM的PWM波输出
基于ARM的PWM波输出

编号:_

嵌入式系统

实训 (论文)说明书

题目:基于嵌入式ARM的PWM信号发生器

摘要

脉宽控制技术(PWM)简称脉宽调制,是非常重要的电力电子控制技术,利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,对提高电力电子装置的性能,促进电力电子技术的发展有着巨大的推动作用。

本系统主要介绍了基于LPC2132的PWM信号发生器制作系统,主要功能是对PWM输出波形的频率、占空比的连续调节,并能对运行信号参数用示波器进行实时显示。电路主要分为三个模块,核心模块采用LPC2138中央控制单元,通道选择模块,键盘控制模块采用了五个按键控制,分别调节PWM信号的占空比加和减、频率的加和减、输出PWM 通道选择。经测试验证,该信号发生器便于观察和调节,控制精确误差小。

关键词: LPC2132;PWM;按键;占空比;频率

Abstract

Pulse width control technology (PWM) referred to pulse width modulation, is very important power electronic control technology, the use of the microprocessor digital output to to the analog circuit to control a very effective technology, to improve the performance of the power electronic devices, and promote the development of the power electronic technology has a great push forward.

This system mainly introduces the LPC2132 PWM signal generator based on the production system, the main function is to the output waveform, the frequency PWM occupies emptiescompared to continuous adjustment, and can run with an oscilloscope to signal parameter real-time display. Circuit can be divided into three modules, the core module LPC2138 central control unit, channel selection module, the keyboard control module adopted five key control,, regulate PWM signal occupies emptiescompared to add and subtract, frequency of addition and subtraction, output PWM channel selection. The results of experiment, this signal generator for observation and regulation, control precise small error.

Key words: LPC2132; PWM; Button; Occupies emptiescompared; frequency

目录

引言 (1)

1 系统设计 (1)

1.1 设计要求 (1)

1.2 方案的选择 (1)

1.3 系统设计 (2)

1.4 工作原理 (2)

2 硬件设计 (3)

2.1 LPC2132芯片说明 (3)

2.1.1LPC2132主要特性 (3)

2.1.2LPC2138管脚 (3)

2.2 PWM模块 (4)

2.2.1PWM特性 (4)

2.2.2PWM基本原理 (5)

2.2.3PWM相关寄存器 (5)

3 软件设计 (6)

3.1 系统整体设计 (6)

3.2 键盘驱动程序设计 (8)

3.3 PWM输出通道的选择 (9)

4 整机调试 (10)

4.1 静态调试 (10)

4.2 动态调试 (11)

4.3 数据的测量和计算 (11)

4.3.1占空比计算 (11)

4.3.2信号频率误差计算 (11)

5 结论 (12)

附录 (15)

引言

脉冲宽度调制是现代控制技术常用的一种控制信息输出,可以有效地利用数字技术控制模拟信号的技术。PWM(Pulse Width Modulation)又称脉冲宽度调制,属于脉冲调制的一种,是应用于电子信息系统和通信领域的一种信号变换技术。随着电力电子技术被引入到电力变换领域,PWM技术广泛运用于各种工业电力传动领域乃至家电产品中。其突出特点是可以比较容易地选择最佳的脉冲调制频段,因此,被竞相开发,前景广阔。

PWM控制技术以其控制简单、灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。PWM控制技术一直是变频技术的核心技术之一,由于PWM可以同时实现变频变压反抑制谐波的特点,在交流传动及至其它能量变换系统中得到广泛应用。目前实现方法为采用全数字化方案,完成优化的实时在线的PWM信号输出。由于当今科学技术的发展已经没有了学科之间的界限,结合现代控制理论思想或实现无谐振软开关技术将会成为PWM控制技术发展的主要方向之一。

脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。本文主要介绍了PWM信号发生器的概念、作用及定义,分析了系统的工作原理和软硬件的设计。主要是以LPC2132为核心控制单元,通过对外围电路芯片的设计实现PWM输出波形的频率、占空比的连续调节,达到产生PWM信号目的。

1 系统设计

本系统主要是基于LPC2132的PWM信号发生器制作系统,该电路主要分为LPC2132中央控制模块、键盘控制模块、PWM通道选择三部分。IPC2132是整个电路的核心部分,按键主要是控制界面达到友好的人机交流,最后提供三个PWM输出通道的选择。

1.1 设计要求

(1)输出三路及以上PWM信号

(2)PWM信号频率(周期)可调。

(3)PWM信号相位差可调。

(4)PWM信号频率误差≤100HZ。

1.2 方案的选择

方案一:可采用传统的PWM控制电路专用集成芯片或中小规模的数字集成电路来做

示波器显示 波形

PWM 通道 选择 按键 控制

PWM 信号发生器。但是传统的集成电路频率低,可控性差,调试难度大。

方案二、随着微电子技术和大规模可编程器件的发展,PWM 在电机调速中的应用越来越广泛。ARM 与传统 PWM 控制电路中使用的用集成芯片或中小规模的数字集成电路相比而言,具有体积更小、通用性更强、响应更快、可通过编程改良其功能等优点,能达到的频率范围指标更广。

所以,综合考虑后,本次设计选择LPC2132作为电路的核心部件,这样既达到题目的设计要求,也更方便检测调试。 1.3 系统设计

本次设计——基于嵌入式ARM 的PWM 信号发生器。电路用USB 接口为电源,程序从下载口直接接入LPC2132嵌入式核心芯片,PWM 输出可选用三路输出通道中的一个来显示波形,并用到PWM 专用的标准定时器还有匹配器来锁存数据等,可以达到友好的人机交流界面。总的系统设计原理方框图如图1.1所示。

图1.1 总系统设计原理框图

1.4 工作原理

脉宽调制(PWM )控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。PWM 信号发生器通过LPC2132对各模块和定时/计数器、锁存器的控制,其脉宽调制器建立在标准定时器之上,可在 PWM 和匹配功能当中进行选择。本次采用软件编程控制的方法,通过改变给其内部计数器的写入值产生一系列幅值相等而宽度不等的脉冲,再通过一整形电路,产生规则的PWM 脉冲波形,改变的计数器初值是通过程序的改变实现的,而PWM 的输出通道选择,波形频率的改变以及其占空比的改变是通过按键程序实现,最后通过示波器显示相应的波形参数。

LPC2132 核心 控制 芯片

产生 PWM 信号

源 程序下载

2 硬件设计

本系统主要由嵌入式ARM芯片LPC2132构成,PWM信号由示波器显示。

2.1 LPC2132芯片说明

LPC2132是PHILIPS公司生产的单片32位ARM微控制器,是基于一个支持实时仿真和跟踪的16/32位ARM7TDMI-S CPU,并带有256KB的嵌入的高速FLASH存储器。128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。

2.1.1LPC2132主要特性

(1)16/32位ARM7TDMI-S核,超小LQFP64封装。8/16/32kB的片内静态RAM和32/64/128/256/512kB的片内Flash程序存储器。128位宽度接口/加速器可实现高达60MHz工作频率。

(2)通过片内boot装载程序实现在系统编程/在应用编程(ISP/IAP)。单个Flash 扇区或整片擦除时间为400ms。256字节行编程时间为1ms。

(3)1个(LPC2131/32)或2个(LPC2134/36/38)8路10位的A/D转换器,共提供16路模拟输入,每个通道的转换时间低至2.44us。

(4)1个10位的D/A转换器,可产生不同的模拟输出。(LPC2132/34/36/38)。

(5)2个32位定时器/外部事件计数器(带 4 路捕获和 4 路比较通道)、PWM 单元(6 路输出)和看门狗。

(6)低功耗实时时钟具有独立的电源和特定的 32kHz 时钟输入。

(7)多个串行接口,包括 2 个 16C550 工业标准 UART、2 个高速 I2C 总线(400 kbit/s)、SPI 和具有缓冲作用和数据长度可变功能的SSP。

(8)向量中断控制器。可配置优先级和向量地址。

(9)低功耗模式:空闲和掉电。

(10)可通过个别使能/禁止外部功能和外围时钟分频来优化功耗。

(11)通过外部中断或 BOD 将处理器从掉电模式中唤醒。

(12)单电源,具有上电复位(POR)和掉电检测(BOD)电路:CPU 操作电压范围:3.0V~3.6 V (3.3 V± 10﹪),I/O 口可承受 5V 的电压。

2.1.2LPC2138管脚

本次PWM设计只用到了LPC2132中的一些管脚,用于输出PWM信号,以及按键控制。其中PWM管脚汇总如下表2.1所示:

表2.1 PWM管脚汇总

管脚名称管脚方向管脚描述

PWM 1输出PWM通道1输出

PWM 2输出PWM通道2输出

PWM 3输出PWM通道3输出

PWM 4输出PWM通道4输出

PWM 5输出PWM通道5输出

PWM 6输出PWM通道6输出

基本上PWM1 不能用作双边沿输出。而用PWM通道3 和通道5 作为双边沿PWM输出,这样会减少可用的双边沿PWM的个数,故通常不建议使用。所以本次设计的PWM的输出用到LPC2132 的P0.7,P0.8,P0.9 管脚,分别作为PWM2,PWM4,PWM6 输出通道,可得到最多个数的双边沿PWM 输出。

P0.7 ——脉宽调制器输出2。

P0.8 ——PWM4 脉宽调制器输出4。

P0.9 ——PWM6 脉宽调制器输出6。

2.2 PWM模块

LPC2132的脉宽调制器建立在标准定时器0/1之上,应用可在PWM和匹配功能当中进行选择。PWM基于标准的定时器模块并具有其所有特性。不过LPC2131/2132/2138只将其PWM 功能输出到管脚。定时器对外设时钟(pclk)进行计数,可选择产生中断或基于7个匹配寄存器,在到达指定的定时值时执行其它动作。PWM功能是一个附加特性,建立在匹配寄存器事件基础之上。

2.2.1PWM特性

PWM脉宽调制,是靠改变脉冲宽度来控制输出电压,通过改变周期来控制其输出频率。PWM 基于标准的定时器模块并具有其所有特性。不过LPC2131/2132/2138 只将其PWM 功能输出到管脚。定时器对外设时钟(pclk)进行计数,可选择产生中断或基于7 个匹配寄存器,在到达指定的定时值时执行其它动作。它还包括4 个捕获输入,用于在输入信号发生跳变时捕获定时器值,并可选择在事件发生时产生中断。独立控制上升和下

降沿位置的能力使 PWM 可以应用于更多的领域。

两个匹配寄存器可用于提供单边沿控制的 PWM 输出。一个匹配寄存器(PWMMR0)通过匹配时重新设置计数值来控制PWM 周期率。另一个匹配寄存器控制PWM 边沿的位置。每个额外的单边沿控制PWM输出只需要一个匹配寄存器,因为所有PWM 输出的重复率速率是相同的。多个单边沿控制PWM 输出在每个PWM 周期的开始,当PWMMR0 发生匹配时,都有一个上升沿。使用双边沿控制 PWM 输出时,指定的匹配寄存器控制输出的上升和下降沿。这样就产生了正脉冲和负脉冲。

2.2.2PWM基本原理

脉宽调制(PWM)控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次斜波谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。在采样控制理论中有一个重要的结论,即冲量相等而形状不同的窄脉冲加在具有惯性的环节上,其效果基本相同。冲量既指窄脉冲的面积。这里所说的效果基本相同。是指该环节的输出响应波形基本相同。如把各输出波形用傅里叶变换分析,则它们的低频段特性非常接近,仅在高频段略有差异。

根据上面理论我们就可以用不同宽度的矩形波来代替正弦波,通过对矩形波的控制来模拟输出不同频率的正弦波。

例如,把正弦半波波形分成N等份,就可把正弦半波看成由N个彼此相连的脉冲所组成的波形。这些脉冲宽度相等,都等于∏/n ,但幅值不等,且脉冲顶部不是水平直线,而是曲线,各脉冲的幅值按正弦规律变化。如果把上述脉冲序列用同样数量的等幅而不等宽的矩形脉冲序列代替,使矩形脉冲的中点和相应正弦等分的中点重合,且使矩形脉冲和相应正弦部分面积(即冲量)相等,就得到一组脉冲序列,这就是PWM波形。可以看出,各脉冲宽度是按正弦规律变化的。根据冲量相等效果相同的原理,PWM波形和正弦半波是等效的。对于正弦的负半周,也可以用同样的方法得到PWM波形。

在PWM波形中,各脉冲的幅值是相等的,要改变等效输出正弦波的幅值时,只要按同一比例系数改变各脉冲的宽度即可,因此在交-直-交变频器中,整流电路采用不可控的二极管电路即可,PWM逆变电路输出的脉冲电压就是直流侧电压的幅值。

2.2.3PWM相关寄存器

寄存器的功能理解:

1.IODIR 当对应的位设置为1,为输出,否则为输入

2.IOSET 当引脚作为输出时,相应的位为1,则输出高电平;写0无效

3.IOCLR 当引脚作为输出时,相应的位为1,则输出低电平;写0无效

4.IOPIN 用于检测GPIO的引脚的电平状态

软件设计PWM使用方法总结:

配置相应的引脚工作于PWM模式下,相关寄存器为PINSEL0和PINSEL1;

初始化PWM的定时器相关寄存器,用于产生PWM周期以及PWM的占空比;相关寄存器为:

1.PWMPR、PWMPC用于PWM定时器的预分频配置

2.PWMTC用于PWM定时器的计数

3.PWMMR0用于配置PWM的周期

4.PWMMR1~PWMMR6用于配置PWM的占空比

5.PWMMCR用于控制PWMMR0~PWMMR6的操作

6.PWMTCR用于PWM定时器的使能和PWM的使能

配置PWM的输出方式和引脚使能输出,相关寄存器为PWMPCR;

通过PWMLER使能PWMMR0~PWMMR6的值设置有效;

系统的主程序主要完成输出3路PWM信号,并由按键来控制调节。当 PWM 匹配寄存器用于产生PWM 时,PWM 锁存使能寄存器用于控制PWM 匹配寄存器的更新。当定时器处于PWM 模式时如果软件对PWM 匹配寄存器位置执行写操作,写入的值将保存在一个映像寄存器中。当PWM 匹配0 事件发生时(在PWM 模式下,通常也会复位定时器),如果对应的锁存使能寄存器位已经置位,那么映像寄存器的内容将传送到实际的匹配寄存器中。此时,新的值将生效并决定下一个PWM周期。当发生新值传送时,LER 中的所有位都自动清零。在PWMLER 中相应位置位和PWM 匹配0 事件发生之前,任何写入PWM 匹配寄存器的值都不会影响PWM 操作。

3 软件设计

3.1 系统整体设计

电路输出三路PWM信号,分别从LPC2138的P0.7、P0.8、P0.9管脚输出。按键S1-S5分别控制PWM信号的周期,占空比以及是哪一路PWM信号输出。由设计要求,可分析得出程序设计一共有以下几个模块:

(1)初始化程序设计,即初始化LPC2132芯片,设置P0.7、P0.8、P0.9为输出管脚。

(2)PWM信号发生设计,初始化LPC2132后,要开启PWM的专用定时器,通过它的匹配功能来产生PWM信号。

(3)变量控制,产生PWM信号后,要通过按键来调节PWM信号的周期和占空比。

(4)屏幕显示,产生PWM信号,送至示波器显示。

总体软件设计流程图如图3.1所示。

N

Y

N N N N

Y Y Y Y

图3.1总体软件设计流程图

总结:

1. 修改匹配寄存器之后,必须设置锁存使能寄存器中的相应位,否则匹配寄存器的值不能生效。

2. 第一次使能之后还要等到匹配才能装入MR0和MR1所以要出现连续的波形,必须使用两次3.2 初始化程序流程图

扫描按键

选择PWM2信号输出通

选择PWM4信号输出通

选择PWM6信号输出通

开始

程序初始化

设置PWM 寄存器 产生PWM 信号 扫描按键 S1? 按下1次S1?

按下2次S1?

按下3次S1?

S2? S3? S4? S5? 信号周期增大 信号周期减小 信号占空减小 信号占空增大 示波器显示

3.2 键盘驱动程序设计

图3.2 PWM信号发生器按键功能

各按键功能如下:

1. 开启电源,各模块初始化。将示波器的探头接到芯片P0.7、P0.8、P0.9其中一路输出上,可以分别看到P0.7、P0.8和P0.9管脚的三路信号,表示电路工作正常。

2. 按下S1键1次,则按键修改功能作用于P0.7管脚输出的PWM信号,即第1路PWM信号,再按S1键1次,则按键修改功能作用于P0.8管脚输出的PWM信号,即第2路PWM信号。按下第3次按键,则按键修改功能作用于P0.9管脚输出的PWM信号,即第3路PWM信号。

3. 按下S2键,可以看到示波器上显示的PWM信号占周期增大。

4. 按下S3键,可以看到示波器上显示的PWM信号占周期减小。

5. 按下S4键,可以看到示波器上显示的PWM信号的占空减小。

6. 按下S5键,可以看到示波器上显示的PWM信号的占空增加。

按键的程序如下所示:

1.周期加减

if((IO0PIN & (1 << SW_2)) == 0) //周期++

{

delayns(100);

if((IO0PIN & (1 << SW_2)) == 0) cycletime++;

while((IO0PIN & (1 << SW_2))==0);

}

if((IO0PIN & (1 << SW_3)) == 0) // 周期--

{ delayns(100);

if((IO0PIN & (1 << SW_3)) == 0) cycletime--;

while((IO0PIN & (1 << SW_3))==0);

}

2. 占空加减

if(((IO0PIN & (1 << SW_5)) == 0)&&(mr1pleve<=cycletime)) //占空++ {

delayns(100);

if(((IO0PIN & (1 << SW_5)) == 0)&&(mr1pleve<=cycletime)) {

mr1pleve++; }

while((IO0PIN & (1 << SW_5))==0); }

else if(((IO0PIN & (1 << SW_4)) == 0)&&(mr1pleve>=1)) //占空-- {

delayns(100);

if(((IO0PIN & (1 << SW_4)) == 0)&&(mr1pleve>=1)) {

mr1pleve--; }

while((IO0PIN & (1 << SW_4))==0); } break; 3.3 PWM 输出通道的选择

图3.3 PWM 输出通道的选择

本次设计可以输出三路PWM 信号,分别从LPC2138的P0.7、P0.8、P0.9管脚选择输出。当选择相应的输出时,对应的LED 灯就会发亮,证明电路已接通,可以用示波器测试相应输出通道的波形。

程序如下所示:

void key_scan(void)

{

if((IO0PIN & (1 << SW_1)) == 0)

{ delayns(100);

if((IO0PIN & (1 << SW_1)) == 0)

{

channelcount++;

if(channelcount>=4)channelcount=1;

}

while((IO0PIN & (1 << SW_1))==0);

}

4 整机调试

整机调试分为静态调试和动态调试,动态调试中还包括对软件的调试,即对程序的修改。调试完成后,进行数据的记录。

4.1 静态调试

静态调试即不装上单片机芯片的调试,一块电路板做好后首先要进行静态调试。静态调试即不装上芯片的调试,将制作好的PCB板,按照装配图或原理图进行器件装配,装配好之后进行电路的调试。一块电路板做好后首先要进行静态调试。

(1)电路板的检查

首先用万用表检查电路板有无虚焊点、断路或短路。在装配焊接过程中,在焊点接近的地方,很容易出现连焊或者残留焊锡而造成的短路情况。如发现上述情况,应马上解决,以免影响调试。本次对电路板的检查没有发现大问题,焊点无虚焊,无短路。

(2)元件装配的检查

在组装电路板时,很可能出现元件错装的情况,特别是芯片,很容易装反,调试前要对照原理图反复核对。未通电前要对芯片以及一些元器件进行检测。这次设计中用到的LED灯因为用前未检测,导致后面调试过程中lED灯一直不亮,最后发现LED灯是坏的,浪费了调试时间。

(3)通电检查

以上两项准备工作完成后,可以进行通电检查。方法是先将万用表电流档串联在电源和所测电路板之间,观察电路总静态电流的大小。若发现电流过大,说明电路可能有短路;电流过小或无电流,表示电路存在断路。遇到上述情况,必须要先排除故障,才能进行调试。通电后注意在各点上是否都加上了所需要的电压,特别是芯片的电压,因为如果加在芯片上的电压低了,就会达不到理想的效果,如果高了就很容易烧掉芯片。若接线正确,则电路板上的芯片不会发热,且能在示波器上显示基本波形。上电以后一旦发现芯片发热,马上断开电源,停止供电。

4.2 动态调试

软件的调试主要是围绕着其所要求的功能来做的,要对程序的流程和算法做调整。变量的定义,子函数的声明和主程序的执行等都要认真的进行检查修改。软件的调试相当重要且繁琐,这花费了很多的时间。调试程序,主要是管脚的定义有问题。本次设计在装上芯片并从电脑烧录程序到2132中就开始进行功能检测,并将程序下载到2132中。调试过程中遇到的基本问题的波形能够出来但不是稳定。通过对程序的重新认识,发现程序中的某个地方发生死循环了,使得波形频率的加减不能改变。最后经过对方案的考虑后,对程序做了一定的修改,最终将题目要求中的基本功能实现了。

当大体上完成了功能的编程以后,最后就是对算法的细节处理上进行调整和优化。软件调好后,动态调试就结束了。按照这个方法,调试其他路的PWM信号。至此,PWM 信号发生器的调试完毕。

4.3 数据的测量和计算

4.3.1占空比计算

例如,选择第1路PWM信号进行测量。可以通过软件编译设置初始值,如周期MR0=100,低电平MR1=20,高电平MR2=60,则其占空比为:

观看示波器上的方波,测量数值,可得周期T=8,12us,高电平=4.9us,则

由此可以看出,输出的波形是正确的,且误差不大。

4.3.2信号频率误差计算

LPC2138PWM的晶振频率错误!未找到引用源。,软件设定错误!未找到引用源。,则理论PWM的输出频率为:

错误!未找到引用源。

观察示波器,屏幕显示实际频率f1=1.0009KHZ错误!未找到引用源。,则

误差= f - f1 = 90HZ

误差在100HZ以内,符合题目要求。

5 结论

通过两个星期的学习和努力,我终于完成了本次实训课题基于嵌入式PWM信号发生器的制作。总结本次嵌入式系统设计实训,我受益匪浅。

首先是选题,当拿到题目的时候确实不知道选什么。嵌入式是本学期才开设的一门课程,之前我都没有接触过,虽然如此,嵌入式编程也是运用C语言,跟单片机类似,只是芯片不同,对管脚的定义运用不一样。本次实训题目有三种类型,对于嵌入式不是很懂的我,本想选择C类,但为了给自己一些挑战增加学习的机会,我最终选择了B类题目。对于PWM的设计,印象中ARM嵌入式课本中有学习到,所以选定了这个题目。选好题目后我开始查阅资料,了解2132的应用,通过查阅资料并向那些参赛同学咨询相关问题了解到了这方面的知识,最终我也弄明白了PWM信号产生的原理。

在调试电路的时候,遇到的问题很多。刚开始的时候,我首先把ARM中的指令看懂。至于按键这一部分比较容易的,主要是逻辑思维要清晰,不要现在死循环中就可以了。由于我是第一次嵌入式芯片,刚开始调试都是从电路的最前面一点一点测试工作点的电压值,以及当输入电压变化的时候每块芯片的输入输出端应有的变化,每一部分电路都应实现自己的功能,才能得出最终的结果,达到目标。

电路板做好后就把程序下载进去。仿真毕竟和实物是有区别的,所以程序下载进去后有波形输出,但是按键控制不了。接下来就是检查电路,确定硬件没问题后就开始调试程序。这期间花费了不少时间。一个模块一个模块的检查程序,最后在其他同学的帮助下发现时程序按键部分陷入死循环了,经过修改后,最终获得了成功。

这次嵌入式实训我还是学到了很多东西的,更重要的是学会了程序出问题时调试的方法,并养成了遇到困难主动独立寻找解决方案的信心和技巧。关于ARM的指令系统我更是了解颇多,知道了如何设置相应的IO口为GPIO口,如何设置相应管脚为输出、输入口,IO的位定义如何实现等等。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,要提高自己的实际动手能力和独立思考的能力。无论我选择什么题目,无论题目是难事易,只要我能从中得到知识,就应该大胆的去做,遇到不懂的地方就要大胆的去问问题,只有勤学好问,才能学到东西。尽管翻阅数据的过程是痛苦的,尽管求学的历程是艰辛的,只要我努力了,就一定会有回报!总体来说,本次实训是通过自己的努力做出的电路板,经过一次次调试,最后能够达到设计的要求,我觉得只要肯用心,有付出就会有收获的。

谢辞

时间过得真快,两个星期的实训即将过去,本次实训为基于ARM嵌入式实训,这次实训得以顺利完成首先要感谢实训中给予我悉心指导和帮助的各位老师。在调试过程中遇到问题时,老师提出了宝贵的解决方法,感谢老师们孜孜不倦的教导。老师们严谨的工作作风、渊博的知识和务实的工作态度,都使我们受益匪浅。在这里我们无法用准确生动的语言来淋漓尽致地描述自己的真实感受,只想说一声:老师,你们辛苦了!

与此同时,我还得到了身边同学们的真心帮助,他们在我遇到问题的时候总是耐心给我讲解,在我们调试的时候解决了很多问题,在此,我对他们表示由衷的感谢!

同时也要感谢学院给我们提供了那么好的一次动手机会,使我受益匪浅,从中使我在很短的时间里学到了很多书本上没有的知识,而且让我对以前学过的知识有了更深刻的印象,同时也发现自己所学知识中存在的一些缺陷,并在我们实训过程中为我们提供了动手的场地与器材,是它们让我有了更多的空间去学习,让我们有了更多锻炼的机会,学到了更多的知识。因而我还要感谢学校,感谢学校安排实训这个课程,感谢学校为了让每个同学在实训中能够学有所成动有所得而做的努力。

最后再次感谢所有在整个实训期间对我提供过帮助和鼓励的老师,同学们,在这里请接受我诚挚的谢意!

参考文献

[1] 崔更申孙安青.ARM嵌入式系统开发与实践[M].北京:中国电力出版社,2008

[2] 欧阳禹.ARM7嵌入式系统实训教程.北京:清华大学出版社,2008.

[3] 何加铭.嵌入式32位微处理器系统设计与应用[M].北京:电子工业出版社,2006

[4] 杨宗德.嵌入式ARM系统原理与实例开发[M].北京:北京大学出版社,2007

[5] 刘天时.ARM7嵌入式开发基础实验[M].北京:北京航空航天大学出版社,2007

[6] 张绮文.ARM 嵌入式常用模块与综合系统设计实例精讲.北京:电子工业出版社,2007.

附录附录一电路原理图

附录二部分源程序代码

#include

#define SW_1 (17)

#define SW_2 (16)

#define SW_3 (14)

#define SW_4 (30)

#define SW_5 (15)

#define led1 (2)

#define led2 (4)

#define led3 (6)

#define led1_on IO0SET |= (1 << led1)

#define led2_on IO0SET |= (1 << led2)

#define led3_on IO0SET |= (1 << led3)

#define led1_off IO0CLR |= (1 << led1)

#define led2_off IO0CLR |= (1 << led2)

#define led3_off IO0CLR |= (1 << led3 )

unsigned int cycletime=150,mr1pleve=25,mr2nleve=75,mr3pleve=20,mr4nleve=80,mr5pleve=15,m r6nleve=85;

unsigned int channelcount=1 ;

void delayns (long t)

{

while(t--);

}

void key()

{ char temp;

temp=cycletime;

if((IO0PIN & (1 << SW_2)) == 0)

{

temp++;

}

while((IO0PIN & (1 << SW_2))==0);

if((IO0PIN & (1 << SW_5)) == 0)

{

temp--;

}

while((IO0PIN & (1 << SW_5))==0);

cycletime=temp;

}

void key_scan(void)

{

if((IO0PIN & (1 << SW_1)) == 0)

{ delayns(100);

if((IO0PIN & (1 << SW_1)) == 0)

{

channelcount++;

if(channelcount>=4)channelcount=1;

}

while((IO0PIN & (1 << SW_1))==0);

}

if((IO0PIN & (1 << SW_2)) == 0) //周期++

{

delayns(100);

if((IO0PIN & (1 << SW_2)) == 0) cycletime++;

while((IO0PIN & (1 << SW_2))==0);

}

if((IO0PIN & (1 << SW_3)) == 0) // 周期--

{ delayns(100);

if((IO0PIN & (1 << SW_3)) == 0) cycletime--;

while((IO0PIN & (1 << SW_3))==0);

}

switch(channelcount)

{

case 1:

{

if(((IO0PIN & (1 << SW_5)) == 0)&&(mr1pleve<=cycletime))

{

delayns(100);

if(((IO0PIN & (1 << SW_5)) == 0)&&(mr1pleve<=cycletime))

{

mr1pleve++;

}

while((IO0PIN & (1 << SW_5))==0);

}

else if(((IO0PIN & (1 << SW_4)) == 0)&&(mr1pleve>=1))

{

delayns(100);

if(((IO0PIN & (1 << SW_4)) == 0)&&(mr1pleve>=1))

相关主题
相关文档
最新文档