当前位置:文档之家› 【最新版】基于CORTEX-M3的智能避障小车设计与实现毕业论文

【最新版】基于CORTEX-M3的智能避障小车设计与实现毕业论文

分类号密级华中农业大学楚天学院本科毕业论文

基于CORTEX-M3的智能避障小车设计与实现

Design and Implementation of Intelligent

avoidance car base on CORTEX-M3

学生姓名:明敏敏

学生专业:计算机科学与技术

(嵌入式方向)

指导教师:吴琼飞

华中农业大学楚天学院

二○一五年六月

目录

摘要 ............................................................................ I I 关键词............................................................................ I I Abstract.......................................................................... I I Key words ........................................................................ I I 前言 (1)

1 课题概述 (1)

1.1 课题研究的意义与背景 (1)

1.2 国内外研究现状 (1)

1.3 智能避障小车的简述 (2)

1.4 课题主要研究的内容 (2)

2 系统的分析设计与实现 (3)

2.1 系统的结构图 (3)

2.2 软件工作流程 (4)

3 系统的硬件及软件的设计 (4)

3.1 嵌入式系统的介绍 (4)

3.2 CORTEX-M3硬件平台的介绍 (4)

3.2.1电源模块 (4)

3.2.2 复位模块 (5)

3.2.3 晶振模块 (5)

3.2.4 STM32微控制器 (5)

3.2.5 JTAG模块 (6)

3.3 直流电机驱动L298N (6)

3.4 超声波测距模块HC-SR04 (7)

3.5 程序开发软件介绍 (8)

4 系统测试 (8)

4.1调试的思路 (8)

4.2串口的调试 (8)

4.3超声波测距模块调试 (8)

4.4 L298N驱动模块调试 (9)

4.5硬件调试 (9)

5 系统结果分析与展望 (10)

参考文献 (10)

致谢 (11)

附录: (11)

摘要

智能技术是按照预先设定的模式在一个特定的环境里自动的运作,无需人为管理便可以完成预期所要达到的或是更高的目标。本系统主要体现多功能小车的智能避障模式,当小车与障碍物距离小于安全距离时,通过单片机控制小车会自动向右转弯逼开障碍物,之后继续直线前进。智能避障系统可用于未来的智能汽车上,与障碍物较近时如果驾驶员未做出反应,汽车会自动减速并避开障碍物,并减速至停靠与路边。同时智能避障小车也可以作为玩具市场的主要发展对象,实现经济效益。

本系统通过超声波测距模块测量小车与障碍物的距离情况,并通过 L298电机驱动模块驱动小车避开障碍物运行,整个系统的控制模块以CORTEX-M3嵌入式系统作为主控芯片。本系统可设置最小安全距离,也可调节小车运行速度,当小车与障碍物距离小于安全距离时,通过CORTEX-M3嵌入式系统控制小车会自动向左转弯逼开障碍物,之后继续直线前进,实现智能避障。.

关键词

智能技术;CORTEX-M3系统;超声波传感器;最小安全距离;

Abstract

Intelligent technology is automatically operated in a specific environment according to the preset mode, without human management, it can accomplish the expected or higher target.This system is mainly reflected the car intelligent obstacle avoidance mode, when the car and the obstacle distance is less than the safe distance, through the MCU control car will automatically turn to the right force obstacles, then continue straight ahead.The intelligent obstacle avoidance system can be used in the future smart car, and when the obstacle is near, the car will automatically slow down and avoid obstacles, and slow down to dock and roadside.At the same time, the intelligent obstacle avoidance car can also be the main development object of the toy market, and realize the economic benefit.

The system through the ultrasonic ranging module measuring car and obstacles of distance and the L298 motor drive module to drive the car to avoid obstacles to run, the system control module based on Cortex-M3 embedded system as the main control chip. The system can set the minimum safe distance, can regulate the running speed of the car, when the car and the obstacle distance is less than the safe distance, the Cortex-M3 embedded system control car will automatically turn left forced open obstacles, and then continue straight forward and intelligent obstacle avoidance.

Key words

Intelligent technology; CORTEX-M3 system; Ultrasonic sensor; Minimum safe distance

前言

