最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

基于单片机的全智能小车(遥控,避障,循迹,液晶)

来源:动视网 责编:小OO 时间:2025-10-02 00:06:45
文档

基于单片机的全智能小车(遥控,避障,循迹,液晶)

嵌入式课程设计设计报告题目:基于PV51RB2单片机智能寻迹小车学院:电气工程与自动化学院专业:自动化班级:112学生:刘长发学号:39指导教师:王祖麟时间:2012/08/01目录第1章绪论11.1引言11.2课题的来源及现状11.2.1课题的来源11.2.2智能汽车国外发展情况11.2.3智能汽车国内发展情况11.3本论文研究的内容2第2章系统总体设计32.1小车的总体构造32.2智能小车寻迹基本原理32.3智能小车测速基本原理32.4智能小车舵机控制原理32.4.1舵机构造.....
推荐度:
导读嵌入式课程设计设计报告题目:基于PV51RB2单片机智能寻迹小车学院:电气工程与自动化学院专业:自动化班级:112学生:刘长发学号:39指导教师:王祖麟时间:2012/08/01目录第1章绪论11.1引言11.2课题的来源及现状11.2.1课题的来源11.2.2智能汽车国外发展情况11.2.3智能汽车国内发展情况11.3本论文研究的内容2第2章系统总体设计32.1小车的总体构造32.2智能小车寻迹基本原理32.3智能小车测速基本原理32.4智能小车舵机控制原理32.4.1舵机构造.....


嵌入式课程设计设计报告

题    目:基于PV51RB2单片机智能寻迹小车

学    院: 电气工程与自动化学院

专    业: 自动化

班    级: 112

学    生: 刘长发

学    号: 39

指导教师: 王祖麟            

时    间:2012/08/01

目  录

第1章 绪论    1

1.1    引言    1

1.2    课题的来源及现状    1

1.2.1    课题的来源    1

1.2.2    智能汽车国外发展情况    1

1.2.3    智能汽车国内发展情况    1

1.3    本论文研究的内容    2

第2章 系统总体设计    3

2.1    小车的总体构造    3

2.2    智能小车寻迹基本原理    3

2.3    智能小车测速基本原理    3

2.4    智能小车舵机控制原理    3

    2.4.1    舵机构造............................................................................................................3

    2.4.2    舵机工作原理....................................................................................................3

    2.4.3    舵机控制时序....................................................................................................3

2.5    智能小车壁障基本原理    3

    2.5.1    超声波测距模快介绍........................................................................................3

    2.5.2    超声波引脚功能...................................................................................... .........3

    2.5.3    超声波工作原理................................................................................................3

    2.5.4   超声测距时序.......................................  .........................................................3

2.6    智能小车遥控基本原理    3

2.7    智能小车液晶显示原理    3

第3章 系统硬件设计    5

3.1    控制器的选择    5

3.1.1    概述    5

3.1.2    PV51RB2开发工具特性    5

3.2    硬件电路设计    6

3.2.1    系统电源电路    6

3.2.2    电机驱动模块    7

3.2.3    光电编码器    9

3.2.4    红外线检测电路    10

3.2.5    键盘显示设计    10

3.2.6    避障模块设计..................................................................................................10

3.2.7    液晶显示设计..................................................................................................10

第4章 系统软件设计    12

4.1    编译环境    12

4.2    模块的驱动    12

4.2.1    红外线传感器模块    12

4.2.2    电机模块的驱动    13

4.2.3    转速捕获    15

4.2.4    键盘显示模块    16

4.2.5    按键模块    17

4.2.6    遥控模块    17

4.2.7    壁障模块    17

4.2.8    液晶模块    17

第5章 系统调试分析    19

5.1    系统设计中的注意事项    19

5.1.1    外部因素    19

5.1.2    内部因素    19

5.2    硬软件总体调试    19

第6章 结束语    21

致谢    22

参考文献    23

附录    24

绪论

引言

我们所处的这个时代是信息的时代,各种新技术、新思想层出不穷,纵观世界范围内智能汽车技术的发展,每一次新的进步无不是受新技术新思想的推动。

随着汽车工业的迅速发展,传统的汽车的发展逐渐趋于饱和。伴随着电子技术和嵌入式技术的迅猛发展,这使得汽车日渐走向智能化。智能汽车由原先的驾驶更加简单更加安全更加舒适,逐渐的向智能驾驶系统方向发展。智能驾驶系统相当于智能机器人,能代替人驾驶汽车。它主要是通过安装在前后保险杠及两侧的红外线摄像机,对汽车前后左右一定区 域进行不停地扫描和监视。计算机、电子地图和光化学传感器等对红外线摄像 机传来的信号进行分析计算,并根据道路交通信息管理系统传来的交通信息,代替人的大脑发出指令,指挥执行系统操作汽车。

