查看: 707|回复: 5
打印 上一主题 下一主题

用Arduino制作BCD码电波钟

[复制链接] qrcode

30

主题

48

帖子

138

积分

注册会员

Rank: 2

积分
138
楼主
跳转到指定楼层
发表于 2014-9-17 09:21 AM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
简介

电波表


所谓电波表,机身由原子时钟和无线电接收系统组成,由国家授时中心发出准确时间,通过无线电接收系统接收、经CPU处理后显示时间,电波表30万年误差不会超过一秒。简单的说就是一种接受标准时间信息的电波后,可以自动校对时间的手表。电波钟表是人类计时技术发展历程中,继沙漏、日晷、机械钟表、石英钟表之后的第五代计时器。电波钟表技术和产品的出现是人类计时史的又一次革命。


2技术特点


电波表


电波钟表将传统钟表技术与现代时频技术、微电子技术、通讯技术、计算机技术等多项技术相结合,通过接收国家授时中心以无线电长波传送的标准时间信号,经过内置微处理器解码处理后,自动校准计时器走时,使电波钟表显示的时间与国家保持的标准时间自动保持精确同步。


中国科学院国家授时中心与**公司合作,开发低频时码电波授时新技术,致力推动中国电波钟技术发展,推出具有中国自主知识产权的电波钟表,使中国成为世界上继德国、美国、英国、日本之后第五个实现长波授时技术民用化的国家。

-------------------------------------------------------------------------------------------------------

我算是第一批中国制式电波手表的用户,大概07年底入手的,CITIZEN BPC码电波表。
见当时新闻 http://www.dpcrct.com/dongtai/07.htm

后来单位也统一配发了电波表,几个同事手表放一排,秒针都是同步的,很有乐趣。
所以我野心膨胀,一直想找机会自制一个电波钟。
终于等到tb有模块出售了,15块,其实不算便宜。可到手后,发现不带解码功能。自己也一直没有合适的解码思路,闲置了。
专业电子论坛也试着破解过编码,都不完美。偶然发现一些资料,感觉趁热打铁,将代码解出来了。
资料地址 http://wenku.baidu.com/view/0b2e2526a5e9856a56126017.html

按照发布者的思路,其实自己设计电路接收并不复杂,只是灵敏度问题。




 参考amoBBS.com上发布的帖子,相关编码规则

-----------------------------------------------------------------------------------------------------------
【二】BPC天线模块介绍:



BPC电波钟天线模块采用CME6005高灵敏度IC,性能稳定可靠,低碳低功耗,工作电压范围1.5~3.5V,工作电流70~100uA,静态电流0.2~2uA。

反面有白油字样V, G, T,空, P, H;脚位间隔是2.54mm。

V-接电源VCC,1.5~3.5V


G-接地GND


T-时间信号反向输出端


空(无丝印)-时间信号正向输出端


P-模块使能端,工作接底,静态接高

H-自动增益控制接高电平(模块已连好高电平)





  --------------------------------------------------------------------------------------------------------------


试验过程


每一个夜黑风高的夜晚,总会有些奇迹发生。



电路很简单。

由于模块对开关电源非常敏感,我选择了一节3.6v电池接 V和G端(最高电压为3.5v,用两节1.5v电池最好)
然后G端和Arduino GND连接。
时间信号正向输出端接Arduino A0
就这么简单。

测试:我从藏宝箱里找了一个80年代的电话话筒,压电陶瓷的,直接 输出端和地,听见有节奏的咔哒声。如果将模块距离电脑屏幕稍近,立即能听见强烈干扰,估计是屏幕升压电路引起的。



特别注意! 模块应远离电脑屏幕,否则会引入很强干扰。

 开始解析信号。考虑晚上干扰少,成功率比较高。
 终于得到了一堆数据。
........
0011302423103103133
 0011302413103103133
 0011302433103033133
 0011302423103033123
 0011302413103033123
 .......

第一次解码,傻了根本找不出有效数据。
这是4进制数据,不应该出现4,我做的分隔符。
失败了。

 隔了一周,我将资料全打印出来,没事就分析下。发现是程序的问题。
 开始改进,终于得到了完整的数据。
 目前的数据
........
------------------------------------

2003021132022230310
2013-11-10 Week:7 Time: 3:10:0PM
 ------------------------------------

 0003022133022230310
 2013-11-10 Week:7 Time: 3:10:20PM
 ------------------------------------

 1003022132022230310
 2013-11-10 Week:7 Time: 3:10:40PM
 ------------------------------------

 2003022132022230310
 2013-11-10 Week:7 Time: 3:11:0PM
 ------------------------------------

 0003023132022230310
 2013-11-10 Week:7 Time: 3:11:20PM
 ------------------------------------

 1003023133022230310
 2013-11-10 Week:7 Time: 3:11:40PM
 ------------------------------------
 .......



左侧是电波手表作为基准对照,分秒不差。


 基础解码程序,不带任何纠错及验证功能。
 不考虑纠错的话,可以直接每天校准DS1302时钟模块了

 未完待续。