在我国,由于城市人口的高度集中以及道路纵横交错,汽车给人们的出行提供了方便的同时也带来了许多安全上的问题。专家对各地交通事故统计分析结果表明各地交通事故普遍是由于驾驶员在危急情况发生时反应不及时所造成。因此若驾驶员能前提早意识到会有交通事故发生,并相应的采取了正确措施那么大部分的事故都是可能避免。因此智能避障系统在交通安全中的作用日益凸显。对智能避障的研究也变得尤为重要。智能避障是指汽车的超声波传感器采集的距离数据小于一个安全值时,能够智能的避开汽车周围的障碍物或汽车,在与障碍物碰撞前发出警报提醒驾驶员注意减速或制动,使驾驶员能够及时的采取应急措施,从而达到事先预防避免或减少事故发生。

1 课题概述

1.1 课题研究的意义与背景

在日常生活过程中95%的信息是通过视觉获得。丧失了视觉或是视力有严重缺陷的人在工作、生活中常遇到莫大的困难,其中之一是在行走中难以了解周围的环境信息以致撞到障碍。他们需要社会给予更多的关怀和照顾,使他们能够更好的独立生活。为此研发一种智能小车,使其具有一定的感知能力、规划能力和动作能力,带领使用者避障碍物,既能帮助和关怀那些视觉存在缺陷的人,又能减轻护理人员的工作任务,因此无论对于社会还是个人都有积极的现实意义。

1.2 国内外研究现状

机器人的应用越来越广泛,移动机器人是机器人中的一个重要分支。早在60年代国外就已始进入这方面的研究,特别在80年代,美国国防高级研究计划局,专门立项,制定了地面无人作战平台的战略计划。从此,在全世界拉了全面研究机器人的序幕,如darpa的“战略计算机”计划中自主地面车它行星上第一个大型、自动化的地面机器人,相比“索杰纳”号火星探测机器人“勇气”号用六轮驱动,有很高的越障能力,核心是一台每秒能执行2000万条指令的计算机,具备更强、更可靠的移动,装载有全景摄像机、避危摄像机、微型热散射质谱仪、显微成像仪、磁铁阵列等等传感器截止2010年,该机器人已经连续在火星表面工作了6年,是人类迄今为止最成功的外星探测机器人。

国外智能车辆的研究历史较长,始于上世纪50年代。它的发展历程大体可以分成三个阶段:第一阶段 20世纪50年代是智能车辆研究的初始阶段。1954年美国Barrett Electronics 公司研究开发了世界上第一台自主引导车系统AGVS(Automated Guided Vehicle System)。第二阶段从80年代中后期开始,世界主要发达国家对智能车辆开展了卓有成效的研究。在欧洲,普罗米修斯项目开始在这个领域的探索。在美洲,美国成立了国家自动高速公路系统联盟(NAHSC)。在亚洲,日本成立了高速公路先进巡航/辅助驾驶研究会。第三阶段从90年代开始,智能车辆进入了深入、系统、大规模研究阶段。最为突出的是,美国卡内基.梅隆大学(Carnegie Mellon University)机器人研究所一共完成了Navlab系列的10台自主车(Navlab1—Navlab10)的研究,取得了显著的成就。

Remotec Andros F6A排爆机器人是美国军械制造商Northrop Grumman公司制造,用于排爆、核放射及生化场所的检查和清理、处理有毒、有害物品、特警行动及机场保安。其有轮式和带式移动方式能上下楼梯、爬坡越沟。

本田ASIMO仿人形机器人,是日本本田公司研制的目前最先进的仿人行走机器人。ASIMO身高1.3米,体重48公斤,它的行走速度是0-6km/h。人形机器人的控制比较复杂,常作为一种衡量机器人水平高低的标准。

导盲机器人是非常有效的辅助盲人步行的工具[1],目前大致可分为这几类:电子式导盲器、穿戴式导盲器、引导式手杖、手机语音导盲等,移动式导盲机器人,美国北卡罗莱州立大学研制了一种电子导盲犬有一套综合探测系统,通过对探测信号的综合处理,能将危险提示给盲人,也能给盲人指明方向和前进的路线,但它不能上下楼梯。

曰本精工(NSK)在“2011国际机器人展(iREX2011) ”上推出了能为人带路的导盲犬机器人。此款机器人采用了脚部配备有车轮的脚车轮构造,在平地t可用车轮滑行,上下台阶时可换用四脚行走。安装在头部的3D距离图像传感器能识别台阶并加以引导。11本精工计划于2020年将其投入实际应用。

我国移动机器人的研究起步较晚,大约于20世纪70年代末、80年代初开始。大多数研究尚处于单项研究阶段,主要的研究工作涉及基于地阁的全局路径规划技术、基于传感器信息的局部路径技术研究、路径规划的仿真技术研究、传感技术、信总融合技术研究和智能移动机器人的设汁实现。

