基于環(huán)形振蕩器、555定時器和Arduino的數(shù)字方波發(fā)生器設(shè)計
了解使用環(huán)形振蕩器、基于555定時器的振蕩器和Arduino生成的方波振蕩器的數(shù)字方波發(fā)生器。
本文引用地址:http://www.ex-cimer.com/article/202407/461534.htm之前,我們介紹了設(shè)計方波振蕩器的概念,即運(yùn)算放大器(op-amp)和基于晶體管的非穩(wěn)態(tài)多諧振蕩器的模擬實現(xiàn)。在本文中,我們將研究實現(xiàn)方波振蕩器的數(shù)字方法,同時討論其優(yōu)點和局限性。
在深入探討之前,讓我們注意一下我們將分析三個例子:
基于555定時器的振蕩器
Arduino產(chǎn)生方波振蕩器
使用環(huán)形振蕩器的方波發(fā)生器
環(huán)形振蕩器具有相當(dāng)簡單的架構(gòu),它利用一串反相器,最終輸出饋入第一個輸入,形成一個環(huán),如圖1所示。
通用環(huán)形振蕩器架構(gòu)
圖1。通用環(huán)形振蕩器架構(gòu)
不僅架構(gòu)簡單,電路的操作也很簡單。啟動時,假設(shè)INV1從邏輯0變?yōu)檫壿?。隨著該逆變器的輸出開始上升,一旦達(dá)到INV2的觸發(fā)點,該輸出將開始降至邏輯0。這種連鎖反應(yīng)持續(xù)到最終的逆變器INVN,然后輸出反饋到開始以維持反應(yīng)??偟膩碚f,這種反應(yīng)會產(chǎn)生持續(xù)的振蕩,假設(shè)所有逆變器的上升/下降時間相同,將產(chǎn)生方波輸出。
為了使電路按所述運(yùn)行,環(huán)中的逆變器數(shù)量(圖1中用N表示)必須是奇數(shù)。這一要求是必要的,因為如圖1所示,任何反相器INVX的輸出(其中X是偶數(shù))都將具有與INV1的輸出互補(bǔ)的輸出。如果將該值反饋到INV1,則不會有變化,因此也不會有振蕩。雖然在這個簡單的例子中,我們只使用反相器,但您可以在整個電路中使用任何邏輯門。然而,在這個環(huán)形例子中,必須有奇數(shù)個反相級才能振蕩。
現(xiàn)在,你可能會問:電路的哪些方面決定了工作頻率?基本上,每個逆變器的固有延遲(td)和級數(shù)(N)根據(jù)以下方程式?jīng)Q定:
由于td通常很小,并且希望將N最小化,因此頻率通常很高,大約為數(shù)百MHz甚至GHz。對于低速應(yīng)用或精確的頻率控制,用戶通常必須向每個逆變器的輸出端添加負(fù)載,最簡單的是通過RC電路,如圖2所示。
帶RC負(fù)載的環(huán)形振蕩器
圖2:帶RC負(fù)載的環(huán)形振蕩器
向前看,假設(shè)所有逆變器在
其中VDD是電源電壓,振蕩頻率變?yōu)椋?/p>
接下來,假設(shè)RC>td,我們可以說振蕩頻率完全取決于RC時間常數(shù)和級數(shù)。
至于優(yōu)點,這種設(shè)計的簡單性使其對高速振蕩器設(shè)計具有吸引力;然而,對于較低的頻率,很難控制這些。另一個缺點是,由于高切換速率,這種架構(gòu)通常功耗很大。
使用555定時器作為方波發(fā)生器
接下來,我們將討論使用555定時器創(chuàng)建方波振蕩器。這種通用IC用于:
各種脈沖產(chǎn)生
延誤
時間安排
振蕩器應(yīng)用
555定時器有很多種,由幾家公司開發(fā),但我們將重點介紹德州儀器的LM555。數(shù)據(jù)表第7.4.2節(jié)說明了定時器的不穩(wěn)定操作,正如我們從上一篇文章中所知,這是我們感興趣的。實現(xiàn)的示意圖如圖3所示。
LM555定時器設(shè)置,用于非穩(wěn)定操作模式
圖3。LM555定時器設(shè)置為不穩(wěn)定操作模式。圖片由德州儀器提供
這里,電容器C由電阻器RA和RB充電。一旦達(dá)到上觸發(fā)點(在定時器的情況下,VCC的?),C就會通過RB放電至VCC的85%。此時,電容器再次開始充電,這種行為會無限期地持續(xù)下去。由此,我們可以通過以下方程獲得充電和放電時間以及振蕩周期:
在這里,我們可以看到,我們不僅可以控制振蕩頻率,還可以控制輸出占空比。然而,這些不能短于tfall,這意味著占空比必須大于50%,但如果RB>RA,則可以接近方波占空比。
這種實現(xiàn)的優(yōu)點是它簡單,需要最少的硬件,也是低速振蕩器的穩(wěn)定可靠的解決方案。至于限制,這種設(shè)計不適用于需要小于50%的占空比或需要高速的情況。
基于Arduino UNO R3的方波發(fā)生器
最后,我們將討論通過Arduino實現(xiàn)振蕩器。在我們的例子中,我們將看看Arduino UNO R3。該板的引腳如圖4所示。
Arduino UNO R3引腳。
圖4。Arduino UNO R3引腳。圖片由Arduino提供[點擊圖片放大]
對于我們的生成器,我們將使用Arduino UNO的數(shù)字I/O引腳之一,特別是D7。實現(xiàn)此解決方案不需要外部硬件,因為這都可以通過下面顯示的Arduino程序定義:
在上面的代碼片段中,我們聲明了三個全局變量,允許用戶設(shè)置頻率和占空比。在這個例子中,我們可以創(chuàng)建一個占空比為50%的100 Hz輸出,從而產(chǎn)生方波。然后,我們可以使用“pinMode”函數(shù)在void設(shè)置塊中初始化數(shù)字輸出引腳。接下來,我們可以進(jìn)入一個連續(xù)循環(huán),將D7設(shè)置為高,并將輸出保持在該值一段時間,該時間等于占空比乘以周期。最后,我們可以將輸出設(shè)置為邏輯低電平,并在剩余的時間段內(nèi)保持信號不變。因此,一旦Arduino打開,這個循環(huán)將無限期地繼續(xù)下去。
正如您所看到的,軟件實現(xiàn)允許在零外部硬件的情況下具有高度的靈活性。雖然這相當(dāng)簡單,但我們僅限于Arduino的帶寬,除非我們使用外部振蕩器來推動更高的頻率,如果需要高速振蕩器的話。
評論