初探電波鍾(A Brief Introduction Of Radio Controlled Clock AND Its Appliciations)

文檔標識符:Radio_Controlled_Clock_T-D-P11

作者:DLHC

最後修改日期:2020.10.12

本文鏈接:https://www.cnblogs.com/DLHC-TECH/p/Radio_Controlled_Clock_T-D-P11.html

 

前言

     如何獲取準確的時間?古人通過觀察太陽在天空的方位獲取當前的時間,這種方法所獲取的時間很粗略,但是它仍然被許多求生者使用。現代社會對時間的準確性、同步性要求很高。比如說你9月10日去坐火車,但是由於你手機的時間慢了20分鐘,你成功地錯過了火車(但現在這很少發生)。有沒有一種方法可以使"時間"以光速傳播?

     無線電在20世紀初開始得到應用,最初用於軍事、船舶導航和通信,那麼無線電與時間有什麼關係?我們知道無線電可以傳播信息,如果有一些機構擁有準確的時間,那麼他們就可以將編碼了時間的信息調製到一定頻率的無線電波上,並且發射出去,使一定區域內的用戶可以捕獲此信號並解碼出當前準確的時間,這一過程的誤差爲發射到解碼的時間差。目前所廣泛使用的授時方法有:衛星授時、網絡授時、無線電廣播授時和電波鍾。本文所討論的就是一種基於無線電低頻時碼授時的方法----電波鍾(Radio Controlled Clock或簡稱RCC)。

     在我國,電波鐘的知名度似乎不太高(火腿除外),但是它的應用卻非常廣泛:BPC掛鐘、手錶自動更新時間等。中國在河南商丘修建了100kW中國商丘低頻時碼信號發播臺(以下簡稱BPC)[1],發射頻率爲68.5KHz[1],發播時間:9:00—17:00,21:00—5:00[1],其覆蓋範圍見圖0.0,中國大部分地區以及周邊鄰國可以接收到該信號。爲什麼要使用68.5KHz的頻率?68.5KHz位於長波[2]波段,長波可以通過天波----即電離層[3]反射,的方式傳播,其傳播範圍很廣。

     除中國外(中國不是第一個應用此項技術的國家),也有其他國家使用電波鍾授時,包括:德國、英國、日本和美國,詳細見表0.0

圖0.0-中國商丘低頻時碼信號發射臺覆蓋範圍示意圖

國家/地區 座標 發射站名稱 發射頻率(KHz) 發射功率(KW) 發射時間
中國/商丘 33° 43'N, 114° 49'E BPC 68.5K 100KW 09-17&21-05
德國/Mainflingen 50° 01'N, 09° 00'E DCF 77 77.5K 50KW 全天
瑞士/Prangins 46° 24'N, 06° 15'E HBG 75K 20KW 全天
英國/Rugby 52° 22'N, 01° 11'W MSF[9] 60K 50KW 全天(部分時間有短暫中斷)
美國/Fort Collins/Colorado 40° 40'N, 105° 03' W WWVB 60K 50KW 全天
日本/福島縣 37° 22'N, 140° 51'E JJY40 40K 50KW 全天
日本/福崗, 佐賀縣 33° 28'N, 130° 11'E JJY60 60K 50KW 全天

表0.0-世界各國電波鍾一覽[4]

 

三個接收並解碼BPC的方法

     方法一:通過SDR和調諧到68.5KHz的天線即可完成接收和解碼,最簡單。

     方法二:DIY接收部分的電路和天線以及單片機解碼系統,最複雜,可以參考這裏

     方法三:使用集成電路模塊(CME6005)和調諧到68.5KHz的天線以及單片機解碼,比方法二簡單,並且可以探索BPC編碼方式,本文將採用此方法。

圖1.0-CME6005模塊(正)

圖1.1-CME6005模塊(反)(反面的絲印竟然也是反的?!)

 

 BPC編碼機制

     BPC的編碼方法相當簡單:每1分鐘發送3幀數據,每1幀數據由20個片段組成(只有19個片段包涵了有效信息),每1個片段由長爲1s的脈衝構成[6]。

                                  每一幀數據包含了“” “” “” “星期” “上下午” “” “” “”以及“校驗位”,相鄰的幀之間使用1個空白的片段間隔[6],理論上1分鐘可以解碼出3次時間。

                                  信息編碼在這些1s的脈衝中,脈寬0.1s0.2s0.3s0.4s分別對應四進制0123。採用四進制編碼可以很方便地將信息進行拓展爲二進制,這種方法叫做碼位複用,詳見表1.0[6]。注意不同的位有不同的權值,見圖2.0

     具體編碼機制:以幀爲單位進行分析,同時分析1分鐘內3幀的差別,詳見表1.1與圖1.0。理論上,1分鐘內的3幀只有“幀號”和“校驗位”不同,其他位均相同。

