2021年5月17日 星期一

Nixie Tube, Miniature Atomic Clock, Frequency measurement, Clock. - Part B (High Level System Arch)

 


上次的Part. A過了兩年......終於有機會能夠重新Revisit這個Project,主要是因為第一版受限於一些限制(後續說明),軟體上有點卡住。直到去年推出的Raspberry Pi Compute Module 4 解除了一些軟體上的限制,所以這次重新設計了底板以及系統架構。 現在軟體跟硬體大致底定,有空可以來寫幾篇。

這篇主要會先講的是整體系統的架構,大致上就是講這張Block Diagram:
綠色是FPGA內建的Hard IP,紫色是FPGA的Verilog Block,藍色是IC/Sensor,紅色是Power,灰色是Connector。

以功能來說,核心功能主要有以下幾個:
  • GPS校正系統時鐘,以及監控誤差跟時鐘基準輸出
  • AC 頻率以及Vrms監控
  • Nixie Clock
  • 環境監測
因為前三點都需要非常精準的Timing,所以設計上交給了FPGA,其他部分則交給Raspberry Pi Compute Module來做。FPGA跟Raspberry Pi中間透過兩個SPI,主要是因為我想拉高SPI的Clock,所以多了一組由FPGA內建的48MHz震盪器驅動的SPI Peripheral,所以你也可以看到FPGA內部有兩個Clock Domain,高速SPI是為了收ADC的資料,所以跨Domain有一個FIFO。

FPGA另外還會輸出兩個Time Signal,其中一個PPS接上一般的IO,另外一個Clock輸出是接上Raspberry Pi Compute Module 4上面的IEEE 1588 Sync In,當然中間經過了一個3.3v->1.8v的Buffer,等到比較正式的IEEE 1588 Support出來之後我就可以來搭配有線網路來當作我的內網路PTP Clock Source,因為FPGA的彈性,所以Clock要怎麼樣打可以等Support出來再來弄,先暫時只用RPI的PPS GPIO當作NTP的校正源。

其他的周邊則是直接接上Raspberry Pi,GPS以及Miniture Atomic Clock都是透過UART,這邊要提到的是Raspberry Pi 4支援非常多的UART Port,一次就支援五組UART可以用。前一版本的設計因為被Raspberry Pi Zero受限,所以MAC的UART需要透過FPGA幫忙轉SPI,徒增複雜度。

I2C的狀況也是類似,Raspberry Pi 4支援了非常多組的I2C,由架構圖可以看到我掛了非常多的東西在I2C Bus上,I2C Bus也有兩條,其中一條是接上上層的Nixie Tube的板子,另一條則是底板用的。

需要設定I2C和SPI Bus的話,透過dtoverlay既可,以下的範例是設定I2C 0跟I2C1 還有 SPI的CS pin,
    dtoverlay=i2c-gpio,bus=0,i2c_gpio_sda=22,i2c_gpio_scl=23
    dtoverlay=i2c-gpio,bus=1,i2c_gpio_sda=2,i2c_gpio_scl=3
    dtoverlay=spi0-2cs,cs0_pin=8,cs1_pin=20

Raspberry Pi 的 Image已經預載了這些dtoverlay,到/boot/overlay看有哪些之後,用這個指令查看怎麼設定
    dtoverlay -h [overlay名稱]

Power 的架構則是稍微複雜一點,主要是因為MAC在預熱過程至少需要3A,保險起見我想要拉到4A,加上因為是供應原子鐘,我不想要直接透過DC-DC供電。所以從上圖的架構圖可以看到MAC的供電是降壓到5.5V之後再送到LDO穩壓成5V,先透過DC-DC降壓的話LDO的消耗可以大幅地降低。另外還是有一組5V LDO是直接供電ADC用,因為耗電量不大,只要Noise夠低就好。接下來是CM4用的 5V,直接用DC-DC降壓,這組5V同時供應USB-C (Host Mode的話),還有再經過3.3V LDO降壓給底板用的Sensor們。最後就是Nixie Tube的Power Supply,我想做一些比較Fancy的控制,所以有一組AD/DA去控制跟監控Nixie的Voltage。供電的部分都有LED燈顯示狀況,也能夠用一個MOS把這些Power LED關掉。監控的部分則是有四組INA219做電流/電壓的監控。

基本上是這樣,接下來會針對每一個功能來寫比較詳細的文章。

沒有留言:

張貼留言