清华大学、国防科技大学、南京理工人学、北京理工大学、浙江大学等多所院校合研制的多功能室外智能移动机器人实验平台THMR—V,车上装备有彩色摄像机、GPS、磁罗盘光盘定位系统、激光测距仪LMS220等。计算机系统由一台视觉信息处理机和一台信息融合机构成。中科院沈卩丨jf:丨动化研究所研制的基于非结构环境移动机器人能够在复杂多变的环境中使用。近10年来,我国避障机器人的研制在逐步缩小与世界先进水平的差距。

1.3 智能避障小车的简述

通过超声波测距模块测量小车与障碍物的距离情况,并通过 L298电机驱动模块驱动小车避开障碍物运行,整个系统的控制模块以CORTEX-M3嵌入式系统作为主控芯片。本系统可设置最小安全距离,也可调节小车运行速度,当小车与障碍物距离小于安全距离时,驱动电机,改变小车的方向,从而达到智能避障的效果。

1.4 课题主要研究的内容

按照课题的基本要求,本设计主要包含以下3个模块:

(1)超声波测距模块设计

根据超声波测距原理,当超声波向某一方向发射超声波时,单片机内部开始计时,超声波在传输的过程中,遇到障碍物体就会立即返回,当超声波接收器接收到反射波同时单片机停止计时。我们知道,超声波在空气中传播的速度是340m/s,并设单片机记录的时间为t,单片机通过计算可得到小车与障碍物之间的距离,即:L=340*t/2。之后根据设定的最小距离来判断小车是该直行还是转弯。

(2)CORTEX-M3主控制模块

此模块是小车最重要的部分,它控制着超声波测距模块、电机控制模块的工作。主要完成超声波发射与返回的计时并计算小车与障碍物之间距离,控制端口的高低电平,通过输出不同频率的脉冲来控制电机的工作。

(3)电机驱动模块

L298N接受标准TTL逻辑电平信号,4脚接电压范围为+2.5-46 V的电源,输出电流最高可达2.5 A。IN1,IN2, IN3, IN4接输入控制电平,控制电机的正反转。ENA,ENB连接控制使能端。0UT1,0UT2接左侧两个相互并联的电动机,0UT3,0UT4接右侧两个相互并联的电动机。

为了对直流电机调速从而控制避障首先需设置IN1和IN2,确定电机的转动方向,然后对使能端输出PWM脉冲即可实现调速。注意当使能信号为0时,电机处于自由停止状态。当使能信号为1时,且IN1和IN2为00或11时,电机处于制动状态,组织电机转动。直流电机状态表如下所示

表一

2 系统的分析设计与实现

经过设计超声波智能避障小车能够实现基本功能,即近距离遇到障碍物自主绕行,不会撞击到障碍物。该小车内部结构简单,操作容易,并且功能扩展余地大,经过深入改造,智能小车可以更加智能,功能更加丰富。

该系统主要是在控制芯片上提供一个不小于10us的触发脉冲信号,触发超声波传感器内部一个8周期的40KHz的回波脉冲,检测到的回波脉冲时间与距离成正比,根据时间间隔就可以得到距离。

在无障碍物的环境下,小车能够直行,当超声波传感器测到的距离小于一个安全值的时候,驱动电机,改变电机的转速,从而能够改变小车的运行方向,避开障碍物,继续前行。

2.1 系统的结构图

该流程图为系统流程图,主要是描述系统整个运行过程,包括系统的主要模块

图2-1 系统流程图

2.2 软件工作流程

PWM 初始化

开始

定时器初始化

定时器时间到发送一个触发信号

收到回波信号

计算障碍物距离

小于40cm 驱动电机减速

驱动电机加速

Pwm 软件自增大于30cm 驱动电机转向

Pwm 软件自减

定时计数器初始化

Y

Y

N N Y

N

图2-2 工作流程图

3 系统的硬件及软件的设计

3.1 嵌入式系统的介绍

嵌入式系统是以应用为中心、以计算机技术为基础、软硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

3.2 CORTEX-M3硬件平台的介绍 3.2.1电源模块

STM32芯片的工作电压为2.0~3.6V,通过内置的电压调节器提供1.8V电源。当电源VDD掉电后,通过VBAT脚为实时时钟和备份寄存器提供提供电源。

当用JTAG供电时,通过电容滤波对瞬态电流的限制,使用LM1117为系统提供稳定的3.3V电源。当系统供电后,有一指示灯被点亮,提示系统处于供电状态。

