找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7001|回复: 1
收起左侧

基于GPS的车辆行驶信息记录系统的设计(SD卡存储GPS信息)l论文

[复制链接]
ID:183083 发表于 2017-5-19 22:47 | 显示全部楼层 |阅读模式
随着汽车拥有量的逐年增加,道路拥挤和交通事故频频发生,这不仅给人们出行带来极大不便,而且还涉及到能源浪费、环境污染、人民生命安全等多方面问题。如何加强对车辆的管理,规范驾驶员的驾驶行为,减少交通事故的发生,营造一个和谐、通畅的行车环境己成为交通运输和安全管理部门面临的一个重要问题。
      本课题的主要内容是:利用GPS接收机、微控制器、存储设备等设计了一个具有定位功能的车辆行驶信息记录系统。车辆行驶信息记录系统主要由1片MSP430F149型号的单片机组成的控制电路、GPS接收模块组成的信息接收电路、SD卡读写模块电路组成。GPS接收模块接收GPS实时数据,经过MSP430单片机解析,提取出所需要的时间以及经纬度信息通过串口发送到SD卡存储起来。SD卡在写入数据时会创建可命名的txt文件,将收到的数据存储在所命名的文件中。
经过多次的系统调试和实验,所设计的系统可正常工作,可实现对车辆实时位置信息的记录,从而监控车辆的行驶信息。

目录
第1章 绪论... 1
1.1  课题研究的目的和意义... 1
1.2  课题的主要研究内容... 2
1.3  论文的组织结构... 2
第2章 系统分析与设计方案... 3
2.1  GPS系统及其工作原理... 3
2.1.1  GPS基础... 3
2.1.2  GPS定位原理... 3
2.1.3  GPS数据... 4
2.2  系统总体设计... 7
第3章 系统硬件设计... 9
3.1  系统硬件总体设计概述... 9
3.2  系统电路模块设计... 9
3.2.1  MSP430F149单片机简介... 10
3.2.2  MSP430F149单片机最小系统... 14
3.2.3  GPS定位信息接收电路... 16
3.2.4  SD卡读写电路... 20
3.2.5  电源模块电路... 21
3.3  整体硬件电路... 22
第4章 系统软件设计... 24
4.1  系统软件总体设计概述... 24
4.2  系统各部分程序... 24
4.2.1  主程序... 24
4.2.2  SD卡读写模块程序... 25
4.2.3  GPS数据处理模块程序... 30
第5章 系统调试与结果分析... 33
5.1  概述... 33
5.2  IAR软件简介... 33
5.3  软件调试方法及步骤... 34
5.3.1  系统在IAR软件的调试... 34
5.3.2  程序下载电路的调试... 35
5.4  整体调试... 36
5.5  调试结果与分析... 37
第6章 经济与社会效益分析... 40
6.1 经济效益分析... 40
6.2 社会效益分析... 40
结论... 41
致谢... 42
参考文献... 43
附录Ⅰ 电路原理图... 45
附录Ⅱ 部分程序清单... 46




