基于单片机的GPS高精度授时时钟设计教材.docx
- 文档编号:23387546
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:34
- 大小:495.94KB
基于单片机的GPS高精度授时时钟设计教材.docx
《基于单片机的GPS高精度授时时钟设计教材.docx》由会员分享,可在线阅读,更多相关《基于单片机的GPS高精度授时时钟设计教材.docx(34页珍藏版)》请在冰豆网上搜索。
基于单片机的GPS高精度授时时钟设计教材
学士学位毕业设计(论文)
基于单片机的GPS高精度授时时钟设计
学生姓名:
指导教师:
所在学院:
专业:
农业电气化
摘要
本文设计了一种基于P89LPC952高速单片机的GPS卫星授时时钟。
它由接收机、中央处理单元、LCM显示、键盘、输出接口组成。
利用接收机提供的标准时间信号,通过中央处理单元对数据的处理,从而可同步输出时间数据,保证高精度授时。
这不仅解决了时间获取问题,而且能真正实现全球范围内的时间校准。
更创新性地集成了全世界212个城市的实时时间显示。
与传统方法相比,这种全新的时钟同步方法具有实现手段简单、精度高、范围大、不需通道联系、不受地理和气候条件限制等众多优点,是时钟同步的理想方法。
本文介绍了基于P89LPC952的GPS授时时钟装置的硬件;根据装置要实现的功能,给出了主程序和中断程序的流程图和程序介绍。
关键词:
授时时钟P89LPC952GPS中央处理单元
ABSTRACT
AkindofGPSsatellitetimingclockbasedontheP89LPC952High-speedMCUisrecommendedinthefollowingthesis.Itiscomposedofreceptors、centralproceedingsections,LCM,keyboardandoutputconnectors.Thecentralproceedingsectioncoulddealwiththedatatomaketheoutputtimedatabyuseofthestandardtimesignalssuppliedbyreceptors,thus,keepinghighlyprecisiontiming.Bythisway,notonlysolvetheproblemofthetimeobtained,butalsothetimeintheworldwideisreallycompletelyunified.Evenmore,creativelyintegrates212citiesoftheworldwide’sreal-timedisplay.Comparedwithconventionalmethod,thisnewsynchronousclockplanhasmanyadvantages,suchassimple,highprecision,wideextension,nochannelsneeded,noconfineofgeographyandweatherenvironmentandsoon.Itistheidealwaytosynchronizetheclock.Inthefollowingpaper,representthehardwareoftheGPStimingclockbasedontheP89LPC952High-speedMCU.Accordingtothefunctionofthedevice,listtheflowchartofthemainprogramandtheinterruptprogramandtheintroductionofthoseprograms.
Keywords:
TimingclockP89LPC952GPSCentralproceedingsection
前言
20世纪70年代的计算机革命产生了一群新的时间用户,他们需要精确的计算机时间。
但是,众所周知,计算机时钟的守时性能并不出色。
通常,简单的时钟如腕表和家里的挂钟的性能要好于计算机时钟。
这种计算机时钟的性能会导致很多问题,因为有很多计算机应用需要时间精度保持在接近1s或更好。
例如,出于安全原因,用于金融系统的计算机必须能够精确记录每次转账、交易的精确时间。
同样,用于电信计费的计算机,它不仅要求单机能够准确记录通信的时间,还要求另外城市的计算机能够保持时间同步,才能保证网间结算不会出问题。
用于精确物理测量获得科学数据的计算机系统需要知道测量的精确时刻,全自动化工业系统也需要计算机在正确的时刻发出控制指令。
对同步通信系统,如无线电台、电视基站,需要计算机在正确的时间建立链路连接。
授时系统就是使仪器或计算机与国际标准时间达到精确同步。
通常,可以用原子钟来保证仪器的时间与国标时间达到精确同步,但是原子钟价格昂贵。
这里介绍一种简单、相对廉价的时间同步方法。
利用全球定位系统提供的时间信号和秒脉冲,通过软件可以使计算机的时钟与UTC(UniversalTimeCoordinated协调世界时)达到精确的同步。
1.绪论
1.1设计提出的意义
面对着现代社会的快节奏生活,人们对时间的要求就会越来越高。
而且现在有很多机构对时间的同步性要求也越来也高,而原子钟的成本又太高,所以,基于单片机的GPS高精度授时时钟将完全能够胜任这些高要求的时间机构。
1.2课题主要内容
本课题主要设计一个可以接收GPS报文,并能提取报文中的时间信息,在一定时间周期内为系统内的时钟校时,使系统始终运行在秒级精度上。
并且可以将GPS的有关时间的报文,通过另一个串口向PC端发送。
并且存储212个城市的中英文名称和市区数据,而且可以用液晶无延迟显示这些城市的名称和当前时间,并能通过键盘实时切换的各个城市的高精度时钟。
时钟在没有接收到准确的GPS报文的情况下还可以通过键盘对时钟进行手动调整。
并且系统内带有一个闹钟,可以通过键盘对其进行调整以及控制其起停。
并且系统还有实时显示本地经纬度功能。
在硬件设计上,采用先进的SMT工艺,使整个系统迷你化。
2.系统设计基础
2.1设计思想
本系统在设计之初时,首先要求要有两个串口,一个用来接收GPS报文,另一个用来向PC发送时间数据。
GPS模块的1PPS引脚接到单片机的中断管脚上,以提高授时的精度。
要让单片机能够存储、检索212个国家的中英文名称和其时区数据。
并通过一块液晶屏幕将整合后的时间信息显示。
系统内要自带一个实时运行的时钟。
接收到的GPS时间信息是要为本系统校时,而不是直接为系统提供时间。
这样系统内就始终有一个时钟在运行。
系统内还要有一个键盘,可以实现系统的时间调整、闹铃调整以及其他功能。
利用系统内已有的时钟,设计一个闹铃。
2.2方案选择
用一片P89LPC952作为中央处理单元,由于P89LPC952只有8K的存储空间,所以加一片32K铁电存储器——FM25CL256作为数据存储器。
系统框图如图1。
时钟芯片
时钟芯片
MCU
LCM
发送数据
GPS
键盘
图1系统框图
P89LPC952有两个独立的串口,可配置各自独立的波特率。
铁电存储采用串行SPI总线进行高达3Mb/s的速率读写。
完全可以应付屏幕显示的速度。
2.3本章小结
本章主要讨论基于单片机的GPS高精度授时时钟的设计思想,并详细介绍了方案选择的过程。
其中P89LPC936有足够的存储空间,但外部的管脚资源太少,单GM8125就占用了八个管脚,扩展性能太差。
P89LPC952有足够的44个管脚,但存储空间只有8K。
但SPI总线的高速率弥补了空间的不足。
3.系统组成原理及硬件设计
3.1系统的组成和原理
整个系统由单片机中央控制和运算模块、GPS模块、铁电数据存储模块、机内时钟和闹铃模块以及键盘和显示模块组成。
单片机中央控制与运算模块负责接收GPS报文,读写I2C时钟,将GPS报文中的时间信息提取出来,经过与默认城市的市区数据运算后,在1PPS中断到来的时刻,将时间数据写入I2C时钟芯片,同时将时间数据以及从存储器中读出的城市中英文名称整合后送屏幕显示。
GPS模块通过天线接收多颗卫星传来的定位及时间数据,通过串口以TTL-232电平将数据送出,并产生1PPS秒脉冲。
在铁电存储模块中,创新性地存储了全世界212个城市的中英文名称和时区数据,这就使整个系统不仅仅是一台高精度授时时钟,更是一台高精度的世界时钟。
可以查询这212个城市的实时时间。
而且只用存储其中2bytes的存储空间,实现了可将任意城市的时间设为在系统主界面显示的城市名称和当前时间,这就为长途旅行带来更多的方便。
机内时钟和闹铃模块自身一直在有一个时钟运行,单片机通过I2C总线读取其中的时间数据,而且芯片内还有一个报警中断引脚,用来做闹铃的开关。
总的来说,就是单片机将所有接收到的时间数据于读取的城市数据运算整合,送屏幕显示,并和机内时钟的报警中断共同控制系统闹铃。
键盘则用以进入菜单,实现时钟调整等各种功能。
3.2硬件电路的设计
3.2.1P89LPC952单片机系统设计
P89LPC952是飞利浦最新的一款单片机,含有多种低成本的封装形式。
它采用了高性能的处理器结构,指令执行时间只需2到4个时钟周期。
6倍于标准80C51器件。
8KB可擦除Flash程序存储器,单字节擦除特性使得任何字节都可用于非易失性数据存储。
两个增强型UART,具有波特率发生器、间隔检测、帧错误检测和自动地址检测功能。
400kHz字节宽度的I2C通信端口和SPI通信端口。
片内高精度的RC振荡器选项带有时钟倍频器,无需外接振荡器件。
VDD操作电压范围为2.4~3.6V。
I/O口可承受5V电压。
端口“输入模式匹配”检测。
当P0口管脚的值与一个可编程的模式匹配或者不匹配时,可产生一个中断——键盘中断。
在本系统中主要应用了单片机的内部晶振、两个增强型UART、I2C通信端口、P0口键盘中断和一个外部中断。
SPI总线采用I/O口软件模拟的方式。
并用I/O口软件模拟的方式驱动液晶显示模块。
在单片机电路设计中,按照飞利浦给出的接口定义,接出了ICP在电路编程接口,并预留了JTAG10针在线调试接口[2]。
ICP在电路编程接口定义如图2。
JTAG接口的定义图如图3。
图2ICP在电路编程接口定义
图3JTAG在线调试接口定义
ICP是一种串行编程方式,其通过一根时钟线与一根数据线串行传输编程指令及数据。
在开发过程中,不需将芯片从系统板上取下,即可实现重新编程。
不占用程序存储空间,不受串口的影响[3]。
3.2.2电源电路的设计
由于系统中需要两种电压,例如单片机、串行电平转换芯片、时钟芯片铁电存储芯片为3.3V供电,而GPS模块、蜂鸣器和液晶屏幕则用5V供电。
所以系统中要设计出两种电压的输出。
由直流输入到5V输出使用SPX3819,而3.3V输出采用LM1117-33。
SPX3819持续输出电流可达500mA,压降为340mV。
由于仅提供固定输出电压,无需外部电压设定电阻,因而减少了所需的板空间。
而且SPX3819还具有反向电池保护、反馈电流限制和负载掉电保护等功能[4]。
LM1117-33输出电流可达800mA,但压差偏高。
当输入输出的压差达到1.2V时芯片才能正常工作。
在本系统中由于是将SPX3819输出的5V接入其输入管脚,所以芯片完全可以正常工作[5]。
由于电压中含有许多高频干扰源,这些高频成分很容易经过电源进入通信系统中。
另外系统自身的发送频率也会经过电源感应反馈到通信系统造成干扰。
因而可在电源电路中并入多个不同容值的电容所构成的滤波电路来抑制各种高频信号。
使系统能够得到稳定可靠且低干扰的电源,保证系统的可靠运行[6]。
电源电路如图4所示。
图4电源电路
3.2.3GPS模块电路设计
GPS模块采用台湾HOLUX公司的GR-85模块。
GR-85模块采用美国瑟孚(SiRF)公司所设计的第二代低耗电量卫星定位接收芯片,是一个完整的卫星定位接收器。
其耗电量低,且能同时追踪12颗定位卫星的讯号,每0.1秒接收一次,每秒更新一次定位,支持NMEA01832.2版本规格输出。
而且支持1PPS秒脉冲的输出[7]。
GR-85总共有六个管脚,管脚定义如表1。
表1GR-85管脚定义
管脚
定义
管脚描述
1
VCC_5V
5.5V电源输入
2
TXA
串行口输出A
3
RXA
串行口输入A
4
RXB
串行口输入B
5
GND
接地
6
1PPS
时间标记:
1PPS时间标记输出
3.2.4铁电外部数据存储模块设计
对于各城市的中英文名称以及时区数据采用Ramtron公司的FM25CL256——32K的数据存储器。
FM25CL256是用先进的铁电技术制造32Kb的非易失性存储器。
铁电随机存储器(FRAM)具有非易失性,并且可以像RAM一样快速读写,数据在掉电后可以保存10年,相对于EEPROM或其他非易失性存储器,FRAM具有系统可靠性更高,结构更简单等诸多优点。
与EEPROM不同,FM25CL256以SPI总线进行写操作,操作无须延时。
当数据被移入芯片后,写操作仅需几百纳秒,下一个总线周期可以立刻开始而无须进行数据轮循。
另外,FM25CL256具有比其它非易失性存储器高得多的读写操作次数,可以承受超过100亿次的读写操作[8]。
基于以上选择了FM25CL256,在实际读取应用中,每次在调用片内数据送去显示时,根本没有读取延时。
它就像单片机中的一个大容量RAM存储区。
这样,单片机中所可以在液晶上显示的汉字就全部储存在其中。
而且它还存储了默认城市数据索引的首地址。
这样即使在系统完全掉电的情况下,默认的数据也不会丢失,增加了系统的人性化,也赋予了系统更多的创新性。
3.2.5时钟和闹铃模块的设计
时钟芯片采用了飞利浦公司生产的PCF8563芯片,PCF8563是低功耗的CMOS实时时钟/日历芯片,它提供一个可编程时钟输出,一个中断输出和掉电检测器,所有的地址和数据通过I2C总线接口串行传递。
最大总线速度为400Kb/s,每次读写数据后,内嵌的字地址寄存器会自动产生增量。
芯片的I2C总线从地址:
读0A3H;写0A2H。
PCF8563有16个8位寄存器,所有16个寄存器设计成可寻址的8位并行寄存器,前两个寄存器(内存地址00H,01H)用于控制寄存器和状态寄存器,内存地址02H~08H用于时钟计数器(秒~年计数器),地址09H~0CH用于报警寄存器(定义报警条件),地址0DH控制CLKOUT管脚的输出频率,地址0EH和0FH分别用于定时器控制寄存器和定时器寄存器。
秒、分钟、小时、日、月、年、分钟报警、小时报警、日报警寄存器,编码格式为BCD,星期和星期报警寄存器不以BCD格式编码。
当一个RTC寄存器被读时,所有计数器的内容被锁存,因此,在传送条件下,可以禁止对时钟/日历芯片的错读[9]。
由于单片机内有一个标准的I2C总线接口,这样单片机就可以实时读取I2C接口上的数据,然后直接送到屏幕显示。
在实际实验中,效果非常好。
I2C总线接口定义要求在SDA和SCL线上各加一个上拉电阻,本系统内选用电阻阻值为5.1KΩ。
在中断引脚上加入一个10KΩ的上拉电阻。
并在时钟芯片的电源脚接入一个备用电池,当系统通电时,二极管因反向电压而截止备用电池向时钟芯片供电。
当系统掉电时,二极管导通,由备用电池向时钟芯片供电。
时钟电路图如图5。
图5时钟电路电路图
在PCF8563芯片中的第3脚为报警中断管脚,当一个或多个报警寄存器写入合法的分钟、小时、日或星期数值且这些数值与当前的分钟、小时、日或星期数值相等则该管脚产生低电平中断。
但是只有一个低电平中断是不能驱动蜂鸣器发声的,还要有一个让蜂鸣器发声的方波,这可以由单片机的一个I/O管脚生成。
中断管脚是低电平有效,方波始终都有。
这样就可以加一个或非门让中断管脚作方波输出的开关。
在实际电路中用一片2输入4与非门——74HC00也可以组成一个或非门,其逻辑电路图如图6。
图674HC00组成或非门逻辑电路图
其运算为:
真值表如表2。
表2真值表
ALARM
WAVE
OUTPUT
0
0
1
0
1
0
1
0
0
1
1
0
即中断管脚为高电平时,无论方波输出为高电平还是低电平,最后输出的都是低电平。
反之,当中断管脚为低电平时,方波输出高电平,则总输出为低电平;方波输出低电平,则总输出为高电平。
这就实现了闹铃的功能。
3.2.6键盘及显示模块的设计
在设计方案中,键盘的设计是比较特殊的,也是比较有创新性的。
它看似和普通的矩阵键盘没什么两样(键盘电路如图7),实际上他用了飞利浦单片机的一项特殊的功能——键盘中断。
键盘中断功能主要用于当P0口等于或不等于特定的模式时产生一个中断。
该功能可用于对键盘的识别。
有3个特殊功能寄存器用于该功能。
键盘中断屏蔽寄存器(KBMASK)用于定义连接到P0口的使能触发中断的输入管脚。
键盘模式寄存器(KBPATN)用于定义与P0口值相比较的模式。
当键盘中断功能有效且条件匹配时,键盘中断控制寄存器(KBCON)中的键盘中断标志(KBIF)置位。
如果通过置位IEN1寄存器的EKBI位和EA位将中断使能,则会产生一个中断。
键盘中断控制寄存器(KBCON)中的PATN_SEL位用于比较时定义等于或不等于[10]。
图7键盘电路
显示模块采用金鹏公司的OCMJ4×8C,该模块采用ST7920芯片,内建中文字库,支持三种控制接口,分别是8位微处理器接口,4位微处理器接口及串行接口。
所有的功能,包含显示RAM,字型产生器,都包含在一个芯片里面,只要一个最小的微处理系统,就可以操作模块[11]。
在本系统中,采用的是串行接口。
其引脚与单片机的连接对应方式如表3。
表3液晶模块与单片机的连接方式
单片机
液晶模块
功能
P5.0
RST
低电平液晶复位
P5.1
RS
高电平位数据;低电平为指令
P5.2
SID
串行数据端口
P5.3
SCLK
串行时钟端口
3.3本章小结
本章详细介绍了系统的硬件组成及硬件原理,在硬件设计中,比较有特色的设计为闹铃电子开关的设计和键盘的设计。
其中键盘的设计得益于P89LPC900系列单片机特有的键盘中断功能。
这种功能使得系统的效率以及键盘的识别效率都大大地提高。
4.软件设计
4.1软件系统结构
在硬件系统已经搭建好的基础上,就可以参照硬件的连接方式来编写软件代码。
首先要确定系统所要实现的功能和代码执行的方式。
系统所要实现的功能在前文已经以提过,不再赘述。
代码执行的方式构想为:
开机画面和自检完毕后,进入初始画面。
初始画面为默认城市的名称和现在时钟。
按菜单键进入系统菜单,系统菜单中实现四个功能:
(1)显示任意城市时钟;
(2)手动调整默认城市时钟;
(3)设置闹铃;
(4)显示本地经纬度。
按相应数字键进入相应的功能,一般是按执行键确认,按取消键返回。
按上下键确认进行光标移动和翻动城市。
系统大致框图如图8。
图8主程序框图
4.2主要算法设计
4.2.1GPS报文接收程序设计
由于GPS模块输出的所有报文都为ASCII码,而且每一个报文行都以$开始,其后紧跟报文行的关键字,最后以*结束本行。
能确定每一个报文行的惟一属性为报文行的关键字,所以报文接收函数就以判断报文行开始是否为$GPRMC,如果是则往后直到接收到*字符为止的所有数据全部接收,否则抛弃所有接收数据。
其流程图为图9。
图9GPS报文接收程序流程图
4.2.2键盘扫描的程序设计
前文已经提到,飞利浦单片机在P0口上有特殊的键盘中断,可以大大提高系统的效率以及键盘的识别效率。
在本系统中首先将KBPATN=0xF0,KBMASK=0xF0。
然后让单片机在P0口不等于0xF0时产生键盘中断,只有键盘中断产生了,才会执行键盘扫描及处理程序。
其程序如下:
voidkey_judge(void)
{
P0=0xF0;
if(Key_sign)//判断是否有键按下
{
Key_sign=0;//清除按键标志位
ReadKey();
Key_Process();
}
}
voidKEY_INT(void)interrupt7
{
Key_sign=1;//按键标志位置1
KBCON=0x00;
}
其中KEY_INT函数为键盘中断处理程序。
当有键按下时,该函数将按键标志位置1,然后就跳出中断函数。
在任何一个需要使用到键盘的函数中,都只是不断地在查询按键标志位是否为1就可以。
在key_judge函数中可以看到进入函数是最基本的只是做两件事,把P0口付值为0xF0,然后就是查询按键标志位Key_sign是否为1。
为零则跳出函数,不去扫描键盘。
反之,才去扫描P0口,去取按键的键值。
这样就大大提高了代码的效率。
假设普通的键盘扫描程序每执行一次为1ms,则在主程序循环中每循环1000次左右就能节省出1s的时间。
这在提高系统的实时性和时钟的精度是大有好处的。
4.2.3菜单的程序设计
菜单是一个系统得以实现多种功能的最基本接口,本系统菜单设计的比较简洁。
由于菜单只有四项,一屏4行刚好能显示得下,所以没有设计滚屏的效果。
在菜单中也使用了查询键值的方式来处理。
每一个按键都有唯一的键值,当函数查询到的键值与某个函数的入口吻合时,就进入相应的函数。
如果没有按键按下,则函数始终在查询键值,屏幕也将始终在显示菜单。
如果函数得到取消键的键值,则跳出函数返回主函数。
菜单程序的流程图如图10。
图10菜单程序框图
4.2.4设置默认城市的程序设计
当开机自检时,将从铁电存储器内读出默认城市的中英文名称和时区数据,并把名称在屏幕的第一二行显示,而时区数据则用来作时间计算的参数。
而且时区的数据是始终存储于单片机的RAM区内不变的。
只有当修改默认城市的时候它才会变化。
开机时读取地铁但存储器时首先得到的是默认城市各种数据在跌电存储器内存储的首地址,然后再通过这个首地址再去读取这个首地址后35bytes的数据。
存到单片机的内存中。
这样做不仅可以使数据存储量达到最小化,而且可以使设置好的参数在系统掉点时也不会丢失。
使系统更加人性化。
在改变默认城市时,首先通过读取铁电存储器改变了单片机RAM区中存的城市名及市区参数,然后就将铁电存储器内存储的2bytes首地址数据改变。
这才完成一次修改。
4.3本章小结
本章主要论述了所有程序在系统内运行的大致流程,给出了流程图。
并将四个比较有代表性的算法的思想陈述出来。
其实在这个程序之中四大菜单所实现的功能都是比较有代表性的,只是由于函数比较大,像时钟调整的函数足有300行。
所以在这里不便陈述。
但是有一点要必须说明的就是,由于P89LPC952只有8Kb的程序存储区,所以系统内存储的所有程序代码都是经过仔细优化的。
5.PCB设计、组装及调试
5.1PCB的设计
5.1.1PCB设计软件——Protel99se
在系统设计当中硬件电路的设计没有用万用板搭接,因为万用板所有线路的连接几乎全靠实际的导线,焊接复杂,可靠性差。
而且万用板只适用于DIP封装的器件,而P89LPC952等器件都为表面贴片封装,所以在设计之初我们就选择了制作印制电路板。
制作印制电路板我们用的是Protel99se画出原理图,生成PCB。
Protel99se是Protel公司(现已更名为Altium公司)于2000年推出的一款EDA软件,是Protel家族中性能较为稳定的一个版本。
它不仅是以前版本的升级,更是一个全面集成全32位的电路设计
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 GPS 高精度 授时 时钟 设计 教材