课题的来源及现状

课题的来源

汽车的智能化是21世纪汽车产业的核心竞争力之一。

汽车的智能化是以迅猛发展的汽车电子为背景,涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科交叉的科技。

智能汽车国外发展情况

从20世纪70年代开始,美国、英国、德国等发达国家开始进行无人驾驶汽车的研究,目前在可行性和实用化方面都取得了突破性的进展。

在无人驾驶技术研究方面位于世界前列的德国汉堡Ibeo公司研制的无人驾驶汽车,2007年4月11日在英国伦敦科学博物馆与公众见面。这辆无人驾驶智能汽车经德国大众汽车公司生产的帕萨特2.0改装而成,外表看来与普通家庭汽车并无差别,但却可以在错综复杂的城市公路系统中无人驾驶。

智能汽车国内发展情况

目前日本、欧美已有企业取得实用化成果。与国外相比,国内在智能车辆方面的研究起步较晚,规模较小,开展这方面研究工作的单位主要是一些大学和研究所,如国防科技大学、清华大学、吉林大学、北京理工大学、长安大学、沈阳自动化所等。 

我国从20世纪80年代开始进行无人驾驶汽车的研究,国防科技大学在1992年成功研制出我国第一辆真正意义上的无人驾驶汽车。先后研制出四代无人驾驶汽车。全自主无人驾驶汽车于2000年6月在长沙市绕城高速公路上进行了全自主无人驾驶试验,试验最高时速达到75.6Km/h。  

在2004年10月12日的第六届高交会上,红旗无人驾驶汽车就引起了极大的轰动。它在高速公路上最高稳定无人驾驶速度为130公里/小时;峰值无人驾驶速度为170公里/小时。并同时具备安全超车和系统小型化两个主要指标。为如此,他们把它称为“中国汽车界的神舟五号”。

2005年,首辆城市无人驾驶汽车在上海交通大学研制成功,该车有望于两年之内率先在上海世纪公园进行示范运营,并在2010年世博会上一展身手。到时游 客只需在公园的入口处按下一个按钮,一辆没有司机的四座敞篷汽车就会从远处开过来缓缓停下,然后搭载着乘客前往他们想去的景点。

本论文研究的内容

本论文是基于PV51RB2单片机开发,主要是研究3轮小车的路径识别及其控制算法以及遥控运动。

系统总体设计

2.0   小车的总体构造

                      图2.0小车总体构造

智能小车寻迹基本原理

探测路面黑线的基本原理:光线照射到路面并反射,由于黑线和白纸对光的反射系数不同,可以根据接收到的反射光强弱来判断是否是黑线。利用这个原理,可以控制小车行走的路迹。

这里的循迹是指小车在白色地板上循黑线行走,通常采取的方法是红外探测法。

红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光。处理器就根据是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。红外探测器探测距离有限,一般最大不应超过3cm。

智能小车系统以处理器为核心, 为了使智能小车能够快速行驶,处理器必须把路径的迅速判断、相应的转向电机控制以及直流驱动电机的控制精密地结合在一起。如果传感器部分的数据没有正确地采集和识别,转向电机控制的失当,都会造成模型车严重抖动甚至偏离赛道;如果直流电机的驱动控制效果不好,也会造成直线路段速度上不去,弯曲路段入弯速度过快等问题。本次红外探测采用的是反射式探测。

2.3智能小车测速原理

智能小车测速原理同上,此处采用的是对射式探测,

   探测方法:在电机的转轴上安装一个光栅,通过单位时间红外对管检测到的光栅的数目来确定小车车轮转过的圈数,进而计算出路程,从而得到单位时间内小车走过的路程,即小车速度。

2.4智能小车舵机控制原理

     利用舵机灵活控制超声波探头360°旋转,可以实现小车的全方位避障。

 2.4.1什么是舵机

     在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。舵机是一种位置(角度)伺服的驱动器,适用于

那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普其实是一种伺服马达。

              图2.1舵机实物

      

2.4.2  舵机工作原理

控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机

驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。

2.4.3 舵机的控制

     舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一

般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应

的控制关系是这样的:

0.5ms--------------0度;

1.0ms------------45度;

1.5ms------------90度;

2.0ms-----------135度;

2.5ms-----------180度;

     

                  图2.2舵机控制时序图