图3-1

3.2.2 复位模块

在STM32系列芯片中,由于有完善的内部复位电路,外部复位电路就特别简单,只需要使用电阻电容方式。手动按键产生复位信号,完成STM32芯片的启动,确定STM32芯片的初始状态。通常在芯片工作出现混乱或“死机”时,使用手动按键可使芯片重新工作。

由于NRST为低电平有效,利用电容电压不会突变的性质。开机后电容电压为零实现复位,电源通过电阻R3向电容C3充电直到电容电压上升为高电平,STM32芯片才开始正常工作。

图3-2

3.2.3 晶振模块

STM32系列的控制器可以使用外部晶振或外部时钟源,经过内部PLL或不经过内部PLL为系统提供参考时钟,也可以使用内部RC振荡器经过或不经过内部PLL为系统提供时钟源。当使用外部晶振作为系统时钟源时,外部晶振的频率在4MHz—16MHz,可以为系统提供精确的系统参考源。STM32开发板使用8MHz外接晶振为系统提供精确的系统时钟参考。

图3-3

3.2.4 STM32微控制器

本系统选用STM32F103RBT6芯片,Cortex-M3内核采用哈佛架构,指令和数据各用一条总线,可以同时从内存中读取指令和数据。这款芯片拥有丰富的资源,128KB的Flash、20KBSRAM、2个SPI、3个串口、1个USB、1个CAN、2个ADC、RTC、51个I/O口等。

3.2.5 JTAG模块

Cortex—M3内核集成SWD/JTAG调试接口,这里采用标准20脚JTAG调试接口。JTAG接口提供对STM32芯片内部的Flash的烧写和调试程序,需要Keil软件和J-link v8仿真器的配合。在图3-5中,R8、R10、R11为上拉电阻,R7为下拉电阻,NJTRST/JTDI/JTMS为内部上拉,JTCK为内部下拉。请注意:当不使用JTAG接口,而是作为普通I/O口使用时,要注意其口线上的上拉电阻和下拉电阻的影响。

图3-4

3.3 直流电机驱动L298N

智能避障小车采用直流电机作为控制的载体,通过其正转或反转,实现小车的前几或后退,采用了直流电机驱动芯片L298N来驱动,引脚连接如图3.2所示。前进时IN1输入高电平,IN2输入低电平;后退时IN3为低电平,IN4为持续高电平即占空比100%。若是要调节直流电机的速度,可通过改变其占空比来实现,所以仅通过赋予相应的引脚高低电平来控制其前进或停止。所以无需再调速。

图3-5

L298各引脚功能,如下表。

表2

引脚功能

1、15 SEN1、SEN2 分别为两个H桥的电流反馈脚,不用时可以接地

2、3 1Y1、1Y2 输出端,与对应输入端(IN1、IN2)同逻辑

4 VS 驱动电压,最小值需比输入的低电平电压高2.5V

5、7 IN1、IN2 输入端,TTL电平兼容

6、11 EN1、EN2 使能端,低电平禁止输出

8 GND 地

9 VSS 逻辑电源,4.5~7V

10、12 IN3、IN4 输入端,TTL电平兼容

13、14 2Y1、2Y2 输出端,与对应输入端(IN3、IN4)同逻辑

驱动电机的运行,I/O端口状态与电机制动对照表,如下

表3

IN1 IN2 IN3 IN4 ENA ENB 转速

1 0 1 0 1 1 正转

0 1 0 1 1 1 反转

1 1 1 1 1 1 停止

0 0 0 0 1 1 停止

X X X X 0 0 停止

3.4 超声波测距模块HC-SR04

首先利用单片机输出一个40kHz的触发信号,把触发信号通过TRIG管脚输入到超声波测距模块,再由超声波测距模块的发射器向某一方向发射超声波,在发射时刻的同时单片机通过软件开始计时,超声波在空气中传播,途中碰到障碍物返回,超声波测距模块的接收器收到反射波后通过产生一个回应信号并通过ECHO脚反馈给单片机,此时单片机就立即停止计时。时序图如图所示。由于超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离,即:S=VT/2,来算出距离。

图3-3超声波时序图

3.5 程序开发软件介绍

