文檔標識符:Radio_Controlled_Clock_T-D-P11
作者:DLHC
最后修改日期:2021.10.2
本文鏈接: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.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,已經得到修復)
一些測試數據
下面是一組測試數據(目前為止表現最好的一組):
/****************************************(引用請注明出處)
測試地點:室內
測試條件:圖3.3所示電路,下述github中的解碼算法
開始時間:XXXX.X.XX.22.43
結束時間:XXXX.X.XX.23.19
時長:36mins
接收到的幀數: 90
通過校驗的幀數:66
解碼成功的幀數:39
解碼率: 83.33%
解碼成功率: 43.33%
總解碼成功率:36.11%
****************************************/(引用請注明出處)
以上數據表明在夜晚(記住,在夜晚)(且周圍電磁環境較好時),每接收到300幀數據,可以成功解碼108幀數據(聽起來不錯);或者每過100分鍾,就可以成功解碼108幀數據,平均每分鍾可以成功校准一次時間(聽起來很不錯)。
但是,實際上解碼成功率取決於很多因素,諸如:電磁環境、天線、無線電解調模塊、解碼算法等等等......所以,以上數據僅供參考。
此算法只是實現了解碼,但實際工作過程中並不太魯棒。
IV-3A熒光管電波鍾
IV-3A是前蘇聯生產的熒光管,全稱真空熒光顯示(VFD)。它和LED數碼管有很大的區別。首先,LED數碼管由半導體材料制成(一種特殊的二極管,二極管是PN結),而VFD是一種真空管(古老但結實的技術)。其次,LED數碼管工作電壓較低,而使用VFD則需要提供兩組較高的電壓(+1V的燈絲加熱電壓 和 +20V的電網電壓以及陽極段電壓)。最后,LED數碼管很便宜,但是VFD要貴一些(大概10元一只,因為這種VFD已經比較少了)。關於IV-3A的更多信息,請參考這篇文章。
你可能已經知道了我的想法,利用電波鍾模塊做一個漂亮的VFD電波鍾。沒錯,下面討論一下具體的實現方法。
1.使用4個IV-3A熒光管顯示當前的小時和分鍾,STM32通過4個74HC573(8位鎖存器)鎖存各VFD管的段數據,74HC573通過MOSFET(1N50C)驅動VFD(74HC573使用3.3v數字邏輯電壓通過N溝道MOSFET控制+20V高壓)。本方法的缺點是需要4片74HC573和32個MOS管,占用STM32 12個IO口。
2.使用2片MAX6921串行接口的VFD管驅動器IC驅動VFD管。本方法的缺點是一片MAX6921要30元,優點是只需兩片6921,占用STM32 4個IO口。(這個芯片可在淘寶上買到,但封裝對DIY玩家不太友好(不好焊接))
考慮到成本和開發難度,我決定采用方法一。同時,硬件上設計一個‘校准開關’和一個‘VFP顯示開關’,並設計一個‘秒指示’LED和‘校准狀態’LED以指示系統的運行狀態。硬件上,系統由+9v直流電源供電,板載的穩壓模塊和穩壓芯片將+9v電壓轉換為+0.8v(使用降壓模塊)、+3.3v(使用穩壓芯片ASM1117 3.3)、+5v(使用穩壓芯片7805)和+20v(使用升壓模塊)電壓提供給系統上的數字部分和模擬部分電路,主控制器使用STM32F103C8T6最小系統模塊。
圖6.0-IV-3A圖片(正)
圖6.1-IV-3A圖片(反)
圖6.2-IV-3A點亮后
圖6.2-IV-3A數據手冊(一)(翻譯后)
圖6.3-IV-3A數據手冊(二)(翻譯后)
圖6.4-方法一的評估電路圖
圖6.5-完成后的電波鍾
圖6.6-白天點亮的效果
圖6.7-夜間點亮的效果
github
程序和部分參考資料見github:https://github.com/HaochuanDeng/Radio-Controlled-Clock_BPC-China
Acknowledgment
[1]XNY Electronic(淘寶店鋪,老板熱心地提供了模塊資料)
References
[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
[11]Playing around with a IV-3A VFD tube;https://zw-ix.nl/blog/tag/iv3-a-datasheet/
聲明
本文未經DLHC允許,禁止轉載。DLHC保留所有權利。