目 录
前言
GPS公交自动包装系统集定位技术、语音报站、液晶显示于一体,能够对车辆进行实时定位、自动报站,在保障车辆安全和提高效率等方面发挥着巨大作用。现在所说的公交自动报站系统一般都基于GPS定位技术。GPS 定位系统主要有GPS接收器, SPCE061A为核心的控制器组成。在卫星定位的基础上,公交车可以实现进出站时的自动报站,方便乘客与司机。
GPS导航系统是以全球24颗定位人造卫星为基础,向全球各地全天候地提供三维速度、三维位置等信息的一种无线电导航定位系统。它主要是由三部分构成,一是地面控制部分,包括主控站、地面天线、监测站及通讯辅助系统等设施。二是空间部分,由24颗定位卫星组成,分别分布在6个倾斜的轨道平面。三是用户端部分,包括天线及GPS接收器两部分。现在有些民用的定位精度甚至可以达到10米内。卫星导航技术的发展趋势主要有三个方面的表现:一是卫星导航可多系统并存,这样使系统可用性得到了提高,应用领域将会更广阔;二是多元组合导航技术一步步得到推广应用,主要有GPS与移动通信基站定位、航位推算技术、陀螺等的组合应用;三是无线通信与卫星导航等其它技术互相结合,如将GPS接收机嵌入到蜂窝电话、PDA、便携式PC和手表等通信、安全和消费类等电子产品中,这样本上促进着IT技术的整体发展。
从前,国内城市公交系统采用过工干预的电脑报站器。必须根据运营线路提前设置上、下行线路;公交车司机在驾驶的同时,当快到站时,需要手动按下相应报站按键。而进站时,由于人流较多而使司机工作受影响,导致漏报站、错报站可能偶有发生,进而影响到公交服务质量,而且潜伏着很大的交通隐患。因此,这里提出一种基于GPS卫星定位的全自动公交语言报站器的设计方案,该方案采GPS全球定位系统,避免了人工干预,当车辆快到车站时可全自动实现语音报站。
GPS模块接收到所选卫星发来的导航信息和星钟校正参数的时间信息,如此计算出车辆当前的经纬度坐标信息。将此坐标信息与存储在单片机中的车站的经纬度坐标信息比对,就可查得车站站名信息,由语音系统播报即可。
该系统通过实时对GPS模块输出数据采集,并根据得到的经纬度信息判断公交车当前是否到达预设的各个站点。当到达既定的站点时通过语音芯片实时播报站点信息,并通过LCD显示站名和当前经纬度。本系统的优越性主要体现在通过GPS对公交车进行实时定位,无需人工干预,便可准确无误的进行自动报站,以实现朽能化和高可靠性。用于公交车站台信息的自动播报,无需人工干预便可准确无误的进行自动报站。
此系统硬件主要由单片机、电源、GPS接收器、液晶模块等构成,主要是解决各模块间的通信问题,实现单片机、GPS接收器、液晶之间的互相通讯,从而完成GPS定位及自动语音报站。简要过程为:车载GPS接收机接收定位卫星发来的定位数据,并根据从三颗以上不同卫星发来的数据计算出自身所处地理位置的经纬度,之后将数据通过串口传递给MCU。然后MCU将经纬度数据与存储的公交站点经纬度数据进行比较。系统方案选择主要涉及以下几个方面的内容:
(1) 系统供电电源选择
(2) 控制器的选择
(3) 定位装置GPS选择
(4) 显示部分即液晶屏选择
1.1 系统供电电源选择
方案一:采用普通降压芯片LM7805。
LM7805系列三端稳压电源芯片,电路内部局有过流、过热及调整管的保护电路,并且组成稳压电源所需的外围元件极少,使用起来不但方便,而且价格便宜。可调线性稳压电源多采用LM318进行电平转换。但是由于线性稳压电源芯片具有效率比较低等缺点,所以本系统未采用。
方案二:采用开关稳压电源芯片LM2596。
LM1117是National Semiconductor Corporation(国家半导体)生产的电源芯片,LM2596是MOTORALA公司生产的开关稳压电源芯片芯片。LM2596输入电压范围为6V-30V,输出电压可调范围为1.23---20V。输出电流可达3A。内部振荡器产生52KHZ的固定频率;过热和过流保护;可用TTL电平关闭输出,低功耗待机模式,典型待机电流为50u A,BUCK式降压器,较高的转换频率;可实现Buck-Boost正—负电压转换器LM1117和LM2596符合系统的要求,因此选择此芯片为电压转换芯片。
1.2 控制器选择
方案一:采用可编程逻辑器件CPLD作为控制器。
CPLD可以实现各种复杂的逻辑功能、系统处理速度快、IO资源丰富,可由用户根据需要生成特定的电路结构,完成一定的功能。CPLD适合作为大规模控制系统的控制核心。但本系统不需要复杂的逻辑功能。从器件功能利用率及经济的角度考虑,不采用此方案。
方案二:使用8位单片机AT89C52。
AT89C52是一种低电压、高性能的CMOS8位单片机,本身带有8字节可编程和擦除的只读存储器Flash。该器件采用了ATMEL公司的高密度、非易失性存储技术,并且跟符合工业标准的80C51和80C52产品的指令系统和引脚兼容。片内Flash允许程序存储器在系统重复编程,或着通过传统的非易失性存储器编程器重复编程。通用8位中央处理器和Flash存储单元在片内的结合使Atmel公司的AT89C52成为一款功能强大的单片机,因此它能对许多嵌入式控制应用提供极为灵活和廉价的解决方式。AT89C52提供了以下的标准功能:8K字节闪速存储器,256字节RAM,32个I/O口线, 3个16位定时/计数器,一个全双工串行口,一个6向量两级中断结构,片内振荡器和时钟电路。但系统控制器至少需要有两个串口,而51、52单片机只有一个串口,故也放弃此方案。
方案三:采用凌阳SPCE061A单片机。
SPCE061A 是由凌阳科技推出的一个16 位结构的微控制器。考虑到用户在存储器资源方面较少的资源需求以及便于程序调试等功能,SPCE061A 里只内嵌32K字的闪存FLASH ROM。较高的处理速度使μ’nSP™能够非常容易地、快速地处理复杂的数字信号,适用在数字语音识别应用领域。SPCE061A 是数字声音和语音识别产品的一种最经济的应用。凌阳的SPCE061A是16位单片机,具有DSP功能,有很强的信息处理能力,最高时钟频率可达到49MHz,具备运算速度高的优势等等,这些都无疑为语音的播放、录放、合成及辨识提供了条件。因此选用凌阳SPCE061A单片机作为系统的主控芯片。
灵活、高效是μ’nSP™指令系统的显著特点。μ’nSP™的汇编指令只有单字和双字这两种,其结构紧凑,并且对高级语言中C语言的支持提供最大限度地考虑。另外,在需要寻址的各类指令中的每一个指令都可通过与6种寻址方式的组合而形成一个指令子集,目的是为增强指令应用的实用性和灵活性。而复合式的「移位算逻操作」指令允许操作数在经过ALU的算逻操作前可以先由移位器进行各种移位处理,然后再经由ALU的算逻运算操作。此外,算逻运算类指令中的16位×16位的乘法运算指令(Mul)和内积运算指令(Muls),又提供了对数字信号处理应用的支持。
1.3 定位装置GPS的选择
方案一:选用测地型接收机作为定位装置。
测地型接收机主要应用于精密大地测量和精密工程测量。这类仪器主要采用载波相位观测值进行相对定位,定位精度高。仪器结构复杂,价格较贵,不宜采用,故舍弃。
方案二:利用授时型接收机。
这类接收机主要利用GPS卫星提供的高精度时间标准进行授时,常常用于天文台及无线电通讯中时间同步。对于本设计不适用,放弃此方案。
方案三:采用导航型接收机。
此类型接收机主要运用于运动载体的导航,它可以实时的给出载体的位置和速度。这类接收机一般采用C/A码伪距测量,单点实时定位精度较低一般为±25m,有SA影响时为±100m。这类接收机应用广泛,价格便宜,适合系统设计,由于是对车辆定位,故选用车载型GPS接收器。在本项目中使用基于SiRF star III型GPS模块,采用+5V供电,TTL电平自动输出NMEA 0183 3.0格式(ASCII字符型)语句。
1.4 显示器件选择
本项目采用C系列液晶,C系列中文模块可以显示字母、数字符号、中文字型及图形,具有绘图及文字画面混合显示功能。提供三种控制接口,分别是8位微处理器接口,4位微处理器接口及串行接口(OCMJ4X16A/B无串行接口)。所有的功能,包含显示RAM,字型产生器,都包含在一个芯片里面,因此只要一个最小的微处理系统,就可以方便操作模块。显示数据RAM可以提供64x2 个字节的空间,最多能控制4 行16 字(64 个字)的中文字型显示。内置2M-位中文字型ROM (CGROM) 总共能够提供8192 个中文字型(16x16 点阵),16K-位半宽字型ROM (HCGROM) ,总共能够提供64 x 16-位字型产生RAM (CGRAM),126 个符号字型(16x8 点阵),另外绘图显示画面还提供了一个64x256点的绘图区域(GDRAM),可以实现和文字画面混和显示。
2.1 总体设计
此系统主要由凌阳的SPCE061A单片机、GPS接收器、C系列中文显示液晶、SPR模组等构成。主要实现卫星定位导航,即在彩屏上显示导航路径及当前位置,系统的总体框图如图2.1所示。
- GPS接收模块:接收卫星发来的定位数据,并根据从三颗以上不同卫星发来的数据计算出自身所处地理位置的经纬度。并将经纬度信息通过串口传送给单片机。
- 主控制模块:将从GPS接收器传来的数据进行运算,将经纬度数据与存储的公交站点经纬度数据进行比较得出当前的位置。读取SPR模组存储的语音资源并实现语音报站,将位置信息通过液晶显示出来。
整个系统的设计思想是将显示和计算分开,不仅在硬件上是这样,在软件上也把显示函数和计算函数分开,每块程序可以调用显示函数,显示函数根据当前状态的不同显示不同的内容,并且这样做会给将来做下一个项目时带来很大方便(可以直接将源文件包含进去,需要时直接调用源文件中的函数)。
- 液晶显示模块:液晶显示模块要求带有中文显示功能,显示当前的位置信息。站点名称及经纬度坐标。
- SPR模组:存贮音频文件供单片机读取。考虑到语音文件的存储,SPR模组可用来存储体积较大语音文件。SPR模组是针对凌阳科技公司的存储器芯片SPR4096/SPR1024开发的简易烧写器。
由于单片机带有10位双通道DAC音频输出能力。因此不需要额外的语音模块。
2.2 各模块设计
2.2.1 电源设计
单片机的工作电压范围2.6-3.6V,与GPS及液晶屏并不相同。
因为系统电源需要两个电压,单片机需3.3V供电,另外GPS及液晶屏需5V供电,因此采用LM2596芯片稳出5V电压,然后用AS1117模块将5V电压转换为3.3V电压。图2.2、图2.3、图2.4分别为电源芯片原理图及部分布线图。
2.2.2 微控制器
- SPCE061A 是由凌阳科技推出的一个16 位结构的微控制器。考虑到用户在存储器资源方面较少的资源需求以及便于程序调试等功能,SPCE061A 里只内嵌32K字的闪存FLASH ROM。较高的处理速度使得μ’nSP™能够非常容易地、快速地处理复杂的数字信号,适用在数字语音识别应用领域。
SPCE061A 在工作电压范围内(2.6V~3.6V)的工作速度0.32MHz~49.152MHz,较高的工作速度使其应用领域更加拓宽。2K字SRAM和32K字闪存ROM仅仅占了一页存储空间,32位可编程的多功能I/O 端口;两个16位定时器/计数器;低电压复位/监测功能;32768Hz 实时时钟;双通道10 位DAC 方式的音频输出功能;8通道10位模-数转换输入功能并具有内置自动增益控制功能的麦克风输入方式……。SPCE061A 是数字声音和语音识别产品的一种最经济的应用。
- 结构概览
SPCE061A的结构如图2.5所示:
- SPCE061A共有84个引脚,封装形式为PLCC84,它的排列如图2.6所示,
- SPCE061A的性能参数如下:
• 16 位μ’nSP™微处理器;
• 工作电压:VDD 为2.6~3.6V(cpu);VDDH 为VDD~5.5V(I/O);
• CPU 时钟:0.32MHz~49.152MHz ;
• 32768Hz 实时时钟;
• 内置32K 闪存ROM;
• 内置2K 字SRAM;
• 晶体振荡器;
• 可编程音频处理;
• 系统处于备用状态下(时钟处于停止状态),耗电小于2μA,3.6V;
• 2 个10 位DAC(数-模转换)输出通道;
• 2 个16 位可编程定时器/计数器(可自动预置初始计数值);
• 32 位通用可编程输入/输出端口;
• 14 个中断源可来自定时器A / B,时基,2 个外部时钟源输入,键唤醒;
• 使用凌阳音频编码SACM_S240 方式(2.4K 位/秒),能容纳210 秒的语音数据;
• 具备触键唤醒的功能;
• 锁相环PLL 振荡器提供系统时钟信号;
• 7 通道10 位电压模-数转换器(ADC)和单通道声音模-数转换器
• 具备串行设备接口;
• 声音模-数转换器输入通道内置麦克风放大器和自动增益控制(AGC)功能;
- SPCE061A最小系统
最小系统接线如图2.7所示,在OSC0、OSC1端接上晶振及谐振电容,只要在锁相环压控振荡器的阻容输入VCP端接上相应的电容电阻后即可工作。其它不用的电源端和地端需要接上0.1μF的去藕电容提高抗干扰能力。
- 指令系统
指令是CPU执行某种操作的命令。微处理器(MPU)或微控制器(MCU)所能够识别全部指令的集合被称为指令系统或指令集。指令系统是制造厂家在当初设计CPU时就赋予它的功能,要求用户必须正确的书写和使用指令。因此学习和掌握指令的功能与应用是非常重要的,是程序设计的基础。
μ’nSP™单片机指令按其功能可划分为:
- 数据传送指令,包括立即数到寄存器、寄存器到存储器、存储器到寄存器的数据传送操作;寄存器到寄存器
- 算术运算,包括加、减、乘运算;
- 逻辑运算,包括与、或、异或、测试、移位等操作;
- 转移指令,包括条件转移、无条件转移、中断返回、子程序调用等操作;
- 控制指令,如开中断、关中断、FIR滤波器的数据的自由移动等操作。
表2.1 符号约定
R1,R2,R3,R4,R5(BP) | 通用寄存器 |
PC | 程序计数器 |
CS,DS | SR 寄存器中的代码段选择字段和数据段选择字段 |
SR | 段寄存器,其中 BIT15~BIT10 对应 DS;BIT9~BIT6 对应 NZSC 标志 位; BIT5~BIT0 对应 CS |
IM6 | 6 位(BIT)的立即数; |
IM16 | 16 位(BIT)的立即数; |
A6 | 6 位的地址码; |
A16 | 16 位地址码; |
Rd | 目的(destination)寄存器或存储器指针 |
Rs | 源寄存器或存储器指针; |
→ | 数据传送符号; |
MR | 由 R4,R3 组成的 32 位结果寄存器(R4 为高字节,R3 为低字节) |
&,|,^,~ | 逻辑与记号,逻辑或记号,逻辑异或记号,逻辑取反记号; |
{} | 可选项 |
[] | 寄存器间接寻址标志 |
++,- - | 指针单位字增量,字减量 |
ss,us | 两个有符号数之间的操作,无符号数与有符号数之间的操作; |
Label | 程序标号; |
FIR | Finite Impulse Response(有限冲击响应),数字信号处理中的一种具有 线性相位及任意幅度特性的数字滤波器算法 |
N | 负标志,N=0 时表示运算结果最高有效位为 0,N=1 表示最高有效位 为 1; |
Z | 零标志,Z=0 表示运算结果不为 0,Z=1 表示运算结果为 0; |
S | 符号标志,S=0 表示结果不为负,S=1 表示结果为负数(2 的补数), 对于有符号运算,16 位数表示的范围-32768~32768,若结果小于零, 则 S=1; |
C | 进位标志,C=0 表示运算过程中无进位或借位产生,C=1 表示有进位 或借位产生。 |
// | 注释符 |
按寻址方式划分,可分为以下几类:
- 立即数寻址 这种寻址方式是操作数以立即数的形式出现,例如:R1 = 0x1000,是把16进制数0x1000赋给寄存器R1。
- 存储器绝对寻址 这种寻址方式是通过存储器地址来访问存储器中的数据,例如:R1 = [0x1000],访问0x1000单元的数据。
- 寄存器寻址 这种寻址方式是操作数在寄存器中,例如:R1 = R2,则是进行把寄存器R2 中的数据赋给寄存器R1的动作。
- 寄存器间接寻址 这种寻址方式是操作数的地址由寄存器给出,例如:R1 = [BP],是进行把BP指向的内存单元的数据送寄存器R1的动作。
- 变址寻址 这种寻址方式下,操作数的地址由基址和偏移量共同给出的,例如:R1 = [BP+0x34]
- 中断系统
为处理器对外界异步事件具有处理能力而设置了中断系统,计算机的发展和应用因中断技术的引入大大地推进一步。因此中断功能的强弱是衡量一台计算机性能的重要指标。
(1)中断
中断是指计算机在执行某一程序的过程中,由于计算机系统内、外的某种原因,而必须终止原程序的执行,转去执行相应的处理程序,待处理结束之后,再回来继续执行被终止的原程序过程。
中断技术能实现CPU与外部设备的并行工作,提高CPU的利用率以及数据的输入/输出效率;中断技术也能对计算机运行过程中突然发生的故障做到及时发现并进行自动处理如:硬件故障、运算错误及程序故障等;中断技术还能使我们通过键盘向计算机发出请求,随时对运行中的计算机进行干预,而不用先停机,然后再重新开机等等。
(2)中断源
中断源是指在计算机系统中向CPU发出中断请求的来源,中断源可以人为设定也可以是为响应突发性随机事件而设置。如定时器中断,它的中断源即是定时器。
(3)中断优先级
在实际的系统中,由于往往会有多个中断源,且中断申请是随机的,而且有时可能会有多个中断源同时提出中断申请的情况,但是CPU一次只能响应一个中断源发出的中断请求,那么这时CPU应响应那个中断请求?这就需要软件或硬件根据中断源工作性质的轻重缓急来给它们安排一个优先顺序,这就是所谓的优先级排队。中断优先级越高,则响应优先权就越高。当CPU正执行中断服务程序时,如果又有中断优先级更高的中断申请产生,而且CPU能够暂停对原来的中断处理程序,那么CPU就转而去处理优先级更高的中断请求,处理完毕之后,再重新回到原低级中断处理程序,这一整个过程称为中断嵌套。具有这种功能的中断系统称之为多级中断系统;没有中断嵌套功能的则称之为单级中断系统
(4)中断响应的过程
在每条指令结束后系统都自动检测中断请求信号,如果有中断请求,相应的中断允许位为真(允许中断),相应的总中断允许位为真(允许中断),则响应中断。
保护现场,CPU一旦响应中断,中断系统会自动的保存当前的PC和SR寄存器(入栈)进入中断服务程序地址入口,中断服务程序中可以通过入栈保护原程序中用到的数据,保护现场前,一般要关中断以防止现场被破坏。保护现场一般是将堆栈指令将原程序中用到的寄存器推入堆栈,在保护现场之后要开中断,以响应更高优先级的中断申请。
中断服务,即为相应的中断源服务。
清相应的中断请求标志位,以免CPU总是执行该中断。
恢复现场,利用堆栈指令将保护在堆栈中的数据弹出来,在恢复现场前需要关中断,来防止现场被破坏,而在恢复现场后应及时开中断。
返回,此时CPU将PC指针和SR内容出栈恢复断点,从而使CPU继续执行刚才被中断的程序。
中断技术主要用于单片机实时控制。所谓实时控制,就是要求单片机能及时地响应被控对象提出的分析、计算和控制等请求,使被控对象保持在最佳工作状态,以达到预定的控制效果。由于这些控制参量的请求都是随机发出的,而且要求单片机必须作出快速响应并及时处理,对此,只有靠中断技术才能实现。
- 凌阳单片机语音的播放、录制、合成和辨识
凌阳的SPCE061A 是16 位单片机,具有DSP 功能,具有很强的信息处理能力,最高时钟频率能够达到49MHz,具有运算速度高的优势等等,这些都无疑为语音的播放、录放、辨识及合成提供了条件。凌阳压缩算法中SACM_A2000、SACM_S480、SACM_S240 主要是用来实现放音,可以用于语音提示,而DVR 则主要用来录放音。对于音乐合成MS01,该算法较繁琐,而且需要具备音乐理论、配器法及和声学知识。对于语音辨识主要有以下两种:
1) 特定发音人识别SD(Speaker Dependent)
2) 非特定发音人识别SI(Speaker Independent)
2.2.3 GPS接收器
- 全球卫星定位系统GPS由3个基本部分组成:太空部分、监控部分和用户部分。
太空部分包括24颗可操作的卫星,它们以一定倾角分布在地球上空20~200km的6个轨道面上,运行周期为12个恒星时,这个分布状态使得地球上任意位置任意时刻都可以同时接收至少6颗卫星定位信息,这些卫星不断给全球用户发送位置和时间等数据。
监控部分由若干个跟踪站组成的监控系统构成,这些跟踪站能观测GPS数据并计算改正参数注入到卫星中去,能对卫星进行控制等作用。
用户部分的GPS接受机接受卫星信号,通过数据处理软件及相应的显示设备即可进行定位显示。
- GPS系统的基本定位原理
GPS系统的基本原理是先测量出已知位置的卫星与用户接收机之间的距离,然后综合4颗或4颗以上卫星的数据就可测出接收机的具体位置。要完成这一工作,需要根据星载时钟所记录的时间查出卫星在卫星星历中的位置要。而用户到卫星的距离则通过纪录卫星信号从发射到用户接受所经历的时间,再将其乘以光速得到,然而这一距离并不就是用户与卫星之间的真实距离,而是伪距(PR):当GPS卫星正常工作时,会不停地用1和0二进制码元组成的伪随机码(简称伪码)发射导航电文。GPS系统使用的伪码一共有两种,分别是军用的P(Y)码和民用的C/A码。P码频 率10.23MHz,重复周期266.4天,码间距0.1微秒,相当于30m;C/A码以1.023MHz,的频率重复周期一毫秒,码间距1微秒,相当于300m。而Y码是在P码的基础上形成的,具有更加优秀的保密性。导航电文包括卫星星历、时钟改正、大气折射修正、电离层时延修正、工作状况等信息。它是从卫星信号中解调制出来,以50b/s调制在载频上发射的。导航电文每个主帧中包含每帧长6s的5个子帧。前三帧各包含10个字码;每三十秒重复一次,每小时更新一次。后两帧共有15000b。导航电文中的内容主要有遥测码、转换码、第1、2、3数据块, 其中最重要的则为星历数据。当用户接受到导航电文时,先会提取出卫星时间并将其与自己的时钟做对以此得知卫星与用户的距离,然后利用导航电文中的卫星星历数据来计算出卫星发射电文时所处位置,便可得知用户在WGS-84大地坐标系中的位置速度等信息。
每颗GPS卫星时刻发布其位置和时间数据信号,用户接收机可以测量每颗卫星信号到接收机的时间延迟,根据信号传输的速度就可以计算出接收机到不同卫星的距离。同时收集到至少4颗卫星的数据时,就可以算出三维坐标、速度和时间。
- GPS接收设备分类
GPS接收机一般硬件和软件两大部分其中硬件又包括:主机、电源和天线三个部分;
按照用途分有:导航型、测地型和授时型
按照携带形式分有:手持式、车载式等
按照载波频率分有:单频接收机和双频接收机
按照工作原理分有:码接收机和无码接收机
- GPS结构图
GPS内部模块结构见图2.9
- 在本项目中使用基于SiRF star III型GPS模块,采用+5V供电,TTL电平自动输出NMEA 0183 3.0格式(ASCII字符型)语句,其主要参数如下:
定位精度:水平±1米内(正常行使状态下),速度:0.01 米/秒,方向:0.01度,高度±3米内
速度最高:<=514 米/秒 (1852公里/小时)
海拨高度最高:<=23,600米
定位速度:0.1秒/重捕,<1秒/热启动,35秒/温启动,35秒/冷启动。
灵敏度:-159dBm(跟踪状态)
通信波特率默认值为9600,1个起始位,8个数据位,1个停止位,无奇偶校验。通常使用NMEA-0183格式输出,数据代码为ASCII码字符。由于该格式为ASCII码字符串,比较直观和易于处理,在许多高级语言中都可以直接进行判别、分离。
2.2.4 SPR模组
由于计价器兼有语音播报到站信息功能,使用SPR模组存储体积较大语音文件。SPR模组是针对凌阳科技公司的存储器芯片SPR4096/SPR1024开发的简易烧写器。该烧写器配合PC机ResWriter工具,通过EZ-Probe下载线,完成对SPR4096/1024存储器芯片的擦除、写入、校验等功能。并且在SPR模组上留有与SPCE061A单片机的接口,可以很容易地实现SPR模组与61板连接。
SPR模组预留两个接口,一个接口是是10PIN的排线接口,主要提供电源以及与SPCE061A连接使用,另一个EZ-Probe,这是在使用ResWriter工具对SPR4096/1024进行烧写时连接使用的。用户请注意,SPR模组电路虽然对SPR4096和SPR1024支持,但是只能同时对其中某一种芯片进行烧写。SPR模组有两种基本的配置,一种为电路板加SPR4096芯片,另一种为电路板加SPR1024芯片,而且必须要配合EZ-Probe下载线使用。
使用SPR模组,有以下注意事项:
- SPR模组使用3.3V电源供电,注意不要使电源与地接反;
- 模组必需配合EZ-Probe下载线使用;
- 在使用ResWriter工具对SPR4096/SPR1024芯片进行烧写时需要对SPR模组供电;
- 不能同时对SPR4096与SPR1024进行烧写,即模组上不能同时插入SPR4096与SPR1024。例如,在烧写SPR4096芯片时,只需将该芯片插入到模组上即可(切记不要同时插入SPR1024芯片)。
2.2.5 C系列中文液晶模块
C系列中文模块可以显示数字符号、字母、中文字型及图形,具有绘图及文字画面混合显示功能。提供三种控制接口,分别是8位微处理器接口,4位微处理器接口及串行接口(OCMJ4X16A/B无串行接口)。所有的功能,字型产生器,包含显示RAM,都包含在一个芯片里面,只要一个最小的微处理系统,就可以方便操作模块。内置2M-位中文字型ROM (CGROM) 总共提供8192 个中文字型(16x16 点阵),16K-位半宽字型ROM (HCGROM) 总共提供64 x 16-位字型产生RAM (CGRAM),126 个符号字型(16x8 点阵),另外绘图显示画面提供一个64x256点的绘图区域(GDRAM),可以和文字画面混和显示。提供多功能指令:光标显示/隐藏(Cursor on/off)、显示字符闪烁(Display character blink)、光标移位(Cursor shift)、显示移位(Display shift)、画面清除(Display clear)、光标归位(Return home)、显示打开/关闭(Display on/off)、垂直画面卷动(Vertical line scroll)、反白显示(By_line reverse display)、待命模式(Standbymode)。
获取了经纬度数据,得到位置信息后,可在12864C型液晶中文显示模块显示,单片机通过串口方式向它发送控制指令,液晶显示模块上电时需通过软件初始化并配置相关参数。
3.1.1 GPS绝对定位
绝对定位也称单点定位,指的是在协议地球坐标系中,直接确定观测站相对于坐标原点(地球质心)绝对坐标的一种方法。
“绝对”一词主要是为了区别相对定位,绝对定位和相对定位在观测方式、数据处理、定位精度以及应用范围等方面均有原则区别。
绝对定位的基本原理:以GPS卫星和用户接收机天线之间的距离(或距离差)观测量为基础,根据已知的卫星瞬时坐标,来确定接收机天线所对应的点位,即观测站的位置。GPS绝对定位方法的实质是测量学中的空间距离后方交会。原则上观测站位于以3颗卫星为球心,相应距离为半径的球与观测站所在平面交线的交点上。
由于GPS采用单程测距原理,实际观测的站星距离均含有卫星钟和接收机钟同步差的影响(伪距),卫星钟差可根据导航电文中给出的有关钟差参数加以修正,而接收机的钟差一般难以预料。通常将其作为一个未知参数,在数据处理中与观测站坐标一并求解。一个观测站实时求解4个未知数,至少需要4个同步伪距观测值,即4颗卫星。
绝对定位可根据天线所处的状态分为动态绝对定位和静态绝对定位。无论动态还是静态,所依据的观测量都是所测的站星伪距。根据观测量的性质,伪距有测码伪距和测相伪距,绝对定位相应分为测码伪距绝对定位和测相伪距绝对定位。
3.1.2 GPS定位相关概念
在本系统中定位是指MCU从GPS模块发送过来的数据中提取出经纬度信息,并根据两个坐标之间的换算从而得到位置信息,然后在液晶屏上显示具体位置。
根据国标,各级GPS相邻点间平均距离应符合规定的要求,而且相邻点最小距离可为平均距离的1/3—1/2倍;最大距离可为平均距离的2-3倍。
观测时段:测站上开始接收卫星信号到观测停止,连续工作的时问段简称时段。
同步观测:两台或两台以上接收机同时对同一组卫星进行的观测。
同步观测环:三台或三台以上接收机同步观测获得的基线向量所构成的闭合环,简称同步环。
独立基线:对干N台GPS接收机构成的同步观测环,有J条同步观测基线,其中独立基线数为N一1。独立基线之间没有相关性。
独立观测环:由独立观测所获得的基线向量构成的闭合环,简称独立环。
异步观测环:在构成多边形环路的所有基线向量中,只要有非同步观测基线向量,则该多边形环路叫异步观侧环,简称异步环。
非独立基线:除独立基线外的其他叫非独立基线,总基线数与独立基线之差为非独立基线数。
3.1.3 GPS接收器
实现公交自动报站就必须先要获得公交车的定位信息,使用GPS接收装置单片机发送定位信息,单片机接收GPS送来的经纬度信息,与预先存储的各站点坐标库相比较,当进入某一站的坐标范围,单片机控制产生一个触发信号,此时语音自动报出所到站点。
本文使用的GPS以NMEA-0183格式输出,数据代码为ASCII码字符。该格式比较直观和易于处理,通过程序进行判别、分离,可提取经度以及纬度信息。GPS发送的经纬度信息是将数字以ASCII码形式表示,ASCII码数字与实际相应数字具有一一对应的关系,这方便了我们通过简单的转换关系得到以数字形式表示的经纬度信息,从而利于在接下来的比较中只需进行简单的数值大小比较。
SiRF star Ⅲ型GPS模块可输出5句语句,分别是GPGSV,GPGGA,GPGSA,GPRMC,GPVTG。语句以标准的格式进行传输。不同的语句中传送不同的信息。每条语句以$开头,同一条语句中的不同信息则通过逗号(ASCII码形式)分开,一条语句往往包括时间、经纬度等数据,软件根据需要采集相应数据即可。
3.1.4 NMEA0183标准语句
-
- Global Positioning System Fix Data(GGA)GPS定位信息
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF>
<1> UTC时间,hhmmss(时分秒)格式
<2> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
<3> 纬度半球N(北半球)或S(南半球)
<4> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<5> 经度半球E(东经)或W(西经)
<6> GPS状态:0=未定位,1=非差分定位,2=差分定位,6=正在估算
<7> 正在使用解算位置的卫星数量(00~12)(前面的0也将被传输)
<8> HDOP水平精度因子(0.5~99.9)
<9> 海拔高度(-9999.9~99999.9)
<10> 地球椭球面相对大地水准面的高度
<11> 差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
<12> 差分站ID号0000~1023(前面的0也将被传输,如果不是差分定位将为空)
-
- GPS DOP and Active Satellites(GSA)当前卫星信息
$GPGSA,<1>,<2>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<4>,<5>,<6>*hh<CR><LF>
<1> 模式,M=手动,A=自动
<2> 定位类型,1=没有定位,2=2D定位,3=3D定位
<3> PRN码(伪随机噪声码),正在用于解算位置的卫星号(01~32,前面的0也将被传输)。
<4> PDOP位置精度因子(0.5~99.9)
<5> HDOP水平精度因子(0.5~99.9)
<6> VDOP垂直精度因子(0.5~99.9)
-
- GPS Satellites in View(GSV)可见卫星信息
$GPGSV,<1>,<2>,<3>,<4>,<5>,<6>,<7>,…<4>,<5>,<6>,<7>*hh<CR><LF>
<1> GSV语句的总数
<2> 本句GSV的编号
<3> 可见卫星的总数(00~12,前面的0也将被传输)
<4> PRN码(伪随机噪声码)(01~32,前面的0也将被传输)
<5> 卫星仰角(00~90度,前面的0也将被传输)
<6> 卫星方位角(000~359度,前面的0也将被传输)
<7> 信噪比(00~99dB,没有跟踪到卫星时为空,前面的0也将被传输)
注:<4>,<5>,<6>,<7>信息将按照每颗卫星进行循环显示,每条GSV语句最多可以显示4颗卫星的信息。其他卫星信息将在下一序列的NMEA0183语句中输出。
4. Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐定位信息
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>
<1> UTC时间,hhmmss(时分秒)格式
<2> 定位状态,A=有效定位,V=无效定位
<3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输
<4> 纬度半球N(北半球)或S(南半球)
<5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<6> 经度半球E(东经)或W(西经)
<7> 地面速率(000.0~999.9节,前面的0也将被传输)
<8> 地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)
<9> UTC日期,ddmmyy(日月年)格式
<10> 磁偏角(000.0~180.0度,前面的0也将被传输)
<11> 磁偏角方向,E(东)或W(西)
<12> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
- Track Made Good and Ground Speed(VTG)地面速度信息
$GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh<CR><LF>
<1> 以真北为参考基准的地面航向(000~359度,前面的0也将被传输)
<2> 以磁北为参考基准的地面航向(000~359度,前面的0也将被传输)
<3> 地面速率(000.0~999.9节,前面的0也将被传输)
<4> 地面速率(0000.0~1851.8公里/小时,前面的0也将被传输)
<5> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
- Geographic Position(GLL)定位地理信息
$GPGLL,<1>,<2>,<3>,<4>,<5>,<6>,<7>*hh<CR><LF>
<1> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
<2> 纬度半球N(北半球)或S(南半球)
<3> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<4> 经度半球E(东经)或W(西经)
<5> UTC时间,hhmmss(时分秒)格式
<6> 定位状态,A=有效定位,V=无效定位
<7> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
如实时接收GPRMC语句为:
$GPRMC,052635,A,3604.2405,N,12025.0738,E,0.00,0.00,150410,,,*62
这是一条GPS定位数据信息语句,意思为UTC时间为05时26分35秒,当前状态为定位状态,位置在北纬36度04.24005分,东经120度25.0738分,当前处于定位静止状态,故速度和航向为0,校验和为62H。
图3.1表示了程序如何控制从语句中提取出经纬度数据。
在软件设计中,GPRMC即可作为语句识别的ID,语句中各有效信息之间通过逗号隔开,在语句中位置确定,软件通过对接收的逗号计数以提取所需量。当程序识别出GPRMC语句后,允许接收标志置位,同时将逗号计数变量清零。此后每次接收到逗号该变量加1。GPRMC语句第3个逗号后面代表纬度数据,第5个逗号后面代表经度数据,所以当逗号计数到3时,允许接收纬度数据;逗号计数到5,则可接收经度数据。当接收到语句结束字符“*”时,则停止接收数据,相应计数器也清零,准备下次接收。
软件设计如下:
/*$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>
<1> UTC时间,hhmmss(时分秒)格式
<2> 定位状态,A=有效定位,V=无效定位
<3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输
<4> 纬度半球N(北半球)或S(南半球)
<5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<6> 经度半球E(东经)或W(西经)
<7> 地面速率(000.0~999.9节,前面的0也将被传输)
<8> 地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)
<9> UTC日期,ddmmyy(日月年)格式
<10> 磁偏角(000.0~180.0度,前面的0也将被传输)
<11> 磁偏角方向,E(东)或W(西)
<12> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)*/
#include"spce061a.h"
#include"lcd.h"
#define uchar unsigned char
#define uint unsigned int
uchar StrGpsWD[10][5]; //存放纬度数据;
uchar StrGpsJD[11][5]; //存放经度数据;
uint i,k,b;
uint Recflag; //记录标志;
uint IgpsWD; //纬度数据计数变量;
uint IgpsJD; //经度数据计数变量;
uint Numcoma; //逗号计数变量;
//void DisableALLOUT(); //禁用所有输出语句;
//void EnableGPRMC(); //使能$GPRMC输出语句;
void delay();
void dislpay1();
void main()
{ __asm("INT OFF");
*P_IOB_Attrib = 0x0480; //初始化IOB7、IOB10端口
*P_IOB_Dir = 0x0400;
*P_IOB_Data = 0x0000;
intial_IO_lcd();
init_lcd();
*P_UART_Command1 = 0x0020; //内部复位
*P_UART_BaudScalarLow = 0x0000; //设置波特率
*P_UART_BaudScalarHigh = 0x0005;
*P_UART_Command2 = 0x0080; //使能接收通道
delay(100);
*P_UART_Command1 = 0x0080; //使能接收中断
__asm("INT IRQ");
while(1)
{ display1(0x80,"纬度: ");
display1(0x88,"经度: ");
if(IgpsWD==10)
{ if(IgpsJD==11) //显示接收到的数据
{
display2(0x90, StrGpsWD[1],StrGpsWD[2]); // 纬度 strcat(s1,s2);连接字符串s1,s2
display2(0x91, StrGpsWD[3],StrGpsWD[4]);
display2(0x92, StrGpsWD[5],StrGpsWD[6]);
display2(0x93, StrGpsWD[7],StrGpsWD[8]);
display2(0x94, StrGpsWD[9]," ");
delay(100);
display2(0x98, StrGpsJD[1],StrGpsJD[2]); //经度
display2(0x99, StrGpsJD[3],StrGpsJD[4]);
display2(0x9a, StrGpsJD[5],StrGpsJD[6]);
display2(0x9b, StrGpsJD[7],StrGpsJD[8]);
display2(0x9c, StrGpsJD[9],StrGpsJD[10]);
}
delay(100);
*P_Watchdog_Clear = 0x0001;
}
} //串口接收中断
void IRQ7(void)__attribute__((ISR));
void IRQ7(void)
{ unsigned int ii;
ii=*P_UART_Command2;
ii&=0x0080;
if(ii==0x0080)
{
if(*P_UART_Data==0x52) //‘R’区分指令GPRMC
{
Recflag=1;
i=0;
IgpsWD=0;
IgpsJD=0;
Numcoma=0;
}
if(Recflag==1)
{
if(*P_UART_Data==0x2c) //检查逗号‘,’
Numcoma++;
if(Numcoma==3)
{
*StrGpsWD[IgpsWD]=*P_UART_Data;
IgpsWD++;
}
if(Numcoma==5)
{ *StrGpsJD[IgpsJD]=*P_UART_Data;
IgpsJD++;
}
if(*P_UART_Data==0x2a) //检查‘*’
{ *StrGpsWD[IgpsWD]='\0';
*StrGpsJD[IgpsJD]='\0';
Recflag=0;
IgpsWD=0;
IgpsJD=0;
Numcoma=0;
*P_UART_Command2=0x0000;
delay(500);
*P_UART_Command2=0x0080;
}
}
}}
//延时子程序
void delay(uint a)
{ while(a--)
*P_Watchdog_Clear = 0x0001;
}
分离提取得到的是分离的ASCII码型的字符串,无法直接用于车辆位置的判断。根据数字的ASCII码值对应表将它转化数字并整合成整型或者浮点型式数值,此时可方便地与站点坐标库进行简单的数值比较运算。
经纬度坐标的变化1秒约等于30米的距离,故设定以某站站牌为圆心,半径60米(即经纬度约2秒)内区域为该站坐标范围,当车驶入该圆形区域则产生到站信号;当车驶离该区域则产生出站信号,单片机发出声音信号,通过外接扬声器实现语音报站。
坐标比较程序:
pp=trs_data(StrGpsWD1);
qq=trs_data(StrGpsJD1); //转化为浮点型
while(TotalStop--)
{ //坐标比较
*P_Watchdog_Clear=0x0001;
if((fabs(pp-strWD[jj]))<=2)
{
if((fabs(qq-strJD[jj]))<=2)
flag_in=1; break;
}
}
...
3.2 液晶显示部分设计
3.2.1 C系列中文模块显示资料RAM
显示数据RAM 提供64x2 个字节的空间,最多可以控制4 行16 字(64 个字)的中文字型显示,当写入显示资料RAM时,可以分别显示CGROM,HCGROM 与CGRAM 的字型;本系列模块可以显示三种字型,分别是半宽的HCGROM 字型、CGRAM 字型及中文CGROM 字型,三种字型的选择,由在DDRAM 中写入的编码选择,在0000H~0006H 的编码中将选择CGRAM 的自定字型,02H~7FH 的编码中将选择半宽英数字的字型,至于A1 以上的编码将自动的结合下一个字节,组成两个字节的编码达成中文字型的编码BIG5(A140~D75F) GB(A1A0~F7FF),详细各种字型编码如下:
1. 显示半宽字型:将8 位资料写入DDRAM 中,范围为02H~7FH 的编码。
2. 显示CGRAM 字型:将16 位资料写入DDRAM 中,总共有0000H,0002H,0004H,0006H 四种编码。
3. 显示中文字形:将16 位资料写入DDRAM 中,范围为A140H~D75FH 的编码(BIG5) , A1A0H~F7FFH 的编码(GB)。将16 位资料写入DDRAM 方式为透过连续写入两个字节的资料来完成,先写入高字节(D15~D8)再写入低字节(D7~D0)。
3.2.2 显示程序实现
void init_lcd(void) /*初始化程序*/
{
*P_IOA_Buffer|=lcd_rst; /*复位*/
*P_IOA_Buffer&=(~lcd_psb); /*选择串口*/
lcd_delay(6);
wr_lcd (comm,0x30); /*30---基本指令动作*/
wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/
lcd_delay(100);
wr_lcd (comm,0x06); /*光标的移动方向*/
wr_lcd (comm,0x0c); /*开显示,关游标*/
}
void wr_lcd(unsigned int dat_comm,unsigned int content);/*向液晶发送字节
子程序*/
void display1(unsigned int addr,unsigned char *ch);/*在地址addr显示字符
子程序*/
本文选取了青岛市125路公交车从台东到苗岭路共24站作为默认线路。各站站名表以字符串组的形式存储(数组str[24]存放站名表),并从台东到苗岭路依次编码为00H~23H,将其对应站名在屏幕上显示。
12864C液晶中文显示模块每屏最多可实现32个中文字符。字符显示RAM在液晶模块中的地址为80H~9FH。字符显示的RAM的地址与32个字符显示区域有着一一对应的关系,其对应关系如表3.1所示。
表3.1 12864C液晶中文显示模块字符显示地址
80H | 81H | 82H | 83H | 84H | 85H | 86H | 87H |
90H | 91H | 92H | 93H | 94H | 95H | 96H | 97H |
88H | 89H | 8AH | 8BH | 8CH | 8DH | 8EH | 8FH |
98H | 99H | 9AH | 9BH | 9CH | 9DH | 9EH | 9FH |
3.3 SPR_Demo的软件设计
为了简单起见,主函数中使用按键方式选择播放A2000、S480、录音,函数流程如图 3.2所示:
在这里扫描键盘的操作在128Hz的时基中断中进行,在语音播放时按键无效。
A2000语音播放函数设计:
由于语音资源存储在外扩存储器SPR4096上,语音播放采用手动播放方式。手动语音播放,关键在于语音资源数据的获取,需要得到语音资源的地址。下面分析一下刚刚烧录文件的数据格式,如图3.3:
在上图的前4个字节为“SPRW”的ASCII码,主要作用是标识该芯片是通过ResWriter工具烧录的(详细参考ResWriter工具使用说明书——索引表),接下来的4个字节为整合后资源的起始地址00 00 00 6E(由于SPR4096的最大地址为0x7ffff,所以使用4个字节标识,即两个字的长度),然后是整合后资源的结束地址。整合的概念,就是将多个资源文件通过特定的数据格式编成一个索引表,加在资源文件的前面,然后是资源文件1,资源文件2……ResWriter工具在用户打开二进制文件时自动完成上述过程,称为整合。ResWriter工具是对整合后的文件进行烧录。接下来2个字节(00 08)的数据表示整合的文件有8个资源。
以上是整合后文件的一些信息,再接下来分别是每个资源的长度信息、起始地址和结束地址。在本例编程中主要关心语音资源文件起始地址和结束地址。由图 3.14可见第一个资源的起始地址存放在0x0012、0x0013、0x0014、0x0015的4个单元中,在程序中可以依次求得每个资源的地址。
S480语音播放的实现:由于S480格式的文件有带文件头的也有不带文件头的,这样需要在手动取语音资源时进行判断地址的起始地址。在示例中是这样实现的,首先读入前六个字节与文件头(00 FF 00 FF 53 55)一一对比,如果全部匹配,那么说明这是一个带文件头的资源文件,则取得该资源文件的起始地址的时候加上48(文件头长48个字节),即作为真实资源的起始地址;如果没有全部匹配,按照不带文件头的处理。
DVR录音与播放:录音原理参考凌阳录音的实现,放音采用的是A2000格式。
3.4 语音报站设计
车辆驶入某站范围更新票价表的同时需要通过语音报出当前站提醒乘客下车,如“青岛大学站到了,下车请走好”。车辆出站驶离该区域则语音提示下一站站名,提醒乘客做好下车准备。
语音资源经过整合后存储在外扩存储器SPR4096上,当需要发音时,单片机根据所到站点读取SPR中对应声音文件依次发声。语音播放的关键在于语音资源数据的获取,即需要得到语音资源的地址。资源的起始地址以及结束地址分别以4个字节标识。使用如下指令获得语音资源的来时和结束地址。
ulCon_AddrHighest = SP_SIOReadAByte(BASE_START_ADDRESS + SndIndex*12);
ulCon_AddrHighest = ulCon_AddrHighest << 24;
ulCon_AddrHigh = SP_SIOReadAByte(BASE_START_ADDRESS + SndIndex*12+1);
ulCon_AddrHigh = ulCon_AddrHigh << 16;
ulCon_AddrLow = SP_SIOReadAByte(BASE_START_ADDRESS + SndIndex*12+2);
ulCon_AddrLow = ulCon_AddrLow << 8;
ulCon_AddrLowest = SP_SIOReadAByte(BASE_START_ADDRESS + SndIndex*12+3);
ulCon_StartAddr = ulCon_AddrHighest | ulCon_AddrHigh
| ulCon_AddrLow | ulCon_AddrLowest;
其中BASE_START_ADDRESS定义为0x0012,每个地址采用4个字节存储,在分别取得地址后通过“或”操作得到地址。参数SndIndex是由调用函数传递过来的,意义在于使用第几段语音资源。比如使用第一段语音资源,那么传过来0就可以了。BASE_START_ADDRESS 是整合后文件的信息长度,在取得整合前文件的信息的时候要跳过这一段数据,即BASE_START_ADDRESS + SndIndex*12为第SndIndex段资源起始地址的最高字节。
第4章 测试方法
4.1 测试方法
实现公交车自动报站的关键在于行驶车辆的定位,所以GPS模块的数据接收处理显得尤为重要。
GPS模块的天线需要置于空旷室外才能达到最佳效果,置于室内或者带有铁栏的窗口,会受到卫星分布的限制,以及金属屏蔽的影响,造成定位不灵敏,不准确等现象。实际安装时,尽量避开上述集中位置,在本设计公交车自动报站系统时,需将天线固定于车顶以良好接收卫星数据。
首先测得125路车各站坐标,表4.1为125路车下行线苗岭路——山东头站的经纬度坐标(以站牌所在位置为准)。
表4.1 苗岭路—山东头站经纬度坐标
北纬 | 东经 | |
苗岭路 | 36° 05'54.55" | 120°27'17.88" |
香港东路 | 36° 05'40.17" | 120°27'29.35" |
海尔路 | 36° 05'32.03" | 120°27'29.94" |
山东头 | 36° 05'23.62" | 120°27'07.28" |
*注:经纬度坐标按照度度°分分’分分.分分格式给出;
得到各站点经纬度坐标值后,根据软件设置的以站牌为圆心,半径60米左右的圆为该站范围,当车辆行驶过程中,其经度和纬度坐标值与站点经纬度坐标都小于等于2秒(即60米)时,表示车辆驶入该区域,语音提示车辆到站;当经度和纬度坐标值与站点经纬度坐标都大于等于2秒(即60米)时,表示驶离该区域,语音提示下一站站名,请下车乘客做好准备。根据计价器的语音提示,记录车辆进站和出站时的经纬度坐标。根据记录的坐标分析,车辆进出站时语音报站的准确性。
4.2 系统特色
利用GPS自动给出到站位置信号,单片机接受位置信号,自动语音报出站点,同时可以采用人工给出站点位置信息,方便灵活,无需司机干预,使司机可以专心开车,减少因频繁输入到站位置信号造成的不便;
针对这个公交自动报站系统,本系统采用凌阳SPCE061A单片机控制C系列中文液晶模块显示。能够实现目标的实时显示所在位置。在设计和调试的过程中,由于时间原因,所以很多模块只做了一部分,没能完成实物设计。
通过本次实验,本人熟悉了凌阳SPCE061A单片机,充分锻炼了动脑与动手能力。从每个模块的功能的掌握,到模块之间的通信,充分感受到实践的重要性和过程的艰难性。通过此次设计,遇到了很多困难,在解决这些困难的过程中,进一步提高了自己的编写程序的能力。
在本次毕业设计中,进一步加强了自己的动手能力和运用专业知识的能力,从中学习到如何去思考和解决问题,以及如何灵活地改变方法去实现设计方案。
谢 辞
本论文是在章平老师的悉心指导下完成的,首先,要感谢章平老师半年以来对我的悉心指导,在论文的写作过程中,他给我提供了很多深刻的建议和宝贵的教导。
在整整半年的学习、科研中,还得到了其他许多老师和领导的帮助,学院的老师们严谨治学的教学态度使我受益非浅。
同时,感谢实验室的几位同学,大家热情洋溢的学习气氛使我受益匪浅。
最后,感谢参与论文评审和答辩的各位老师,能在繁忙的工作中抽出宝贵的时间对作者的论文进行评阅和审议。再一次感谢所有关心、支持和帮助过作者学习和生活的老师、亲人和朋友!
最后,向全部关心帮助过我的老师同学致以衷心的感谢。