嵌入式课程设计.docx

上传人:b****7 文档编号:9593674 上传时间:2023-02-05 格式:DOCX 页数:11 大小:225.66KB
下载 相关 举报
嵌入式课程设计.docx_第1页
第1页 / 共11页
嵌入式课程设计.docx_第2页
第2页 / 共11页
嵌入式课程设计.docx_第3页
第3页 / 共11页
嵌入式课程设计.docx_第4页
第4页 / 共11页
嵌入式课程设计.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

嵌入式课程设计.docx

《嵌入式课程设计.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计.docx(11页珍藏版)》请在冰豆网上搜索。

嵌入式课程设计.docx

嵌入式课程设计

 

课题:

PWM-高速GPIO口延时方式驱动直流电机的转动与停转

专业:

电气工程及其自动化

班级:

电气(三)班

学号:

20090085姓名:

冯玉倩

学号:

20090073姓名:

何沿江

学号:

20090090姓名:

王亚

学号:

20090074姓名:

王俊

指导教师:

蔡学敬

设计日期:

2012年12月29日

成绩

目录

一、设计任务与要求2

二、设计依据原则2

2.1GPIO概况2

2.2本设计使用的高速GPIO控制寄存器3

2.3GPIO端口寄存器简介3

2.4数码管简介4

三、硬件系统设计6

3.1设计电路图6

3.2使用器件明细表8

四、软件设计8

4.1、实现程序8

4.2、调试烧写过程8

4.3、课程设计检验测试与实现9

五、心得体会9

六、参考文献9

七、附录10

附录110

一、设计任务与要求

设计一个按键、一个蜂鸣器和一个一位7段数码管灯指示控制直流电机控制装置;包括PWM-高速GPIO口延时方式驱动直流电机的转动与停转。

二、设计依据原则

2.1GPIO概况

LPC2103的GPIO有两种模式:

高速GPIO和低速GPIO(本设计使用高速GPIO)。

高速GPIO的控制寄存器位于CPU的局部总线上,可进行高速的读写操作,而低速GPIO的控制寄存器是挂在VPB总线上。

P0口作为高速GPIO使用时,将不能在调试环境下观察GPIO在VPB总线上的寄存器。

2.2本设计使用的高速GPIO控制寄存器

GPIO控制寄存器(通过局部总线访问的寄存器)通用名称

描述

访问

复位

PORT0

地址&名称

FIODIR

高速GPIO端口方向控制寄存器。

该寄存器单独控制每个端口管脚的方向

R/W

0

0x3FFFC000

FIO0DIR

FIOSET

使用FIOMASK的高速端口输出设置寄存器。

该寄存器控制输出管脚的状态。

写1在相应的端口管脚产生高电平。

写0无效。

读该寄存器返回端口输出寄存器的当前内容

R/W

0

0x3FFFC018

FIO0SET

FIOCLR

使用FIOMASK的高速端口输出清零寄存器。

该寄存器控制输出管脚的状态。

写1在相应的端口管脚产生低电平。

写0无效

WO

0

0x3FFFC01C

FIO0CLR

表1:

GPIO控制寄存器

2.3GPIO端口寄存器简介

、GPIO端口0输出置位寄存器IOSET

当引脚配置为GPIO输出时,该寄存器可以使引脚输出高电平。

向该寄存器写1,对应的引脚将会输出高电平;向该寄存器写0,无效。

当引脚功能选择为GPIO输入或其它功能时,写IOSET无效。

读该寄存器将返回相应的值,此值由以前对寄存器IOSET和IOCLR(或IOPIN)的写操作决定,此值不会反映外部环境对引脚的影响。

、高速GPIO端口0输出置位字节和半字寄存器(FIO0SET)

高速GPIO除了一个32位的输出置位寄存器之外,还有4个8位字节输出置位寄存器和2个16位半字输出置位寄存器。

它们的功能同32位输出置位寄存器一样

、GPIO端口0方向寄存器IODIR

