我總是使用圖片所具有的內部振盪器,因為我從未發現需要以高於8 MHz的頻率運行任何東西(這是我使用的圖片能夠達到的最快速度)。除了高於8 MHz之外,是否還有其他原因意味著我應該使用外部振盪器?對我來說,似乎錯了另一件事,但我很想听聽別人的所作所為。
我總是使用圖片所具有的內部振盪器,因為我從未發現需要以高於8 MHz的頻率運行任何東西(這是我使用的圖片能夠達到的最快速度)。除了高於8 MHz之外,是否還有其他原因意味著我應該使用外部振盪器?對我來說,似乎錯了另一件事,但我很想听聽別人的所作所為。
使用外部晶體的另一個原因是頻率的選擇。晶體具有很寬的頻率範圍,而內部振盪器通常是一個頻率,可以選擇啟用4x PLL。一些較新的24位核心PIC在時鐘鏈中同時具有乘法器和分頻器,因此您可以從單個內部振盪器頻率中獲得多種頻率。
當然,各種應用固有地需要精確的頻率。或通訊以外的時間。時間是電子產品中可以最便宜地進行最精確測量的屬性,因此有時問題會轉變為測量時間或以準確的時序產生脈沖之一。
然後是一些需要與之進行長期同步的應用其他街區。如果將1%的振盪器用作實時時鐘的基礎,則每天將關閉14分鐘以上。可能需要準確的長期時間,而不必知道實時時間。例如,假設您希望一堆低功率設備每小時喚醒一次,以交換數據幾秒鐘,然後再進入睡眠狀態。一個50ppm的晶體(非常容易獲得)在一小時內將關閉不超過180ms。不過,一個1%的R-C振盪器可能會關閉36秒。這將增加大量的開機時間,並因此對每小時僅需要通信幾秒鐘的設備的功率要求。
精度。內部時鐘不精確,可能會受到噪聲的影響。
與溫度無關的精度。典型的振盪器變化很大。在低溫或高溫應用中,或者溫度變化劇烈時,都可能需要專用的溫度補償振盪器。
速度。內部振盪器可能無法達到IC的最高速度。為此可能需要外部的。
電壓。內部計時器的速度可能取決於其運行電壓。
需要多個時鐘。一些應用程序希望共享一個振盪器。
內部時鐘可能不容易使用的特殊應用。為了保持時間,內部時鐘的分頻可能比向其扔一個廉價的31 kHz時鐘晶體更難。
在我的頭頂上,arduino使用的ATMEGA 328需要一個5V的外部晶體以使其達到最大速度。百合墊版本在內部振盪器上以8 MHz運行,因為它限於3.3v。 MSP430 Value Line啟動板在3V時限制為10 MHZ,在2.5V時限制為8 MHZ。
外部穩定器的頻率穩定性更高。因此,如果您有一個真正依賴於單片機頻率的應用程序,那麼您可能需要使用一個外部單片機。
但是大多數現代的mcu:s都具有相當穩定的內部osc,因此我認為這曾經幾年前是一個更大的問題。還有越來越多的方法來修整內部電路,並補償溫度漂移(等)。
另一方面,還有其他方法可以確保您保持同步,在某些國家/地區,電網的頻率穩定度為50Hz±0.01Hz,而其他地方(如瑞典)實際上為±0.001Hz,而已經看到項目使用此工具使事情保持同步。然後,您不再依賴於單片機頻率,而可以使用內部的頻率了。但這只是一個話題:)
頻率穩定性是主要的穩定性,特別是對於高速串行通信。但是,由於時鐘分頻器為您提供的選擇有限,因此偶爾也需要以似乎奇怪的頻率獲得準確的波特率的晶體。
我實際上遇到了一種情況,其中1%對於UART來說不夠還不夠。
如果你們中有人聽說過Teensy ++ v1.0微控制器開發板,它具有非常敏感的UART。我將主機波特設置為115200,並將其設置為115200,最長的時間無法弄清為什麼它無法正確讀取數據。原來我的房東正在發送接近114300的波特率。 (115200-114300)/ 115200 =〜0.9%誤差我在兩個不同的MCU上進行了嘗試,並且它們都可以正常工作。您的芯片沒有必要的驅動電路。
P.S。我想知道是否有人對他們在UART硬件上所做的使它如此敏感的低級設計選擇有任何見識?
外部晶體振盪器比內部時鐘更為精確,應在需要精確定時的情況下使用它們。有時為了省錢,設計師使用內部的。
與振盪器有關的另一個未提及的問題是功耗。但這並沒有太大的區別。 查看PIC16F628A數據表中的下一張圖表:
您首先會注意到,頻率越高,功耗就越大。它可以在低功耗應用中有所作為。
關於內部與外部的疑問,在相同的頻率下,INTOSC的功耗比XT多,大約多30%。
此信息是否相關,取決於應用程序。