Page 45 - 量子加密—— 守護物聯網世代安全
P. 45
圖7:已完成的GPS規範振盪器封裝,配置LCD。
使用了看門狗計時器(WDT)。我將 WDT超時設置為2秒,並在1PPS 中斷常式時進行重設,以取代使用 WDT檢測錯誤程式碼的執行問題。 如果系統沒有收到1PPS中斷,則 WDT不會被重設。
正確,則1秒的總和值(現在包含100 個延遲偏移)應該等於100秒擷取的 讀數(其中包含1個延遲偏移)。在操 作程式碼時,每次讀取計數器時都 會重新添加遺失的16個計數。
將其配置為32位元計數器。該計數 器設計透過定址位元組,而以4個 單獨位元組方式讀取32位元計數 器。這需要4條位址線,而由於我 在Nano上的I/O不夠了,因此改使 用74LS139,將Nano中的2條線轉 換為計數器所需的4條線。
Nano的程式碼是使用 Arduino IDE以C語言編寫的。該 程式碼基本上由1PPS中斷所驅 動,並透過鎖定32位元計數器值 (74LV8154的功能)、清除計數器和 設置重設標誌來進行快速響應。你 可能已經發現下一次計數的某些部 份遺失了,因為我們正在擷取計數 器暫存器,然後將其清除,使其再 次從0開始計數。(擷取和清除之間 有一定限制時間。)確實如此,因此 韌體會透過將偏移值添加到原始計 數器值來補償此延遲。事實證明有 16個缺失計數。這已經由兩種方式 得到驗證了。首先,在示波器上測量 擷取暫存器訊號和清除暫存器訊號 之 間 的 時 間。其 次,在 不 調 整 V C X O 的情況下使用1秒和100秒的擷取 執行了許多測試。1秒擷取會重複 100次並加總起來;如果延遲偏移
程式碼中的主迴圈(Arduino 開發系統始終將經典C語言 的“Main”函數作為迴圈執行)等 待設置中斷標誌,並在設置好時讀 取74LV8154的鎖定暫存器之值。 接下來,它會檢查這是否是「合理 的」讀數而且毫無損壞(與10MHz 的差異超過12ppm)。如果不好就 扔掉。如果很好,它就會在一個小 型boxcar平均器中處理該值,然後 使用該平均值如前所述地對PWM 進行向上或向下調整。接著,它會 決定處於哪個階段。第一階段執行 1秒計數並調整VCXO。這很快讓我 們瞭解到PWM設置。此階段執行約 20秒。第二階段需要10秒的計數讀 數來微調PWM設置—執行5次或50 秒。最後階段則執行100秒讀數且 連續執行,隨著溫度或其他參數改 變頻率,不斷地調整以保持頻率。
圖7所示的LCD採用標準I2C 的20字元×4行LCD。原理圖底部 是一個簡單的線性電源,使用了 12V AC/DC配接器,將其調節至 8V為Nano供電,並調節至5V為 電路的各個部份供電。我還使用 了線性電源,以確保獲得安靜的Vcc 平面。最後,還有2個LED:其一是 綠色LED,用於顯示1PPS訊號。第 二個雙色LED,當系統緊密鎖定到 所需的10MHz時為綠色;如果尚未 鎖定,則為紅色;如果系統處於保 持狀態,則交替顯示紅色/綠色。 保持狀態用於在1PPS訊號遺失期 間保持當前設置的狀態。
為了檢測1PPS訊號損耗,我
在最後階段,根據需要設置
DESIGN IDEAS
圖8:LCD上每次讀數後進行的統計。
www.edntaiwan.com 41