四進制 二進制
0 00
1 01
2 10
3                                                                                                    11                                                                                                 

 表1.0-四進制與二進制的轉換關係 

序號 名稱 四進制位數 等效二進制位數 表示範圍(DEC) 說明 備註
1 幀號 1 2 無意義

 0表示第1秒,1表示第21秒,2表示第41秒

 通過這一位可以判斷當前時間的秒位
2 保留 1 2 無意義  未使用位,暫無意義(目前恆爲四進制"0") 爲未來升級BPC編碼預留
3 小時 2 4 0~11  轉換爲十進制表示當前時間的小時位  有效數據
4 分鐘 3 6 0~59  轉換爲十進制表示當前時間的分鐘位  有效數據
5 星期 2 4 1~7  轉換爲十進制表示當前時間的星期位  有效數據
6 午別&校驗 1 2 無意義  將此位四進制數轉換爲兩位二進制數,高位表示上下午,0表示上午,1表示下午;低位爲幀的第0位至第8位的校驗(幀的第一位記爲0)----將其轉換爲二進制後,有奇數個1爲1,有偶數個1爲0  指示上下午,並對此幀前半部分的數據進行校驗
7 3 6 1~31  轉換爲十進制表示當前時間的日期位  有效數據
8 2 4 1~12  轉換爲十進制表示當前時間的月份位  有效數據
9 年(低6位(Bin)) 3 6 0~63  加上年的最高位(此時表示範圍拓寬到0~127)並轉換爲十進制後加上2000即表示當前時間的年份位,按照這樣編碼,BPC最久可以用到2127年末  有效數據
10 保留&校驗 1 2 無意義  將此位四進制數轉換爲兩位二進制數,高位表示年的最高位(目前恆爲四進制"0");低位爲幀的第10位至第17位的校驗(幀的第一位記爲0)--有奇數個1爲1,有偶數個1爲0  拓寬年份的表示範圍,並對此幀後半部分的數據進行校驗
11 幀起始預告位 1 2 無意義  未使用位(缺少脈衝,NTCO引腳輸出1s的低電平)  分隔相鄰的幀

表1.1-BPC幀格式[6][7][8]

圖2.0-BPC幀格式圖解[8]

圖2.1-一個BPC編解碼實例[7]

 

實際上應該如何解碼BPC

     最簡單的解碼方法莫過於使用微控制器,通過對微控制器進行編程,使其檢測BPC發送信號的脈寬(實際上,CME6005模塊從天線接收BPC信號,並將解調後的信號交給微控制器解碼),從而識別出每段片段對應的碼值。接收完一幀數據後,就可以解碼出相應的時間。

     但是,實際情況並沒有這麼簡單。無線電在傳播過程中會有一定程度的衰減,加上環境中的電磁干擾,以及地理位置和天線等諸多因素,你所接收到的BPC信號可能會存在一定的誤差,這時候我們就需要使用校驗位對數據幀進行校驗。

     綜上,對解碼提出以下要求:

1.實現對時、分、年、月、日、星期的解碼。

2.實現秒指示。

3.實現數據糾錯。

 

聽一聽電波鐘的聲音

     將CME6005模塊反相輸出的解調後的BPC信號經過音頻功率放大,驅動無源蜂鳴器發聲。

     CME6005模塊包含了CME6005電波鍾集成電路、調諧到68.5KHz的磁棒天線以及外圍分立元件。模塊引出了電源PONNTCO四個引腳。PON爲工作模式選擇引腳,NTCO爲解調後的信號的反向輸出引腳,CME6005框圖如圖3.0所示。模塊工作電壓1.2v~~5.5v,休眠電流0.03uA,最大工作電流120uA[4]。

     以下是原文對CME6005集成電路的描述:CME6005 是一款高度集成的 BI-CMOS 低頻接收解碼芯片。 這一款高靈敏度,低功耗的芯片能解調多國電波信號包括美國 (WWVB)、 德國(DCF77)、 日本(JJY40 和 JJY60)、 英國(MSF)和瑞士(HBG)。 CME6005 內含了一個獨特的雙頻晶體補償功能、 單/雙頻電波接收功能、 AGC鎖定功能、使 CME6005 成爲一個極理想的無線電波方案。[4]

     功放採用TBA820M,乙類功放,供電電壓3v~~16v,最大輸出功率爲2w。引腳定義和典型電路如圖3.1圖3.2所示。

     實際測試中,會出現兩種情況。第一種,蜂鳴器持續發出噼~噼~啪~啪的聲音,並且時而密集,時而稀疏,可以想象成一大串鞭炮爆炸的場景。這種情況是無效的,沒有有效的電波鍾數據輸出。第二種,蜂鳴器發出的聲音呈現特定規律,例如:噼~噼~噼~安靜| 噼~噼~安靜| 噼~噼~噼~噼~安靜,並且週期爲1s。此時接收到的是有效的電波鍾原始數據,解碼該數據就可以獲得當前時間。

     實際測試中,戶外可以接收到有效數據,室內偶爾也可以接收到有效數據,但是接收到無效數據(上述第一種情況)的機率似乎更大(測試地點:四川)