2.5智能小车避障基本原理

     小车避障是利用超声波测距,并根据测出离障碍物不同距离而做出不同反应。

 2.5.1 超声波测距模块简介

     检测距离:5CM-5M

     分辨率:5MM

     数字电平信号,可直接接单片机,无需任何辅助电路,也无需单片机产生任何信

     号辅助,距离和模块输出信号脉冲长度成正比。

     尺寸:43.5*20.5毫米

     高度:13.8毫米

 2.5.2超声波测距模块的引脚功能   

                       图2.3超声波实物

 2.5.3超声波测距原理

        你只需要提供一个短期的10uS脉冲触发信号。该模块内部将发出8个40kHz

周期电平并检测回波。一旦检测到有回波信号则输出回响信号。回响信号是一个脉冲的宽度成正比的距离对象。可通过发射信号到收到的回响信号时间间隔可以计算得到距式:uS/58=厘米或者uS/148=英寸。建议测量周期为60ms以上,以防止发射信号对回响信号的影响 

 2.5.4超声波测距时序图

                        图2.4超声波测距时序图

2.6智能小车遥控原理

     利用无线电波对被控对象进行远距离控制。由于无线电波可以进行远距离传输,故而检测接收端相应管脚,并做出相应的工作。无线芯片有4个信号输出,分别对应遥控上的四个按键,实现灵活控制。从而达到遥控目的

              

                   图2.5遥控芯片实物图

                  遥控与小车连接实物图

2.7智能小车液晶显示原理

      加入液晶显示一方面是为了弥补数码管显示的局限性,其次是为了显示小车的运动状态,显示小车电机转速,离前方障碍物距离,循迹状态,是否遇到黑线,后退,前进还是转向,作为一个控制平台,实现小车的灵活控制。

                     图2.6液晶显示实物图

 2.7.1液晶工作原理

       在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。

那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,从而通过扫描,显示在液晶屏幕上

2.7.1液晶显示原理

      液晶显示其实就是对屏幕的每个点的扫描,带字库的液晶内部自带控制芯片,直接对它操作就可以显示出汉子字符,需要读写命令和数据,才能达到对液晶控制器的操作,具体的如何显示,有兴趣者可以自己查阅资料,进一步理解并学会使用。

 

系统硬件设计

控制器的选择

本次设计采用的是PV51RB2单片机。

概述

      PV51RB2是一款由美国NXP半导体公司提供的增强型80C51微控制器,包括16KB Flash程序存储器和1KB数据RAM,且功能上完全覆盖标准80C51单片机系列

PV51RB2 开发工具特性

1.80C51内核,5V工作电压,操作频率0~40MHZ;

2.16KB片内Flash存储器,1KB片内SRAM;

3.SPI串行通信接口和增强型UART;

4.PCA(可编程计数器列阵),具有PWM和捕获、比较功能;

5.4个8位I/O口,含有三个高电流P1口(每个I/O口的电流为16mA);

6.8个中断源,4个中断优先级,3个16位定时器/计数器和可编程看门狗定时器(WDT);

7.2个DPTR寄存器;

硬件电路设计

本次项目采用的电路板从画电路原理图开始,到PCB板的布线以及电路板的焊接与检测一系列工作都是自己在大一下学期课程实践期间制作的。

系统电源电路

交流电经过全波电路在经过电容滤波,在经过稳压电源芯片做成稳压电路,输出电压5V、7.2V的直流电源。其电源电路原理图如图3.2所示。

图 3.1系统电源电路原理图

小车的驱动电机的供电电压为7.2V,经过电容滤波后接7805进行稳压,稳压输出5V的电压。提供单片机所需

                 

                         图3.2电源板实物

电机驱动模块

1.驱动实现与原理

本项目驱动两路直流电机,实现电机的正反转与测速和遥控。

输入输出逻辑表真值表3.2。

表 3.2 L298N输入输出逻辑真值表

通道1

通道2

输入输出控制电机1

输入输出控制电机2

EnAIn1In2OUT1OUT2转向EnBIn3In4OUT3OUT4转向

1

0000停止

1

0000停止
0101反传0101反传
1010正转1010正转
1100停止1111停止
0XX00停止0XX00停止
其中“0”为低电平;“1” 为高电平;“X” 为任何状态。

                     图3.3电机驱动板实物

光电编码器/测速

2.光电编码器原理

光电编码器,是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。这是目前应用最多的传感器,光电编码器是由光栅盘和光电检测装置组成。光栅盘是在一定直径的圆板上等分地开通若干个长方形孔。由于光电码盘与电动机同轴,电动机旋转时,光栅盘与电动机同速旋转,经发光二极管等电子元件组成的检测装置检测输出若干脉冲信号,通过计算每秒光电编码器输出脉冲的个数就能反映当前电动机的转速。

光电编码器的实现

