background image

  由于本系统要接收

GPS 数据,并用 MCU 进行守时,守时阶段由电池对 MCU 和晶体

电路进行供电,

MCP2515、GPS OEM 板和 PCA82C250 不工作。

  非守时阶段,即系统正常工作时,所有功能模块均由外部电源供电,电池不工作。
  电源切换电路的具体实现如图

2:其中 D1、D2 为低压降的二极管。1K 阻值的 R1,其作

用是当输入电源中的一方断电时,确保另外一方不对断电方提供漏电压。输入电压经过
DC/DC 芯片 TPS76030 变换后,产生 3V 电压(com_3v),对 MCU 和晶体电路进行供电。
其余电路部分分别由外部输入的

3.3V 和 5V 供电。

  四、系统软件模块设计
  系统软件的设计主要分三部分:

MCU 的 UASRT1 口配置为 UART 模块,进行 GPS 串

行数据的接收和组织;

MCU 的 TIMERA 和 TIMERB 进行有效时间数据的加载和守时;

MCU 的 UASRT0 口配置为 SPI 模块,采用三线 SPI 的主机模式,与 MCP2515 进行数据交
互,实现

CAN 总线系统的搭建。

  

1.GPS 串行数据的接收

  本部分由一个状态机控制,为了简化设计,共分为

3 个状态{同步头状态,命令头状态,

GPS 数据保存、分析状态},分别对应于:
  (

1)缺省状态:同步头“$”搜索、捕获状态。

  (

2)语句命令头“GPRMC”搜索、捕获状态。

  (

3)GPS 数据信息的保存和分析状态。

  (

4)即回到状态 1,重新进入同步头“$”搜索、捕获状态。

  

2.守时模块的软件设计

  全局变量的使用如下:

hour、minute、second、day、month、year,分别作为时、分、秒、日、

月、年的计数单元。

cnt3125 为计 320us 的计数单元,计 3125 次即为 1 秒。数组 gps_data[55],

为接收

GPS 数据的缓存。data_to_timerA,数据是否已经加载完毕的标志。gps_flag,作为

GPS 数据是否有效的标志。
  主程序中,当

GPS 数据有效标志 gps_flag=‘1’时,把 gps_data[55]对应单元中的时间数

据 由

ASCII 码 转 换 为 二 进 制 数 据 , 并 进 行 “ 时 ” 数 据 的 “ +8” 处 理 后 , 分 别 加 载 到

hour、minute、second、day、month、year 中。令 data_to_timerA=‘1’,通知 TimerA,数据已成功
加载到守时计数单元。同时,打开

TimerB,进行秒输入间隔超过 1 秒的超时判断。   使用

3 个中断:定时器 TimerA 和 TimerB 中断,还有 GPS 秒输入信号中断。

  

TimerA 中断主要是完成模块守时,并实时产生秒输出信号。

  

TimerB 中断是完成 GPS 秒输入信号间隔大于 1 秒的处理。当秒间隔超过 1 秒时,令

data_to_timerA=‘0’,清除 GPS 有效数据加载标志。
  

GPS 秒输入信号中断,当 data_to_time—rA=‘1’时,对 cnt3125 计数单元清零,清除

timerA 计 数初 值, 然后 启动 timerA, 进行 “增 计数 ”, 同时 产生 秒输 出信 号, 最后 令
data_to_timerA=‘0’。
  

GPS 数据与秒输入信号共有 4 种可能的情形:

  (

1)GPS 数据有效,GPS 秒输入有效,见图 4:

  (

2)GPS 数据有效,GPS 秒输入无效,见图 5:

  (

3)GPS 数据无效,GPS 秒输入无效,见图 6:

  (

4)GPS 数据无效,GPS 秒信号输入有效:其具体处理同第 3 种情形,即 TimerA 持

“开”,进行基本秒单元的计时和时、分、日、月、年单元的计数守时。同时实时产生 GPS 秒

输出信号。

TimerB 一直关闭,不工作。

  

3.CAN 总线部分的软件设计

  

MCU 通过 SPI 总线与 MCP2515 进行接口,其数据传输速率设为 1.6Mbps。MCU 通过