嵌入式设计系统(精选6篇)
篇1:嵌入式设计系统
《嵌入式系统概论》综合设计报告书
设计题目:用键盘控制LED显示不同图形
中央民族大学 二零零八年十月三十一日
一、设计目的
了解LED点阵和矩阵键盘的工作原理。
二、设计内容
编写程序控制用矩阵键盘控制LED点亮,产生不同的图形。
三、设计方案
功能概述:
本设计要实现的功能是通过键盘控制LED点阵图形显示,如果键盘输入0-9十个数字时显示相应的数字,如果输入其他的键,则显示“+”号。
1、程序设计思路
本设计要实现键盘控制LED点阵图形显示,就必须要编写键盘和LED点阵的程序。先通过扫描矩阵键盘,得到键盘值,然后再调用点阵显示子函数,根据扫描的键盘值,在LED点阵上显示不同的图形。
2、主程序设计
主程序要实现的功能是矩阵键盘扫描,得到键盘值,然后把值传给LED显示函数。
程序流程图如下:
3、LED点阵显示函数设计
本函数要实现的功能是根据键盘的值,在LED点阵上显示不同的图形。如果键盘的输入值为0-9则显示相应的数字,如果输入的是其他值,则显示“+”。本程序采用二维数组存放要显示的图形的字模,然后再通过逐行扫描LED点阵,把要显示的图形分8次显示,一次显示一行,利用人眼的视觉暂留效应,是人看到的是一个图形一次显示出来,通过一个循环控制图形显示的时间。程序流程图如下:
4、点阵图形设计
根据8*8 LED点阵的原理,8X8 点阵共需要64 个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1 电平,某一行置0 电平,则相应的二极管就亮;
先绘制出要显示的图形如下:
根据图形中点亮的LED灯的位置,得到相应图形的16进制数,存放在二维数组Buf1[11][8]中。
所以要显示的图形的字模如下:
buf1[11][8]={ {0x3c,0x24,0x24,0x24,0x24,0x24,0x3c,0x00},//0
{0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08},//1
{0x3c,0x20,0x20,0x3c,0x04,0x04,0x3c,0x00},//2
{0x3c,0x20,0x20,0x3c,0x20,0x20,0x3c,0x00},//3
{0x24,0x24,0x24,0x3c,0x20,0x20,0x20,0x00},//4
{0x3c,0x04,0x04,0x3c,0x20,0x20,0x3c,0x00},//5
{0x3c,0x04,0x04,0x3c,0x24,0x24,0x3c,0x00},//6
{0x3c,0x20,0x20,0x20,0x20,0x20,0x20,0x00},//7
{0x3c,0x24,0x24,0x3c,0x24,0x24,0x3c,0x00},//8
{0x3c,0x24,0x24,0x3c,0x20,0x20,0x3c,0x00},//9
{0x08,0x08,0x08,0x3e,0x08,0x08,0x08,0x00}
//+
};
四、程序源代码
//*************************************************************** #include
#define DEVICE_NAME “/dev/led_ary_ctl” #define DEVICE_NAME1 “/dev/keypad”
void Key(unsigned char b[]);
//------main----int main(void){
int fd;
int ret;
unsigned char buf[2];
double x;
char pre_scancode = 0xff;
printf(“n start keypad_driver test nn”);
fd = open(DEVICE_NAME1, O_RDWR);
printf(“fd = %dn”,fd);
if(fd ==-1){
printf(“open device %s errorn”,DEVICE_NAME1);}
else {
buf[0]=0x22;
while(1)
{
read(fd,buf,1);
if(buf[0]!= pre_scancode)
{
if(buf[0]!=0xff)
{
printf(“key =%xn”,buf[0]);
Key(buf);
}
}
pre_scancode = buf[0];
usleep(50000);
}
// close
ret = close(fd);
printf(“ret=%dn”,ret);
printf(“close keypad_driver testn”);}
return 0;}// end main //***************************************************************************** //---------------void Key(unsigned char b[]){ int fd;
int ret;
int i,j,k;
unsigned char buf[2];
unsigned char buf2[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char buf1[11][8]={{0x3c,0x24,0x24,0x24,0x24,0x24,0x3c,0x00},//0
{0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08},//1
{0x3c,0x20,0x20,0x3c,0x04,0x04,0x3c,0x00},//2
{0x3c,0x20,0x20,0x3c,0x20,0x20,0x3c,0x00},//3
{0x24,0x24,0x24,0x3c,0x20,0x20,0x20,0x00},//4
{0x3c,0x04,0x04,0x3c,0x20,0x20,0x3c,0x00},//5
{0x3c,0x04,0x04,0x3c,0x24,0x24,0x3c,0x00},//6
{0x3c,0x20,0x20,0x20,0x20,0x20,0x20,0x00},//7
{0x3c,0x24,0x24,0x3c,0x24,0x24,0x3c,0x00},//8
{0x3c,0x24,0x24,0x3c,0x20,0x20,0x3c,0x00},//9
{0x08,0x08,0x08,0x3e,0x08,0x08,0x08,0x00}
//+
};
// begin of led ary
buf[0]= 1;
buf[1]= 0;
if(b[0]<=9)i=b[0];else
i=10;
fd = open(DEVICE_NAME, O_RDWR);
printf(“fd = %dn”,fd);
if(fd ==-1)
printf(“open device %s errorn”,DEVICE_NAME);
else {
for(j=0;j<=5;j++)
{
for(k=0;k<8;k++)
{
buf[0]=buf1[i][k];buf[1]=buf2[k];
write(fd,buf,2);
}
usleep(1);
}
// close
ret = close(fd);
printf(“ret=%dn”,ret);
printf(“close led_driver testn”);} } //-
五、设计结果
实现键盘控制LED点阵显示,输入0-9十个数字时显示相应的数字,如果输入其他的键,则显示“+”号。
六、心得体会
通过本次实验,我们对linux下的实验更加熟悉了,对LED点阵显示和矩阵键盘的原理有了深入的了解,掌握了点阵图形的设计方法和键盘的输入的读取,并把二者结合起来,实现了键盘控制点阵图形现实。
在实验过程中,我们也出现了问题,最开始时,由于不清楚点阵的C,R的高低位的对应情况,经过试验,才确定。然后就是点阵的显示是一闪即过的,然后我们通过循环控制了点阵的显示时间。总之,通过这次设计,我们都学到了很多东西。
篇2:嵌入式设计系统
班 级:学 号:姓 名:成 绩:指导教师:
20090612 2009112107 侯金钟 武俊鹏、刘书勇 1.实验一
1.1 实验名称
嵌入式系统硬件开发环境
1.2 实验目的
1.熟悉UP-net3000实验平台。
2.超级终端设置及BIOS 功能使用。
1.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
1.4 实验内容及要求
熟悉UP-net3000实验平台的硬件电路和外设,ARM JTAG的安装和使用,利用超级终端检验外设的工作状态。
1.5 实验设计与实验步骤
1.建立工程
(1)运行ARM SDT 2.5 集成开发环境(ARM Project Manager).(2)在新建的工程中,如图1A-2 所示,选中工程树的“根部”。
(3)因为开发板上的嵌入式处理器ARM7TDMI 没有浮点处理器,所以,如图1A-3 所
示,在弹出的对话框中设置Floating Point Processor 为none,并保持其他的设置不变。(4)选中工程树的“根部”,通过菜单Project | Tool Configuration for work1.apj | asmlink | Set,对整个工程的连接方式进行设置。(5)在弹出的对话框中,选中Entry and Base 标签,如图1A-4 所示,设置连接的Read-Only(只读)和Read-Write(读写)地址。
(6)选择Linker Configuration 的ImageLayout 标签,(7)选择Project | Edit Project Tamplete 菜单,弹出Project Template Editor 对话框。
(8)选择Project | Edit Variables for work1.apj,弹出Edit Variables for work1.apj 对话框。
2.进行程序的在线仿真、调试
1.6 实验过程与分析
熟悉UP-net3000实验平台的硬件电路和外设,安装了ARM JTAG,利用超级终端检验了外设的工作状态。
1.7 实验结果总结
软件安装成功,结果显示正常。
1.8 心得体会
通过此次试验,我对ARM的环境的功能有一定的了解与完善。对试验台有了基本的认识与使用。
2.实验二
2.1 实验名称
嵌入式系统软件开发环境
2.2 实验目的
1.熟悉ADS1.2 开发环境,学会ARM 仿真器的使用。
2.使用ADS 编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。
2.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
2.4 实验内容及要求
本次实验使用ADS 集成开发环境。新建一个简单的工程文件,并编译这个工程文件。学习ARM 仿真器的使用和开发环境的设置。下载已经编译好的文件到嵌入式控制器中运行。学会在程序中设置断点,观察系统内存和变量。
2.5 实验设计与实验步骤
(1)运行ADS1.2 集成开发环境(CodeWarrior for ARM Developer Suite)。
(2)在新建的工程中,选择Debug 版本,使用Edit | Debug Settings菜单对Debug 版本进行参数设置。(3)在Debug Settings 对话框中选择Target Settings 项。在Post-linker一栏中选择ARM from ELF。
(4)在Debug Settings 对话框中选择ARM Linker 项
(5)在第四步中如果选择简单的地址连接设置,在Debug Settings 对话框中选择ARM Linker 项
(6)回到的工程窗口中,选择Release 版本,使用Edit | Release Settings 菜单对Release 版本进行参数设置。(7)参照第(3)、(4)、(5)、(6)步在Release Settings 对话框中设置Release版本的Post-linker、连接地址范围、入口模块和输出文件。(8)回到如图1B-3 所示的工程窗口中,选择Targets 选项卡,如图1B-11 所示。选中DebugRel 版本,按Del 键将其删除。DebugRel 子树是一个折衷版本,通常用不到,所以在这里删除。
2.6 实验过程与分析
1)回到工程窗口选中Debug 版本,执行菜单Project | Make 对工程进行编译连接。(2)在ADS 中执行菜单Project | Debug 启动ADS1.2 的调试工具AXD。(3)在AXD 中执行菜单Options | Configure Target 对AXD 进行设置。(4)点Select 按钮选择远程连接为ARM ethernet driver,点Configure 按钮输入仿真器的IP 地址。
(5)等待程序装载完毕以后,通过Execute | Go 菜单以及Execute | Stop(或者工具栏中的相应按钮)运行或暂停程序。程序暂停后在窗口中将显示出程序暂停的位置。(6)通过Execute | Step 菜单(或者工具栏中的相应按钮)可以单步运行程序。
(7)程序停止后可以通过Processor Views | Sources 菜单查看源文件,并可在适当位置按F9 设置端点。
(8)使用在Processor View 菜单下的Registers、Variables 和Memory 命令可以查看工作寄存器或者内存变量。读者可以逐一地尝试,为以后调试程序打下基础。
2.7 实验结果总结
超级终端输出“Hello World!”。
2.8 心得体会
基本了解了ADS1.2的配置条件,学会了ARM仿真器的使用方法。
3.实验三
3.1 实验名称
键盘及LED实验
3.2 实验目的
1.学习键盘及LED 驱动原理。
2.掌握ZLG7289芯片串行接口的使用方法,用ZLG7289芯片驱动17键的键盘和8个共阴极LED。
3.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
3.4 实验内容及要求
通过ZLG7289芯片驱动17键的键盘和8个共阴极LED,将按键值在LED上显示出来。要求从右至左循环显示至少四位数字。
基本功能实现之后可考虑实现从左至右显示四位及四位以上数字(最大八位),并可设置清零键等扩展功能。
3.5 实验设计与实验步骤
利用所给的基础代码进行调试,观察输出结果,结合指导书和教材掌握基本原理和源代码的编写方式。根据实验的要求设计函数流程,并反复调试,实现功能。1.新建工程,将“Exp3 键盘及LED 驱动实验”中的文件添加到工程。2.定义ZLG7289 寄存器(ZLG7289.h)
#define ZLG7289_CS(0x20)//GPB5 #define ZLG7289_KEY(0x10)//GPG4 #define ZLG7289_ENABLE()do{ZLG7289SIOBand=rSBRDR;ZLG7289SIOCtrl=rSIOCON;rSIOCON=0x31;rSBRDR=0xff;rPDATB&=(~ZLG7289_CS);}while(0)#define ZLG7289_DISABLE()do{rPDATB|=ZLG7289_CS;rSBRDR=ZLG7289SIOBand;rSIOCON=ZLG7289SIOCtrl;}while(0)3.编写ZLG7289 驱动函数(ZLG7289.c)4.定义键盘映射表:(Keyboard16.c)
unsigned char KeyBoard_Map[]= {4,8,11,0,0,0,0,0,5,9,12,15,1,0,0,0,6,10,13,16,2,3,0,0,7,0,14,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//64 键值映射表,通过查找键盘映射表来确定键盘扫描码对应的按键值。
5.定义键值读取函数。(Keyboard16.c)6.编写主函数,将按键值在数码管上显示。
3.6 实验过程与分析
利用键盘驱动函数实现基本数字输入,然后利用循环左移函数实现输入数字做一样功能,并通过改变函数中相应delay的值来消除键盘按键带来的抖动。
3.7 实验结果总结
按键值可以在LED上显示出来。要求从右至左循环显示八位数字,同时可以复位清零。达到实验的效果。
3.8 心得体会
通过本次实验,我了解了LED的显示屏幕的数字的移位功能,这个功能不止可以用一个方法实现,而循环左移是其中比较巧妙且省力的一种,在遇到类似情况的时候,可以优先考虑能不能利用到文件中已经存在的函数,这样可以不必自己编写函数,省时省力。是一种可靠的方法。4.实验四
4.1 实验名称
电机转动控制及中断实验
4.2 实验目的
1.熟悉ARM本身自带的六路即三对PWM,掌握相应寄存器的配置。
2.编程实现ARM系统的PWM输出和I/O输出,前者用于控制直流电机,后者用于控制步进电机。
3.了解直流电机和步进电机的工作原理,学会用软件的方法实现步进电机的脉冲分配,即用软件的方法代替硬件的脉冲分配器。
4.了解44B0处理器上中断的应用。5.学习在44B0处理器上中断的应用。
6.进一步熟悉平台外围硬件及其驱动程序的编写。
4.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
4.4 实验内容及要求
1.学习步进电机和直流电机的工作原理,了解实现两个电机转动对于系统的软件和硬件要求。学习ARM 知识,掌握 PWM 的生成方法,同时也要掌握 I/O的控制方法。
2.编程实现ARM芯片的一对PWM输出用于控制直流电机的转动,通过A/D旋钮控制其转动方式。
3.编程实现ARM的四路I/O通道,实现环形脉冲分配用于控制步进电机的转动,通过A/D旋钮控制步进电机的转角。
4.通过键盘控制直流电机与步进电机的切换。5.设置并启动定时器。
6.设置中断,编写定时器中断服务程序,对中断次数进行计数并在LED上显示结果。
4.5 实验设计与实验步骤
1.添加并打开工程。
2.进行直流电机初始化设置和代码编写。3.进行步进电机初始化设置和代码编写。
4.对Timer3编程,编写定时器中断服务程序,完成对中断次数的计数。5.编写LED计数显示函数,使LED能正确计数并显示0-9999。6.编写中断初始化函数和中断响应函数。7.终端下载测试。
4.6 实验过程与分析 1.对直流电机进行编程和测试,掌握转速和旋转方向的设定方法。
2.对步进电机进行编程和测试,掌握ARM的四路I/O通道,实现环形脉冲分配用于控制步进电机的转动,通过A/D旋钮控制步进电机的转角。
3.对主函数进行编程,用键盘响应直流电机与步进电机的切换控制。
4.掌握中断相关语句的应用,弄清定义的中断向量、中断向量号,编写中断响应函数,并完成中断响应控制。
4.7 实验结果总结
实现了直流电机与步进电机的基本设置和控制,可以通过键盘控制电机之间的切换。完成了中断的响应和定时中断。当对其中一个旋钮转动时,就可以由直流电机转换成步进电机的转换,达到实验的效果。
4.8 心得体会
通过本次实验,我了解了直流电机和步进电机的工作原理,同时也知晓了电机间的转换过程,了解其中的道理内涵,熟悉了ARM自带的A/D转换器的工作原理及编程方法,了解了中断的意义和实现方法,实现了简单了中断处理程序。同时我也收获了很多关于ARM处理机的相关知识。
5.实验五
5.1 实验名称
触摸屏驱动实验
5.2 实验目的
1.了解触摸屏的基本概念与原理。
2.理解触摸屏与LCD的关系。3.编程实现对触摸屏的控制。
4.熟悉用 ARM 内置的 LCD控制器驱动 LCD。
5.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
5.4 实验内容及要求
1.了解触摸屏基本原理,理解对触摸屏进行输出标定、与LCD显示器配合的过程。2.通过编程实现触摸两点自动在两点间划直线。3.通过编程实现在触摸屏上动态画出曲线。5.5 实验设计与实验步骤
1.添加并打开工程。
2.在头文件中定义宏和常量及驱动函数。
#define ADS7843_CTRL_START 0x80 #define ADS7843_GET_X 0x50 #define ADS7843_GET_Y 0x10 #define ADS7843_CTRL_12MODE 0x0 #define ADS7843_CTRL_8MODE 0x8 #define ADS7843_CTRL_SER 0x4 #define ADS7843_CTRL_DFR 0x0 #define ADS7843_CTRL_DISPWD 0x3 // Disable power down #define ADS7843_CTRL_ENPWD 0x0 // enable power down #define ADS7843_PIN_CS(1<<6)//GPF6 #define ADS7843_PIN_PEN(1<<5)//GPG5 /////////触摸屏动作//////// #define TCHSCR_ACTION_NULL 0 #define TCHSCR_ACTION_CLICK 1 //触摸屏单击 #define TCHSCR_ACTION_DBCLICK 2 //触摸屏双击 #define TCHSCR_ACTION_DOWN 3 //触摸屏按下 #define TCHSCR_ACTION_UP 4 //触摸屏抬起 #define TCHSCR_ACTION_MOVE 5 //触摸屏移动
#define TCHSCR_IsPenNotDown()(rPDATG&ADS7843_PIN_PEN)(ADS7843_CTRL_START|ADS7843_GET_X|ADS7843_CTRL_12MODE |ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)//采样x 轴电压值,数据为12 位,参考电压输入模式为差分模式,允许省电模式
#defineADS7843_CMD_Y(ADS7843_CTRL_START|ADS7843_GET_Y|ADS7843_CTRL_12MODE |ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)int TchScr_Xmax=1840,TchScr_Xmin=176, TchScr_Ymax=195,TchScr_Ymin=1910;//触摸屏返回电压值范围 #defineADS7843_CMD_X 3.校准触摸屏坐标,进行坐标转换。
4.实现触屏取点并显示功能。
将触摸动作及触摸点坐标在超级终端上显示出来。5.实现两点间自动划线功能。6.实现触摸屏动态划线功能。
可以使用TchScr_GetScrXY()函数(第三个参数为0)来获得液晶屏的x、y 方向的电压
范围,分别点触摸屏有效面积的左上角和右下角,得到下列参数:
TchScr_Xmax=1840;TchScr_Xmin=176;TchScr_Ymax=195;TchScr_Ymin=1910;//此数值仅供参考,请以实际校对为准
5.6 实验过程与分析 1.在定义触屏响应功能的函数中对点击触屏进行响应函数的修改,在其中添加修改点颜色的函数,修改得到的触摸点的颜色,并显示在LCD上。
2.获取第一个点坐标并储存,获取第二个点坐标并储存,由编写的划线函数取得储存的两点间直线上所有点的坐标,并对其改变颜色,显示在LCD上,即完成划直线功能。
3.将划线函数应用到响应触屏移动消息的函数下,即可对连续获得的触摸坐标进行连续的画短直线,连接成曲线,完成动态划线功能。
5.7 实验结果总结
了解了触摸屏响应动作消息的函数的工作原理,通过修改实现了触摸屏响应不同动作进行画点、划线、动态划线的功能。验证触摸屏的灵敏度的实验。
5.8 心得体会
通过这次实验,我基本掌握了通过编程驱动触摸屏以及触摸屏响应时间,实现了触摸屏对不同动作消息的响应。同时也知晓了在触摸屏上的描点画线的实现,但是由于不知名的原因,描点画线的误差较大,位置偏差较大,同时触摸屏有时会不灵敏,出现时好时坏的现象,但是由于我们的辛勤钻研,最终克服了这个困难,实现了最后的触摸屏的实现。
6.实验六
6.1 实验名称
UCOS-Ⅱ在ARM微处理器上的裁剪
6.2 实验目的
1.了解UCOS-Ⅱ内核的主要结构。
2.掌握UCOS-Ⅱ裁剪的基本原理与嵌入式编程实现方法。3.学习如何根据具体情况对UCOS-Ⅱ操作系统进行裁剪。
4.通过对UCOS-Ⅱ配置文件(OS_CFG.H)中相关的配置常量进行设置,实现对UCOS-Ⅱ的裁剪。
6.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
6.4 实验内容及要求
对UCOS-Ⅱ内核进行裁剪并移植到ARM7微处理器上。
6.5 实验设计与实验步骤 1.按照要求,载入STARTUP目录下文件,完成系统初始化、环境配置。2.载入UCOS-Ⅱ的全部源码,与处理器架构相关的文件位于arch目录下。3.在os_cpu.h中编写与处理器和编译器相关的代码。
4.编写os_cpu_c.c等6个与操作系统相关的函数。5.编写os_cpu.asm等4个与处理器相关的函数。
6.6 实验过程与分析
按照实验步骤进行,得到了需要的系统。
6.7 实验结果总结
按照要求进行了裁剪,得到了满足需要又紧凑的应用软件系统。
6.8 心得体会
通过本次实验,我了解了UCOS-Ⅱ内核的主要结构,掌握UCOS-Ⅱ裁剪的基本原理与嵌入式编程实现方法,学会了如何根据具体情况对UCOS-Ⅱ操作系统进行裁剪。
7.实验七
7.1 实验名称
UCOS-Ⅱ在ARM微处理器上的移植和编译
7.2 实验目的
1.了解UCOS-Ⅱ内核的主要结构。
2.掌握将UCOS-Ⅱ内核移植到ARM7处理器上的基本方法。
7.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
7.4 实验内容及要求
1.将UCOS-Ⅱ内核进行移植到ARM7微处理器上。
2.编写两个简单任务,在超级终端上观察两个任务的切换。
7.5 实验设计与实验步骤
1.该实验的文件分为两类,其一是 STARTUP 目录下的系统初始化、配置等文件,其二是 UCOS-Ⅱ的全部源码,arch 目录下的 3 个文件是和处理器架构相关的。
2.设置 os_cpu.h 中与处理器和编译器相关的代码。
3.用 C 语言编写 6 个操作系统相关的函数(OS_CPU_C.C)。4.用汇编语言编写 4 个与处理器相关的函数(OS_CPU.ASM)。5.编写一个简单的多任务程序来测试一下移植是否成功。6.编译并下载移植后的 UCOS-Ⅱ。
7.6 实验过程与分析
1.按照实验步骤进行,将µC/OS-II 内核移植到了ARM7 微处理器上。2编写了两个简单任务,在超级终端上观察两个任务的切换。
7.7 实验结果总结
将µC/OS-II 内核顺利移植到了ARM7 微处理器上。
7.8 心得体会
通过本次实验,使我更加了解了µC/OS-II 内核的主要结构,掌握了ARM的C语言和汇编语言的编程方法,了解了ARM7处理器结构,掌握了将µC/OS-II 内核移植到ARM 7 处理器上的基本原理与嵌入式编程实现方法。
8.实验八
8.1 实验名称
综合实验
8.2 实验目的
对前七次实验进行总结,应用之前所学的知识,将前几次实验内容结合起来,完成键盘,LED,触摸屏,直流电机,步进电机各种功能的组合。实现一个较为全面的功能结构。
8.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以 上、串口线。
软件:PC 机操作系统win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成开发 环境、仿真器驱动程序、超级终端通讯程序。
8.4 实验内容及要求
对前七次实验进行总结,应用之前所学的知识,完成自拟的嵌入式系统,要求综合前期基础实验的各种功能。
8.5 实验设计与实验步骤
1.添加并打开工程。2.进行LCD设计,在LCD显示屏输出文本。
3.进行LED及键盘设计,完成LED输出显示功能和键盘输入功能。4.进行电机控制设计,完成键盘控制电机转动功能。5.进行中断设计,完成定时中断功能。
6.进行触摸屏设计,完成触摸屏感应和划线功能。7.进行裁剪和移植功能设计和完成。
8.6 实验过程与分析
1.完成LCD显示功能,在LCD显示屏上输出文本:“Hello World!”。2.进入界面触屏控制选择功能,实现触屏选择功能。
3.自定义四种种功能,第一为电机控制,从键盘读取命令,并将功能编号显示在LED上,LED显示的是计数的数据,同时旋转按钮完成电机转速的控制选择。
4.第三种功能为划线,功能编号显示在LED高四位上,同时LCD屏幕清屏,为划线功能做准备,可以实现划线功能。
5.第四种功能为定时中断,当由键盘控制时,LED显示数值清零,实现了中断。6.实现裁剪与移植功能。
8.7 实验结果总结
完成了各种基本功能,并通过自拟的系统将各种功能整合起来,完成了一个小的嵌入式系统,对前七次的功能有了更深入的了解。通过LED的计数,当在计数值在前30秒之内,由键盘控制LED的数值及显示,按键盘上的某一个按键,实现对LED上的数值清零,后30秒由触摸屏控制清零,并且在前30秒之内,旋转按钮,实现对直流电机的运转,并且到步进电机的转换。
8.8 心得体会
篇3:嵌入式设计系统
随着社会的发展, 社会对毕业生要求越来越高, 要想提高毕业生的就业率, 并使之能更好地适应社会对人才的需求, 高校的部分课程的教学模式与教学方法必须有所改变。嵌入式系统是一门理论性与实践都很强的学科, 它不仅需要前面一些课程理论知识的铺垫, 而且还要求同学们在课余时间加强动手练习, 所以仅凭教师在理论课讲理论, 学生在实验课完成指定实验是不够的。针对我院学生的特点, 课题组结合校园网和信息化技术开发了嵌入式系统课程辅助教学平台, 该平台通过提供与本门课程相关知识的资料、每节课需要预习的知识点, 每节实验课基本实验的演示视频, 并提供预习情况的监督功能来保证同学的预习质量。通过提供嵌入式课程设计管理功能来保证同学课余时间的动手能力, 通过提供交流论坛来为同学提供一个经验交流环境。
2. 系统设计
2.1 系统功能
根据课程建设、学院和学生的要求, 本系统需要完成功能如下:
(1) 课程要求:系统应能显示本门课的课程大纲、教学日历、课程表和相关的上课规定等文件, 让同学在上课之前对本门课的相关要求有一定的了解, 并能在系统内发布相应的公告信息。
(2) 资料共享:可以上传教师上课课件、相关辅导材料和工具软件。上传的资源不要求多, 但必须精, 因为一门课在一个学期学习内学习时间有限, 繁多的教学资料会使得同学抓不住重点。
(3) 预习管理:任课教师在课程开课前按照教学大纲和教学日历, 将上课内容按章划分好知识点, 发布在网上供学生阅读, 实验课应将实验指导书, 相关工具介绍、实验的基本操作视频放在网上, 以便学生能提前预习。学生通过用户名登录后, 对于课前预习知识点来说, 学生每次浏览知识点后, 系统就会记录下来其是否浏览过。对于实验视频演示系统, 每次学生观看, 系统会记录下来其是否浏览过, 浏览了多长时间, 并可以将此作为评判平时成绩因素之一。
(4) 交流论坛:为学生提供一个相关交流学习的一个空间, 老师也可利用解答版块解决学生提出的问题, 交流论坛不但可以回答学生在学习过程当中遇到的问题, 也可以将被解答过答案留给以后学习本门课学生的作为参考。
2.2 系统框架
本系统共五个功能模块, 分别为:公告管理模块、资源管理模块、大作业管理模块、交流论坛模块和用户管理模块。系统框图如图1所示。
3. 系统实现
本系统是在Windows XP操作系统下, Adobe Dreamweaver CS6软件环境下, 以PHP为编程语言开发完成的, 数据库采用My Sql 5.0, 系统采用通用B/S结构。
3.1 公告管理模块
该系统包括发布公告、公告管理等子功能模块。该模块可以由任课教师和管理员进行操作。
(1) 公告管理子模块
主要发布上课相关公告, 交作业时间。为了保证是学生亲自动手完成的, 每次学生交作业后, 进行答辩, 答辩的时间、地点在公告里进行通知, 每次答辩成绩和实课成绩通过公告进行发布。
(2) 公告管理子模块
主要完成公告的删除与修改功能。
3.2 资源管理模块
该系统包括上传资料、管理资料、课前预习等子功能模块。
(1) 上传资料子模块
主要完成教师上传课件、课程相关资源、实验视频等相关资料, 此子模块的功能可以由任课教师和管理员进行操作, 本子模块对资料的大小没有限制。
(2) 管理资料子模块
主要完成对上传资料的管理, 包括修改资料名称、修改资料分类、删除上传资料等。本子模块可以由管理员和任课教师进行操作。
(3) 课前预习子模块
该子模块主要完成对学生预习情况记录的功能, 如果学生下载过理论课预习资料视其阅读过, 如果学生在上实验课前浏览过教学视频且浏览时间为视频最后时间, 视为浏览过。
3.3 大作业管理模块
该模块包括教师出题子模块、学生选题子模块、学生分组子模块和上传大作业资料子模块。
(1) 教师出题子模块
教师在此子模块里出大作业的题目, 学生根据自己的兴趣选择大作业题目。
(2) 学生选题子模块
学生通过在本模块里选择自己的大作业题目。
(3) 学生分组子模块
学生选择题目之后按照教师规定的功能模块进行分组, 学生分组之后将组信息填在本子模块里。
(4) 上传大作业资料子模块
学生完成大作业后, 将答辩用PPT、相关程序和课程论文传至本模块。
3.4 交流论坛模块
该模块采用Discuz X2.5论坛模版, 主要包括前沿技术、问题讨论、老师答疑和资源共享等版块。
在这个模块里, 学生们可以讨论问题, 也可以给任课教师留言, 由任课教师回答相关问题。
3.5 用户管理模块
本系统不能用户自己注册, 所有注册均由管理员进行添加, 该子模块包括学生用户管理子模块、教师用户管理管理子模块和管理员用户管理子模块。
4. 结束语
本系统在本学期开发完成, 目前正在使用, 系统操作比较稳定, 基本上能满足辅导要求, 但是还存在如上传的资料不够精简、预习知识点不够全面等问题。
参考文献
[1]孙宝军.课程建设与大学生毕业设计互溶性的思考[J].现代计算机, 2013, 13:38-40.
[2]林祥果.基于“项目导向, 任务驱动”的高职嵌入式系统课程开发实践[J].顺德职业技术学院学报, 2012, 3:50-53.
[3]郑广海, 曲英伟.“嵌入式Linux操作系统及实践”课程改革[J].计算机教育, 2012, 4:37-40.
[4]潘巧书.计算机教学辅助系统的应用研究[J].中国电子商情:科技创新, 2013, 17:26-26.
篇4:嵌入式系统设计与应用研究
关键词:嵌入式系统;应用;设计
中图分类号:TP368.1文献标识码:A文章编号:1007-9599 (2011) 16-0000-01
The Design and Application of Embedded System
Gu Yingping
(Changsha University of Science&Technology,Changsha410114,China)
Abstract:The embedded systems is specific computer applications
system.Combining the characteristics of embedded systems,this article discussed the basic components,structural design,application,and current research directions of embedded system.
Keywords:Embedded system;Application;Design
一、嵌入式系统含义
嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。嵌入式系统一般指非PC系统,有计算机功能但又不称之為计算机的设备或器材。它是以应用为中心,软硬件可裁剪的专用计算机系统。
嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能。嵌入式系统一般指非PC系统,它包括硬件和软件两部分。硬件包括处理器/微处理器、存储器及外设器件和I/O端口、图形控制器等。软件部分包括操作系统软件(OS)和应用程序编程;有时设计人员把这两种软件组合在一起,应用程序控制着系统的运作和行为;而操作系统控制着应用程序编程与硬件的交互作用。
二、嵌入式系统硬件结构
嵌入式系统的硬件架构是以嵌入式处理器为中心,由存储器、I/O设备、通信模块以及电源等必要的辅助接口组成。嵌入式系统是量身定做的专用计算机应用系统,有不同于普通的计算机组成,在实际应用中的嵌入式系统硬件配置非常精炼,除了微处理器和基本的外围电路以外,其余的电路都可根据需要和成本进行裁剪、定制。嵌入式系统硬件核心是嵌入式微处理器,有时为了提高系统得信息处理能力,常外接DSP和DSP协处理器,已完成高性能信号处理。随着计算机技术、微电子技术、应用技术的不断发展及纳米加工工艺技术的发展,以处理器为核心的集成多功能的SoC系统芯片已成为嵌入式系统的核心,在嵌入式系统设计中,要尽可能选择满足系统功能接口的SoC芯片,这些SoC集成了大量的外围USB、UART、以太网、AD/DA、IIS等功能模块;嵌入式处理器包括A、EMPU-嵌入式微处理器;B、EMCU-嵌入式微控制器;C、EDSP-嵌入式数字信号处理器3类。随着嵌入式系统复杂性的提高,控制算法更复杂。嵌入式Internet的广泛应用、嵌入式操作系统的引入以及触摸屏等复杂人机接口的使用,使32位处理器核的应用也日趋广泛。
三、嵌入式系统软件系统
对于使用操作系统的嵌入式系统来说,嵌入式系统软件结构一般包括4个层面:设备驱动层、实时操作系统RTOS、应用程序接口API层、实际应用程序层。有些分类将应用程序借口API归属于OS层,是按3层划分的,由于硬件电路的可裁剪性和嵌入式系统本身的特点,其软件部分也是可裁剪的;对于功能简单,仅包括应用程序的嵌入式系统,一般不使用操作系统,仅有应用程序和设备驱动程序。现代高性能嵌入式系统的应用越开越广泛,操作系统的使用成为必然的发展趋势。
操作系统应用程序接口API是一系列复杂的函数、消息和结构的集合体,它和一般操作系统下的API在功能、含义及知识体系上完全一致;在操作系统中提供标准的API函数,可加快用户应用程序的开发、统一应用程序的开发标准,也为操作系统版本的升级带来了方便。在API函数中,提供了大量的常用模块,可大大简化用户应用程序的编写。
四、嵌入式系统的应用
嵌入式系统在不同工业领域的设计与应用已经超过了30年,包含了航空航天、铁路、能源和工业控制等方向由于嵌入式系统的性能不断提高而成本不断下降,嵌入式系统也作为日常使用的电子设备在汽车、家电和移动通信等领域得到了广泛的应用。
嵌入式操作系统(RTOS)包括VRTX、PSOS、VXWORK,WINCE,EPOC、LINUX、PALM、OS-9、JAVA CHORUS OSQN-X、NAVIO等。嵌入式系统与SoC之间并没有明确的界定,嵌入式系统更多地是指对单片机系统所做的集成,是SoC的一个子集。SoC则是指更广泛的系统集成。单片机在推动IC应用,促进IC发展方面发挥过而且还将继续发挥重要作用。单片机以微处理器为核心,在相应的应用环境下开发出软件写入码点,再配上周边的外围电路,就构成了应用于各行各业的单片机系统。可以说基于单片机的嵌入式系统是SoC的最初形式,有些单片机系统,例如家电控制器等,有着非常广大的市场。对于这种单片机实现系统集成,把所用的微处理器和外围电路集成为一个芯片,这样做不仅可以降低成本,提高可靠性,同时还有利于保护知识产权,这就构成了SoC的最初形式。不少Foundry为了扩大营业范围,建立了嵌入式微处理器的渠道,为嵌入式系统的设计和加工提供了方便。
参考文献:
[1]苏东.主流ARM嵌入式系统设计技术与实例精解[M].电子工业出版社,2007,7
[2]田泽.嵌入式系统开发与应用[M].北京航空航天大学出版社,2005,1
[3]嵌入式系统的研究方向[Z].网络资源
[4]李小将,樊天晴,胡正国.嵌入式系统在信息家电中的应用[J].西北工业大学学报,2002,4,28
[5]苏东.主流ARM嵌入式系统设计技术与实例精解[M].电子工业出版社,2007,7
作者简介:
篇5:嵌入式系统设计与应用
嵌入式系统定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能,可靠性,成本,体积,功耗严格要求的专用计算机系统。(一切非PC计算机系统)嵌入式系统特点:“专用”计算机系统,运行环境差异很大,比通用PC系统资源少,功耗低,体积小,集成度高,成本低,具有完整的系统测试和可靠性评估体系,具有较长的生命周期,需要专用开发工具和方法进行设计,包含专用调试电路,多学科知识集成系统。嵌入式系统应用范围:汽车,工业控制,通信设备,消费电子,商业终端,航空航天,军事需求。
嵌入式系统的基本开发流程:系统定义与需求分析阶段,方案设计阶段,详细设计阶段,软、硬件集成测试阶段,系统功能性测试及可靠性测试阶段。
系统定义与需求分析阶段:对系统需求进行分析,制定系统的设计依据。方案设计阶段:确定系统初步设计方案并形成设计描述文档。详细设计阶段:完善初步方案,对方案实施详细设计。
软硬件集成测试阶段:对系统软硬件进行综合测试,验证系统设计功能。
系统功能性能测试及可靠性测试测试:对系统功能,性能,可靠性进行综合测评。
对于使用操作系统的嵌入式系统来说,嵌入式系统软件结构一般包含4个层面:板级支持包层,实时操作系统(RTOS)层,应用程序接口(API)层,应用程序层。有些资料将应用程序接口API归属于OS层,按3层划分的应用程序控制系统的运作和行为;操作系统与硬件无关,不同的嵌入式操作系统其组成结构也不尽相同 嵌入式操作系统种类繁多,大体分为两种:商用型和免费型
商用型:VxWorks,Windows CE,pSoS,Palm OS,OS-9,LynxOS,QNX和LYNX 免费型:Linux和uC/OS—II uC/OS—II具有执行效率高,占用空间小,可移植性及扩展性强,实施性能优良,稳定性和可靠性良好等特点。其内核采用微内核结构,将基本功能(如进程管理,存储管理,中断处理)放在内核中,留给用户一个标准API函数,并根据各个任务的优先级分配CPU时间。交叉开发环境:交叉开发是指一个通用计算机上进行软件的编辑编译,然后下载到嵌入式设备中进行调试的开发方式,它通常采用宿主机/目标机模式。
第二章:
RISC是精简指令集
精简指令集体系结构的优点:硬连线的指令译码逻辑,便于流水线执行,大多数RISC指令为单周期执行。
精简指令集处理器的优点:处理器关心面积小,开发时间缩短,开发成本降低,容易实现高性能,低成本的处理器。
精简指令集体系结构缺点:与CISC相比,通常RISC的代码密度低;RISC不能执行x86代码;RISC给优化编译程序带来了困难
ARM设计采用的RISC技术特征主要有:Load/Store体系结构,固定的32位指令,3地址指令格式。
ARM7TDM名称具体含义:ARM7:32位ARM体系结构4T版本;T:Thumb16位压缩指令集;D:支持片上Debug,使处理器能够停止以响应调试请求;M:增强型Multiplier,与前代相比具有较高的性能且产生64位的结果。I:EmbeddedICE硬件以支持片上断点和观察点。ARM7 3级流水线:(取指级,译码级,执行级)ARM9TDMI 流水线操作:(取指,译码,执行,缓冲/数据,回写)5级 ARM处理器核可工作两种状态:ARM状态和Thumb状态
从ARM进入Thumb状态,当操作数寄存器Rm的状态位bit[0]为1时,执行“BX Rm”指令进入Thumb状态
从Thumb进入ARM状态,当操作数寄存器Rm的状态位bit[0]为0时,执行“BX Rm”指令进入ARM状态
ARM处理器工作模式(共7种):除用户模式外的其他六种模式称为特权模式。特权模式:主要处理异常和监控调用(有时也称为软件中断),他们可以自由地访问系统资源和切换模式
ARM处理器总共有37个寄存器,均为32位 ARM状态下的通用寄存器分为3类: 未分组寄存器:R0~~R7(为公用寄存器)
分组寄存器:R8~~R14
R13通常用于堆栈指针SP
R14用做子程序链接寄存器
程序计数器:R15(PC)
用做程序计数器
ARM程序状态寄存器中
条件码标志(N Z C V)
N——在结果是带符号的二进制补码的情况下,结果为负,N=1 否则为0 Z——结果为0 Z=1 否则为0 C——针对加法:产生进位
C=1 否则为0
针对减法:产生借位
C=0 否则为1
针对有移位操作的非加减法指令
C为移位操作中最后移出位的值
对于其他指令
C通常不变
V——对于加减法指令
操作数和结果为带符号的整数时,产生溢出
V=1 否则为0
对于其他指令
V通常不发生变化 ARM的异常中断响应过程: 一:将CPSR的内容保存到将要执行的异常中断对应的SPSR中,以实现对处理器当前状态,中断屏蔽字以及各条件标志位的保存。二:设置当前状态寄存CPSR中的相应位:
设置CPSR模式控制位CPSR[4:0],使处理器进入相应的执行模式
当进入Reset或FIQ模式时,还要设置中断标志位(CPSR[6]=1)禁止FIQ中断,否则其值不变
设置中断标志位(CPSR[7]=1),禁止IRQ中断
三:将寄存器LR-
四:给程序计数器PC强制赋值,使程序从相应的向量地址开始执行中断处理程序。
非向量中断和中断向量的区别和联系
异常中断的优先级:复位(最高),数据异常中断,FIQ,IRQ,取值指异常中止,SWI未定义指令
ARM支持的数据类型(6种):8位有符号和无符号字节
16位有符号和无符号半字,以2字节的边界定位
32位有符号和无符号半字,以4字节的边界定位
ARM存储器组织:以字节为单位寻址的存储器中有“小端”和“大端”两种方式存储字 小端格式:较高的有效字节存放在较高的存储器地址,较低的有效字节存放在较低的存储器地址
大端格式:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址
ARM处理器能方便地配置为其中任何一种存储器方式,但他们的缺省设置为小端格式(71页有题)
ARM7TDM内核的重要特性:53页最上面
第三章:
指令分类中基本指令格式
S
可选后缀,若指定S,则根据指令执行结果更新CPSR中的条件码 ARM寻址方式
立即寻址有选择题
寄存器间接寻址:ARM的数据传送指令都是基于寄存器间接寻址,即通过Load/Store完成对数据的传送操作
103页举例
可能为考题
伪操作
是ARM汇编语言程序里的一些特殊指令助记符,它的作用主要是为完成汇编程序做各种准备,在源程序进行汇编时由汇编程序处理,而不是在计算机运行期间由机器执行 ARM嵌入式系统程序设计可以分为ARM汇编语言程序设计、嵌入式C语言程序设计以及C语言与汇编语言的混合编程。
ARM汇编程序中
AREA指示符定义本程序段位代码段
即申请一个定义段 161页程序
可能考
嵌入式C语言程序设计中修饰符:interrupt、near、far、huge Interrupt在函数修饰为中断函数,没有输入和输出参数 第三章课后习题见李向妮笔记
第四章
DMA
I2C
I2S 基于S3C44B0X的最小系统设计:
嵌入式最小系统是指保证嵌入式微处理器可靠工作所必需的基本电路组成的系统,通常包括处理器单元、时钟单元、复位单元、、存储器单元、供电电源和调试接口。
基于ARM的嵌入式最小系统基本组成包括:基于ARM核的微处理器、电源电路、复位电路、时钟电路、存储器电路(FLASH和SDRAM)、UART接口电路和JTAG调试接口
第五章:
uC/OS—II采用的抢占式内核是一个真正的实时操作系统
uC/OS—II基本特点:源码开放;可移植性;可裁剪;抢占式内核;可扩展的多任务;可确定的执行时间;中断管理;稳定性和可靠性
uC/OS—II的文件结构(与内核功能相关的文件):任务管理;同步通信;内存管理;时间管理
uC/OS—II任务及其运行状态:
任务是一个简单的程序,对应于实际应用中的一个逻辑功能。对uC/OS—II来说,任务是系统运行的基本单元,系统以任务为单元分配内存资源和处理时间,每个任务都有自己独立的寄存器和栈空间。
任务看起来就像一个无限循环永不返回的函数,但是不同于函数的是,它有一套自己的内存空间,运行时完全占用处理器资源,在任意确定的时刻都处于休眠、就绪、运行、挂起以及中断服务这五种状态之一 图见书上337
第六章
uCLinux与标准Linux的最大区别就在于内存管理。标准Linux是针对有MMU的处理器设计的
uCLinux不使用虚拟内存管理技术,采用的是实存储器管理策略,也就是说uCLinux系统对内存的访问是直接的
uCLinux与标准Linux系统在进程的创建
进程的执行
进程的终止
上有着显著不同 基于uCLinux操作系统的应用开发环境一般是由目标系统硬件开发板和宿主PC机所构成。目标硬件开发板用于运行操作系统和系统应用软件,而目标板所用到的操作系统的内核编译、电子词典应用程序的开发和调试则需要通过宿主PC机来完成。目标板用来进行内核编译
PC机用来进行调试
移植就是使一个实时操作系统能够在某个微处理器平台上或者微控制器上运行。uCLinux移植包括3个层次的移植: 处理器结构层次移植、芯片层次移植、板级移植。
篇6:智能小车嵌入式系统设计分析
智能小车是在动态不确定环境下对人工智能的考验,是以各种工控目的为载体的高科技对抗,是培养信息、自动化领域科技人才的重要手段,同时也是展示高科技水平的生动窗口和促进科技成果实用化和产业化的有效途径。智能小车的研究融入了机器人学、机电一体化技术、通讯与计算机技术、视觉与传感器技术、智能控制与决策等多学科的研究成果,反映出一个国家信息与自动化技术的综合实力。所以本论文对智能小车的研究意义重大。
-0
一、总体设计方案
1.总体方案
智能小车可在自主行驶和人工控制两种模式之间切换,并实现自动避障。通过PWM输出驱动步进电机来实现小车的行驶,改变PWM的周期、占空比、正反则可以实现前进、后退、转弯、加速、减速等行为。通过红外探头检测前方障碍实现自动避障。外接红外线接收器,可以通过自制的红外线遥控来控制小车的行为。
2.平台选取
EasyARM1138开发板
开发板搭载Luminary LM3S1138芯片,为32位ARM Cortex – M3内核(ARM v7架构),50Mhz运行频率。拥有7组GPIO,可配置为输入、输出、开漏、弱上拉等模式。4个32位Timer,每个都个拆分为2个独立子定时器。6路16位PWM,通过CCP管脚能产生高达25Mhz的方波。
自制车架
3456789 SYSCTL_SYSDIV_10);// 分频结果为20MHz */
TheSysClock = SysCtlClockGet();// 获取系统时钟,单位:Hz
}
int main(void){ jtagWait();/* 防止JTAG失效,重要!*/
SystemInit();
IR_Int_Init();
while(1){ if(IR_flag == 1){ IR_flag = 0;for(a = 18;a < 26;a++){ IR_code_8 = IR_code_8 << 1 + IR_code_32[a];}
if(IR_code_8 == 101){ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);// 使能GPIOD端口
GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE , GPIO_PIN_0);// 设置PD0为输入类型 //forword GPIOPinWrite(GPIO_PORTD_BASE , GPIO_PIN_0 , 0x00);// PD0输出低电平 }
IR_code_8 = 0;
//switch(IR_code_8)//{ //case /*00000*/101:SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);// 使能GPIOD端口
// GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE , GPIO_PIN_0);
// 设置PD0为输入类型 //forword //
GPIOPinWrite(GPIO_PORTD_BASE , GPIO_PIN_0 , 0x00);// PD0输出低电平 //case /*0000*/1101://back //case /*0000*/1000://left //case /*0000*/1010://right //case /*0000*/1001://stop //case /*000*/10100://level_1 //case /*000*/10101://level_2 //case /*000*/10110://level_3 //default : //} //IR_code_8 = 0;} } }
/**************************************************************** ** Function name: GPIO_PORT_F_ISR
消除中断 不正 if(gap >=10 && gap <=20)//接收数据“1” { data = 1;code_flag = 1;} else if(gap >=2 && gap <=8)//接收数据“0” { data = 0;code_flag = 1;} else if(gap >=40 && gap <=50)//正常的其实高电平时间 { start_flag = 1;}
if(start_flag
&& //code_flag和start_flag均为1 { IR_code_32[i] = data;i++;
if(I >= 32){ IR_flag = 1;break;} } } } //} GPIOPinIntClear(IR_PORT,ulStatus);//-14 ** Descriptions: 延时100us ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 ** Created by:
张伟杰
** Created Date: 2014.05.18 ****************************************************************/ void Delay_100_us(void){ unsigned ulValue;
SysTickPeriodSet(600);SysTickEnable();do { ulValue = SysTickValueGet();} while(ulValue > 0);
SysTickDisable();}
3.红外探头模块
#include
/* 定义按键 */ #define KEY_PORT SYSCTL_PERIPH_GPIOG #define KEY_PIN GPIO_PORTG_BASE , GPIO_PIN_5 #define keyGet()GPIOPinRead(KEY_PIN)
#define IR_PORT SYSCTL_PERIPH_GPIOF #define IR_PIN GPIO_PORTF_BASE , GPIO_PIN_1
// 定义全局的系统时钟变量
unsigned long TheSysClock = 12000000UL;unsigned IR_flag = 0;unsigned long IR_code_32[32];unsigned long IR_code_8 = 0;unsigned a;
int Time_Get();void Delay_100_us();
/**************************************************************** ** Function name: jtagWait ** Descriptions: 防止JTAG失效,KEY=PG5 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 ** Created by:
张伟杰
** Created Date: 2014.05.15 ****************************************************************/ void jtagWait(void){ SysCtlPeripheralEnable(KEY_PORT);/*
使能KEY所在的GPIO端口 */ GPIOPinTypeGPIOInput(KEY_PIN);/* 设置KEY所在管脚为输入 */ if(keyGet()== 0x00){ /* 如果复位时按下KEY,则进入 */ for(;;);/* 死循环,以等待JTAG连接 */ } SysCtlPeripheralDisable(KEY_PORT);/* 禁止KEY所在的GPIO端口 */ }
/**************************************************************** ** Function name: IR_Int_Init ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 ** Created by:
张伟杰
** Created Date: 2014.05.18 ****************************************************************/ void IR_Int_Init(void){ SysCtlPeripheralEnable(IR_PORT);GPIOPinTypeGPIOInput(IR_PIN);GPIOIntTypeSet(IR_PIN,GPIO_LOW_LEVEL);GPIOPinIntEnable(IR_PIN);
IntEnable(INT_GPIOF);IntMasterEnable();}
-***3 SysTickPeriodSet(600);SysTickEnable();do { ulValue = SysTickValueGet();} while(ulValue > 0);
SysTickDisable();}
三、程序调试
调试PWM信号时,由于板上晶振为6Mhz,装载值和匹配值最大为65535,可以设置出需要的周期和占空比。如
TimerLoadSet(TIMER0_BASE , TIMER_BOTH , 60000);TimerMatchSet(TIMER0_BASE , TIMER_A , 6000);则对应的周期为6Mhz / 60K = 100Hz,占空比为0.6K / 6K = 1/10。配置PWM前要先配置GPIO口,定义为PWM输出,并选择Timer的输出模式为16位PWM,经过三重配置才能正确输出PWM信号。红外接收器解码过程重点是对红外码内间隔时间的判断。调试红外码时应当设当地设置flag帮助多个判断。当引导码时间参数符合标准时flag1置1,接收到正确的红外码,进入下一步。当用户码每个间隔符合标准的时间间隔时flag2置1,表示该一位码正确,进入一下步。当接收到32位数据后flag3置1,表示红外码结束,开始进行解码。解码部分用case语句进行判断。红外码用数组储存,使用的时候会方便一点。例如: for(a = 18;a < 26;a++){ IR_code_8 = IR_code_8 << 1 + IR_code_32[a];} 这样就可以随意获取某几位码进行下一步操作。
四、小结
相关文章:
2019党员干部观看《榜样4》经典观后感01-12
弹载嵌入式系统设计技术01-12
基于嵌入式ARM平台的远程IO数据采集系统的研究和开发01-12
嵌入式操作系统程课程设计报告01-12
基于ARM嵌入式的远程监控系统设计01-12
基于嵌入式系统的电力系统监控软件设计01-12
基于闪存的海量图像存储系统的设计01-12
基于嵌入式的远程电气控制自动化系统的设计01-12
献礼影片雨中的树观影感1500字01-12
观影感想范文01-12