光电编码器的发光装置一般由发光二极管来实现。光敏元件则由光敏三极管接上拉电阻来完成。光电式旋转编码器是转速或转角的检测元件,旋转的编码器与电动机相连,当电机转动时,带动码盘旋转,便发出转速或转角信号。其示意图如图 3.5所示。

图 3.5 光电编码器的实现示意图

当电机旋转时,码盘随之一起转动。通过光栅的作用,使得光敏三极管随着光栅透出的光而导通。接收的频率和转速成正比。在接收端可以输出一系列的方波,80C51内核可以通过采集方波的频率从而可以计算出电机的速度。

              

                    图3.4光栅测试实物  

红外线检测电路

红外线检测电路原理其实很简单,就是利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收,Cortex-M0内核采集到的电压就是高电平;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光,然后80C51内核采集到的电压就是低电平。其基本原理图如图3.6所示。

图3.6 红外线检测电路原理图

鉴于本项目设计需实现的功能比较简单,故只要两路红外线检测电路即可,分别位于小车中心轴的两测即可。

                          图3.5红外探测实物  

键盘显示设计

图3.7为项目驱动实践一制作的键盘显示板原理图,主要部件为两个74LS1芯片级联,通过这两个移位芯片进行送到数码管上显示。其中8个按键分别和8个数码显示管进行连接,检测按键时通过KEY引脚对其进行扫描;CLK为1芯片移位的时钟,每来一次时钟,就进行移位处理;数码显示的数据是DATA引脚输送的数据。

图3.7 键盘显示板原理图

其基本原理为:

首先通过DATA引脚发送要显示数据的断码,然后再通过DATA引脚发送显示数据在哪一位(即位码)。

两个74HC595芯片是分开工作的,其中右边595芯片是负责传送断码的,左边595芯片是负责传送位码的。这也是为什么要先传送断码,后传送位码的原因所在。

检测按键是通过KEY引脚来检测,其中8个按键分别跟8个数码显示管连在一起。在按键的过程中,通过扫描哪一位为低电平就可以确定是哪个按键按下,然后再通过是哪个按键按下做出相应的功能操作。

3.2.6避障模块电路设计

   小车避障模块由超声波和舵机两部分组成,超声波测量距离障碍物的距离,舵机来控制超声波探头的360°旋转,从而达到全方位的避障控制。

           图3.6舵机和超声波硬件连接实物图

3.2.7液晶显示块电路设计     

      液晶显示代替数码管显示是为了更好的显示小车的控制状态,显示一个人机界面,作为一个操作者更方便的操作小车,作为传达更丰富的信息。其硬件与小车实物的结合如下图:

             图3.7液晶屏与小车硬件连接实物图

系统软件设计

编译环境

TKStudio集成开发环境(又称TKStudio IDE)是广州致远电子有限公司开发的一个微处理器软件开发平台,是一款具有强大内置编辑器的多内核编译调试环境,支持8051、ARM、AVR等多种微控制器,可以完成从工程建立和管理,编译,链接,目标代码的生成,到软件仿真,硬件仿真(挂接TKS系列仿真器等硬件)等完整的开发流程。

TKStudio集成开发环境包括工程管理器、代码编辑器、编译工具链、源码级调试器和外部工具等。

模块的驱动

红外线传感器模块

红外线模块只要M0处理器向其供5V电压就能工作,然后通过引脚采集其电平高低就可以根据不同情况做出相应的处理。

其具体程序控制见程序清单4.1.

while (1)

        {

                if (CG1==0&&CG2==0&&CG3==0&&CG4==0)  {

                    motor_run();    //未寻到黑线 直走

                }

                if (CG1==0&&CG2==1&&CG3==0&&CG4==0)

                {

                    motor_right();   //右轮压线右转

                    if (CG1==1&&CG2==0&&CG3==0&&CG4==0){

                        motor_right();

                        delay_1ms(100);//右轮压线右转

                    }

}

                if (CG1==0&&CG2==0&&CG3==0&&CG4==1){

                    motor_left();// 左轮压线左转

                    delay_1ms(100);

                }

                if (CG1==0&&CG2==1&&CG3==1&&CG4==0){

                 motor_run();//若两端压线直走

                  //若两端压线直走

                 }

               if (CG1==0&&CG2==1&&CG3==1&&CG4==0)                               

                motor_run();//若两端压线直走

        }

           程序清单 4.1读取红外传感器的高低电平

电机模块的驱动