当引脚选择GPIO功能时,使用该寄存器可以控制引脚的方向。

只有当引脚选择GPIO功能时,IODIR的设置才有意义。

低速GPIO的方向控制寄存器为IO0DIR,高速GPIO的方向控制寄存器为FIO0DIR

④、GPIO输出清零寄存器IOCLR

当引脚配置为GPIO输出模式时,该寄存器可使引脚输出低电平。

向寄存器相应位写1,则对应的引脚将输出低电平并清零IOSET寄存器中相应的位;写0,无效。

当引脚配置为GPIO输入或其它功能时,写IOCLR无效。

高速GPIO的输出清零寄存器为FIO0CLR

2.4数码管简介

7段数码管其实是八段,有时小数点没有使用,所以常说7段,显示原理是这样的:

数码管首先从上到右,到下到左,到中间,最后到小数点分别标记为abcdefgDP八段,其中小数点位DP为最高位,a段为最低位,要想显示什么字符只需要使对应的段发光即可。

一般的习惯是单片机的端口的最低位接a段,次低位接b段...最高位(如p0.7)接DP,显示码从高往低表示为为DPgfedcba如要显示“1”,只需要将b、c段点亮即可,若是共阴极,片选是低电平选中,某一段输出高电平点亮,即显示码为00000110即0x06,其他的依照该方法类推。

数码管的示意图如图1所示

图1数码管的示意图

2.使用PWM控制直流电动机调速是通过调节输出方波的占空比来实现的,这里采用定频调宽法,即方波的周期不变,只改变方波宽度。

当PWM输出占窄比为50%时,电机处于静止状态;当占空比小于50%时,电机反转;当占空比大于50%时,电机正转。

调节占空比就可以改变转速。

按键KEY1和KEY2用来控制占空比进行调速实验,按下KEY1时占空比提高10%,按下KEY2时占空比降低10%。

直流电动机PWM调速控制原理图如图2所示。

其中,LPC2103是直流电动机驱动芯片,工作电压为4~20V,最大输出电流为0.4A。

    

 

3、硬件系统设计  

3.1设计电路图:

3.3、使用器件明细表:

名称

数量

直流电机

1

烧写器

1

蜂鸣器

1

按钮

1

数码管

1

发光二极管

1

导线

若干

表1使用器件明细表

四、软件设计

4.1、实现程序:

见附录1

4.2、调试烧写过程:

将计算机USB接口与EasyJTAG-H仿真器相连,然后再将EasyJTAG-H仿真器的JTAG接口连接到所焊的板子,选择匹配的CPU型号和flash,按运行启动烧写,添加完EasyJTAG-H驱动后,选择该驱动程序,关闭AXD界面,回到ADS中,在正常情况下,点击Debug仿真后,PC指针会指向中断向量表的起始处.

调试时若选择使用DebugInFLASH生成目标,并进行调试后(使用EasyJTAG-H仿真器),程序即烧写到片内Flash中。

将EasyJTAG-H和电源断开,等待五秒,重新上电,程序将脱机运行,看到LED显示和直流电机启停。

使用RelInFlash生成目标时,编译连接生成的目标代码会将芯片加密。

此时不能再进行调试,除非使用ISP进行全片擦除,否则是不能再进行调试的。

4.3、课程设计检验测试与实现:

功能实现,使用PWM-高速GPIO口延时方式驱动直流电机的转动与停转。

并结合数码管显示,电机循环启停,数码管循环显示从“0”到“9”,“0”时电机启动,“6”时停止。

五、心得体会

《嵌入式系统原理》是一门实践性较强的课程,为了做好此课程设计,必须在掌握理论知识的同时,强化实践,一个人的力量是有限的,要学会吸取别人的经验,提升自己的能力,在程序编写上需要更强的耐心,分析错误,解决问题。

在这个过程中,我们能感受到缺乏知识的失落,成功的兴奋,体会到此设计的重要意义!