单片机的软件编程采用Keil uVision4进行,它包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境将这些部分组合在一起。Keil集成开发环境是一个基于Windows的软件开发平台,它支持多个公司生产的芯片,内嵌多种符合当前工业标准的开发工具,可以完成工程建立和管理、编译、链接、目标代码的生成、软件仿真和硬件仿真的开发流程。编程所用的C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它的应用范围广泛,具备很强的数据处理能力,不仅应用在软件开发上,而且在各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。使用C语言编写的源程序单片机是不能够直接使用的,所以需要通过Keil软件对该程序进行编译,最后生成.hex文件下载到单片机中,单片机才能直接执行。

4 系统测试

4.1调试的思路

本设计的智能避障小车,一共分为三大模块。分别是:L298N驱动模块,超声波测距模块,串口显示模块。调试的时候我们可以把三大模块分别调试,最后再把所有模块组合起来再进行最后的整机调试这样一个调试的思路。

4.2串口的调试

首先根据电路图将显示模块焊好,然后把GPIO的PA9和PA10进行复用 ,再用万用表检查电路是否出现短路。一切都正常的情况下,将串口数据传输测试程序烧到芯片中,连接一个转串口模块,就可以把测得的数据通过串口传输到电脑,开启串口,在开发板上复位,观察显示是否正确,如图4-1所示。

图4-1

4.3超声波测距模块调试

超声波模块一共有四个脚,一个是VCC,一个是GND,还有两个分别是超声波的发射(Trig)和接收引脚(Echo)。连接电路时候只需引出四根插线,分别连接到STM32F103VE的对应引脚,烧制好测试程序,测试结果图如4-2。本设计四根插线分别连接到VCC,GND,还有发射和接收引脚分别为:PA0和PA1口。

图4-2

经过检验,超声波能准确地测出与障碍物的距离.超声比与障碍物的距离如下图所示

图4-3

4.4L298N驱动模块调试

L298N的引脚较多,使用的锂电池是18650三节,L298N的12V连到电源的正极,GND连到电源4.5硬件调试

通过系统的调试,我们可以学到更多的知识,我们也可以发现仿真和实物调试不同的地方。程序设计的结果可能往往和实物调试出的结果不一样,这就需要我们去思考,去斟酌,去改进,以达到预期效果。通过程序和硬件的调试,我们可以更深刻的理解各功能模块之间的联系,也可以明白各调试的步骤。

在调试的过程中,我也遇到许多问题,例如:在使用开关来控制的时候,出现了好几次短路,导致我的手都被烫了一下.在测试电机L298N驱动电机的过程中,我用电池直接连接电机,电机能够转动,但是把电机接到单片机设置的IO口电机没有丝毫反应.后来通过查找资料,才明白是功率不够,后来换上3节电池.才能让小车正常行驶。整个调试过程需要硬件和软件结合起来调试,要仔细检查电路,认真思考程序。

硬件部分调试的步骤:

1)检查原理图连接是否正确

2)用万用表检查是否有虚焊,引脚短路现象

3)检查原理图与电路板上引脚是否一致

4)各模块逐个调试,看看各模块是否能用

4.6软件程序调试

系统的软件部分使用Keil uVision4软件编程,软件调试步骤由两个部分组成:首先确定程序中错误的确切性质和位置;其次对程序代码进行分析,确定问题原因,并改正错误代码。

(1)运行程序,查看错误报告,定位出报错的位置;

(2)根据错误报告的提示,明确错误原因,修改相应代码,逐步排除错误;

(3)若错误报告中提示逻辑性错误,则不仅查看错误定位的位置,还要查看头文件或工程中其他的相关文件代码,逐步排除错误;

(4)重复进行排除以确保该错误的确被排除且没有引入新的错误和矛盾;

(5)重复上述(1)~(4)的过程,直到显示0个错误为止;

(6)每次修改完毕,分析这次出错原因,以及改正过程,理清思路,记录改错的过程,以及问题出现现象、原因,以避免这样类似的错误再发生或是尽量少发生,改正错误总结归类。

5 系统结果分析与展望