首先,通过设置L298N芯片的输入方向RIGHT_FANZHUAN,RIGHT_ZHENGZHUAN,RIGHT_STOP,LEFT_ZHENGZHUAN,LEFT_FANZHUAN,LEFT_STOP,电机驱动板有四出信号输出端,PWM1,PWM2,DIR1,DIR2,分别控制从而控制两个电机的停止与正反转。详见程序清单4.2.

/********************************************************************                             电机驱动函数

********************************************************************/

void motor_run()      //电机起动

{

  PWM1=1;

  PWM2=1;

  DIR2=0;

  DIR1=0;

}

void motor_left()       //小车左转

{

    PWM2=0;

    PWM1=1;

    DIR2=0;

    DIR1=0;

}

void motor_right()   //小车右转

{   

    PWM1=0;

    PWM2=1;

    DIR1=0;

    DIR2=0;

}

void motor_round()   //小车自转

          

{   PWM1=1;

    PWM2=1;

    DIR1=1;

    DIR2=0;          

}

 void motor_stop()    //电机停止

{

     PWM1=0;

     PWM2=0;

     DIR1=0;`

     DIR2=0;

}

 void motor_trap()    //电机后退

 {

     

     PWM1=1;

     PWM2=1;

     DIR1=1;`

     DIR2=1;

 }

程序清单 4.2直流电机驱动与路径识别

前轮为方向轮,只有在需要转弯的时候才需要后边电机驱动其左右转动,在常态下则由后轮的推力使前轮向前转动。具体实现是通过控制前面产生的两路PWM波的占空比和L298N芯片的In1、In2、In3、In4的方向来实现小车的前进寻迹与后退寻迹,其程序流程图详见图4.1所示。

图 4.1直流电机控制流程图

根据图4.1可以看到程序一开始就进行读取红外线传感器,如果左右两边都遇到黑线则停止前进;如果左边遇到黑线而且右边没有遇到黑线,小车则左转;如果右边遇到黑线而且左边没有遇到黑线,小车则右转;如果两边都没有遇到黑线小车则直行。具体程序控制详见程序清单4.1。

转速捕获

本项目采用16位定时器1和32位定时器1的捕获功能来实现两直流电机的转速捕获。由于主轮与后面光码盘扇叶转速的比例是1:80,而且有两片扇叶。所以测主轮的转速公式为:转速= ((FAHBCLK/((CAP1_2-CAP1_1)/(N2-1))))*3/8/ TMR16B1PR,程序控制详见程序清单4.5.

    程序清单 4.5 直流电机转速的测量

void TimeNew1()//光栅捕获并记录

{ R1=R2;

                                  //捕获左电机光栅并记录

     if(R_Mcp2==0){R2=1;}

    if(R_Mcp2==1){R2=0;}

    if(R1==1){if(R2==0){rm2++;}}

    if(rm2==1){rm2=0;Count2++;}

    if(Count2==10000){Count2=0;}

  

    if(R_Mcp1==0){r2=1;}         //捕获右电机光栅并记录

    if(R_Mcp1==1){r2=0;}

    if(r1==1){if(r2==0){rm1++;}}

    if(rm1==1){rm1=0;Count1++;}

    if(Count1==10000){Count1=0;}

    r1=r2;

}  

m1=lucheng1/1000,                     //转换成路程并分解成BCD码

dm1=(lucheng1-1000*m1)/100,            

 cm1=(lucheng1-1000*m1-100*dm1)/10,      

mm1=lucheng1-1000*m1-100*dm1-10*cm1,

m2=lucheng2/1000, 

dm2=(lucheng2-1000*m2)/100,

cm2=(lucheng2-1000*m2-100*dm2)/10,

    mm2=lucheng2-1000*m2-100*dm2-10*cm2

if(Count3==4000) //定时一秒  //    {lucheng1=Count2*2200/1580;lucheng2=Count1*2200/1580;Count3=0;Count1=0,Count2=0;}//路程计算

键盘显示模块

键盘显示用处理器的SPI模块实现,设置键盘显示为从机。具体初始化详见程序清单4.6所示。

    程序清单 4.6 键盘显示

void Send_1data(uint Data)        //595串行送数据

{

    uchar count,data_c;

for(count=0;count<8;count++)

    {

        if(Data&0x80)data_c=1;

        else data_c=0;

        PIN_DATA=data_c;

        PIN_CP=1;

        ;

        PIN_CP=0;

        Data<<=1;

    }

}

void STR_TURN()    //开关锁

{

    PIN_STR=1;

    ;

    PIN_STR=0;

}

for(i=0;i<8;i++)     //将待显示的数据送到595串行板上显示

    {

        Send_1data(~num[number[i]]);

        Send_1data(~wei[i]);

        STR_TURN();

    }

按键模块

按键模块处理流程图如图4.2所示。

    图 4.2 按键处理程序流程图

把M0的P3.5引脚设置为GPIOI功能,设置为输入,进行扫描键盘。使用变量i作为位码设置变量,由0至7依次循环,例如当按下5号键的时候,当i变成5的时候,会在5号线上出现低电平,p3.5上出现低电平,当M0上边检测到低电平的时候,将变量i的值赋值给按键号标志变量whichkeydown,,当按键松开后,对whichkeydown的值进行处理,也就是相当于对按键的事件进行了处理,处理完成后,将whichkeydown的值赋值为8,说明没有按键按下。按键要定时检测按键是否按键,实时处理即可。这里使用的是前面设置的16位定时器0的定时2.5ms进行检测。其具体详见程序清单4.7.

程序清单 4.7按键检测

void Key_Proc(void)

{

    uint32 key;

    

    if(有按键)               //有按键

        DelayNS(30);        //延时去抖

    if(按键有效0)            //按键有效

        读取按键值

     while()                   //等待释键

        ;

    switch(key)

    {

        case按键1:

            ……;          //按键1处理

        break;

        case按键2:

            ……;          //按键2处理

        break;

        case按键3:

            ……;          //按键3处理

        break;                                        

    }

}

4.2.6 遥控模块

  所谓遥控即通过电磁波的远距离传送特点进行工作,由处理器通过对接收装置的管脚的电平的读取从而作出相应工作。

           程序清单4.8   遥控接收与控制

#define  AD2  P3_5

#define  BD0  P3_1

#define  CD3  P3_7

#define  DD1  P3_3

/***********************************************************

***信号检测

***********************************************************/

 int signalfScan()

 {

      if (AD2==0&&BD0==0&&CD3==0&&DD1==0)flag=0;

      if (AD2==1&&BD0==0&&CD3==0&&DD1==0)flag=1;

      if (AD2==0&&BD0==1&&CD3==0&&DD1==0)flag=2;

      if (AD2==0&&BD0==0&&CD3==1&&DD1==0)flag=3;

      if (AD2==0&&BD0==0&&CD3==0&&DD1==1)flag=4;

              if(flag==1){Flag=1;}

              if(flag==2){Flag=2;}      

              if(flag==3){Flag=3;}

              if(flag==4){Flag=4;}    

      return flag;      

 }

/***********************************************************

***信号处理

***********************************************************/

if(Flag==1) {做相应工作}

if(Flag==2) {做相应工作}

if(Flag==3) {做相应工作}

f(Flag==4) {做相应工作}

4.2.7避障模块

     小车避障通过超声波发出声波,并根据反射回来的时间,距离=T*340m/从而计算出障碍物距离,根据障碍物不同距离,做出相应反应,在这个模块,主要是如何测距。这需要利用定时器中断的实效性,来测距,具体代码如下清单

                       程序清单 4.8超声波测距

/**********************************************************************

***超声波电平触发测矩

**********************************************************************/

unsigned long MeterByTrig()

{

    

    unsigned char tempa;

    unsigned char IsOverFlow;

    unsigned long PresentTime, tempb;

    IsOverFlow = 0;

    

    TMOD  = (TMOD&0X0F)|0X10;   //定时器初始化

    TCON = (TCON&0X0F);

    TH1 = 0;

    TL1 = 0;

    Trig_Pin = 0;

for(tempa = 0; tempa < 10; tempa++)

    {

        Trig_Pin = 1;

    }

    Trig_Pin = 0;

    while(1)

    {

        if(Echo_Pin == 1)

        {//Start Timer;

            TCON =(TCON&0X0f)|0x40;//start timer

            break;

        }

        if(TCON&0X80)

        {

            IsOverFlow = 1;

            break;//overflow;

        }

    }

    while(1)

    {

        if(Echo_Pin == 0)

        {//Stop Timer;

            TCON = (TCON&0X0f);

            break;

        }

        if(TCON&0X80)

        {

            IsOverFlow = 1;

            break;//overflow;

        }

    }

//    unsigned long PresentTime, tempb;

    PresentTime = TH1;

PresentTime <<= 0X08;

    PresentTime += TL1;

    tempb = PresentTime/137;

    PresentTime /= 7;//*3

    PresentTime -= tempb;//time, us

    tempb = PresentTime/150;

    PresentTime /= 3;

    PresentTime += tempb;

    //Delay1Ms();

    return PresentTime/2;  //返回测量距离

}

4.2.8液晶模块

    液晶显示做为一个嵌入工程实践丰富的人机交互界面,可以为我们提供一个很好的指示和控制平台,其驱动待码主要包含读写命令数据,LCG初始化等,其主要代码实现如下:

                    程序清单 4.9液晶驱动