ARDUINO 代码复制打印

01.int timeWidth=0;

02.int dataOut=0;

03.int lostData=0;

04.int flag=0;

05.int P0=0;

06.int P1=0;

07.int P2=0;

08.int P3=0;

09.int P4=0;

10.int BPChour=0;

11.int BPCminuate=0;

12.int BPCsecond;

13.int BPCweek=0;

14.int BPCday=0;

15.int BPCmonth=0;

16.int BPCyear=0;

17.int BPCArray[19]={

18.  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

19.

20.void setup() {

21.  Serial.begin(9600);

22.}

23.void loop() {

24.  int sensorValue = analogRead(A0);

25.  if(sensorValue<100){                //低位触发计数开始

26.    timeWidth++;

27.    lostData=0;

28.  }

29.  else if(timeWidth!=0){              //高位输出,如果不为空,则输出脉宽信息

30.    dataOut=timeWidth-1;

31.    //        Serial.print(dataOut);      //输出原始数据

32.    BPCArray[flag]=dataOut;

33.    flag++;

34.    timeWidth=0;

35.  }

36.  else{                               //低电平计时数开始

37.    BPCArray[18]=dataOut;

38.    lostData++;

39.    if(lostData>12){                  //判断是否为1S缺秒脉冲标志,是则换行

40.      Serial.println("");

41.      //////////////////////////////////////////////////////////////////////////////

42.      int i;

43.      for (i = 0; i < 19; i = i + 1) {

44.        Serial.print(BPCArray);  ////统一输出存储数据

45.      }

46.      Serial.println("");

47.      P1=BPCArray[0];

48.      P2=BPCArray[1];

49.      P3=BPCArray[9];

50.      P4=BPCArray[18];

51.

52.      if(BPCArray[0]*20+20==60){

53.        BPCsecond=0;

54.        BPCminuate=BPCArray[4]*16+BPCArray[5]*4+BPCArray[6]+1;

55.      }

56.      else{

57.        BPCsecond=BPCArray[0]*20+20;

58.        BPCminuate=BPCArray[4]*16+BPCArray[5]*4+BPCArray[6];

59.      }      

60.      if(BPCminuate==60){

61.        BPChour=BPCArray[2]*4+BPCArray[3]+1;

62.        BPCminuate=0;

63.      }

64.      else{

65.        BPChour=BPCArray[2]*4+BPCArray[3];

66.      }

67.      if(BPChour==0){         //noon 12

68.        BPChour=12;

69.      }

70.      BPCweek=BPCArray[7]*4+BPCArray[8];

71.      BPCday=BPCArray[10]*16+BPCArray[11]*4+BPCArray[12];

72.      BPCmonth=BPCArray[13]*4+BPCArray[14];

73.      BPCyear=2000+BPCArray[15]*16+BPCArray[16]*4+BPCArray[17];

74.      Serial.print(BPCyear);

75.      Serial.print("-");

76.      Serial.print(BPCmonth);

77.      Serial.print("-");

78.      Serial.print(BPCday);

79.      Serial.print(" Week:");

80.      Serial.print(BPCweek);

81.      Serial.print(" Time: ");

82.      Serial.print(BPChour);

83.      Serial.print(":");

84.      Serial.print(BPCminuate);

85.      Serial.print(":");

86.      Serial.print(BPCsecond);

87.

88.      if(P3>1){

89.        Serial.print("PM");

90.      }

91.      else{

92.        Serial.print("AM");

93.      }

94.      Serial.println("");

95.      Serial.println("------------------------------------");

96.

97.      ///////////////////////////////////////////////////////////////////////////

98.      flag=0;

99.      lostData=0;    

100.    }

101.  }

102.  delay(100);        //采样时间。 取这个值抗干扰能力最好,如果取小反而不易处理

103.}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

1

主题

83

帖子

23

积分

新手上路

Rank: 1

积分
23
沙发
发表于 2014-9-17 08:26 PM | 只看该作者
有意思哈哈
回复 支持 反对

使用道具 举报

0

主题

113

帖子

46

积分

新手上路

Rank: 1

积分
46
板凳
发表于 2016-1-15 07:55 PM | 只看该作者
感谢分享
回复 支持 反对

使用道具 举报

0

主题

87

帖子

22

积分

新手上路

Rank: 1

积分
22
地板
发表于 2016-1-16 09:01 PM | 只看该作者
这个不错,关键是我做的加了校验位还是出现一些完全没意义的数据,离电脑太近了
回复 支持 反对

使用道具 举报

0

主题

101

帖子

26

积分

新手上路

Rank: 1

积分
26
5#
发表于 2016-1-17 11:53 AM | 只看该作者
不错哦,没有看到效果图呢!
回复 支持 反对

使用道具 举报

3

主题

145

帖子

159

积分

注册会员

Rank: 2

积分
159
6#
发表于 2016-1-22 08:35 AM | 只看该作者
顶一个。。。。。。。。。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

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