自制VFD電波鍾(A Brief Introduction Of Radio Controlled Clock AND Its Appliciations)


文檔標識符: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.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,已經得到修復)

 

 一些測試數據

     下面是一組測試數據(目前為止表現最好的一組):

/****************************************(引用請注明出處)

測試地點:室內

測試條件:圖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保留所有權利。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM