XTAL-晶體振盪-起振時間-程式當機可能因為它

振盪器Oscillator是電子電路很重要的一環,有了振盪器後,類比電路才開始能夠邁向通訊領域,數位電路則開始有”時間序”的概念,也才有後來狀態機state machine的應用。所以振盪器的起振,是非常重要的,沒振起來一切免談,有振起來,頻率也要準才行,現今最常用的是晶體振盪器 XTAL 。

今天有人問我上電之後石英晶體需要多久時間才會穩定振盪? 這我到還真的沒測試過,既然有人問了我們就來測看看吧!

晶體振盪-線路

下圖是一般常見的考畢茲晶體振盪線路(Colpitts Oscillator),雖然說振盪線路百百種,但利用石英晶體Crystal(XTAL)作為振盪元件的方式仍然是主流,因為石英晶體的Q值非常高,頻率可以很準。所謂Q值就是元件儲能與耗能的比例,不過講到Q值可能很多人較陌生,基本上它只是一個用來敘述儲能元件或系統的名詞。

Q=儲能/耗能

XTAL-晶體振盪器-線路圖
XTAL-晶體震盪-線路圖

以敲鐘來舉例,你敲它一下,鐘聲會餘音繚繞,這就是鍾罩外層的振盪所致,聲音繚繞越久表示Q值越高,如果你在鍾罩內鋪上棉絮等布料,聲音會很快被布料吸走,甚至只剩下敲鐘當下的打擊聲,這就表示Q值很低。如果有個鐘它能讓人只敲一下就能響到無窮無盡,那就表示它零耗能,也就是Q值無限大,當然這樣的東西並不存在。

石英晶體的高Q值,只要配上兩個電容就能形成一個共振腔,但共振腔內的振盪訊號終究會停止,若再配上一個放大器把輸出的訊號放大後再加回到原來的輸入端,就形成了可永久振盪的振盪器Oscillator。

以上只是簡略敘述振盪器怎麼回事,真的要寫起來會無窮盡,我今天只是要來看看多久會起振而已。

實體電路

身為實作派的助教除了畫畫線路圖跑模擬之外,當然也要拿實際的線路真槍實彈的電路板跑看看才行。下圖是某個半殘的電路板,雖然功能上有點問題,但是它還能開機、LED也會閃爍,表示系統有跑起來,因此晶體振盪器有正常工作。

下圖中的藍色線,就是我的測量點,XTAL石英晶體的其中一根腳,我將它直接接到示波器的探棒。但我必須說,這樣的接法其實是不及格的,因為當我們直接把探棒接在XTAL的元件上,它的寄生電容會影響系統的振盪頻率,甚至有可能不起振。

正確的做法應該要使用主動探棒,但主動探棒很貴,除非需要經常用到,不然買起來還真心疼。不然如果你對晶片的SDK很熟,可以從晶片內部將時脈clock的訊號從GPIO繞出來,這樣透過間接地測量才不會影響到振盪頻率。

我自己會直接用探棒接觸,是不得已的,一來這塊板子的Firmware不是我寫的,二來這顆晶片並沒有GPIO可以讓你把時脈訊號繞出來。還好探棒直接接觸後,XTAL仍然有起振,示波器還是能觀察到,但頻率絕對有偏差,只是頻偏目前不是我關心的重點。

XTAL-晶體振盪器-電路板
XTAL-晶體振盪器-電路板

附帶一提,只是要量個振盪訊號,不是只要拉一條藍色線接上XTAL(雖然這樣接不及格)就好嗎?  上圖中其它的線是怎麼回事? 原來這顆晶片只是整塊電路板的一個子電路,我不想讓它受到main chip的指令干擾,所以我用外部的3.3V直接供電給子電路,另外這顆晶片有Reset# pin,要將它pull high才能讓晶片開始工作,否則XTAL不會起振。

頻偏的問題

剛剛提到,我這種直接接觸的測量方式會導致頻偏,那麼頻偏會造成甚麼問題嗎? 系統依舊可以開機,程式也可以跑,到底哪裡會有問題?

我舉個例子好了,類比電視NTSC的色彩訊號頻率spec是3.579545MHz,電視機的振盪頻率理論上要跟它一樣,但spec規範的容忍度規範是多少呢? 只有+/-10Hz,這大約是2.8ppm。也就是說你的色彩訊號可能因為你用示波器觸碰石英晶體的關係,造成多於2.8ppm的頻偏,這就足以讓你的電視機從彩色變黑白了,而且還附帶很多雜訊,因為顏色訊號變成畫面的一部份了。

不過還好,我多年前自己試驗的結果,電視機通常會自己追彩色訊號的頻率,除非你偏得太離譜,電視機才會秀黑白畫面給你看。如果3.58MHz的訊號都能讓機器誤動作了,那現在流行的Wifi頻率在2.4GHz/5GHz,當然對頻率又更敏感了。

也許你會問頻偏可以從示波器觀察到嗎? 我的答案是不行。如果你觀察過示波器的頻率測量,你會發現一般示波器的頻率測量位數只到小數點下2位,少數機型會到小數點下4位,但它會不斷的跳動,我不認為你有機會能穩定觀察到這10Hz的變化,除非你用的是高檔貨。

XTAL-石英晶體起振

回到我原本的問題上,直接上電觀察何時起振,如下圖10ms以內就起振穩定了,當然每個電路起振的時間不同,我這裡只是要表達,它不會讓你等超過1sec。

振盪器是由小到大漸漸起振的,它不會馬上有弦波,而是需要時間將能量累積,才能振出穩定的訊號。這很像設計不良的擴音系統,當它發生迴授時,那尖銳的噪音並非馬上出現,而是由小到大漸進出現,雖然它出現的時間只有短短幾秒鐘,仔細觀察還是能發現麥克風的噪音是由小漸進到大。

事實上,振盪器就是利用迴授系統將雜訊中的特定頻率不斷地放大,而晶體振盪的頻率是由石英晶體的構造決定的,就好像鐘聲的高低音,是由它的形狀決定的一樣,而雜訊在振盪器裡的角色,就如同敲鐘的槌子一般,而我們的電路最不缺雜訊,因為有溫度就有雜訊,甚至外來的雜訊也不少,我們就好好利用雜訊吧。

XTAL-晶體振盪-起振波形
XTAL-晶體振盪-起振波形

我展開前段波形的其中一部分,來看看頻率是多少,由於振福太小沒辦法用自動量測,我只好以cursor大概的量一下,確實是16MHz。

XTAL-晶體振盪-波形放大
XTAL-晶體振盪-波形放大

在振盪器起振的這段時間,為避免Chip誤動作,最好能在這段時間讓chip處於Reset狀態,減少對系統的影響。系統上每個chip的reset時間長短也都需要與軟體的timeout搭配,如果設計得太剛好,可能會出現有些API呼叫的時候有機會出現fail,而且不是每次都fail,這裡就是軟硬體工程師要合作的地方。

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*