嵌入式课程设计文档格式.docx
《嵌入式课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
![嵌入式课程设计文档格式.docx](https://file1.bdocx.com/fileroot1/2023-2/4/732e78dd-b293-47ef-8a34-0e7486fcd696/732e78dd-b293-47ef-8a34-0e7486fcd6961.gif)
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
0x3FFFC018
FIO0SET
FIOCLR
使用FIOMASK的高速端口输出清零寄存器。
写1在相应的端口管脚产生低电平。
写0无效
WO
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使用器件明细表
四、软件设计
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;
/*显示2*/
FIO0CLR=LED0|LED1|LED3|LED4|LED6;
FIO0SET=LED2|LED5;
/*显示3*/
FIO0CLR=LED0|LED1|LED2|LED3|LED6;
FIO0SET=LED4|LED5;
/*显示4*/
FIO0CLR=LED1|LED2|LED5|LED6;
FIO0SET=LED0|LED3|LED4;
/*显示5*/
FIO0CLR=LED0|LED2|LED3|LED5|LED6;
;
FIO0SET=LED1|LED4;
/*显示6*/
PINSEL1=(PINSEL1&
(~(0x00<
6)))|(0x00<
/*停止电机*/
FIO0CLR=LED0|LED2|LED3|LED4|LED5|LED6;
FIO0SET=LED1;
/*显示7*/
FIO0CLR=LED0|LED1|LED2;
FIO0SET=LED3|LED4|LED5|LED6;
/*显示8*/
FIO0CLR=LED0|LED1|LED2|LED3|LED4|LED5;
/*显示9*/
FIO0CLR=LED0|LED1|LED2|LED3|LED5|LED6;
FIO0SET=LED4;
}/*当显示0时,同时电机转动,显示6时,电机停止,循环启停*/
return0;