找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 41790|回复: 48
收起左侧

自制1.8寸GPS授时时钟(程序+电路图+制作详情)

  [复制链接]
ID:75272 发表于 2015-3-25 13:33 | 显示全部楼层 |阅读模式
    利用中午午休的一些零星时间设计制作了一款1.8寸GPS授时时钟,现将自己的制作过程和经验教训写下来和大家分享和共同学习。

    提到GPS,大家现在都在使用智能手机,很快就想到了GPS定位、导航等功能。没错,GPS系统随着科技的进步已经走到了你的身边,并不是想象中的那么神秘。其实GPS收到卫星型号后会接收到相当多的卫星定位信息,比如:日期、时间、坐标经纬度、海拔高度等等数据。本时钟就是利用GPS模块配合GPS天线收到GPS卫星信息获取其中的时间数据来校正和显示当前精准的时间。
优良的GPS模块当然价格也不菲,往往售价都在几百元,现在网上淘得几元钱一个的二手GPS模块也是相当的不错了,本时钟选用了价格便宜的Ublox LEA-4A GPS模块,还有GPS天线。GPS模块和天线都是51hei提供的.
                              


   本作一物多用的原则,制作前考虑到使用4个1.8寸数码管共阳红(外型尺寸38x56MM),使用5V电源不能够驱动点亮数码管,需要9V至12V的电源,但又不想使用专用的电源接口和电源,考虑到通用性,固将电源接口采用MicroUSB接口(也就是平时智能手机常用的充电和数据线接口),电源也可使用手机的充电电源,方便灵活又不需专门配备电源,由于Ublox LEA系列的GPS模块自带有USB接口,即可将模块中的USB引脚接入到这个MicroUSB电源接口上,这样就可以将本时钟作为具有USB接口的外部GPS模块和电脑PC想连接,使用专门的GPS驱动和软件,就可以在PC机上使用定位导航功能了,比如谷歌地球、高明的地图软件。另外可以将本时钟添加一些常用的单元部分进行功能扩展,让其成为一个多用途的1.8寸显示的C51单片机实验和学习板,增加了可玩性。加入的单元部分有:1.    C51-ISP编程接口(可以通过该接口方便的编程单片机程序);2.    DS18B20温度集成(可以通过该探头获取环境温度)3.    4个按键(可以根据需要编写具有按键功能的时钟)4.    VS1838红外接收头(可以通过编程加入红外遥控功能)5.    24C02存储芯片(可以编写一些具有存储功能的程序)6.    DS1302时钟芯片(可以编写时钟程序)7.    蜂鸣器(可以编写闹钟和一些声响的程序)8.    XL6009升压模块(可以通过电位器调节数码管的亮度)9.  GPS模块的MicroUSB接口(可以通过手机数据线作为电源或和PC机联机成为外部GPS模块) 电路图设计如下: PCB板背面图

PCB板正面图

原理图和PCB板图均使用Altium Designer 14软件进行设计,在使用Altium Designer14设计时也是不断学习的一个过程,元件图库、PCB元件封装库、3D元件库、布局、排版等,有时一个元件的绘制都会花去你很多时间,很多元件都是我自己拿着元件测量尺寸和参照网上的封装图来手绘,还是很辛苦的。为了学习,这个PCB板特制作了3D效果图:
PCB正面3D






PCB背面3D





PCB部分放大3D






    设计好后拿去PCB打样几块,板子收到后,看似做工非常漂亮。