接到课题后,按照老师的安排,合理的分配了自己的时间,在设计开始前,首先是查阅反复资料,根据课题的基本要求,弄清了所做课题的基本方向,有了一些大概的可行思路,明确了一些所需的基本元件,然后继续查阅资料,对比各种方案的优劣,了各种器件的基本功能及实现的条件,按老师的时间安排先完成开题报告,对论文的安排有了一个初步的框架,也有了一个确定的方案,在这个框架的基础上,就本课题相关内容查阅大量资料,了解各种芯片的控制程序的编辑,初步确定本课题研究重点分三部分:超声波测距模块,主控部分和电机驱动模块。通过课题要求、实现的精确度及成本等多方面的对比,初步决定主控部分用一片STM32F103VE作为主控制器,采用HC-SR04超声波模块来测距,精确的控制汽车与物体的距离,保证程序的稳定。采用L298N来驱动电机,根据超声波测得距离,在小于安全距离的情形,改变电机的转速。接下来根据选定的方案,逐步深入学习各方案,首先是学习超声波测距的基本原理及测距的基本公式运算,控制其测距的具体实现过程以及在实物中端口的接线方式;其次是研究CORTEX-M3芯片基本工作方式、总线接口方式及其通信方式相关的通信协议并实际运用,最后添加必要的其他模块,串口显示模块,以及复位模块和晶振模块。各模块调试完毕后开始总系统整合过程,整合的过程中遇到了一些问题,各个模块之间的组合还需修改才能正常运行,在吴老师的帮助下并且自己查阅了大量相关资料后,最终完成了对系统的修改工作。汽车防撞报警系统能够正常工作,实现精确测距并报警,其测量距离可精确到100米,适应于各种场合下的测距需求,能精确且抗干扰能力强;超声波可实现高速和恶劣天气下的距离并能及时返回数据,传输速度快,便于及时处理,对交通安全有较高的实用价值。

通过此次设计,我对CORTEX-M3系列单片机的原理又有了进一步的了解,对于软件和硬件等各方面知识的学习和运用技能有了很大的提高,除此之外在自身的心性方面也得到了极大的锻炼。本次设计能够完成离不开刘老师的细心指导,以及平时各任课老师认真负责的教学,对信息工程学院的全体老师及领导表示感谢,虽然即将毕业,但学习还在继续,在以后或的工作生活中,我将继续保持此刻的学习状态,努力提高自己各方面技能,逐步的完善自己。

智能小车完成后因为各方面原因,所以功能还并不完善,现在还只能实现简单的避障,在以后通过知识面的拓展,也能给系统添加一些额外的功能,如:采用多种传感器弥补超声传感器检测信息的不足,如增加红外线检测弥补超声检测存在盲区的缺点;增加通信功能,与GPS定位系统相结合对小车进行导航,使避障系统知道在哪儿、去哪儿、怎样去;不易检测出较小的障碍物,无法识别楼梯口或是陷讲等等。

参考文献

[1]张毅刚,单片机原理及应用,高等教育出版社,2010年第2版

[2]华成英,童诗白,模拟电子技术基础,高等教育出版社,2006年第四版

[3]郭天祥,51单片机c语言教程,电子工业出版社,2010

[4]赵家贵、付小美、董平,新编传感器电路设计手册,中国计量出版社,2002

[5] 于连国,李伟,王妍玮, 基于单片机的智能小车设计, 林业机械与木工设备,2011年4期

[6] 赵振德,多功能遥控智能小车的制作,电子制作-2011年4期

[7]何立民,单片机技术的现状与未来,中国计算机报 1995年

[8]杨加国,单片机原理与应用及C51程序设计,清华大学出版社,2006年

[9] 王晓明. 《电动机的单片机控制》. 北京航空航天大学出版社.2002.

[10] 徐波. 《Keil的使用技巧》.电子产品世界出版社. 2006. 第224期.

[11] 魏永广.《现代传感技术》哈尔滨:东北大学出版社,2001 ,4.

[12] 刘晓岩.《汽车电子控制技术》.北京:化学工业出版社,2009.9

[13] STM32F103xx固件函数库用户手册

[14] STM32 机器人制作实践入门教程

[16] 张涛.机器人导论[M].机械工业出版社2010.5.

[17] 应鹏,宫晨,颜钢锋.轮式机器人超声避障系统设计浙江大学现代机械[J] 2008.06.

[18] 刘明,肖文健,齐小慧.超声避障技术在轮式机器人导航中的应用研究科技信息[J]2012.

[19]Yeager Brent.How to troubleshoot your electronic scale[J].. Powder and Bulk Engineering. 19 95

[20]

Joanne,Muir Lindsey.SCM in Merseyside SMEs:Benefits and barriers[J].. TQM Journal. 2008

致谢

通过此次设计,我对CORTEX-M3系列单片机的原理又有了进一步的了解,对于软件和硬件等各方面知识的学习和运用技能有了很大的提高,除此之外在自身的心性方面也得到了极大的锻炼。本次设计能够完成离不开刘老师的细心指导,以及平时各任课老师认真负责的教学,在此对信息工程学院的全体老师及领导表示感谢,感谢你们对我的栽培,虽然即将毕业,但学习还在继续,在以后或的工作生活中,我将继续保持此刻的学习状态,努力提高自己各方面技能,逐步的完善自己。

