2014—2015学年第二学期期末考试
《嵌入式系统原理及应用》实践考核
项目设计说明书
专 业:学 号:姓 名:****:
电子科学与技术 *********** 游 建 雷 * * *
2015年 5 月 25 日
2014—2015学年第二学期期末考试
《嵌入式系统原理及应用》实践考核
项目设计说明书
专 业:学 号:姓 名:****:
电子科学与技术 *********** 郑旭 * * *
2015年 5 月 25 日
考核项目及要求
项目一:上机仿真
1.考核要点
(1) 掌握嵌入式系统原理基本知识;
(2) 包括嵌入式最小系统知识,定时器应用,中断应用、接口模块电路应用、
PWM及方波的应用;
(3) 熟练使用keil编程软件编写各模块电路的调试程序。 2.仿真要求
学生上机综合设计调试,硬件电路及程序设计合理,实现预定的功能。
项目二:智能小车硬件电路模块的选型与制作
1.考核要点
(4) 掌握嵌入式系统、电机模块及驱动、避障模块在实际操作中的基本知识; (5) 实验板包括嵌入式最小系统、复位电路、电机驱动模块电路、避障模块
电路等的选型与制作;
(6) 熟练使用keil编程软件编写各模块电路的调试程序。 2.作品要求
学生自行运用工具进行作品的设计、仿真及演示,达到正确实现、布局合理、美观整洁。
项目三:智能小车底盘设计
1.考核要点
(1) 理解电机的工作原理; (2) 了解部分机械机构的设计方法; (3) 掌握智能小车的整体安装方法。 2.作品要求
学生设计安装,车身结构美观,布局合理,功能实现。
目录
一.避障小车功能设计说明 .......................................... 4 二.硬件设计 ..................................................... 5
2.1 元器件选择 .......................................................... 5 2.2小车整体架构原理设计处理 ............................................. 5
三.软件设计 ..................................................... 8
3.1功能设计流程图 ....................................................... 8 3.2程序设计目录 ........................................................ 9
四.测试与总结 .................................................. 12 五.实物展示 .................................................... 13
基于ARM的避障小车
一.避障小车功能设计说明
基于ARM避障小车是运用STM32F103C8T6为核心芯片、以3个传感器、以及2个L298N电机为基本构架。通过传感器模块精确测距离远近,将模拟电流信号转化成数字信号,通过改变高低电平,向STM32芯片传送高电平1,表示前方无障碍。遇到障碍时,正前方传感器由1变0,表示前方有障碍,通过32芯片驱动电机,两轮反转,向后行驶。当左侧遇到障碍,左侧传感器由1变0,左轮正常行驶,右轮停转,车子向右转。当右侧遇到障碍,右侧传感器由1变0,右轮正常行驶,左轮停转,车子向左转。
二.硬件设计
2.1 元器件选择
元件 数量 1个 2个 2个 1个 1个 3个 1个 1个 若干 若干 1个 STM32F103C8T6芯片 L298N电机 小车车轮 小车底座 电源模块 红外传感器 传感器模块 万向轮 杜邦线 螺丝螺母 开关
2.2小车整体架构原理设计处理
嵌入式最小系统即是在尽可能减少上层应用的情况下,能够使系统运行的最小化模块配置。以ARM内核嵌入式微处理器为中心,具有完全相配接的Flash电路、SDRAM电路、JTAG电路、电源电路、晶振电路、复位信号电路和系统总线扩展等,保证嵌入式微处理器正常运行的系统,可称为嵌入式最小系统。对于一个典型的嵌入式最小系统,以ARM处理器为例,其构成模块及其各部分功能如图1所示,其中ARM微处理器、FLASH和SDRAM模块是嵌入式最小系统的核心部分。
使用L298N芯片驱动电机 L298N是一个具有高电压大电流的全桥驱动芯片,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用的IO口提供信号,而且带有使能端,方便PWM调速,电路简单,性能稳定,使用比较
方便。L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,正好符合我们小车两个二相电机的驱动要求。
电源电路中使用了大量的去耦电容,用于滤除交流成分,使输出的直流电源更平滑。同时,每个芯片的电源引脚和地之间都连接了这样的去耦电容,以防止电源噪声影响元件正常工作。
红外位置传感器,用漫反射式光电开关进行避障。红外线光电开关(光电传感器)属于光电接近开关的简称,它是利用被检测物体对红外光束的遮光或反射,由同步回路选通而检测物体的有无,其物体不限于金属,对所有能反射光线的物体均可检测。漫反射式光电开关是一种集发射器和接收器于一体的传感器,当有被检测物体经过时,将光电开关发射器发射的足够量的光线反射到接收器,于是光电开关就产生了开关信号。
Nor Flash :SST39VF1601是16位宽的存储器,每次读操作可取2字节数据,对于S3C2410A来说相应于半字节对其操作地址最小变化值为0x00000002,因此将S3C2410A的ADDR1引脚与SST39VF1601的A0引脚连接,不用ADDR0引脚,其它地址一次递增连接即可。
SDRAM存储器:此32位总线的存储器由两片16位的SDRAM(HY57V561620)组成,使用 s3c2410a的Ngcs6片选信号,用U4与数据总线的低16相连,U5与数据总线的高16位相连。SST39VF1601是16位宽的存储器,每次读操作可取
2字节数据,对于S3C2410A来说相应于半字节对其操作地址最小变化值为0x00000002,因此将S3C2410A的ADDR1引脚与SST39VF1601的A0引脚连接,不用ADDR0引脚,其它地址一次递增连接即可。
*避障电路功能表: 传感器 左 中 左 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1
注解(“0”表示有障碍物; “1”表示无障碍物)
避障电路(上升沿动作) 左转信号 √ √ 右转信号 √ √ √ √ √ 待执行命令 右转 右转 右转 右转 左转 右转 左转 前进
三.软件设计
3.1功能设计流程图
开始 系统初循环 直线行走障碍物检测
否
有障碍
是 是
是 左边障碍
否 是
右边障碍
否 否 是 前方障碍
直走 左轮转动 右轮转动 双轮倒转
3.2程序设计附录
主函数
#include \"stm32f10x.h\" #include \"LED.h\" #include \"Key.h\" #include \"delay.h\" int i=0;
int main(void) {
LED_GPIO_Config();
Key_GPIO_Config(); while(1)
{ i=Key_Scan(); if(i==0)
{ GPIO_ResetBits(GPIOA,GPIO_Pin_5); GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_ResetBits(GPIOA,GPIO_Pin_7); GPIO_SetBits(GPIOA,GPIO_Pin_8); } if(i==1) {
GPIO_ResetBits(GPIOA,GPIO_Pin_5); GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_ResetBits(GPIOA,GPIO_Pin_8); GPIO_ResetBits(GPIOA,GPIO_Pin_7);
} if(i==3) {
GPIO_ResetBits(GPIOA,GPIO_Pin_6); GPIO_ResetBits(GPIOA,GPIO_Pin_5); GPIO_ResetBits(GPIOA,GPIO_Pin_7); GPIO_SetBits(GPIOA,GPIO_Pin_8);
} if(i==2) { GPIO_ResetBits(GPIOA,GPIO_Pin_6); GPIO_SetBits(GPIOA,GPIO_Pin_5);
//前进 //右
//左 //后
GPIO_ResetBits(GPIOA,GPIO_Pin_8); GPIO_SetBits(GPIOA,GPIO_Pin_7);
} } }
检测障碍函数
#include \"stm32f10x.h\" #include \"Key.h\" #include \"delay.h\"
void Key_GPIO_Config(void) {
GPIO_InitTypeDef GPIO_InitStructure;
/*开启按键端口(PA0/PA13/PA15)的时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); /*初始化KEY0-->GPIOA.13,KEY1-->GPIOA.15
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14|GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOB, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStructure); }
uint8_t Key_Scan(void) {
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)==KEY_ON&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==KEY_ON&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==KEY_ON) {
return 2; //后 }
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)==KEY_ON&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==KEY_ON) {
return 1; //右 }
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)==KEY_ON&GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==KEY_ON) {
return 2; //后 }
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==KEY_ON&GPIO_ReadInput
DataBit(GPIOA,GPIO_Pin_2)==KEY_ON) {
return 3; //左 }
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)==KEY_ON ) //左 PA3 后 PA4 {
return 1; //右 }
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==KEY_ON ) //前 PA2 {
return 2; //后 }
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==KEY_ON ) //右,PA1 {
return 3; //左 }
return 0; //前 }
四.测试与总结
经过实践测设小车已能够正常运行,且已达到设计标准,并且符合实践要求。在设计过程中采用传感器识别障碍物。但由于存在着一些不可避免干扰因素的影响,如果在加入一定的防干扰装置小车的性能会有更好的实用性和可操作性,此外小车还有些许瑕疵,低廉的电动机价格与其性能息息相关,劣质电机的转速过快导致小车在旋转式不稳,应当配置一个调转速的控制器,来辅助小车进行转向。由于是初次设计,理论与实际的结合不是十分的完美,知识的缺乏,导致小车的功能不是十分的完善。但同样锻炼了我们动手实践的能力,设计当中的不足都是通过网络资源来解决的,尤其是各个模块程序的编写。经过多次的设计与磨合小车的设计在实际应用方面得到了很大的提高,基本满足预期设计的要求。各个模块的组合,体现了机械设计当中的理念,通过这次的实践实验告诉了我们,实践设计不是单一的,理想化的,而是许许多多的组合使其能满足实践要求的实践设计。
五.实物展示
小车的反面设计实物图
小车的正面设计实物图