圖3.0-CME6005框圖[4]

圖3.1-TBA820M引腳定義[10]

圖3.2-TBA820M典型電路[10]

 圖3.3-實驗電路(正)

圖3.4-實驗電路(反) 

 

簡單地看一下電波鐘的波形

     如果沒有邏輯分析儀,可以使用單片機讀取NTCO引腳電平狀態並通過串口發回。如果每20ms採樣一次,通信的波特率爲500bps(8位數據位-1位起始位-1位停止位),使用51單片機就可以實現。如果20ms採樣一次,每秒可以採樣50次,NTCO的最短高電平時間爲100ms,理論上可以實現波形的復現而不失真。下圖即爲一次調試過程中獲得的波形數據。

圖4.0-串口發回的時長爲20s的波形

 

獲取BPC有效數據並解碼

     單片機每10ms對NTCO引腳採樣一次,爲了獲取一幀有效數據,需要完成以下步驟:

  1.檢測幀起始標誌位,即:長達1s的低電平(實際上NTCO引腳存在由外界干擾所產生的噪聲,所以應該設立一個閾值,超過該閾值則判定其爲幀起始標誌位)。

  2.檢測到幀起始標誌位後,通過定時採樣NTCO引腳以獲取有效數據(爲了消除噪聲帶來的影響,應該設立一個閾值,以判斷有效數據的四進制狀態)。

  3.校驗獲取的數據,並將其按照一定格式轉換爲時間。

     以圖5.0最後一組數據爲例,詳細介紹如何將獲取到的有效數據轉換爲時間。

     最後一組數據爲“0 0 1 3 1 1 1 1 0 3 0 2 0 2 2 1 1 0 1”,下面演示如何解碼原始數據。

     0:第1秒

     0:保留位,恆爲0

   13:時,4+3+12=19

 111:分,16+4+1=21

   10:星期,4+0=4

     3:高位爲1,表示下午;低位爲1,表示奇檢驗。

020:日,0+8+0=8

  22:月,8+2=10

110:年,16+4+0+2000=2020

     1:高位爲0,即年的最高位爲0;低位爲1,表示奇校驗。

     具體的程序見github。

圖5.0-實際獲取的有效數據

圖5.1-解碼出的時間(圖中所示的“第一段校驗錯誤”有Bug,已經得到修復)

 

 github

     程序和部分參考資料見github:https://github.com/HaochuanDeng/Radio-Controlled-Clock_BPC-China

 

Acknowledgment

[1]XNY Electronic(淘寶店鋪,老闆熱心地提供了模塊資料)

 

Reference

[1]電波鍾;https://baike.baidu.com/item/%E7%94%B5%E6%B3%A2%E9%92%9F/1809735?fr=aladdin

[2]長波;https://baike.baidu.com/item/%E9%95%BF%E6%B3%A2

[3]電離層;https://baike.baidu.com/item/%E7%94%B5%E7%A6%BB%E5%B1%82#10

[4]世界各國電波鍾詳情;CME6005-A11_datasheet

[5]BPC;https://baike.baidu.com/item/bpc

[6]BPC授時編碼專利;

[7]BPC電波授時編碼詳細格式;

[8]電波鍾;周勝鋒

[9]Time from NPL (MSF);https://en.wikipedia.org/wiki/Time_from_NPL_(MSF)

[10]TBA820M_datasheet;SGS-THOMSON

 

聲明

     本文未經DLHC允許,禁止轉載。DLHC保留所有權利。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章