同时,在设计过程中遇到了许多的困难和障碍,特别感谢刘敦放老师的谆谆教导,细心引领,对我们无私的指导和帮助,给我们从毫无头绪中的杂乱中理出设计的主干,再次表示衷心的感谢。

六、参考文献

1)《嵌入式系统原理与应用技术》北京航空航天大学出版社教材袁智勇著

2)《EasyARM2103教材》广州周立功单片机发展有限公司编

3)直流电机dynamo-0程序指导教师刘敦放

 

七、附录

附录1

#include"config.h"

#defineLED01<<0

#defineLED11<<1

#defineLED21<<2

#defineLED31<<3

#defineLED41<<4

#defineLED51<<5

#defineLED61<<6

#defineLED71<<7

voidDelayNS(uint32uiDly)

{

uint32i;

for(;uiDly>0;uiDly--)

{

for(i=0;i<50000;i++);

}

}

voidTimer1(void)

{

T1TCR=0x02;/*定时器0复位*/

T1PR=0;/*不设时钟分频*/

PWM1CON=0x0C;/*使能PWM输出*/

T1MCR=0x02;/*设置T0MR0匹配后复位T0TC*/

T1MR0=Fpclk/2000;/*设置PWM输出的周期*/

T1MR2=((Fpclk/2000)/25)*13;/*设置PWM1.2输出占空比为50%*/

//T1MR3=((Fpclk/2000)/4)*3;/*设置PWM1.3输出占空比为25%*/

T1TCR=0x01;/*启动定时器0*/

}

intmain(void)

{

PINSEL0=PINSEL0&0x0000/*选择P0.0~P0.6的GPIO功能*/

SCS=0x01;/*设定为高速GPIO模式*/

PINSEL1=(PINSEL1&(~(0x03<<6)))|(0x02<<6);/*选择MAT1.2输出*/

FIO0DIR=LED0|LED1|LED2|LED3|LED4|LED5|LED6|LED7;/*设置输出*/

FIO0SET=LED0|LED1|LED2|LED3|LED4|LED5|LED6|LED7;/*设置输出高电平*/

while

(1);{

/*显示0*/

Timer1(void);/*启动电机*/

FIO0CLR=LED0|LED1|LED2|LED3|LED4|LED5|LED7;

FIO0SET=LED6;

DelayNS(200);

/*显示1*/

FIO0CLR=LED1|LED2;

FIO0SET=LED0||LED3|LED4|LED5|LED6|LED7;

DelayNS(200);

/*显示2*/

FIO0CLR=LED0|LED1|LED3|LED4|LED6;

FIO0SET=LED2|LED5;

DelayNS(200);

/*显示3*/

FIO0CLR=LED0|LED1|LED2|LED3|LED6;

FIO0SET=LED4|LED5;

DelayNS(200);

/*显示4*/

FIO0CLR=LED1|LED2|LED5|LED6;

FIO0SET=LED0|LED3|LED4;

DelayNS(200);

/*显示5*/

FIO0CLR=LED0|LED2|LED3|LED5|LED6;;

FIO0SET=LED1|LED4;

DelayNS(200);

/*显示6*/

PINSEL1=(PINSEL1&(~(0x00<<6)))|(0x00<<6);/*停止电机*/

FIO0CLR=LED0|LED2|LED3|LED4|LED5|LED6;

FIO0SET=LED1;

DelayNS(200);

/*显示7*/

FIO0CLR=LED0|LED1|LED2;

FIO0SET=LED3|LED4|LED5|LED6;

DelayNS(200);

/*显示8*/

FIO0CLR=LED0|LED1|LED2|LED3|LED4|LED5;

DelayNS(200);

/*显示9*/

FIO0CLR=LED0|LED1|LED2|LED3|LED5|LED6;

FIO0SET=LED4;

DelayNS(200);

}/*当显示0时,同时电机转动,显示6时,电机停止,循环启停*/

return0;

}

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

当前位置:首页 > 成人教育 > 自考

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

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