步驟1:技術(shù)注意事項(xiàng)
Arduino Uno和Nano的一個(gè)缺點(diǎn)是它沒有數(shù)字信號(hào) - 模擬(DAC)轉(zhuǎn)換器,因此無法直接在引腳上輸出模擬電壓。一種解決方案是R2R梯形圖:8個(gè)數(shù)字引腳連接到電阻網(wǎng)絡(luò),因此可以達(dá)到256級(jí)輸出。通過直接端口訪問,Arduino可以通過一個(gè)命令同時(shí)設(shè)置8個(gè)引腳。對(duì)于電阻網(wǎng)絡(luò),需要9個(gè)值為R的電阻,8個(gè)值為2R的電阻。我使用10kOhm作為R的值,它將引腳的電流保持在0.5mA或更低。我猜R = 1kOhm也可以工作,因?yàn)锳rduino可以輕松地為每個(gè)引腳提供5mA電流,每端口40mA。重要的是R和2R電阻之間的比率確實(shí)為2.通過將2個(gè)R值的電阻串聯(lián)起來,總共25個(gè)電阻最容易實(shí)現(xiàn)。
相位累加器
生成波形然后重復(fù)向Arduino引腳重復(fù)發(fā)送一系列8位數(shù)字。波形存儲(chǔ)在256字節(jié)的數(shù)組中,并對(duì)該陣列進(jìn)行采樣并發(fā)送到引腳。輸出信號(hào)的頻率取決于通過陣列前進(jìn)的速度。一個(gè)強(qiáng)大,精確和優(yōu)雅的方法是使用相位累加器:32位數(shù)字以固定間隔遞增,我們使用8個(gè)最高有效位作為數(shù)組的索引。
快速采樣
中斷允許在明確定義的時(shí)間采樣,但中斷的開銷將采樣頻率限制在~100kHz。無限循環(huán)更新相位,采樣波形并設(shè)置引腳需要42個(gè)時(shí)鐘周期,從而實(shí)現(xiàn)16MHz/42 = 381kHz的采樣率。旋轉(zhuǎn)或推動(dòng)旋轉(zhuǎn)編碼器會(huì)導(dǎo)致引腳更改和從環(huán)路中斷的中斷以更改設(shè)置(波形或頻率)。在此階段,重新計(jì)算陣列中的256個(gè)數(shù)字,以便不需要在主循環(huán)中執(zhí)行波形的實(shí)際計(jì)算??梢援a(chǎn)生的絕對(duì)最大頻率是190kHz的一半,但是每個(gè)周期只有兩個(gè)樣本,因此對(duì)形狀的控制不大。因此,接口不允許將頻率設(shè)置在100kHz以上。在50kHz時(shí),每個(gè)周期有7-8個(gè)采樣,并且在1.5kHz和低于所有存儲(chǔ)在陣列中的256個(gè)數(shù)據(jù)每個(gè)周期都被采樣。對(duì)于信號(hào)平滑變化的波形,例如正弦波,跳過樣本沒有問題。但對(duì)于具有窄尖峰的波形,例如占空比較小的方波,存在這樣的危險(xiǎn):對(duì)于高于1.5 kHz的頻率,單個(gè)樣本丟失會(huì)導(dǎo)致波形表現(xiàn)不盡如人意
頻率的準(zhǔn)確度
每個(gè)樣本相位遞增的次數(shù)與頻率成正比。因此,頻率可以設(shè)置為381kHz/2 ^ 32 = 0.089mHz的精度。實(shí)際上,幾乎不需要這種精度,因此界面限制以1mHz的步長設(shè)定頻率。頻率的絕對(duì)精度由Arduino時(shí)鐘頻率的精度決定。這取決于Arduino類型,但大多數(shù)指定頻率為16.000MHz,因此精度為~10 ^ -4。該代碼允許修改頻率和相位增量的比率,以校正16MHz假設(shè)的小偏差。
緩沖和放大
電阻網(wǎng)絡(luò)具有高輸出阻抗,因此如果負(fù)載是,則其輸出電壓會(huì)快速下降連接。這可以通過緩沖或放大輸出來解決。這里,緩沖和放大是用運(yùn)算放大器完成的。我使用的是LM358,因?yàn)槲矣幸恍?。它是一個(gè)慢速運(yùn)算放大器(壓擺率為每微秒0.5V),因此在高頻和高幅度時(shí)信號(hào)會(huì)失真。一個(gè)好處是它可以處理非常接近0V的電壓。然而,輸出電壓限制在低于軌道約2V,因此使用+ 5V功率將輸出電壓限制為3V。升壓模塊結(jié)構(gòu)緊湊,價(jià)格低廉,為運(yùn)算放大器提供+ 20V電壓,可產(chǎn)生電壓高達(dá)18V的信號(hào)。 (注意,原理圖說LTC3105,因?yàn)槟鞘俏以贔ritzing中發(fā)現(xiàn)的唯一升級(jí)。實(shí)際上我使用的是MT3608模塊,請(qǐng)參閱后續(xù)步驟中的圖片)。我選擇對(duì)R2R DAC的輸出應(yīng)用可變衰減,然后使用其中一個(gè)運(yùn)算放大器緩沖信號(hào)而不放大,另一個(gè)放大5.7,這樣信號(hào)可以達(dá)到約20V的最大輸出。輸出電流相當(dāng)有限,約為10mA,因此如果信號(hào)要驅(qū)動(dòng)大型揚(yáng)聲器或電磁鐵,則可能需要更強(qiáng)的放大器。
步驟2:所需組件
核心波形發(fā)生器
Arduino Uno或Nano
16x2 LCD顯示屏+ 20kOhm微調(diào)和100歐姆用于背光的串聯(lián)電阻器
5針旋轉(zhuǎn)編碼器(帶集成按鈕)
25個(gè)10kOhm電阻
用于緩沖器/放大器
LM358或其他雙運(yùn)算放大器
升壓模塊基于MT3608
50kOhm可變電阻
10kOhm電阻
47kOhm電阻
1μF電容
步驟3:構(gòu)造
我在7x9cm原型板上焊接了所有東西,如圖所示。由于所有電線都有點(diǎn)亂,我試著給帶正電壓紅色的引線和帶黑色的引線涂上顏色。
我使用的編碼器有5個(gè)引腳,一邊是3個(gè),2個(gè)是另一邊。有3個(gè)引腳的一側(cè)是實(shí)際的編碼器,帶有2個(gè)引腳的一側(cè)是集成按鈕。在3引腳側(cè),中央應(yīng)接地,另外兩個(gè)接到D10和D11。在2引腳側(cè),一個(gè)引腳應(yīng)連接到地,另一個(gè)應(yīng)連接到D12。
這是我做過的最丑陋的事情,但它有效。放入一個(gè)外殼會(huì)很好,但是現(xiàn)在額外的工作和成本并沒有真正證明它的合理性。 Nano和顯示器附有針頭。如果我要建一個(gè)新的,我不會(huì)再那樣做了。我沒有在板上放置連接器來拾取信號(hào)。相反,我用突出的銅線上的鱷魚引線拾取它們,標(biāo)記如下:
R - 來自R2R DAC的原始信號(hào)
B - 緩沖信號(hào)
A - 放大信號(hào)
來自引腳9的T - 定時(shí)器信號(hào)
G - 接地
+ - 來自升壓的正“高”電壓模塊
步驟4:代碼
代碼是一個(gè)Arduino草圖,附上并應(yīng)上傳到Arduino。
已有20個(gè)波形預(yù)定義。添加任何其他wave應(yīng)該是直截了當(dāng)?shù)摹U?qǐng)注意,隨機(jī)波填充具有隨機(jī)值的256值數(shù)組,但每個(gè)周期都會(huì)重復(fù)相同的模式。真正的隨機(jī)信號(hào)聽起來像噪聲,但這種波形聽起來更像是哨聲。
該代碼在引腳D9上用TIMER1設(shè)置1kHz信號(hào)。這對(duì)于檢查模擬信號(hào)的時(shí)序非常有用。這就是我如何計(jì)算時(shí)鐘周期數(shù)為42:如果我假設(shè)41或43,并產(chǎn)生1kHz信號(hào),它顯然與引腳D9上的信號(hào)具有不同的頻率。使用值42,它們完全匹配。
通常,Arduino每毫秒都會(huì)中斷以使用millis()函數(shù)跟蹤時(shí)間。這會(huì)干擾準(zhǔn)確的信號(hào)生成,因此禁用特定的中斷。
編譯器說:“Sketch使用7254字節(jié)(23%)的程序存儲(chǔ)空間。最大值為30720字節(jié)。全局變量使用483字節(jié)(23%)動(dòng)態(tài)內(nèi)存,為局部變量留下1565個(gè)字節(jié)。最大為2048個(gè)字節(jié)?!耙虼?,有足夠的空間可以使用更復(fù)雜的代碼。
步驟5:用法
只需通過Arduino的mini-USB線纜即可為設(shè)備供電納米。最好使用移動(dòng)電源,這樣它就不會(huì)與可能連接的設(shè)備發(fā)生意外的接地回路。
接通電源時(shí)會(huì)產(chǎn)生100Hz的正弦波。通過旋轉(zhuǎn)旋鈕,可以選擇其他20種波形中的一種。通過按下旋轉(zhuǎn),可以將光標(biāo)設(shè)置為頻率的任何數(shù)字,然后可以將其更改為所需的值。
可以使用電位計(jì)調(diào)節(jié)振幅,也可以使用緩沖器或可以使用放大的信號(hào)。
使用示波器檢查信號(hào)幅度非常有用,特別是當(dāng)信號(hào)向另一個(gè)設(shè)備提供電流時(shí)。如果汲取的電流太大,信號(hào)將被削波并且信號(hào)嚴(yán)重失真
對(duì)于非常低的頻率,輸出可以通過LED與10kΩ電阻串聯(lián)來顯示。用揚(yáng)聲器可以聽到音頻。確保將信號(hào)設(shè)置為非常小~0.5V,否則電流過高,信號(hào)開始削波。
-
波形發(fā)生器
+關(guān)注
關(guān)注
3文章
294瀏覽量
31466 -
Arduino
+關(guān)注
關(guān)注
188文章
6477瀏覽量
188114
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
是德33220A 函數(shù)任意波形發(fā)生器
任意波形發(fā)生器的基本架構(gòu)
是德任意波形發(fā)生器應(yīng)用領(lǐng)域
![是德任意<b class='flag-5'>波形</b><b class='flag-5'>發(fā)生器</b>應(yīng)用領(lǐng)域](https://file1.elecfans.com//web2/M00/0A/AB/wKgaomcSG42AVKDyAABcZ51xBL828.jpeg)
評(píng)論