开始焊接第一块样板,焊接完后检查无误后通电测试,接下来就遇到了几个问题:
1.  通过ISP口写入程序后,单片机不运行程序,再次检查焊接没问题后,仔细查看原理图后发现,在设计原理图时忙于考虑各IO口的分配问题却忽略了29脚EA/VPP,将其悬空了,应将29脚接到5V电源上,让单片机执行内部程序。更改后单片机正常运行了。
2.  Q2工作不正常,经检查后发现,在设计时将NPN三极管和PNP三极管都用了相同的PCB封装库PNP,和原理图的NPN封装对应脚不一样,C、E脚刚好相反了,焊下Q2,将其反面安装焊接,问题得到解决。
3.  Q3、Q4、Q5、Q6,这4个位驱动不起作用,由于想省掉一个ULN2003的集成,借用了1.5寸的位驱动用4个3极管,没考虑到使用的是1.8寸的数码管将其位电压已经提高到9V至12V,致使这4个位驱动处于放大状态失去了开关的作用,将这4个位驱动加一级3极管,测试位驱动正常。
4.  由于错误的将购买的GPS天线认为是无源天线,设计的时候按无源天线的线路设计,导致GPS模块无法收到GPS信息,经反复的实验测试和查阅GPS模块参数资料,得知购买的是有源GPS天线,需要给天线加载电源天线才能有放大作用,根据有源天线原理,切断GPS模块12、24、19引脚的接地,将18(VCC_RF)、19(V_ANT)脚连接,使其16(RF_IN)脚天线输入端加载3.3V左右的电压,为有源天线提供电源。
5.  经过以上4步修改后接入GPS有源天线发现单片机还是没能正确的接收到需要的信息,将USB线连接到电脑安装驱动和GPS模块测试软件u-center7.0软件进行联机查看,单片机程序是来自于网友编制的,波特率设置为9600(TH1 = 0xFD;   //9600波特率的初值),而GPS模块查看为4800的波特率,通讯协议上不一致,看到LEA-4A资料上说可以修改波特率,在软件中将波特率修改为9600
这次可以正常收到GPS信息并把时间显示出来了。但是将电源切断后从新加电,又无法收到信息了,再用软件查看模块波特率又回到了4800,也就是说没有保存起,再查看模块相关资料得知LEA-4A模块是ROM经济型产品并无flash存储器,无法保存设置,可以通过改变硬件方式改变波特率,为了减少硬件改动,固将单片机程序修改成波特率4800(TH1 = 0xFA; //4800波特率的初值)来适应模块的默认4800波特率。这下终于成功了。
测试中发现:接收到的日期和时间信息比较快,快时约12秒,慢时半分钟,这个天线摆放的位置和角度有一定关系。该天线下部带有吸铁,可以吸在金属物体上,发现吸在具有大面积金属板上接收到信息时间会缩短,也许是有反射面的缘故吧。

至于连接PC用软件定位和导航这里就不作更多的解释了。
最后完成

上电未接收到GPS卫星信号时,电压5V,电流0.25A

接收到GPS卫星信号并校准显示时间,电压5V,电流0.16A

总结:通过以上5点故障分析,在设计电路时应做到思路清晰,小到每个零件的校对,查看元件满足正常运行的条件,要做到每个元件、模块功能参数熟悉,最好是经过实验仿真后再制作PCB板,有串口通讯协议的应先考虑和确认协议的一致性,尽量少走弯路和犯低级性错。

附言:整套 制作成本大约六十多。



这里附上单片机源程序:

#include "reg52.h"

#define LEDPORT P0

sbit D1=P3^5;
sbit D2=P3^4;
sbit D3=P3^6;
sbit D4=P3^7;
sbit LED=P0^7;

unsigned char hour,min,sec;
bit rev_start,rev_stop;

//unsigned char code tab[]={0xA0,0xBE,0x64,0x2C,0x3A,0x29,0x21,0xBC,0x20,0x28,0xff};//数码管
//unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//数码管
unsigned char code tab[]={0x3F,0x0C,0x5B,0x5E,0x6C,0x76,0x77,0x1C,0x7F,0x7E,0x00};//0-9,灭

unsigned char  buf[80]; //请把GPS那货发来的数据放到我的肚子里

void TimerInit()
{
TMOD=0x21;
TH0 = 0xF1; //4ms左右
    TL0 = 0x9A;
EA=1;
ET0=1;
TR0=1;
SCON = 0x50;//使用串行工作方式1,10位异步收发8位数据,波特率可变(由T1的溢出率控制)
//    TH1 = 0xFD;//9600波特率的初值
TH1 = 0xFA;//4800波特率的初值
    TL1 = TH1;//9600波特率的初值
    ES = 1;
    TR1 = 1;
}


void Display(unsigned char hour,min)   //数码管显示
{
static unsigned char i;
LEDPORT=0x00;
switch (i)
{
case 0: if(hour/16) LEDPORT=tab[hour/16]; else LEDPORT=tab[10];D1=1;D2=D3=D4=0;break;
case 1: LEDPORT=tab[hour%16];  D2=1;D1=D3=D4=0;    break;
case 2: LEDPORT=tab[min/16];D3=1;D1=D2=D4=0;break;
case 3: LEDPORT=tab[min%16];D4=1;D2=D3=D1=0;break;
}
i++;
if(i==4)i=0;
}


void main()
{

TimerInit();
while(1)
{
if((rev_stop==1)&&(buf[5]=='C'))//如果接收到GPRMC
{
ES=0;
hour= (buf [7]-0x30)* 16+ buf[8] -0x30;
min=  (buf [9]-0x30)* 16+ buf[10]-0x30;
sec=  (buf[11]-0x30)* 16+ buf[12]-0x30;
    hour=  hour / 16 * 10 + hour % 16;
LED=!LED;
hour= (hour+8) % 24;//UTC Time换算成北京时间
hour=hour/10*16+hour%10;

ES=1;
rev_stop=0;
}
   

}

}

void Timer0() interrupt 1
{
TH0 = 0xF1;
        TL0 = 0x9A;
Display(hour,min);//定时器兄弟简单而单调的工作,很轻松的。每4ms刷新下数码管,全年无休哦
}

/***************************************************************/
/*************************串口数据接收**************************/
/***************************************************************/
void Uart_Receive(void) interrupt 4
{
unsigned char ch,num;
ES = 0;

if (RI)//如果接收完成则进入
{
ch = SBUF;
if (ch == '$')  //如果收到字符'$',便开始接收
{
rev_start = 1;
rev_stop  = 0;  //接收停止标志
}

if (rev_start == 1)       //标志位为1,开始接收
{
buf[num++] = ch;  //字符存到数组中
if (ch == '\n')       //如果接收到换行
{
buf[num] = '\n';
rev_start = 0;
rev_stop  = 1;  //接收停止标志
num = 0;
}
}
}
RI = 0; //RI清0,重新接收
ES = 1; //串口1中断允许
}




回复

使用道具 举报

ID:74720 发表于 2015-3-25 21:27 | 显示全部楼层
不错谢谢分享,,51hei有你更精彩!!
回复

使用道具 举报

ID:74797 发表于 2015-3-27 23:40 | 显示全部楼层
很漂亮!想仿制!不知能否给个GPS购买链接?谢谢。
回复

使用道具 举报

ID:76326 发表于 2015-4-9 22:02 | 显示全部楼层
好贴 谢谢分享,51hei有你更精彩!!
回复

使用道具 举报

ID:67296 发表于 2015-4-11 08:08 | 显示全部楼层
这个有套件吗 我也想折腾下
回复

使用道具 举报

ID:76910 发表于 2015-4-14 11:05 来自手机 | 显示全部楼层
楼主,想模仿一下,能带一下吗
回复

使用道具 举报

ID:77023 发表于 2015-4-17 09:37 | 显示全部楼层
回复

使用道具 举报

ID:78060 发表于 2015-4-26 22:59 | 显示全部楼层
学习了,谢谢分享!!收藏。
回复

使用道具 举报

ID:62033 发表于 2015-5-18 13:19 | 显示全部楼层

我最近也在做,刚用洞洞板和最小系统DIY了一个。
不知道楼主几块钱的GPS模块哪里买的?
另外除了GPS模块以外,你板子上就没有其他计时器件吗?
有机会多交流一下。
回复

使用道具 举报

ID:80637 发表于 2015-5-20 22:06 | 显示全部楼层
不错,so cool!
回复

使用道具 举报

ID:79034 发表于 2015-5-28 13:56 | 显示全部楼层
新手表示。。。没搞懂
回复

使用道具 举报

ID:82588 发表于 2015-6-14 10:39 | 显示全部楼层
顶起来,不错  
回复

使用道具 举报

ID:26229 发表于 2015-6-17 23:29 | 显示全部楼层
社区里哪个人会几块钱的GPS模块?这不逗人玩吗?
回复

使用道具 举报

ID:82588 发表于 2015-6-24 09:45 | 显示全部楼层
挺好,学习下下,正学练手万年历,这个思路挺好
回复

使用道具 举报

ID:84705 发表于 2015-7-6 23:34 | 显示全部楼层
能不能做一个简易手持GPS定位器
回复

使用道具 举报

ID:67274 发表于 2015-7-19 21:50 | 显示全部楼层

本帖最后由 a461624201 于 2015-7-19 22:05 编辑

感谢楼主开源,我模仿一个,STC12LE5A60S2    4位共阳极数码管,但是发现,有时候启动约若干分钟后,就会突然全部归0,然后1秒后又自动恢复,持续3次,有时候持续7,8次,这种情况好像是偶然的,难道是GPS信号不好造成数据程序没解调出来?请教数码管显示程序。
回复

使用道具 举报

ID:86421 发表于 2015-7-21 22:46 | 显示全部楼层
作的不错
回复

使用道具 举报

ID:87991 发表于 2015-8-15 20:57 | 显示全部楼层
好厉害
回复

使用道具 举报

ID:89072 发表于 2015-8-29 23:21 | 显示全部楼层
学习下,做个记号先
回复

使用道具 举报

ID:59135 发表于 2015-9-13 09:35 | 显示全部楼层
不错,GPS接收程序比较简单,不知稳定性如何,自己做一个,希望成功
回复

使用道具 举报

ID:44267 发表于 2015-10-7 07:53 | 显示全部楼层
太漂亮了
回复

使用道具 举报

ID:86796 发表于 2015-11-19 21:45 | 显示全部楼层
我买的卡西欧的PROTECK T6000Y
是通过国家授时中心的电波来授时的
GPS有北斗的信号,不错
回复

使用道具 举报

ID:86796 发表于 2015-11-19 21:48 | 显示全部楼层
我看这个手表是有三个传感器
压力传感器
磁偏角传感器
温度传感器
是否就是个掩膜单片机呢?
回复

使用道具 举报

ID:99398 发表于 2016-4-7 22:26 | 显示全部楼层
楼主大神,我等速来膜拜。
回复

使用道具 举报

ID:112856 发表于 2016-4-7 22:40 | 显示全部楼层
不错  下次试试看
回复

使用道具 举报

ID:99398 发表于 2016-4-18 21:51 | 显示全部楼层
问你一个技术问题,你的串口输入是rs232吗?我的是TTL电平,是不是就不能直接给单片机的RX和TX管脚进行数据收发了,这样是不是要自己再接一个TTL转232的小芯片,因为我的是TTL电平输出的GPS模块。楼主或者楼上的帮忙解答一下,小弟在此拜谢了!
回复

使用道具 举报

ID:92746 发表于 2016-4-30 22:24 | 显示全部楼层
好贴 谢谢分享,51hei有你更精彩!!
回复

使用道具 举报

ID:117823 发表于 2016-5-1 18:31 | 显示全部楼层
做的不错,花了不少心思呀。
回复

使用道具 举报

ID:26229 发表于 2016-5-10 23:18 | 显示全部楼层
测温度还是没有加上。
回复

使用道具 举报

ID:68727 发表于 2016-5-17 14:02 来自手机 | 显示全部楼层
有套件吗想仿个
回复

使用道具 举报

ID:121429 发表于 2016-5-17 14:11 | 显示全部楼层
这个够气派,学习
回复

使用道具 举报

ID:126469 发表于 2016-6-13 11:00 | 显示全部楼层
谢楼主
回复

使用道具 举报

ID:139577 发表于 2016-9-16 22:43 | 显示全部楼层
今天刚注册,学习GPS技术
回复

使用道具 举报

ID:140906 发表于 2016-10-8 17:29 来自手机 | 显示全部楼层
楼主,我也想做个,能带吗?给个联系方式呗
回复

使用道具 举报

ID:177421 发表于 2017-3-23 01:36 | 显示全部楼层
学习了,谢谢分享!!收藏。
回复

使用道具 举报

ID:179958 发表于 2017-3-23 10:23 | 显示全部楼层
这个太好了,DS1302走时还是误差很大,时钟走时不准,要来何用呢,有GPS有精确了,给力!
回复

使用道具 举报

ID:43186 发表于 2017-3-24 09:53 | 显示全部楼层
楼主,我也想做个,能带吗?给个联系方式行吗?
回复

使用道具 举报

ID:170330 发表于 2017-3-26 08:14 | 显示全部楼层
如果用Wifi模块进行网络对时,就完美了。毕竟现在谁家里没有Wifi信号啊。
回复

使用道具 举报

ID:194844 发表于 2017-5-7 05:54 | 显示全部楼层

好贴 谢谢分享,51hei有你更精彩!!
回复

使用道具 举报

ID:198298 发表于 2017-5-8 22:04 | 显示全部楼层
好贴,需要这样的大神引领!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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