//写命令

void writeCmd(uchar cmd)

{

    wait();

    RS = 0;

    RW = 0;

    E = 0;

    delayUs();

    LCD_DATA = cmd;

    delayUs();

    E = 1;

    delayUs();

    E = 0;

}

//写数据

void writeData(uchar dat)

{

    wait();

    RS = 1;

    RW = 0;

    E = 0;

    delayUs();

    LCD_DATA = dat;

    delayUs();

    E = 1;

    delayUs();

    E = 0;

}

//初始化LCD

void Display_Init()

{

    PSB = 1; //并口方式

    writeCmd(0x30); //基本指令, 扩充指令为34H

    delayMs(10);

    writeCmd(0x0c); //显示开, 关光标

    delayMs(10);

    writeCmd(0x01); //清屏

    delayMs(10);

}

//输出字符和汉字

Display_HZ_Line(uchar x, uchar y,uchar * str)

{

    uchar p;

    uchar i = 0;

    switch(x%4)

    {

        case 0: p = 0x80; break; //第一行开始地址

        case 1: p = 0x90; break; //第二行

        case 2: p = 0x88; break; //第三行

        case 3: p = 0x98; break; //第四行

    }

    p += y;

    writeCmd(p);

    

    while(str[i] != '\\0')

    {

        writeData(str[i++]);

    }

}

/******************部分显示代码如下*********************************/

             Display_Init();    //液晶初始化

              Display_HZ_Line(0,0,"循迹遥控避障小车");

              Display_HZ_Line(1,1,"江西理工大学");

              Display_HZ_Line(2,1,"电气学院自动化");

              Display_HZ_Line(3,3,"--刘长发");

              delay_1ms(1000);

              Display_Init();    //液晶初始化

              Display_HZ_Line(0,0,"循迹遥控避障小车");

              Display_HZ_Line(1,1,"A --进入避障");

              Display_HZ_Line(2,1,"B --进入遥控");

              Display_HZ_Line(3,1,"C --进入循迹"); 

     *******************程序清单4.9LCD驱动************************

系统调试分析

系统设计中的注意事项

外部因素

外部因素主要有环境光线、赛道材质等因素。以采用光电寻迹方案的智能车为例,如果接收的信号中有很多噪声成分,或者黑白区分不清晰,就很难识别路线,从而对后续的控制过程造成很大影响。因此,合理的传感器离地间隙和反射角度、较好的滤波电路设计都是需要考虑的。

内部因素

(1)重量因素 

整车质量的增加,对系统动力性有较大影响。由于我的车装上了液晶屏,舵机,使小车质量比较大,很大程度上影响了小车的灵敏度,同时也增加了电机驱动的负荷。因此,除了智能车工作必须的电路之外,应尽可能减少车重。即使是必备部件,可应该采用轻量化的设计。比如为了测量模型车的速度,需要在驱动轮上加装转速传感器,一般购买的电机编码器重量都较大,有的队伍就利用鼠标上的光电电路设计制作了一个轻量化的转速传感器,从而大大减小了重量。 

过度转向的避免

由于是后轮驱动,在弯曲的路线上加速可能会出现过度转向现象,因此在车辆弯道行驶时需要小心控制车辆的转向速度。

传感器的影响

刚开始的时候,我的传感器装的比较高,这样就不能很好的感应到路线,以至于出现乱跑的现象。其次传感器两者之间的距离,如果可以的话,尽量使用四处或更多的传感接收,这样的话就可以有效避免小车未来得及做出反应就已经冲出轨迹,回不来的现象,从而实现可靠循迹,如果在以后的设计中需要的话,可以采用激光传感器进行探测,这样就会更精准的寻迹。

单片机复位的影响

   单片机要可靠地复位运行,有一定的复位电压,一上电或掉电的时候,如果电源板不能提供足够的电压强度,很可能会导致单片机跑遍,复位失败,陷入瘫痪状态,解决方法可在单片机供压这里并联一个电容,用电容充放点来避免突然掉电或是外部影响带来的运行失败。

负荷较重的影响

   我们的小车只有一块电源板的驱动,没有光电隔离,在通电的瞬间会产生较大的脉冲,特别是要同时启动液晶屏,电机转动,单片机运行等一些其它硬件工作,这就很难保证小车的正常运行,解决方法是重新设计电路,实现让每个模块都可以和电源并联,各个模块互不影响,这样就可以避免小车不能正常运行。

