真是沒想到啊,把11.0592MHz的晶振焊成了12MHz,單片機串口通訊打印全亂碼了。明明頻率差不多,為什么會導致通訊徹底失敗?貿澤科普實驗室帶大家從串口亂碼開始,重新認識晶振——
01為什么晶振頻率有小數點的特殊數值?
在通信的時候,單片機需要設置串口波特率,也就是每秒傳輸的比特數,比如9600波特率,就是每秒傳9600個二進制位。串口通訊要想正常傳數據,發送端和接收端的波特率必須一致,就像兩個人聊天,一個人每秒說10個字,而另一個人每秒只能聽8個字,必然聽不清,也就是對應串口亂碼了。
波特率并不是憑空設定的,而是由晶振頻率計算出來的,以視頻中51單片機為例,其1個機器周期等于12個晶振時鐘周期,波特率就是:
波特率=晶振頻率÷機器周期÷分頻系數
我們還是以常用的9,600波特率為例,算一筆賬,差距一眼就能看出:
如果使用的是11.0592MHz晶振:
晶振頻率:11,059,200Hz
機器周期:12 個時鐘周期,每秒能產生:11,059,200÷12 = 921600個機器周期
波特率計算:921,600÷96=9,600,剛好是目標波特率

圖1
如果換成12MHz晶振:
晶振頻率:12,000,000Hz
機器周期:12個時鐘周期,每秒能產生 12,000,000÷12= 1,000,000個機器周期
波特率計算:1,000,000÷ 104≈9615(實際波特率),和目標9,600存在明顯誤差。若按理想分頻,單片機無法實現非整數分頻(1,000,000÷96≈10416.67),只能取近似值,導致實際波特率和目標值的誤差進一步擴大。

圖2
所以,把11.0592MHz的晶振焊成了12MHz,就導致了串口通信出錯。如果你在單片機開發中遇到過這種串口亂碼玄學問題,不妨先檢查晶振有沒有焊對。
其實,上面串口通信的例子,很好的解釋了振頻率總有很多“帶小數點”的奇怪數值,這個問題是很多剛接觸電子開發的人都會疑惑的。
除了11.0592MHz,32.768kHz也是常用的非整數晶振頻率,它幾乎是所有實時時鐘(RTC)電路的標配。這是因為32.768kHz恰好是2的15次方(2^15=32768),經過15次二分頻后,就能精準得到1Hz的時鐘信號(每秒1個脈沖),完美匹配“秒”的時間單位。如果選用其他頻率,想要得到1Hz信號,要么需要復雜的分頻電路,要么會產生計時誤差,32.768kHz因此成為RTC電路的“黃金頻率”。

圖3
為什么晶振頻率有小數點的特殊數值?答案很簡單:這些看似特殊的頻率,都是經過精密計算的工程極優解,每一個數字背后都藏著實用的設計邏輯。
02晶振是如何精確到小數點四位的?
晶振能實現如此高的頻率精度,核心在于其內部的石英晶片。
拆開晶振的金屬外殼,一片經過精密切割的石英晶片便顯露出來了,還有連接在其表面的金屬電極。

圖4
石英晶體具有獨特的壓電效應:給石英晶體施加交變電壓時,晶體會隨之產生周期性的機械振動(逆壓電效應);反之,機械振動又會產生對應的電信號(正壓電效應)。正是這種電能與機械振動的持續相互轉換,構成了穩定振蕩的基礎。

圖5
而晶振的精準頻率,要歸功于石英晶體本身的一個關鍵特性了,它具有一個由自身物理結構,比如切割方向、幾何尺寸、厚度等所決定的固有機械諧振頻率。當我們施加的外部交變電壓頻率恰好與這個固有頻率一致時,便會引發諧振。此時,晶體的機械振幅達到極大,輸出的電信號也極為強勁和穩定。

圖6
由于這個頻率是由晶體本身的物理結構決定的,幾乎完全不受外部電路和環境干擾,因此才能實現極高的精度。晶振有那么多“非整數”的標稱頻率都是經過精密計算和切割后,石英晶體所能穩定產生的、精確的固有諧振頻率。
03有源vs無源:晶振該怎么選?
搞懂了晶振的頻率邏輯,接下來就是使用中的實際問題了,比如晶振主要分為有源晶振和無源晶振,怎么選?
無源晶振:需要“外部助力”才能工作
平時在單片機超小系統中常用的2腳晶振,大多是無源晶振,必須依靠外部的起振電路才能產生穩定振蕩。
常見的起振電路是皮爾斯并聯振蕩電路,由兩個匹配電容(CL1、CL2)和單片機內部的反相放大器組成。

圖7
晶振 datasheet 中會標注負載電容(CL)和雜散電容(Cs)的數值,通過公式 CL = (CL1×CL2)/(CL1+CL2) + Cs,就能計算出合適的匹配電容參數——如果電容數值不合適,晶振可能無法起振,或者輸出頻率不穩定。

圖8
無源晶振的優勢很明顯:成本低、體積小、設計靈活,適合對成本敏感、功能相對簡單的電路,比如51單片機超小系統、簡單傳感器模塊等。但它的缺點也不容忽視:需要額外設計起振電路,對布線要求較高,抗干擾能力相對較弱。
有源晶振:即插即用的“時鐘模塊”
有源晶振則是一體化解決方案——把石英晶體、起振電路、信號放大電路和波形整形電路全部集成在金屬外殼內,相當于一個現成的時鐘信號發生器。
使用時,只需給有源晶振接通電源,就能直接輸出穩定的時鐘信號,不需要額外設計起振電路,電路連接非常簡單。而且有源晶振的輸出信號穩定性更高、抗干擾能力更強,還能提供更寬的頻率范圍,部分型號甚至支持頻率可調。
不過有源晶振的價格比無源晶振高不少,體積也更大,功耗相對較高,更適合對時鐘精度和穩定性要求高的場景,比如工業控制、通信設備、高端單片機系統等。
04晶振使用也有“坑”要避?
雖然晶振是結構簡單的電子元件,但很多新手會因細節疏忽踩坑,導致電路工作異常,比如:
1)正如開頭的實驗所示,不同頻率晶振對應的機器周期、波特率等參數不同,隨意替換會導致功能異常,必須根據電路設計需求選擇指定頻率,不能隨意更換。
2)無源晶振的匹配電容不能隨便選,需按 datasheet 計算選型,否則會影響起振和頻率穩定性。
3)晶振電路對布線要求較高,晶振應盡量靠近單片機的晶振引腳,布線不宜過長,避免引入干擾,導致時鐘信號異常。
晶振,就像電子系統的“心臟”,每一次精準振蕩,都為設備的正常運行提供時間基準。從串口亂碼到實時計時,晶振的頻率選擇和選型都直接影響著項目成敗。希望通過這篇文章,你能真正搞懂晶振的核心邏輯,以后在開發中再也不會為“選什么晶振”“為什么通訊失敗”而頭疼。
-
單片機
+關注
關注
6076文章
45495瀏覽量
670295 -
晶振
+關注
關注
35文章
3562瀏覽量
73436 -
串口
+關注
關注
15文章
1619瀏覽量
82811
原文標題:11.0592MHz 換 12MHz,串口直接亂碼?原因終于說清了 | 貿澤科普實驗室
文章出處:【微信號:貿澤電子,微信公眾號:貿澤電子】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
11.0592MHz晶振換成12MHz后單片機串口通訊亂碼的原因分析
評論