嵌入式系统原理及应用课程
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
说明书
姓 名:
学 号:
班 级: 12 电子本
完成日期: 2015年5月 25 日
目录
第一部分 避障小车系统总体设计 1
第二部分 硬件电路设计 1
2.1 电机驱动板模块 1
2.2 电源模块 2
2.3 红外避障传感器模块 2
2.4 单片机主控模块 3
2.5小车实物图 4
第三部分 软件系统设计 4
3.1 程序
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图 4
3.2 主程序 5
第一部分 避障小车系统总体设计
小车从无障碍地区启动前进,感应前进路线上的障碍物后,根据障碍物的位置选择下一步行进方向。智能小车采用前轮驱动,前轮左右两边各用一个电机驱动,调制前面两个轮子的转速起停从而达到控制转向的目的,后轮是万象轮,起支撑的作用。将三个红外线光电传感器分别装在车体的左中右,当车的左边的传感器检测到障碍物时,主控芯片控制右轮电机停止左轮转动,车向右方转向,当车的右边传感器检测到障碍物时,主控芯片控制左轮电机停止转动,车向左方转向,当前面有障碍物时规定车右转。当正前方检测到障碍物时,主控芯片给出信号报警并控制车子倒退,转向,从而避开障碍物。
第二部分 硬件电路设计
2.1 电机驱动板模块
L298N是ST公司生产的一种高电压、大电流电机驱动芯片。该芯片采用15脚封装。主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。使用L298N芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。
电路连接图如下:
2.2 电源模块
采用6支1.5V电池单电源供电,9V的电压可以通过电机驱动板模块
内置的78M05驱动电源部分工作,可同时给单片机与电机供电。
2.3 红外避障传感器模块
此模块是为智能小车、机器人等自动化机械装置提供一种多用途的红外线探
测系统的解决
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
。该传感器模块对环境光线适应能力强,其具有一对红外线发
射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)
时,红外线反射回来被接收管接收,经过比较器电路处理之后,同时信号输出接
口输出数字信号(一个低电平信号),可通过电位器旋钮调节检测距离,有效距
离范围2~60cm,工作电压为3.3V-5V。该传感器的探测距离可以通过电位器调
节、具有干扰小、便于装配、使用方便等特点,可以广泛应用于机器人避障、避
障小车、流水线计数及黑白线循迹等众多场合。
电路图如下图:
2.4 单片机主控模块
电路连接图如下:
2.5小车实物图
图2 小车实物图
第三部分 软件系统设计
系统软件设计在集成开发Keil uVision3和Microsoft Vistlal C++6.0集成开发平台下完成,主要采用C语言进行程序编制。软件设计主要包括对控制主程序、电机驱动程序、中断程序和软件算法等程序的设计。在系统整体设计的初始阶段,智能小车系统的正前方安装一个红外线避障传感器,通过这个传感器采集来自正前方的障碍物信号,然后将其传递给控制系统,由控制系统根据该信号进一步采取动作控制两个步进电机的运转,在经过设定好的一定时间的延时过程之后,系统主程序动作继续循环进行下去,直到电源关闭或者系统出现故障。
3.1 程序流程图
打开电源
否
小车左转
小车倒退
是
小车右转
是
否
左方是否
有障碍?
右方是否
有障碍?
前方是否
有障碍?
小车前进
否
是
系统初始化
图3 主程序流程图
3.2 主程序
#include "stm32f10x.h"
#include "led.h"
#include "key.h"
#include "delay.h"
#include "sys.h"
int keyjc()
{
int k1,k2,k3,k4;
k1=KEY1;
k2=KEY2;
k3=KEY3;
k4=KEY4;
return (k4)*8+(k3)*4+(k2)*2+(k1);
}
int main(void)
{
int data;
delay_init(); //延时函数初始化
LED_Init();
KEY_Init(); //初始化与LED连接的硬件接口
while(1)
{
data=keyjc();
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
GPIO_ResetBits(GPIOA,GPIO_Pin_3);
delay_us(2);
switch(data)
{ case 15:
{
GPIO_SetBits(GPIOA,GPIO_Pin_0);
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOA,GPIO_Pin_2);
GPIO_ResetBits(GPIOA,GPIO_Pin_3);
delay_us(1);
break;
} //前进
case 8:case 12:case 13:case 14:
{
GPIO_SetBits(GPIOA,GPIO_Pin_0);
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
GPIO_SetBits(GPIOA,GPIO_Pin_3);
delay_us(1);
break;
} //左转
case 1:case 3:case 7:case 11:
{
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOA,GPIO_Pin_2);
GPIO_ResetBits(GPIOA,GPIO_Pin_3);
delay_us(1);
break;
} //右转
case 0:case 2:case 4:case 5:case 6:case 9:case 10:
{
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
GPIO_SetBits(GPIOA,GPIO_Pin_3);
delay_us(1);
break;
} //后退
}
}
}