硬软件总体调试

    从一开始最基础的循迹开始,传感器的信号检测与小车的反应,实现准确循迹 ,到遥控的信号接收控制,再到超声波距离探测避障,最后到电机转速的捕获与控速及液晶的显示,每一个功能的实现与加强,最终调试成功。

    不管是调试硬件还是调试软件,其道理都是一样的,并不是我们自己想怎么样,它就会实现相应的效果,这点我想每个同学都深有体会,每一个细节都是关键,不容忽视,各个模块分别实现,然后合在一起,看能不能整体运行,这也是关键所在。在调试过程,一定要调理清晰,使自己的每个模块可以有效的配合运作,我们单片机能力有限,没有PWM捕获,这就要我们自己利用外部中断模拟出来,当我们使用不止一个定时器和中断时,这就需要我们调节好程序运行节奏,不能相互干扰。

结束语

 历经一个多月,小车终于调试成功,其中在最基本的循迹上增加了遥控,避障,测试,液晶显示,虽然看上去功能比较强大,具备智能小车基本所需要的功能,但并没有让自己感到满足,其中存在很多方面的缺陷,同时也体现出自己能力的不足,在自己今后的学习中也有很大的启发作用。

 在这一个月的课程实践中,的确付出了很多,虽然有时候因为一个问题而困扰很久,但我们必须学会自己解决问题,在这个过程中也学到了很多。一开始电源板,循迹板,驱动板三大板的焊接,这是小车成功的基础也是最重要的,如果这三个模块不能正常实现,便不可能完成小车的后期制作,所以这是很关键的。利用一个星期的探索和焊接终于成功了,接下来一段时间帮助其他同学完成,毕竟有了之前的经验,可以少走弯路。我清楚的记得那段时间一直在焊电路板,忘记了时间,脑海里都是电路,虽然很辛苦,但这个过程我也学到了很多,感触很深。看到很多同学一次次的失败,一次次的调试,感到很不容易。有时候调试硬件和调试软件是一样的,并不是电路正确就可以实现相应的功能,还要一步一步探测,哪部分出了问题,然后解决

不能急于求成,很多同学不先设计好电路,就开始焊接,到一半时才发现已经错了,这就必然导致时间的浪费和失败。

这次课程实践是我们所学知识的综合运用,也是考验我们的自学和解决问题及实践的能力。经过这一次的考验,更加坚定了我继续走下去的信念,虽然很多时候的付出不一定可以有相应的回报,但是只要坚持下去,不管结果是成功还是失败,都是一个很不错结果!

最后在这里,祝愿每一个自动化的同学,在以后能够为追求自己的梦想继续坚持下去,梦想和经典一样,永远不会因为时间的流逝而褪色,反而更加珍贵,加油!

致谢

感谢王祖麟老师。我感觉很幸运可以遇到王老师,同时也是我最尊敬的老师,为了“3+1”这个创新教育事业,付出了很多的艰辛努力,不求回报,只希望可以帮助我们每一位学生可以实现自己的梦想。无论是在知识上,还是在思想上,王老师都给予了我很大指导和帮助,他的言行更加坚定了我前行的信念,让我可以走过很多迷茫的时期,在未来的道路上,也给予了我很大的前行力量。谢谢你,尊敬的王老师。

感谢同学们的不懈努力,同时也让我更加坚定,感谢大家的团结互助,共同度过难关,我想再以后的日子里都将是我们一笔宝贵的人生财富。

感谢家人的心和支持,不管什么时候,你们总是我心里最大的精神力量源泉,有你们的支持,不管在以后的道路上,遇到多么的艰辛困难,我都会依然坚定信念,一路前行,因为你们,我最爱的家人。

参考文献

[1]  周立功等. 项目驱动-单片机应用设计基础.    北京:北京航空航天大学出版社,2004

[2] 周立功等.  新编计算机基础教程.   北京:北京航空航天大学出版社,2004

[3]  周航慈.    单片机程序设计基础.   北京:北京航空航天大学出版社,2003 

                        附录图

                小车完整图

                  图1 

图2       

                   图3小车背面图

           图4.小车侧面图

文档

基于单片机的全智能小车(遥控,避障,循迹,液晶)

嵌入式课程设计设计报告题目:基于PV51RB2单片机智能寻迹小车学院:电气工程与自动化学院专业:自动化班级:112学生:刘长发学号:39指导教师:王祖麟时间:2012/08/01目录第1章绪论11.1引言11.2课题的来源及现状11.2.1课题的来源11.2.2智能汽车国外发展情况11.2.3智能汽车国内发展情况11.3本论文研究的内容2第2章系统总体设计32.1小车的总体构造32.2智能小车寻迹基本原理32.3智能小车测速基本原理32.4智能小车舵机控制原理32.4.1舵机构造.....
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top