初探電波鍾(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)
除中國外(中國不是第一個應用此項技術的國家),也有其他國家使用電波鍾授時,包括:德國、英國、日本和美國,詳細見表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.1s、0.2s、0.3s、0.4s分別對應四進位制0、1、2、3。採用四進位制編碼可以很方便地將資訊進行拓展為二進位制,這種方法叫做碼位複用,詳見表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的磁棒天線以及外圍分立元件。模組引出了電源、地、PON和NTCO四個引腳。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保留所有權利。<