了解使用環形振蕩器、基于 555 定時器的振蕩器和 Arduino 生成的方波振蕩器的數字方波發生器。
之前,我們介紹了 設計方波振蕩器即 運算放大器(運算放大器) 和基于晶體管的模擬實現 非穩態多諧振蕩器。在本文中,我們將研究實現 方波
振蕩器,同時討論其優點和局限性。
在深入研究之前,讓我們注意,我們將分析三個示例:
環形振蕩器
基于 555 定時器的振蕩器
用于產生方波振蕩器的 Arduino
使用環形振蕩器的方波發生器
環形振蕩器具有相當簡單的架構,它利用一串 逆 變 器 最終輸出饋入第一個輸入,形成一個環,如圖1所示。
圖1. 通用環形振蕩器架構
不僅架構簡單,而且該電路的操作也很簡單。啟動時,讓我們假設 INV1 從邏輯 0 轉到邏輯 1。隨著該逆變器的輸出開始上升,一旦INV的跳變點2
命中,該輸出將開始減少到邏輯
0。這種連鎖反應一直持續到最終逆變器INVN,然后該輸出反饋到起點以維持反應。總體而言,該反應會產生恒定的振蕩,并且假設所有逆變器具有相同的上升/下降時間,將產生方波輸出。
為了使電路按所述工作,環中的逆變器數量(在圖1中用N表示)必須是奇數。這個要求是必要的,因為正如我們在圖1中看到的,任何逆變器的輸出,INVX,其中
X 是偶數,將具有補充 INV 輸出的輸出1.如果此值反饋給
INV1,不會有任何變化,因此也不會振蕩。雖然在這個簡單的例子中,我們只使用逆變器,但您可以使用任何 邏輯門
在整個電路中。但是,在這個環形示例中,必須有奇數個反相級才能振蕩。
現在,您可能會問的一個問題是:電路的哪些方面決定了工作頻率?基本上,每個逆變器的固有延遲(td),階段數 (N) 根據等式確定:
f=12tdNf=12tdN
由于 td 通常很小,并且希望最小化N,頻率通常很高,大約為數百
MHz甚至GHz。對于低速應用或精確的頻率控制,用戶通常必須為每個逆變器的輸出增加一個負載,最簡單地通過 遙控電路,如圖2所示。
圖2. 帶RC負載的環形振蕩器
展望未來,假設所有逆變器都以 VDD2VDD2 跳閘,其中 VDD 是供應 電壓,振蕩頻率變為:
f=12(td+0.69RC)Nf=12(td+0.69RC)N
接下來,假設 RC 》d,我們可以說振蕩頻率完全取決于RC時間常數和級數。
至于優點,這種設計的簡單性使其對高速振蕩器設計具有吸引力;但是,對于較低的頻率,很難控制這些頻率。另一個缺點是,由于開關速率高,這種架構通常很耗電。
使用 555 定時器作為方波發生器
接下來,我們將討論使用 555定時器。該通用IC用于:
各種脈沖產生
延遲
定時
振蕩器應用
幾家公司創建的 555 計時器種類繁多,但我們將專注于 LM555 來自德州儀器。 數據表 第 7.4.2 節
說明了計時器的不穩定操作,正如我們從上一篇文章中知道的那樣,這是我們感興趣的。實現原理圖如圖3所示。
圖3. LM555 定時器設置,用于不穩定操作模式。圖片由 德州儀器
在這里, 電容器,C,由 電阻, R一個 和 RB.一旦它到達上跳變點(在計時器的情況下,V 的 2/3抄送),C 然后放電至 V 的 1/3抄送
通過 RB.此時,電容器再次開始充電,并且這種行為無限期地持續下去。由此,我們可以通過以下等式獲得充電和放電時間以及振蕩周期:
trise=0.69(RA+RB)Ctrise=0.69(RA+RB)C
tfall=0.69RBCtfall=0.69RBC
T=trise+tfallT=trise+tfall
f=1T=1.44(RA+2RB)Cf=1T=1.44(RA+2RB)C
在這里,我們可以看到,我們不僅可以控制振蕩頻率,還可以控制 輸出占空比。但是,這些不能短于 t秋天,這意味著占空比必須大于 50%,但如果 RB
》·一個。
這種實現的優點是簡單,需要最少的硬件,也是低速振蕩器的穩定可靠的解決方案。至于限制,此設計不適用于需要小于50%的占空比或需要高速的情況。
基于 Arduino 的方波發生器,使用 Arduino UNO R3
最后,我們將討論通過 Arduino 實現振蕩器。對于我們的示例,我們將查看 Arduino UNO R3.該板的引腳排列如圖4所示。
圖4. Arduino UNO R3 引腳排列。圖片由 阿杜伊諾 [點擊圖片放大]
對于我們的生成器,我們將使用 Arduino UNO 的數字 I/O
引腳,具體來說,D7。實現此解決方案不需要外部硬件,因為這都可以通過如下所示的Arduino程序定義:
整數頻率 = 100; 以 Hz 為單位設置用戶定義的頻率值
int per_ms = 1e3*(1/頻率);將一種狀態(高或低)的時間設置為 T/2(以毫秒為單位)
int dutyCyc = 0.5;設置輸出波形的占空比
void setup() {
引腳模式(7,輸出);將 D7 設置為數字輸出
}
振蕩環
void loop() {
數字寫入(7,高);將 D7 設置為邏輯 1
延遲(Cyc*per_ms);在邏輯 1 處保留 T/2
數字寫入(7,低);將 D7 設置為邏輯 0
延遲((1-Cyc)*per_ms);在邏輯 0 處保留 T/2
}
在上面的代碼片段中,我們聲明了三個全局變量,允許用戶設置頻率和占空比。在本例中,我們可以創建一個占空比為 50% 的 100 Hz
輸出,從而產生方波。從那里,我們可以使用“pinMode”功能在空隙設置塊中初始化我們的數字輸出引腳。接下來,我們可以進入一個連續循環,將D7設置為HIGH,并將輸出保持在該值,時間等于占空比乘以周期。最后,我們可以將輸出調至邏輯低電平,并在剩余的周期內將信號留在那里。因此,一旦Arduino打開,此循環將無限期地繼續。
如您所見,該軟件實現允許高度靈活性,無需外部硬件。雖然這相當簡單,但我們僅限于 Arduino
的帶寬,除非我們在需要高速振蕩器時使用外部振蕩器來推動更高的頻率。
-
振蕩器
+關注
關注
28文章
3847瀏覽量
139361 -
發生器
+關注
關注
4文章
1368瀏覽量
61858 -
定時器
+關注
關注
23文章
3255瀏覽量
115371
發布評論請先 登錄
相關推薦
環形振蕩器,環形振蕩器工作原理是什么?
555定時器產生方波原理(四款555定時器產生方波的電路詳解)
![<b class='flag-5'>555</b><b class='flag-5'>定時器</b>產生<b class='flag-5'>方波</b>原理(四款<b class='flag-5'>555</b><b class='flag-5'>定時器</b>產生<b class='flag-5'>方波</b>的電路詳解)](https://file.elecfans.com/web1/M00/45/2D/pIYBAFplOXmAAFBTAAAuGbuiww0492.png)
評論