转眼间大学四年的生活也将画上一个圆满的句号,我们也将离开这个生活了四年的校园,对于即将进入社会的我们,外面的一切都充满的诱惑,回忆这四年的大学生活,自己也感触颇多。在从拿到自己的毕业设计题目到现在毕业论文的完成,我要感谢我的指导老师吴老师,刚刚拿到这个论文题目时并不知道如何下手去做,老师就给我进行了详细的说明,当我遇到问题时,老师也能够及时的帮助我们解决,偶尔也会给我们提供一些学习的网站和学习资料,让我们在课外也学习到了很多的知识。通过毕业设计,也让我巩固了一遍大学四年自己所学习的知识,增强了自己的动手能力,以及查阅资料的能力,最后还是感谢我在做毕业设计时对我帮助的所有人,因为有他们的帮助我才能够顺利的完成自己的毕业设计,并让我在做毕业设计时学习到了那么多自己不懂的知识。

附录

电机模块程序

#include "move.h"

#include "sys.h"

#include "delay.h"

void GPIO_Config()

{

// RCC->APB2ENR |= 1<<2; //开启PORTA端口时钟

// RCC->APB2ENR |= 1<<3; //开启PORTB端口时钟

RCC->APB2ENR |= 1<<4; //开启PORTC端口时钟

// GPIOA->CRL &= 0XFFFF0FFF; //PA3 清除之前设置

// GPIOA->CRL &= 0XFFF0FFFF; //PA4 清除之前设置

//GPIOB->CRL &= 0XFFFFFF0F; //PB1 清除之前设置//GPIOB->CRL &= 0XFFFFF0FF; //PB2 清除之前设置//GPIOB->CRL &= 0XFFFF0FFF; //PB3 清除之前设置//GPIOB->CRL &= 0XFFF0FFFF; //PB4 清除之前设置GPIOC->CRL &= 0XFFFFFF0F; //PC1 清除之前设置

GPIOC->CRL &= 0XFFFFF0FF; //PC2 清除之前设置

GPIOC->CRL &= 0XFFFF0FFF; //PC3 清除之前设置

GPIOC->CRL &= 0XFFF0FFFF; //PC4 清除之前设置

GPIOC->CRL &= 0XFF0FFFFF; //PC5 清除之前设置

GPIOC->CRL &= 0XF0FFFFFF; //PC6 清除之前设置}

//设置小车前进

void go()

{

Left_motor_go(); //左边电机MA前进,

Right_motor_go(); //右边电机MB前进

}

//左边电机正转,前进

void Left_motor_go()

{

//delay_ms(20);

ENA = 1;

IN1 = 1;

IN2 = 0;

}

//右边电机正转,前进

void Right_motor_go()

{

//delay_ms(20);

ENB = 1;

IN3 = 1;

IN4 = 0;

}

//设置小车停止

void stop()

{

Left_motor_stop(); //左边电机MA停止,

Right_motor_stop(); //右边电机MB停止

}

//左边电机停止

void Left_motor_stop()

{

//delay_ms(20);

ENA=1;

IN1 = 0 ; //IN1=0;

IN2 = 0 ;//IN2=0;

}

//右边电机停止

void Right_motor_stop()

{

//delay_ms(20);

ENB=1;

IN3 = 0; //IN3=0;

IN4 = 0; //IN4=0;

}

//设置小车

void turn_left()

{

Left_motor_go(); //左边电机MA前进,

Right_motor_stop(); //右边电机停止

}

超声波测距模块

#include "ultrasound.h"

#include "led.h"

#include "usart.h"

#include "delay.h"

#include "move.h"

/*$PAGE*/

/*

*************************************************************************************************** ******

* CONSTANTS

*************************************************************************************************** ******

*/

/** 捕获状态

** [7]:0,没有成功的捕获;1,成功捕获到一次.

** [6]:0,还没捕获到高电平;1,已经捕获到高电平了.

** [5:0]:捕获高电平后溢出的次数 */

u8 TIM2CH2_CAPTURE_STA = 0;

u16 TIM2CH2_CAPTURE_VAL;

float high = 0.0;

float length = 0.0;

void TIM1_UP_IRQHandler(void)

{

if(TIM1->SR & 0X0001)

{

PAout(0) = 1;

delay_us(10);

PAout(0) = 0;

}

TIM1->SR &= ~(1 << 0);

}

void Timer1_Init(u16 arr,u16 psc)

{

RCC->APB2ENR |= 1 << 11;

TIM1->ARR = arr;

TIM1->PSC = psc;

TIM1->DIER |= 1 << 0;

TIM1->DIER |= 1 << 6;

TIM1->CR1 |= 0x01;

MY_NVIC_Init(2,1,TIM1_UP_IRQChannel,2);

}

void TIM2_Cap_Init(u16 arr,u16 psc)

{

RCC->APB1ENR |= 1 << 0; //TIM2时钟使能

RCC->APB2ENR |= 1 << 2; //GPIOA 时钟使能

GPIOA->CRL &= 0XFFFFFF0F; //PA1下拉输入

GPIOA->ODR |= 0 << 1;

TIM2->ARR = arr;

TIM2->PSC = psc;

// TIM2->CCMR1 |= 2 << 0;

// TIM2->CCMR1 |= 0 << 4;

// TIM2->CCMR1 |= 0 << 10;

// TIM2->CCER |= 0 << 1;

// TIM2->CCER |= 1 << 0;

// TIM2->DIER |= 1 << 1;

*/

TIM2->CCMR1 |= 1 << 8;

TIM2->CCMR1 |= 0 << 12;

TIM2->CCMR1 |= 0 << 10;

TIM2->CCER |= 0 << 5;

TIM2->CCER |= 1 << 4;

TIM2->DIER |= 1 << 2;

TIM2->DIER |= 1 << 0;

TIM2->CR1 |= 0x01;

MY_NVIC_Init(2,2,TIM2_IRQChannel,2);

}

void TIM2_IRQHandler(void)

{

u16 tsr;

tsr = TIM2->SR;

if((TIM2CH2_CAPTURE_STA & 0X80) == 0) //还未成功捕获

{

if(tsr & 0X01) //溢出

{

if(TIM2CH2_CAPTURE_STA & 0X40) //捕获到高电平

{

if((TIM2CH2_CAPTURE_STA & 0X3F) == 0X3F)//高电平太长

{

TIM2CH2_CAPTURE_STA |= 0X80; //标记成功捕获了一次

TIM2CH2_CAPTURE_VAL = 0XFFFF;

} else TIM2CH2_CAPTURE_STA++;

}

}

if(tsr & 0X04) // 发生捕获事件

{

if(TIM2CH2_CAPTURE_STA & 0X40)

{

TIM2CH2_CAPTURE_STA |= 0X80; //成功捕获到了一次高电平

TIM2CH2_CAPTURE_VAL = TIM2->CCR2; //获取当前的捕获值.

high = TIM2CH2_CAPTURE_STA & 0X3F;

high *= 65536;

high += TIM2CH2_CAPTURE_VAL; // 溢出时间总和

high = high * 170 / 10000;

printf("High:%lf cm\r\n",high);

TIM2CH2_CAPTURE_STA = 0; //开启下一次捕获

TIM2->CCER &= ~(1 << 5); //CC2P=1 设置为下降沿捕获

} else {

TIM2CH2_CAPTURE_STA = 0; //清空

TIM2CH2_CAPTURE_VAL = 0;

TIM2CH2_CAPTURE_STA |= 0X40; //标记捕获到了上升沿

TIM2->CNT = 0; // 计数器清空

TIM2->CCER |= 1 << 5; //设置为下降沿捕获

}

}

}

TIM2->SR = 0;

}

void ultrasound_init(void) {

TIM2_Cap_Init(0XFFFF,71);

RCC->APB2ENR |= 1 << 2;

GPIOA->CRL &= 0XFFFFFFF0;

GPIOA->ODR |= 0 << 0;

}

串口输出显示模块

#include "bsp_usart1.h"

/**

* @brief USART1 GPIO 配置,工作模式配置。115200 8-N-1

* @param 无

* @retval 无

*/

void USART1_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

/* config USART1 clock */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);

/* USART1 GPIO config */

/* Configure USART1 Tx (PA.09) as alternate function push-pull */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

/* Configure USART1 Rx (PA.10) as input floating */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA, &GPIO_InitStructure);

/* USART1 mode config */

USART_https://www.doczj.com/doc/8f17232194.html,ART_BaudRate = 115200;

USART_https://www.doczj.com/doc/8f17232194.html,ART_WordLength = USART_WordLength_8b;

USART_https://www.doczj.com/doc/8f17232194.html,ART_StopBits = USART_StopBits_1;

相关主题
文本预览
相关文档 最新文档