第1章绪论1.1  课题研究的目的和意义
随着汽车拥有量的逐年增加,道路拥挤和交通事故频频发生,这不仅给人们出行带来极大不便,而且还涉及到能源浪费、环境污染、人民生命安全等多方面问题。如何加强对车辆的管理,规范驾驶员的驾驶行为,减少交通事故的发生,营造一个和谐、通畅的行车环境己成为交通运输和安全管理部门面临的一个重要问题。
而GPS卫星导航全球定位系统自问世以来,在导航、定位领域发展势头迅猛,引起世界各界人士的关注。具备高精度、全天候、全球覆盖、高效率、多功能、操作简便等特点。广泛应用于地面车辆跟踪和城市智能交通管理方面。随着人们对运输载体的监控、跟踪以及智能化管理要求的提高,GPS在中国已经进入爆发性发展阶段,蕴藏着巨大的发展空间。
GPS系统包括三大部分:空间部分——GPS卫星星座;地面控制部分——地面监控系统;用户设备部分——GPS信号接收机。GPS系统通过使用来自多个卫星的信号来确定地面或近地面任何位置的移动接收机的位置。我国的卫星定位技术综合了GPS卫星导航全球定位,GSM全球数字蜂窝移动通信,GIS地理信息,计算机网络技术全方位的技术应用。利用GPS卫星信号接收机,跟踪这些卫星的运行,对所接收到的GPS信号进行变换、放大和处理,测量传播时间,解译导航电文。接收机24h不间断地接收卫星发送的数据参数,算出接收的三维位置、三维方向以及运动速度和时间信息。
本课题就是这种背景下提出的利用GPS的定位导航功能,实现对车辆位置信息的记录,并将车辆的位置信息存储下来,以供后续调查。通过对车辆的位置信息的记录,可以加强车辆的管理,优化车辆的行驶路径,减少交通事故的发生。
本课题是一个非常有创新的课题,同时具有非常高的实用价值。对本课题的设计很好的煅炼了自己的能力。让我对GPS的工作原理有了更深的认识。同时,在实现这个设计的过程也很好地煅炼了自己的动手能力和独立思考能力。完成一个这样有实用价值的作品,对我以后步入社会后的工作也很有帮助。
1.2 课题的主要研究内容
本次毕业设计的任务是基于GPS的车辆行驶信息记录系统的设计,主要是通过GPS接收模块接受的信息通过串口传输到MSP430单片机,由单片机进行数据信息的解析与提取,将提取的有效信息储存到SD卡中。
主要研究内容:
1、硬件电路的设计制作,将GPS接收模块、SD存储卡、单片机、电源模块集成到一个系统板中;
2、用单片机解析GPS定位数据(因为GPS数据是十分丰富的,要提取里边有用的);
3、将单片机处理以后的定位数据存储到SD存储卡。
本课题重点是实现单片机对SD卡的读写,存储车辆位置信息。
1.3  论文的组织结构
本文共分为6个章节,以设计顺序为主线对系统进行了详细介绍。第1章主要介绍了该课题研究的目的、意义、题目要求以及论文的组织结构,本章为设计工作的准备阶段。第2章对系统进行了分析,提供了系统的设计方案。第3章介绍了该系统的硬件电路设计原理,详细介绍了系统各个组成电路模块。第4章主要是对软件设计的研究,首先说明了程序设计思路,然后画出了程序流程图,并对各程序流程图作了简要说明。第5章主要是系统实验结果与分析。第6章对该课题的经济和社会效益进行了简要分析。本文还包括结论、致谢、参考文献、附录部分。
2章 系统分析与设计方案
方案设计是系统完成的关键,其设计的合理性直接决定了整个系统的结构和功能。
本系统完成了对GPS接收信息的提取,并将其存储到SD卡中。下面对GPS系统及其工作原理和本系统的设计做一下具体说明。
2.1  GPS系统及其工作原理
2.1.1  GPS基础
GPS主系统是由美国发射的卫星系统,由27颗卫星组成,其中24个正常使用,3个备用,27颗卫星不间断的发送地理位置海拔高度和时间信号,由地面的接收机接受再做处理,一般的接收机可以接收5至12个卫星信号。全球定位系统分为三部分:太空卫星部分:24颗绕极转动的卫星分成六个轨道,在20200公里的高空运动,转动一周约12小时,每个卫星都不停的发射载有卫星轨道数据及时间的无线电波以供地球上的各种接收机接收。地面管制部分:在地面设置的地面管制站主要任务是追踪控制卫星运转,修正维护每个卫星能保持运转的个性参数,确保接收信息的可靠性。终端设备:追踪GPS卫星并随时计算出接收机所在位置的坐标,移动速度及时间。GPS接收机及一般分为:无线蓝牙GPS,USB接口GPS。
2.1.2  GPS定位原理
GPS系统的基本定位原理是:每颗GPS卫星时刻发布其位置和时间数据信号,用户接收机可以测量每颗卫星信号到接收机的时间延迟,根据信号输出的速度可以计算出接收机到不同卫星的距离。同时收集至少4颗卫星的数据时,就可以算出三维坐标、速度和时间,经由I/O口输出串行数据。
2.1.3  GPS数据
GPS模块协议支持NMEA-0183协议,NMEA-0183协议是NationalMarinc Elcctronics Association所指定的标准规格,这一标准还包含传输资料的格式以及传输资料的通信协议。一组正常的GPS协议语句包含GPS固定数据输出语句($GPGGA),建议使用推荐定位信息($GPRMC),地面速度信息($GPVTG)语句。
1.当前卫星信息$GPGGA
$GPGGA,101443.00,4155.48410,N,12323.86670,E,1,05,11.28,89.7,M,7.8,M,,*6B;其标准格式为$GPGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),M(10),M,(11),(12),*hh(CR)(LF)
各部分对应的含义为:
(1):标准定位时间:##时##分##秒;
(2):纬度(格式ddmm.mmmm即##度##.####分);
(3):N/S南或北表示纬度即北纬37度54.9756分;
(4);经度(格式ddmm.mmmm即##度##.####分);
(5):E/W 东或西表示经度即东经109度28.4278分;
(6):质量因子(0=没有定位,1=实时GPS,2=差分GPS);
(7):可以应用卫星个数(0--8);
(8):水平精度因子(1.0--99.9)水平精度因子=1.0;
(9):天线高程天线高程20.6米;
(10):大地椭球面相对海平面的高度(-999.9---9999.9,单位:米);
(11):差分GPS数据年龄,实时GPS时无;
(12):差分某准站号(0000---1023),实时GPS时无;
     *:语句结束标识符;
Hh:为从$开始到*之间的所有ASCII码的异或校验和;
(CR):回车;
(LF):换行。
2.推荐定位信息数据格式$GPRMC
$GPRMC,101443.00,A,4155.48410,N,12323.86670,E,0.049,255.81,160411,,,A*6A,其标准格式为:$GPRMC(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11)*hh
(1):标准定为时间格式hhmmss.sss;
(2):定位状态:A=数据可用,V=数据不能被用;
(3):纬度:格式ddmm.mmmm;
(4):纬度区分:北半球=N,南半球=S;
(5):经度:格式ddmm.mmmm;
(6):经度区分:东半球=E,西半球=W;
(7):相对位移的速度0.0至1851.8knots;
(8):相对位移的方向:000.0至359.9度,实际值;
(9):日期:格式ddmmyy;
(10):磁极变量:0度到180度;
(11):磁偏角方向,E(东)或W(西);
(12):模式指示(A=自主定位,D=差分,E=估算,N=数据无效)。
3.地面速度信息$GPVTG
$GPVTG,255.81,T,,M,0.049,N,0.090,K,A*32,其标准格式为:
$GPVTG,(1),(2),(3),(4),(5),(6),(7),(8),(9)*hh
(1):运动角度,000---359前导位数不足补0;
(2):T=真北参照系;
(3):运动角度,000---359前导位不足补0;
(4):M=磁北参照系;
(5):水平运动速度0.00前导位不足补0;
(6):N=节,Knots;
(7):水平运动速度0.00前导位不足补0;
(8):K=公里/时;
(9):模式指示(A=自主定位,D=差分,E=估算,N=数据无效)。
4.含经纬度的地理位置$GPGLL
$GPGLL,3723.2475,N,12158.3416,W,161229.487,A*2C,其标准格式为:
$GPGLL,(1),(2),(3),(4),(5),(6)*hh
(1):纬度37度23.2475分;
(2):N/S,北半球或南半球;
(3):经度121度58.3416分;
(4):E/W,东半球或西半球;
(5):标准定为时间:格式,时时分分秒秒;
(6):状态,A=数据可用,V=数据不可用。
5.当前卫星信息$GPGSA
$GPGSA  A,3,07,02,26,27,09,04,15,,,,1.8,1.0,1.5*33,其标准格式为:$GPGSA,(1),(2),(3),(3),,,,,(3),(3),(3),(4),(5),(6),(7)
(1):模式:M = 手动, A = 自动;
(2):定位型式1 = 未定位, 2 = 二维定位, 3 = 三维定位;
(3):PRN 数字:01 至32 表天空使用中的卫星编号,最多可接收12颗卫星信息;
(4):PDOP位置精度因子(0.5~99.9);
(5):HDOP水平精度因子(0.5~99.9);
(6):VDOP垂直精度因子(0.5~99.9);
(7):Checksum.(检查位)。
2.2  系统总体设计
首先是GPS数据接收模块进行数据的接收,然后将接收数据传给单片机进行数据的加工处理从中选取有用数据,存储到SD卡中。
系统整体设计框架图如图2.1所示:
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image002.jpg
图2.1  系统整体设计框架图
此次设计的系统主要包括GPS接收模块、MSP430单片机、SD卡读写模块、串行通信接口等几部分,各部分设计及主要功能介绍如下:
GPS接收模块:
GPS接收机的功能是能够捕获到按一定卫星高度截止角所选择的待测卫星的信号,并跟踪这些卫星的运行,对接收到的GPS信号进行变换、放大和处理,可以实现对天线视界内卫星的跟踪、锁定和测量。在获取了卫星的位置信息和测算出卫星信号传输时间之后,就可算出输出定位、导航和其他数据。
GPS接收机由核心处理器、GPS接收装置和液晶显示设备组成。本研究采用的GPS接收机是RCB-4H,具有接收GPS信号、处理信号、输出定位信息等功能。
单片机:
单片机是此系统的核心部分,通过对外围各个接口的数据信号的提取及处理,来控制整个系统的工作。本课题采用MSP430F149单片机提取GPS接收的数据信息,并对数据信息进行处理。
SD卡读写模块:
SD卡读写模块内置文件系统、可直接进行文件读写的SD卡模块,适用于单片机系统实现大容量存储方案。单片机使用模块,可直接进行目录遍历、目录创建、目录删除、文件创建、文件删除、文件修改、卡格式化等标准文件系统操作,无需了解SD卡内部存储结构及文件系统实现细节。SD卡通过SD卡读写模块存储经过单片机处理过的有效信息。

3章 系统硬件设计3.1  系统硬件总体设计概述
系统的硬件电路部分设计是本课题的非常重要和关键的一部分,这部分的设计情况将影响到系统功能的实现。本章着重介绍硬件部分电路的设计原理,各部分电路的组成以及外围电路器件的功能等等。
系统硬件框图如图3.1所示:
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image004.jpg
图3.1 系统硬件框图
3.2  系统电路模块设计
对应于系统所要实现的功能,本系统的硬件设计主要由四部分组成。这四部分分别为GPS定位信息接收电路,SD卡读写电路,电源电路与STC89C52RC接口电路和程序下载电路。

3.2.1  MSP430F149单片机简介
单片机是系统的核心部分,通过对外围各个接口的数据信号的提取及处理,来控制整个系统的工作。本课题采用的是MSP430F149单片机。
单片机芯片配以必要的外部器件,一般包括电源供入及电源开关、复位电路、晶振、输入输出电路等就能构成最小系统。
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image006.jpgMSP430功能框图如图3.2所示:












图3.2 MSP430功能框图
MSP430F149芯片是美国TI公司推出的超低功耗微处理器,有60KB+256字节FLASH,2KBRAM,包括基本时钟模块、看门狗定时器、带3个捕获/比较寄存器和PWM输出的16位定时器、带7个捕获/比较寄存器和PWM输出的16位定时器、2个具有中断功能的8位并行端口、4个8位并行端口、模拟比较器、12位A/D转换器、2个串行通信接口等模块。MSP430F149芯片具有如下特点:
(1)功耗低:电压2.2V、时钟频率1MHz时,活动模式为200μA;关闭模式时仅为0.1A,且具有5种节能工作方式;
(2)高效16位RISC-CPU,27条指令,8MHz时钟频率时,指令周期时间为125ns,绝大多数指令在一个时钟周期完成;32kHz时钟频率时,16位MSP430单片机的执行速度高于典型的8位单片机20MHz时钟频率时的执行速度;
(3)低电压供电、宽工作电压范围:1.8~3.6V;
(4)灵活的时钟系统:两个外部时钟和一个内部时钟;
(5)低时钟频率可实现高速通信;
(6)具有串行在线编程能力;
(7)强大的中断功能;
(8)唤醒时间短,从低功耗模式下唤醒仅需6μs;
(9)ESD保护,抗干扰力强;
(10)运行环境温度范围为-40~+85℃,适合于工业环境。
MSP430系列单片机的所有外围模块的控制都是通过特殊寄存器来实现的,故其程序的编写相对简单。编程开发时通过专用的编程器,可以选择汇编或C语言编程,IAR公司为MSP430系列的单片机开发了专用的C430语言,可以通过WORKBENCH和C-SPY直接编译调试,使用灵活简单。
单片机引脚图如图3.3所示:
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image008.jpg
图3.3  MSP430引脚图
58脚RST/NMI 为430单片机的复位引脚(低电平有效)。
1脚DVCC、63脚DVSS 为数字电源接口。
64脚AVCC、62脚AVSS 为模拟电源接口。注意:MSP430系列单片机的供电电压为1.8V~3.6V。
32脚UTXD0、33脚URXD0 的第二功能为MSP430F149单片机两路串口通讯接口中的第一路。
34脚UTXD1、35脚URXD1 的第二功能为MSP430F149单片机两路串口通讯接口中的第二路。
29脚SIMO0,30脚SOMI0,31脚UCLK0 的第二功能为MSP430F149单片机两路SPI通讯接口中的第一路。
45脚SIMO1,46脚SOMI1,47脚UCLK1 的第二功能为MSP430F149单片机两路SPI通讯接口中的第二路。
48脚的第二功能为MSP430F149单片机MCLK(主系统时钟)的输出端。
49脚的第二功能为MSP430F149单片机 SCLK(子系统时钟)的输出端
50脚的第二功能为MSP430F149单片机 ACLK(辅系统时钟)的输出端。
52脚、53脚为外部高频时钟晶振输入端(程序中说明一般用XT2CLK或HF XTAL表示)。
8脚、9脚为外部低频时钟晶振输入端(程序中说明一般用LFXTICLK表示)。
59脚TA0,60脚TA1,61脚TA2,2脚A3,3脚A4,4脚A5,5脚A6,6脚A7 的第二功能为8路的内部12位ADC模拟电压输入端口。
54脚TDO/TDI,55脚TDI/TCLK,56脚TMS,57脚TCK  为JTAG接口(同时拥有仿真器和编程器的功能),用于下载程序并实现硬件在线仿真。
I/O口的操作:
P1~P6的公有寄存器位为PXSEL,PXDIR,PXOUT,PXIN。其中P1,P2相对于P3,P4 ,P5,P6还多出了3个寄存器PXIE,PXIES,PXIFG,这三个寄存器是用于设置开启P1,P2的外部触发中断使用的(其中X可以为1,2,3,4,5,6)。
以下各寄存器功能介绍(以P3.4为例):
P3SEL用于功能选择,当其置0选择的是普通I/O口功能,置1选择的是第二功能;
比如32脚UTXD0对应P3.4,33脚URXD0对应P3.4。
P3SEL&= ~BIT4;// 该程序是将P3.4置0,此时该引脚只具有普通I/O口功能;
P3SEL|=  BIT4;//  该程序是将P3.4置1,此时该引脚将具有异步串口通信功能。
P3DIR是用于设置I/O口输出方向的。
P3DIR&= ~BIT4; //该程序是将I/O口的方向设置为输入(一般用于读取数据时);
P3DIR|=  BIT4; //该程序是将I/O口的方向设置为输出。
P3OUT是用于设置I/O口输出高低电平的。
P3OUT&= ~BIT4; ///该程序是使该I/O口输出高电平;
P3OUT|=  BIT4; ///该程序是使该I/O口输出低电平。
P3IN是用于读取外部输入到该引脚,使用该寄存器前必须将P3DIR置0。
3.2.2 MSP430F149单片机最小系统
最小系统是由保证处理器可靠工作所必须的基本电路组成的,主要包括电源电路、时钟电路和复位电路。
1.时钟电路
时钟电路用于产生单片机工作时所需要的时钟信号。单片机各功能部件的操作都是以时钟频率为基准,有条不紊地周期性地工作。因此,时钟频率直接影响单片机的运行速度,时钟电路的质量也直接影响单片机系统的稳定性。
MSP430系列单片机时钟模块包括数控振荡器(DCO)、高速晶体振荡器和低速晶体振荡器等3个时钟源。这是为了解决系统的快速处理数据要求和低功耗要求的矛盾,通过设计多个时钟源或为时钟设计各种不同工作模式,才能解决某些外围部件实时应用的时钟要求,如低频通信、LCD显示、定时器、计数器等。数字控制振荡器DCO已经集成在MSP430内部,在系统中只需设计高速晶体振荡器和低速晶体振荡器两部分电路。
低速晶体振荡器(LFXTl)满足了低功耗及使用32.768kHz晶振的要求。LFXTl振荡器默认工作在低频模式,即32.768kHz,也可以通过外接450kHz~8MHz的高速晶体振荡器或陶瓷谐振器工作在高频模式,在本电路中我们使用低频模式。
高速晶体振荡器(HFXT2)也称为第二振荡器XT2,它为MSP430F149工作在高频模式时提供时钟,XT2最高可达8MHz。在系统中XT2采用8MHz的晶体,XT2外接2个30pF的电容经过XT2IN和XT2OUT连接到MCU。
晶振电路如图3.4所示:
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image010.jpg   file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image012.jpg
图3.4  晶振电路
2.复位电路
在单片机每次初始加电时,首先投入工作的功能部件是复位电路。复位电路把单片机锁定在复位状态上并且维持一个延时,以便给予电源电压从上升到稳定的一个等待时间。在电源电压稳定之后,再插入一个延时,给予时钟振荡器从起振到稳定的一个等待时间。
从上MSP430系统复位电路功能模块图中可以看到了两个复位信号,一个是上电复位信号POR(PowerOn Reset)和上电清除信号PUC(Power Up Clear)。POR信号是器件的复位信号,此信号只有在以下的事件发生时才会产生:
    器件上电时:RST/NMI引脚配置为复位模式,当RST/NMI引脚产生低电平时。
    当POR信号产生时,必然会产生PUC信号;而PUC信号的产生时不会产生POR信号。会引起产生PUC信号的事件:
   POR信号发生时;启动看门狗时,看门狗定时器计满时;向看门狗写入错误的安全参数值时;向片内FLASH写入错误的安全参数值时。
当POR信号或PUC信号发生时引起器件复位后,器件的初始化状态为:
   RST/NMI引脚配置为复位模式、I/O引脚为输入模式、状态寄存器SR复位、看门狗激活进入工作模式、程序计数器(PC)装入复位向量地址0xFFFE,微处理器从此地址开发始执行。
由于MSP430F149单片机是低电平复位,在复位键未按下时,由于电容对直流电的阻隔作用,复位端口REST为高电平,因此单片机不执行复位功能;当按下复位键S2时,电容C3通过S2放电,此时REST为低电平,单片机进入复位状态,当释放S2时,电源通过电阻R8给电容再次充电,复位端口的点位由低电平缓慢的上升的高电平,在未达到单片机规定的阈值之前,单片机均认为是低电平,保持复位状态当充电完成后,复位端口为高电平,复位结束。其中二极管D3的加入是保证REST端的电压限定在一定范围内不会太高。
复位电路如图3.5所示:
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image014.jpg
图3.5  复位电路
最小系统可以直接作为核心部件应用与工程和科研中,具有良好的通用性和可扩展性。在最小系统的基础上,可以很方便地进行二次开发和功能扩展,能够缩短开发周期,降低开发成本。本文实现了最小系统的基本功能,介绍了各模块的硬件电路。该最小系统可以经过适当修改可应用于电子设计、计算机教学与科研、工业控制等领域。
3.2.3  GPS定位信息接收电路
在进行硬件设计时,应根据系统的需要来选择适合的硬件。
在本系统的设计中,GPS接收机是最基本的组成部分,由它来接收卫星信号,并且产生定位信息。下面分别介绍GPS接收机的分类、选择与各种特性。
    1.GPS接收机的分类
     GPS接收机可以根据用途、工作原理、接收频率等进行不同的分类。按接收机的用途进行分类可分为导航型接收机,测地型接收机,授时型接收机等;按接收机的载波频率进行分类可分为单频接收机,双频接收机;由于GPS接收机的定位原理多样,应用范围广泛,所以分类方法也多种多样,需要根据实际应用来选择适当的接收机。
    2.GPS定位模块的选择
     由于本项目开发的是基于GPS OEM接收机自主完好性监测系统的研究,所以应选择导航型的GPS模块。目前,有很多厂商都能提供GPS OEM板产品,如SiRF、Conexant、Sychip、GARMIN等公司。其中北京三信通导技术有限公司是最著名、深受用户信赖的专业GPS厂家,在GPS的定位、导航领域一直走在最前列,在提供各种类型的GPS成品的同时,还提供一系列最经典的GPS OEM板产品。此公司生产的GPS OEM产品的优良的性能既能够满足灵敏度需求,也能够满足动态需求,所以本项目选择RCB-4H作为GPS定位模块。它为12 通道的GPS接收机,也就是同时可以跟踪多达12颗GPS 卫星,从而能够快速的定位。GPS 接收机功耗非常小,数据更新率为4HZ,即为每秒4次。
    3.RCB-4H简介
GPS-OEM板采用单一5V供电,内置保护电池,RS232、TTL两种电平自动输出NMEA0183格式(ASCII字符型)语句。GPS接收板主要由变频器、信号通道、存储器、中央处理器和输入输出接口构成。它接收天线获取的卫星信号,经过变频、放大、滤波、相关、混频等一系列处理,可以实现对天线视界内卫星的跟踪、锁定和测量。在获取了卫星的位置信息和测算出卫星信号传输时间之后,就可算出输出定位、导航和其他数据。
4.RCB-4H的输出格式
RCB-4H是一种超低功耗的GPS接收板.接收机输出数据通常使用的格式是美国国家海洋电子协会指定的NMEA0183通信标准格式,其输出数据代码为ASCII码字符,内容包含了纬度、精度、高度、速度、日期、时间、航向以及卫星状况等信息。输出数据为多种格式,如GPGRS、GPGGA、GPGSA等。GPS通信波特率为4800~19200,1个起始位,8个数据位,1个停止位,无奇偶校验位。
GPS接收机的实物图如图3.6所示:
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image016.jpg
图3.6  GPS接收机实物图
GPS接收机引脚图如图3.7所示:
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image018.jpg
图3.7  GPS接收机管脚配置图
各引脚功能如表3.1所示。


表3.1 GPS引脚功能介绍
1
V-ANT
输入
天线偏置电压
11
TXD1
输出
串口1
2
Vcc
输入
供应电压
12
RXD1
输入
串口1
3
V-BAT
输入
备用电源电压
13
GND


4
Vcc
输入
供应电压
14
TXD2
输出
串口2
5
RESET-N
输入
复位
15
RXD2
输入
串口2
6
Reserved




16
GND


7
Reserved




17
GND


8
Reserved




18
GND


9
Reserved




19
TIMEPULSE
输出
时间脉冲
10
GND


20
GND


5.GPS信息接收电路
由于我们所采用的RCB-4H信号接收模块输出信号为RS-232电平,而MSP430单片机串口所使用的电平为TTL电平,所以为了能使单片机正常的与RCB-4H信号接收模块进行通讯,故需要对电平进行相互转换,所以我使用了MAX-232转换芯片。其电路设计图如图3.8所示。
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image020.jpg
图3.8  GPS信息接收电路
3.2.4  SD卡读写电路
SD卡读写模块SDV600是一款整合了SD卡规范和FAT文件格式规范的模块,只要通过本模块规定的通讯协议就可以把数据存储在SD卡中的文件中。由于SD卡规范和FAT规范是非常复杂,如果在项目中要单独来写这两个规范的非常费时和费力,而且非常占用系统资源;现在的便携仪采集的数据种类越来越多,数据量越来越大,而其大部分要求在计算机上备份数据或者后期用计算机处理数据;而SD 卡以其容量大,速度快,接口简单,加之配套的读卡器便宜而发展迅速;这些主观和客观的因素促使项目中迫切要求使用SD 卡加FAT文件系统来存储数据,也促使本模块的诞生。
本模块支持FAT32文件格式,理论支持8G以下SD卡。通过命令提供给主机有如下功能:
(1)文件的创建(注:文件名只支持8.3 文件格式:8.3文件格式文件名不支持中文,文件名长度为最大8个字符);
(2)文件的打开(8.3 文件名格式);
(3)文件的连续写入和文件的给定起始地址写入;
(4)文件的连续读取和文件的给定起始地址读取;
(5)当前打开文件的保存;
(6)当前文件的关闭;
(7)文件指针的设置;
(8)当前打开文件信息的读取,包括文件的大小和当前文件指针值;
(9)获取系统的状态(有无SD卡,是否为FAT32文件格式,系统是否繁忙);
(10)通过模块上的拨码开关设置串口波特率(2400,9600,19200,57600,115200)。
SD卡读写模块连接电路如图3.9所示:
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image022.jpg
图3.9  SD卡读写模块电路
本模块工作稳定,不挑卡,不死机,串口 UART操作(直接接任何带串口单片机),指令少,还可以顺序存。
3.2.5  电源模块电路
由于整个系统采用5V和3.3V供电,又考虑到硬件系统要求电源具有稳压功能和波纹小等特点,另外也考虑到硬件系统的低功耗等特点,因此该硬件系统的电源先用LM7805稳压为5V给外围模块电路供电,再用SPX1117芯片稳压得到3.3V电压,给CPU和3.3V设备供电。
电源电路如图3.10所示:
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image024.jpg
图3.10  电源电路
3.3  整体硬件电路
本系统的硬件电路主要包括GPS接收模块、MSP430F149单片机和SD卡读写模块组成。
整体硬件电路实物图如图3.11所示:
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image026.gif
图3.11  整体硬件电路实物图








4章 系统软件设计4.1  系统软件总体设计概述
本次课题是基于GPS的车辆行驶信息记录系统的设计,主要实现GPS数据接收、GPS数据信息处理以及GPS有效数据信息存储等功能,而这些功能通过使用IAR Embedded Workbench集成调试软件编写程序来实现。由于硬件电路设计包含主控电路、GPS信息接收电路、SD卡存储电路组成,因此本次程序设计主要包含3个部分:主程序、SD卡读写模块程序和GPS数据处理模块电路程序。
4.2  系统各部分程序4.2.1  主程序
设计系统时,一般会设计系统的主程序。主程序主要用于调用各个子程序,不仅如此,还标明调用子程序所要满足的条件。本系统的主程序流程图如图4.1 所示。
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image028.gif
图4.1  系统主程序流程图
4.2.2  SD卡读写模块程序
SDV600 是内含处理器,整合FAT 协议,操作起来和芯片一样,它工作状态也是有忙有闲,所以在执行操作时需要检查模块的busy 标志引脚,客户处理器完全可以去做别的事,必要时判断busy 进行下一步操作。
对于FAT协议来讲,文件数越多造成得寻址和判断(判断文件重命名)时间越来越长,使建立文件命令执行时间增长,所以在使用命令时一定要判断模块的BUSY脚,如果处于BUSY状态发送的后续命令就会被模块丢弃,直到不为BUSY状态时,后续命令才可被模块执行。
例如:按照状态命令(01)+创建命令(02)+打开命令(06)+写入数据命令(05)+保存命令(04)+关闭命令(08)这样的命令而不判断BUSY,当创建到大概800 多个文件时,创建命令时间变长,使得后续打开命令(06)丢失,而写入数据命令(05)+保存命令(04)因没有打开文件(打开命令丢弃没有执行),而执行失败,这样会出现创建好文件后,没有写入数据的现象,如果判断BUSY就能解决此问题。
类似问题还有保存命令,关闭命令。
SD卡读写模块在工作时可实现创建文件、打开文件、写入数据、保存文件和关闭文件的操作,在实现不同操作时对应有不同的命令格式:
    1.创建文件命令 0x02
创建文件命令提供给主机创建文件的功能。参数为N字节8.3 文件格式的文件名(字符串格式,即文件名以0 结尾),即8 字节的基本文件名(模块不支持汉字编码,字母不区分大小写),3 字节扩展名。命令格式如下:
0x55  0xaa  0x02  个数(2 字节,低字节在前) 8.3文件格式名  校验和
应答的数据为1 个字节的状态信息,各位分别代表不同的状态:
Bit 0,SD 卡不存在状态,1 表示SD 卡不存在;
Bit 1,SD 卡写保护状态,1 表示SD 卡写保护;
Bit 2,文件打开状态,1 表示当前有文件打开,创建失败;
Bit 3,FAT16 根目录满,1 表示根目录满,FAT16 根目录只能创建32 个文件或文件夹;
Bit 4,文件名格式,1 表示当前目录下有同名文件或者文件名格式不是8.3格式;
Bit 5,文件系统类型,1 表示不为FAT32 文件系统;
Bit 6,系统忙状态,1 表示系统正处在忙状态;
Bit 7,校验和状态,1 表示发送命令的校验和不正确。
注:接收到应答,其中8 位任何一位不为0,表示命令执行失败。
例如要在SD卡中建立文件12345678.txt,发送的命令数据为:
例:55 AA02 0D 00 31 32 33 34 35 36 37 38 2E 74 78 74 00 41 创建 12345678.txt文件。
2.打开文件命令 0x06
该命令为主机提供打开文件的功能。参数为N 字节8.3文件格式的文件名(字符串格式,即文件名以0 结尾),即8 字节的基本文件名(模块不支持汉字编码,字母不区分大小写),3 字节扩展名。命令格式如下,其中个数占2字节,低字节先发送:
0x55  0xaa  0x06  个数(2 字节,低字节在前) 8.3文件格式名  校验和
应答的数据为1 个字节的状态信息,各位分别代表不同的状态:
Bit 0,SD 卡不存在状态,1 表示SD 卡不存在;
Bit 1,文件打开状态,1 表示当前有文件打开,打开失败,先关闭文件在调用该命令;
Bit 2,文件名状态,1 表示文件名不是标准的8.3 文件格式;
Bit 3,文件存在状态,1 表示无该文件;
Bit 4,无定义;
Bit 5,文件系统类型,1 表示不为FAT文件系统;
Bit 6,系统忙状态,1 表示系统正处在忙状态;
Bit 7,校验和状态,1 表示发送命令的校验和不正确。
注:接收到应答,根据第8 位判断命令执行状态,如果失败,原因参考前几位标识。
例:55 AA06 0D 00 31 32 33 34 35 36 37 38 2E 74 78 74 00 45 打开 12345678.txt文件。
3.写入文件命令 0x05
该命令为主机提供向已打开文件中写入数据的功能。每写一个数据文件指针自动加1,当数据写完,
文件指针指向最后一个数据地址加1 的位置。命令格式如下,其中个数占2 字节,低字节先发送,起始地址占4 字节,低字节先发送:
0x55 0xaa 0x05 个数(2 字节) 起始地址(4个字节) 有效数据  校验和
应答的数据为1 个字节的状态信息,各位分别代表不同的状态:
Bit 0,SD 卡不存在状态,1 表示SD 卡不存在;
Bit 1,SD 卡写保护状态,1 表示SD 卡写保护;
Bit 2,文件打开状态,1 表示无文件打开;
Bit 3,磁盘状态,1表示磁盘空间满,写入失败;
Bit 4,参数个数状态,1 表示参数个数小于4个字节;
Bit 5,文件系统类型,1 表示不为FAT文件系统;
Bit 6,系统忙状态,1 表示系统正处在忙状态;
Bit 7,校验和状态,1 表示发送命令的校验和不正确。
注:接收到应答,其中8 位任何一位不为0,表示命令执行失败,原因参考位标识。
例:55 AA05 0D 00 00 00 00 00 31 32 33 34 35 36 37 38 39 EF 向打开的文件写入123456789数据。
如果要连续写入文件,只要把写命令中的地址信息置最大值,0xffffffff就可以了。有效数据≤200个字节,个数2个字节是备用将来扩展。
4.保存文件命令 0x04
该命令为主机提供保存当前打开文件的功能,为了防止频繁写SD 卡,每次送入模块的数据先是保存在模块的512 字节的扇区缓冲中,所以为了防止数据丢失,完成所有数据的传输后,要发送保存文件命令来保存文件。命令格式如下:
0x55  0xaa  0x04  0x00 0x00  0x04
应答的数据为1 个字节的状态信息,各位分别代表不同的状态:
Bit 0,SD 卡不存在状态,1 表示SD 卡不存在;
Bit 1,SD 卡写保护状态,1 表示SD 卡写保护;
Bit 2,文件打开状态,1 表示无文件打开;
Bit 3,无定义;
Bit 4,文件系统类型,1 表示不为FAT32 文件系统;
Bit 5,系统忙状态,1 表示系统正处在忙状态;
Bit 6,校验和状态,1 表示发送命令的校验和不正确。
注:接收到应答,其中8 位任何一位不为0,表示命令执行失败,原因参考位标识。
记得文件要保存数据才可以完全写入sd卡中,文件信息(大小)等才可以更新。
例:55 AA04 00 00 04 保存文件。
5.关闭文件命令 0x08
该命令为主机提供关闭当前打开的文件的功能。在创建文件、创建文件夹、打开文件之前要求关闭当
前打开的文件,才可以执行这些命令,否则返回失败。命令格式如下:
0x55  0xaa  0x08  0x00 0x00  0x08
应答的数据为1 个字节的状态信息,各位分别代表不同的状态:
Bit 0,SD 卡不存在状态,1 表示SD 卡不存在;
Bit 1,无定义;
Bit 2,无定义;
Bit 3,无定义;
Bit 4,文件系统类型,1 表示不为FAT文件系统;
Bit 5,系统忙状态,1 表示系统正处在忙状态;
Bit 6,校验和状态,1 表示发送命令的校验和不正确。
注:接收到应答,其中8 位任何一位不为0,表示命令执行失败,原因参考位标识。
SD卡读写模块程序流程图如图4.2所示:
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image030.gif
图4.2  SD卡读写模块程序流程图
4.2.3  GPS数据处理模块程序
GPS接收机只要处于工作状态就会源源不断地把接收并计算出的GPS导航定位信息通过串口传送到计算机中。GPS定位信息的接收只负责从串口接收数据并将其放置于缓存,在没有进一步处理之前缓冲中是一长串ASCII码字节流,这些信息在没有经过分类提取之前是无法加以利用的。因此,必须通过程序将各个字段的信息从缓存字节流中提取出来。因此,必须通过程序将各个字段的信息从接收到的字节流中提取出来,将其转换成实际意义的,可供高层决策使用的定位信息数据。同其他通讯协议类似,对GPS信息进行提取必须首先明确其帧结构。数据帧主要由帧头、帧尾和帧内数据组成。对于不同的数据帧,其帧头是不同的,主要有“$GPGGA”、“$GPGSA”、“$GPGSV”以及“$GPRMC”等。这些帧头标识了后续帧内数据的组成和结构特点。各帧均已回车符<CR>和换行符<LF>作为帧尾,标识一帧的结束。
对数据帧处理,是先对帧头进行判断,然后只对感兴趣的帧进行数据的提取处理。由于帧内各数据段被逗号分割,因此在处理接收数据时一般是首先通过搜寻ASCII码“$”来判断是否是帧头,接着对帧头的类别进行识别,然后再根据识别出来的帧类型作出相应的提取和存储。
本课题采用的是“$GPRMC”语句,内含所需要的时间、经度、纬度及日期等信息。
GPS数据处理模块程序流程图如图4.3所示:
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image032.gif
图4.3  GPS数据处理模块程序流程图


5章 系统调试与结果分析5.1  概述
IAR系统嵌入式 Workbench是一种用于开发应用各种不同的目标处理器的灵活的集成环境。它提供一个方便的窗口界面用于迅速的开发和调试嵌入式。Workbench支持多种不同的目标处理器,用户用不同的目标处理器开发的工程(Projects)可以在工程的基础上逐个规定目标工程。
软件调试主要是检查程序编写的语法错误,即能否正确编译、单步运行时逻辑上是否正确;然后要把程序下载单片机内,看能否实现系统预期的功能,这一部分是最为关键的环节。
硬件调试主要是检查电路连接是否有误,根据电路图逐个检查各个引脚是否连接准确。硬件调试的目的是把系统的各个部分有机的组合起来,成为一个整体。
5.2  IAR软件简介
IAR Embedded Workbench 是瑞典 IAR Systems 公司为 微处理器开发的一个集成开发环境,支持ARM,AVR,MSP430等芯片内核平台。
IAR EWARM 中包含一个全软件的模拟程序(simulator)。用户不需要任何硬件支持就可以模拟各种ARM 内核、外部设备甚至中断的软件运行环境。从中可以了解和评估IAR EWARM 的功能和使用方法。
  IAR EWARM 的主要特点如下:
  1、高度优化的IAR ARM C/C++ Compiler;
  2、IAR ARM Assembler;
  3、一个通用的IAR XLINK Linker;
  4、IAR XAR 和XLIB 建库程序和IAR DLIB C/C++运行库;
  5、功能强大的编辑器;
  6、项目管理器;
  7、命令行实用程序;
  8、IAR C-SPY 调试器(先进的高级语言调试器)。
5.3  软件调试方法及步骤5.3.1  系统在IAR软件的调试
使用该软件进行开发的过程为,启动软件后先建立工程文件,命名并保存到指定的文件夹中。在工程文件中建立新的Workspace,命名并保存到指定的文件夹中。在Workspace中创建新文件命名并保存到指定的文件夹中。紧接着需向项目文件中增加程序文件内容,可以是新建的程序文件也可以是已经创建好的文件。在Option中选择单片机芯片型号(如选择芯片MSP430F149)和需要的相关生成文件(如生成可下载到芯片中的.txt文件)。之后即可编译连接工程文件了,编译、连接时,如果程序出错,则编译不成功,并在下面的信息窗口给出相应的出错提示,以进行修改,修改后再编译、连接,这个过程可能会重复多次。如果没有错误,则编译、连接成功,并且信息窗口给出提示信息。
IAR软件编译成功后结果如图5.1所示:

file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image034.jpg
图5.1  编译成功结果图
5.3.2  程序下载电路的调试
在程序编译成功后,在相关的文件目录中可以找到生成的需要下载到芯片中的.txt格式文件。具体步骤如下:
(1)检查电路连接;
(2)打开SF_BSL430.exe程序下载软件;
(3)设置串口;
(4)装载生成的.txt文件;
(5)执行。



程序下载过程界面如图5.2所示:
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image036.jpg
图5.2  程序下载过程界面图
5.4  整体调试
在程序下载成功后,将单片机与计算机通过串口线相连,准备系统的整体调试。
串行通信接口模块主要完成的功能是单片机与计算机之间的数据传送。本系统的设计采用的是MAX-232通信协议。在进行串行通信接口模块的调试时使用的是串口调试助手软件。该软件使用起来方便、快捷。不需要通过键盘和显示模块来调试,只需要将GPS OEM接收板用串口线与计算机相连就可以进行调试。开始进行调试的时候,我们先要设置一下串口通讯的参数,波特率选择9600b/s,检验位None(无),数据值选8,停止位选择1;

串口参数设置如图5.3所示:
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image038.jpg
图5.3  串口参数设置
在串口调试助手窗口发送区发送数据:
$GPRMC,101443.00,A,4155.48410,N,12323.86670,E,0.049,255.81,160411,选择自动发送按钮,即可将数据存储到SD卡中,在数据接收区可以查看到存储的数据。
5.5  调试结果与分析
给系统上电之后通过串口调试助手发送数据,硬件整体效果如图5.4所示:
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image040.jpg
图5.4  上电时电路
断开电源后取出SD卡插入到计算机中打开,可以看到创建的11112222.txt文件。得到界面如图5.5所示:
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image042.jpg
图5.5  创建的.txt文件

打开文件11112222.txt,文件中的数据即为接收到的解析后的GPS数据信息,如图5.6所示:
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image044.jpg
图5.6  存储的数据
以上即为本设计的调试结果,基本上实现了设计的预期要求。但从最后存储的数据可以看到系统在存储数据时有数据缺失,造成此现象的可能原因有:
(1)  解析信号时解析不完整;
(2)  在存储过程中造成数据丢失。





6章 经济与社会效益分析6.1 经济效益分析
本文介绍的是基于GPS接收模块的车辆行驶信息记录系统的设计,不仅能够从GPS导航系统获得时间、定位信息,而且本系统在设计之初就进行了成本的预算,这不仅为生产商考虑了经济收益,也为使用者考虑了性价比问题。整个系统的主要器件都比较常见,价格比较合理,尤其存储部分采用的SD卡读写模块在能够很好的完成显示的前提下,更具有成本较低的优势。采用低成本元件实现高性能的系统,可以满足生产者和使用者的需求。
总之,整个系统具有硬件电路简单、成本低廉、编程方便、性能稳定的特点,具有一定的使用价值。
6.2 社会效益分析
随着汽车拥有量的逐年增加,道路拥挤和交通事故频频发生,这不仅给人们出行带来极大不便,而且还涉及到能源浪费、环境污染、人民生命安全等多方面问题。如何加强对车辆的管理,规范驾驶员的驾驶行为,减少交通事故的发生,营造一个和谐、通畅的行车环境己成为交通运输和安全管理部门面临的一个重要问题
而GPS卫星导航全球定位系统自问世以来,在导航、定位领域发展势头迅猛,引起世界各界人士的关注。具备高精度、全天候、全球覆盖、高效率、多功能、操作简便等特点。广泛应用于地面车辆跟踪和城市智能交通管理方面。随着人们对运输载体的监控、跟踪以及智能化管理要求的提高,GPS在中国已经进入爆发性发展阶段,蕴藏着巨大的发展空间。
所以基于GPS的车辆行驶信息记录系统的设计有着很大的经济、社会效益。


    论
基于GPS的车辆行驶信息记录系统的设计本次到此,就暂告一段落了。虽然系统还不是很完善,比如在存储数据时有丢失数据的问题,但调试结果基本完成了任务书所要求的各项功能和技术指标。
通过本次设计研究,本文所做的工作及研究结果如下所示:
1 介绍了GPS系统以及GPS接收机的工作原理;
2 提供了以MSP430单片机为核心处理器、SD卡读写模块为主要部件的系统硬件电路设计;
3 提供了系统的软件设计;
4 完成了系统的调试。
通过半年的毕业设计,过程虽然辛苦,但收获颇丰。在完成毕业设计的过程中,学到了许多课堂上老师们没有教授过知识。这些知识不是从书本上就能学到的,是自己在实际设计和操作中不断的总结得出,对日后的工作具有很大的用处。从一开始的查阅资料、理论分析、电路设计,再到后来的调试和硬件测试过程,这一切要求将所学过的理论知识和实践结合起来,加强了的理论分析能力和实践动手能力。
原理图设计、软硬件调试的过程,要求我拥有细心和耐心。有时候系统存在一些小问题,但就是这些小问题而导致系统无法达到设计的目的甚至所有的设计毁于一旦,而这些小问题往往可能就是在原理图设计时一条导线连接错误;在程序设计时,一条语句编写错误而引起的。所以设计系统的过程要求我们应该拥有很大的耐心去不断的调试和改正。
善于自学、认真学习、耐心体会、细心总结,这些优点不仅仅可以用于学习这门学科中,还能使我们在毕业后的工作生活获益匪浅。这半年的毕业设计时间,让我学到很多,也成长了很多,相信在电子设计这条道路上,我会越走越远。

    谢
岁月如梭,回首四年的大学生活,百感交集。所有的经历,无论成败喜忧,都会成为我面对未来生活的财富储备。
在此,谨向所有老师四年来的谆谆教诲,致以最诚挚的谢意!
李玉峰院长在大学伊始,耐心指导,将我领进了电子学的大门。李轩副教授激情洋溢的授课,将精彩丰呈的电子学世界展现给我。高建平教授慈祥亲切、于春和副教授风趣幽默,两位老师让我更全面地了解电子学的历史和现状。张述杰教授独特的视野,让我明白做人要有自己的特点。
石建民老师的和蔼可亲,在电子实训过程中对我们的支持与关注;曲乐乐老师对课堂的投入、对学生的关注;孙琦老师亲切又不失严谨;江秀红老师课堂的轻松氛围;常立东老师的严谨执教……这一切,都将是我人生路上,学习的榜样!
毕业设计从最初选题到开题答辩,直至后期硬件调试过程中,得到了指导老师王尔申副教授的鼎力支持与指导,在此致以诚挚的谢意!对实验室徐嵩等各位老师的支持与帮助,致以诚挚的谢意!向杜刚刚、宁刚刚、刘通等同学的热情帮助,致以诚挚的谢意!
充实的过程,让我在各方面得到锻炼,获得成长。能够走到今天,离不开老师同学们的帮助、亲人朋友们的支持!感激之心拳拳,然而文字单薄,仅能承载万一!




参考文献
[1] 张毅刚,刘杰. 单片机原理及应用[M].哈尔滨工业大学出版社. 2004 : 219-226
[2] 周荷琴,吴秀清.微型计算机原理与接口技术[M].中国科学技术大学出版社.2008
[3] 刘建清. 从零开始学单片机技术[M].国防工业出版社. 2006 : 249-257
[4] 杨恢先,黄辉先 .单片机原理及应用[M]. 人民邮电出版社. 2006: 146-149
[5] 张鑫. 单片机原理及应用[M].电子工业出版社. 2005 : 14-22
[6] 何宏. 单片机原理与接口技术[M].国防工业出版社. 2006 : 256-262
[7] 潘永雄. 新编单片机原理与应用[M].电子科技大学出版社.2003: 54-63
[8] 雷思孝. 单片机系统设计及工程应用[M].西安电子科技大学出版社.2005:156-168
[9] 龙威山. 单片机应用入门[M].北京大学出版社.2008: 16-28
[10] 张桂红. 单片机原理与应用[M].福建科学技术出版社.2007:150-157
[11] 张守信编著.GPS技术与应用[M].北京:国防工业出版社,2004.
[12] 王尔申.GPS接收机及其应用的关键技术研究[D].大连海事大学博士论文,2009.
[13] 王爱兵.GPS测时的接收机自主完好性监测算法[D].解放军信息工程大学硕士生论文,2007.
[14] 张怡群. GPS在精准农业应用中定位精度的实验研究[C]. 中国农业工程学会学术年论文集,2005.
[15] 徐进. GPS接收机的单片机通讯接口[J]. 电子器件,2006.
[16] GPS接收机的应用于研究[N].科技创新导报,2009.
[17] 王密.车载GPS导航系统中GPS定位与道路匹配方法研究[N].武汉测绘科技大学学报,2000.
[18] 陈曦红.GSU-14 GPS接收板与单片机的接口及信息提取的程序设计[N].福建农业大学学报,2000.
[19] 郭瑞.导航系统接收机自主完好性监测研究[D]. 郑州:信息工程大学,2006.
[20] 王尔申,张淑芳,胡青.  基于 MCMC 粒子滤波的 GPS 接收机自主完好性监测算法研究[J].  仪器仪表学报, 2009, 30(10):2208-2212.
[21] 秦龙.MSP430单片机应用系统开发典型实例[M].中国电力出版社,2005.
[22] 赵建,谢楷等.MSP430系列十六位超低功耗单片机教程[M].西安电子科技大学测控工程与仪器系,2006年5月.
[23]  Jimmy.GPS ReceiverModule GP62030-PCT[J].GP62030-ACI Datasheet.2005.
[24]  GARMINcorporation.GPS25LP Serics Technical Specification,2004.
[25]  Abel JS.Uniqueness on GPS Soiunons,2005.
[26]  IgorNikiforov.Statistical analysis of different RAIM schemes of ION GPS,2002.


附录Ⅰ 电路原理图
file:///C:\Users\ZX\AppData\OICE_15_974FA576_32C1D314_319\msohtmlclip1\01\clip_image046.gif
附录Ⅱ 程序清单
#include<msp430x14x.h>
#include"stdio.h"
#include"string.h"
#include"usart1.h"
#define SYS0x01
#define Cre0x02
#defineOpen 0x06
#define Wri0x05
#define Sav0x04
#defineBUSY_SD (P4IN&BIT1)== BIT1
voidSYS_R();//读取系统状态
voidsave_file();//保存文件
//向SD卡发送数据
voidSto_SD_cmd(unsigned char command/*命令字*/,unsigned int number/*数据长度*/,unsignedchar *date/*待发送数据*/);
voidSto_SD_data(unsigned char command/*命令字*/,unsigned int number/*数据长度*/,unsignedlong int addr/*4个字节的地址*/,unsignedchar *date/*待发送数据*/);
voidSetup_uart1();
ucharFileName[]={"11112222.txt"}; //要建立的文件名
constuchar SYS_state[6]={0x55,0xAA,0x01,0x00,0x00,0x01};//获取系统状态
constuchar  Cre_files[19]={0x55,0xAA,0x02,0x0D,0x00,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x2E,0x74,0x78,0x74,0x00,0x41};
constuchar Open_files[19]={0x55,0xAA,0x06,0x0D,0x00,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x2E,0x74,0x78,0x74,0x00,0x45};
constuchar  Wri_file[19]={0x55,0xAA,0x05,0x0D,0x00,0x00,0x00,0x00,0x00,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0xef,};
constuchar Sav_files[6]={0x55,0xAA,0x04,0x00,0x00,0x04};
uchar  Temp_data[50]={0};
ucharDATE_SEND[] = {"09-08-07 25 55 878"};
voiddelay(unsigned long int j)
{
  unsigned long int i ;
  for(i=0;i<j;i++);
}
//*************************************************************************
//                    系统时钟初始化
//*************************************************************************
/*voidClock_Init()
{
  uchar i;
  BCSCTL1&=~XT2OFF;                 //打开XT振荡器
  BCSCTL2|=SELM1+SELS;              //MCLK为8MHZ,SMCLK为8MHZ
  do{
    IFG1&=~OFIFG;                   //清除震荡标志
    for(i=0;i<100;i++)
    _NOP();                      //延时等待
  }
  while((IFG1&OFIFG)!=0);           //如果标志为1,则继续循环等待
  IFG1&=~OFIFG;
}*/
voidmain(void)
{
  //Clock_Init();
  uint num=0;
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P4DIR &=~ BIT1;
  P4SEL &=~ BIT1+BIT0;
  P4DIR |= BIT0;   
  P4OUT |= BIT0;
  P2SEL = 0x00;     //P2普通I/O
  P2DIR = 0xFF;     //P2输出
  delay(32768); //预热1S
  delay(32768); //预热1S
  delay(32768); //预热1S
  //Setup_uart0();
  UART0_Init();
  Setup_uart1();
  _EINT();
  while(1)
  {
  //①获取系统状态       ⑥⑦⑧⑨
//----------------------------------------------------------------------------
  SYS_R();//读取系统状态
  while(BUSY_SD);
  //②创建文件
//----------------------------------------------------------------------------
  //memcpy(Temp_data,Cre_files,19);
  //uart_0(19,Temp_data);
  Sto_SD_cmd(Cre,12,FileName);
  //while(BUSY_SD);
  //delay(8000);
  //③打开文件
//----------------------------------------------------------------------------
  //memcpy(Temp_data,Open_files,19);
  //uart_0(19,Temp_data);
  Sto_SD_cmd(Open,12,FileName);
  //while(BUSY_SD);
  //④写入文件
    //----------------------------------------------------------------------------
    //memcpy(Temp_data,Wri_file,19);
    //uart_0(19,Temp_data);
   for(num=0;num<10;num++)
   {
    P2OUT=0x00;
    end_rec=1;
    while(end_rec);
    delay(32768);
    Sto_SD_data(Wri,67,0xffffffff,Gps_Data);
    //while(BUSY_SD);
    while(BUSY_SD);
    P2OUT=0xFF;
    delay(32768);
   }
  //delay(8000);
  //⑤保存文件
//----------------------------------------------------------------------------
  save_file();//保存文件
  while(BUSY_SD);
  for (;;)
  {
    delay(65535);
    P1OUT ^= BIT0;
  }
  }
}
voidSetup_uart1()
{
  P3SEL |= 0xf0;                            // P3.6,7 = USART1TXD/RXD
  ME2 |= UTXE1 + URXE1;                     // Enable USART1 TXD/RXD
  UCTL1 |= CHAR;                            // 8-bit character
  UTCTL1 |= SSEL0;                          // UCLK = ACLK
  UBR01 = 0x03;                             // 32k/9600 - 3.41
  UBR11 = 0x00;                             //
  UMCTL1 = 0x4A;                            // Modulation
  //U1BR1=0x03;                //辅助软件计算波特率
  //U1BR0=0x41;              
  //U1MCTL=0x00;               //波特率9600bps
  UCTL1 &= ~SWRST;                          // Initialize USARTstate machine
  //IE2 |= URXIE1;                            // Enable USART1 RXinterrupt
}
voiduart_1(int wei,unsigned char *date)
{
   int i=0;
   while(i<wei)
   {
      while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
      TXBUF1 = date[ i];
      //delay(100);
      i++;
   }
}
#pragmavector=UART1RX_VECTOR
__interruptvoid usart1_rx (void)
{
  //while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  //P2OUT = RXBUF1;                          // RXBUF1 to TXBUF1
}

//向SD卡发送命令
voidSto_SD_cmd(unsigned char command/*命令字*/,unsigned int number/*数据长度*/,unsignedchar *date/*待发送数据*/)
{
  unsigned int i=0;
  unsigned char CRC=0;
  //发送报文头 55 aa
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  TXBUF1 = 0x55;
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  TXBUF1 = 0xaa;
  //发送命令字
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  TXBUF1 = command;
  CRC += command;
  //发送数据长度
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  TXBUF1 = number%256;
  CRC += (number%256);
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  TXBUF1 = number/256;
  CRC += (number/256);
  i=0;
  //发送数据--串口0
  while(i<number)
  {
     while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
     TXBUF1 = date[ i];
     CRC += date[ i];
     delay(150);
     i++;
  }
  //发送校验和
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  TXBUF1 = CRC;
}
//向SD卡发送数据
voidSto_SD_data(unsigned char command/*命令字*/,unsigned int number/*数据长度*/,unsignedlong int addr/*4个字节的地址*/,unsignedchar *date/*待发送数据*/)
{
  unsigned int i=0;
  unsigned char CRC=0;
  //发送报文头 55 aa
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  TXBUF1 = 0x55;
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  TXBUF1 = 0xaa;
  //发送命令字
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  TXBUF1 = command;
  CRC += command;
  //发送数据长度
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  TXBUF1 = number%256;
  CRC += (number%256);
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  TXBUF1 = number/256;
  CRC += (number/256);
  //发送地址
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  TXBUF1 = addr%256;
  CRC += (addr%256);
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  TXBUF1 = (addr/256)%256;
  CRC += (addr/256)%256;
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  TXBUF1 = ((addr/256)/256)%256;
  CRC += ((addr/256)/256)%256;
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  TXBUF1 = ((addr/256)/256)/256;
  CRC += ((addr/256)/256)/256;
  i=0;
  //发送数据--串口0
  while(i<number-4)
  {
     while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
     TXBUF1 = date[ i];
     CRC += date[ i];
     delay(100);
     i++;
  }
  //发送校验和
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  TXBUF1 = CRC;
}
voidSYS_R()//读取系统状态
{
  memcpy(Temp_data,SYS_state,6);
  uart_1(6,Temp_data);
}
voidsave_file()//保存文件
{
  memcpy(Temp_data,Sav_files,6);
  uart_1(6,Temp_data);
}
回复

使用道具 举报

ID:371527 发表于 2018-7-14 17:29 | 显示全部楼层
很好的论文设计资料,不过就是稳压采用7805的功耗大,不实用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表