步驟1:以每秒1M個(gè)樣本進(jìn)行采樣
我們稱這個(gè)示波器為“ArdOsc”(因?yàn)檫@是INO文件的名稱)。
六年前,Cristiano Lino Fontana為他的Girino設(shè)計(jì)發(fā)布了一個(gè)Instructable。
它有點(diǎn)工作但有問題。特別是,它的最大可靠采樣率約為37ksps(75ksps偶爾會(huì)凍結(jié))并且觸發(fā)器似乎無法正常工作。它也沒有顯示。
Girino很慢,因?yàn)樗褂弥袛?。由于保存和恢?fù)寄存器所需的代碼,中斷很慢。中斷是危險(xiǎn)的,因?yàn)樗鼈兛赡軐?dǎo)致軟件出現(xiàn)錯(cuò)誤,而且很少發(fā)生錯(cuò)誤。我已經(jīng)編寫了40年的嵌入式代碼,我盡可能避免中斷。輪詢好,中斷不好。注意我的話。
因此,ArdOsc禁用所有中斷,進(jìn)入緊密循環(huán)并在需要時(shí)從ADC中獲取數(shù)據(jù)。如果ADC沒有完成:太糟糕了 - 只要給我你所擁有的。它抓取1000個(gè)樣本(每個(gè)一個(gè)字節(jié)),然后重新啟用中斷并通過串行端口以115200波特率將字節(jié)發(fā)送到PC - 或者它抓取128個(gè)樣本并將其顯示在屏幕上。
Girino Instructable詳細(xì)描述了Arduino ADC。如果您有興趣,請(qǐng)閱讀并閱讀Atmega328p數(shù)據(jù)表。我只想告訴你大綱。
Arduino ADC使用“逐次逼近”。它測(cè)量最重要的位 - 是0還是1?得到它之后,它將其“到目前為止的答案”與輸入電壓進(jìn)行比較并測(cè)量下一個(gè)最重要的位。接下來。等等10位。這些位存儲(chǔ)在ADCH寄存器(前8位)和ADCL(后兩位。我只想要8位,所以我忽略了ADCL。
ADC測(cè)量全部10位時(shí)設(shè)置一個(gè)標(biāo)志。但我只想要8位,所以我忽略了標(biāo)志并讀取ADCH是否ADC完成。我原本以為這意味著我會(huì)得到“答案到目前為止”但我沒有。到目前為止的“答案”存儲(chǔ)在其他地方,我們得到的是上傳到ADCH的最后一個(gè)答案。這意味著在1Msps模式下,每個(gè)連續(xù)的4個(gè)樣本集都是相同的。 Arduino草圖使它們平滑,因此它們看起來很好但不會(huì)被愚弄:你看到250ksps。 (感謝AndrewJ177指出這一點(diǎn) - 請(qǐng)參閱下面的討論。)
測(cè)量每個(gè)位需要時(shí)間。該定時(shí)脈沖來自于將Atmega的時(shí)鐘(16MHz)除以“預(yù)分頻器”值:2,4,8,16,32,64或128.如果將預(yù)分頻器設(shè)置為2,則為0.125uS,這對(duì)于ADC正確地進(jìn)行比較 - 質(zhì)量很差。預(yù)分頻器= 4,表示0.25uS哪種工作 - 結(jié)果有噪聲。預(yù)分頻器= 8,表示0.5uS,對(duì)于8位非常合理。一般來說,每位給ADC的時(shí)間越長,工作效果就越好。
但如果你允許ADC,比如每位1uS那么它每個(gè)字節(jié)需要8uS,即125ksps - 相當(dāng)慢。如果將預(yù)分頻器設(shè)置得太低,則只能正確轉(zhuǎn)換前幾位,并且得到的圖形具有大的鋸齒狀步長。如果將預(yù)分頻器設(shè)置得過高,則需要等待很長時(shí)間才能進(jìn)行轉(zhuǎn)換。
因此,這是每比特時(shí)間和每秒采樣之間的權(quán)衡。
我們還必須考慮輸入信號(hào)需要多長時(shí)間才能改變ADC采樣保持電容的電壓。我們不會(huì)在每次轉(zhuǎn)換之前更改通道,因此充電時(shí)間不必與Atmel文檔建議的時(shí)間一樣長,但仍有效果。示波器可以達(dá)到20kHz,但響應(yīng)會(huì)下降。您可以看到一個(gè)50kHz的正弦波,但它的大小應(yīng)該是它的四分之一。
ArdOsc代碼只有一個(gè)完全正確的長度,以1Msps的速度采樣 - 即它需要16個(gè)時(shí)鐘周期環(huán)。另一個(gè)更復(fù)雜的循環(huán)會(huì)占用更長的采樣時(shí)間。
第2步:最簡單的示波器
最簡單的ArdOsc由Arduino Nano(328p 16MHz)4個(gè)電阻和3個(gè)電容組成。
示波器由USB連接供電并傳輸幀通過USB將數(shù)據(jù)傳送到PC。
輸入信號(hào)被送入ADC A0引腳。在極端電壓情況下,10k電阻可為Atmega提供一些保護(hù)。 Atmega引腳具有二極管,可防止其輸入超過Vcc(5V)或低于0V。二極管可以傳導(dǎo)高達(dá)1mA的電流,因此示波器的輸入信號(hào)可以安全地在-10V和+ 15V之間變化。 ADC引腳的輸入阻抗約為100M和14pF,因此額外的10k對(duì)ADC的精度影響不大。
ADC使用Vcc作為參考電壓讀取A0引腳電壓 - 因此測(cè)量范圍為0V至5V。 (實(shí)際上它是0到Vcc * 254/255。)不幸的是,Vcc很少是5V,所以程序讀取Vcc的實(shí)際值并適當(dāng)?shù)乩L制“示波器顯示”的格線。
輸入是也通過一個(gè)100nF電容饋入ADC A1引腳。 A1通過1M電阻連接到0.55V。因此,A1引腳看到輸入信號(hào)的交流分量以0.55V為中心。
ADC使用內(nèi)部1.1V參考電壓讀取A1引腳電壓 - 因此測(cè)量值為-0.55V至+ 0.55V。
0.55V是由Nano的3V3引腳的分壓器產(chǎn)生的。 3V3引腳電壓比USB連接的“5V”穩(wěn)定得多。 3V3引腳的輸出不完全是3.3V,因此您必須修整分壓器以提供0.55V的電壓。將示波器輸入連接到地,然后查看AC范圍顯示的“電壓”。調(diào)整R1直到線位于屏幕中心 - 我需要R1 = 33k。
我已經(jīng)展示了電路的條形板布局。條形板與Arduino Nano的尺寸相同,形成三明治。 Nano的底面位于條形板的銅側(cè)(因此在圖中,Nano從下方顯示)。將一些引腳焊接到條板上,然后將Nano安裝在引腳上并將它們焊接到Nano上。在我的圖表中,條形板的銅以青色顯示。紅線是條形板上的導(dǎo)線或柔性導(dǎo)線從電路板上傳出信號(hào)和電源。
步驟3:放大信號(hào)
“最簡單”示波器有兩個(gè)輸入范圍:
0V至5V
-0.55 V至+ 0.55V
但我們感興趣的許多信號(hào)都小于此值。因此我們可以添加兩個(gè)放大級(jí)。
LM358雙運(yùn)算放大器放大A1的AC信號(hào)。運(yùn)算放大器采用交流耦合,兩個(gè)輸入均以0.55V為中心。兩個(gè)運(yùn)算放大器級(jí)的增益都不到5倍。它們的輸出轉(zhuǎn)到A2和A3,因此Atmega可以選擇要采樣的信號(hào)。
示波器現(xiàn)在有四個(gè)輸入范圍:
0V到5V
-0.55V至+ 0.55V
-117mV至+ 117mV
-25mV至+ 25mV
它使用相同的INO文件并且作為“最簡單”的執(zhí)行。
將交流信號(hào)對(duì)中在0.55V附近的優(yōu)點(diǎn)是運(yùn)算放大器信號(hào)保持低電平。 LM258輸出不能在Vcc的1.5V范圍內(nèi);所以它的范圍是0V到3.5V - 可怕。
我已經(jīng)展示了電路的條形板布局。有兩個(gè)條板 - 一個(gè)用于Nano,另一個(gè)用于LM358。他們應(yīng)該形成三明治。電路板從元件側(cè)顯示。精細(xì)的柔性電線連接兩塊板。將電路板與粘墊,焊接支架或其他任何東西連在一起。在我的圖表中,條形板的銅以青色顯示。紅線是條形板上的線鏈或?qū)暹B接在一起的柔性線。我沒有顯示“測(cè)試引線”。
再一次,你可能需要修整分壓器給0.55V。將示波器輸入連接到地并調(diào)整R9直到線位于屏幕中央 - 我需要R9 = 33k。
LM358可能存在問題。如果信號(hào)大于LM358可以處理LM358的輸出失真。您應(yīng)該使用較高增益設(shè)置來查看小信號(hào)。如果你在大信號(hào)上使用它們,它們就會(huì)變形。你可以嘗試更好的芯片 - 如果你有一個(gè) - LM358是一個(gè)相當(dāng)差的芯片。
第4步:邏輯顯示
通常你在處理邏輯電平 - 示波器是否可以顯示幾個(gè)“邏輯”通道。是的 - 這比搞亂ADC更容易。
值得嗎?可能不是,但很容易這樣做為什么不呢?
示波器現(xiàn)在有五個(gè)輸入范圍:
0V到5V
-0.55V到+ 0.55V
-117mV至+ 117mV
-25mV至+ 25mV
邏輯
在“邏輯”中“模式,四個(gè)邏輯通道可以連接到Arduino引腳D8,D9,D10和D11。它們?cè)陲@示屏上顯示為四行。
D8至D11對(duì)應(yīng)于Atmega328p芯片的端口B引腳0至3.芯片將整個(gè)端口B讀入其采樣緩沖器而不是ADC輸出在ADCH寄存器中。
在1Msps模式下,你能看到的理論最大頻率是500kHz - 但你得到的只是一個(gè)“狀態(tài)變化”的實(shí)心條。實(shí)際上,250kHz信號(hào)更容易看到。
如果您不想要“邏輯”輸入,則不要將連接器包括在D8到D11中。在INO文件中,將bool常量bHasLogic設(shè)置為false。 (我嘗試重新編寫代碼以使用#define而不是bool const但是它很亂。)
步驟5:觸發(fā)器
假設(shè)您正在查看重復(fù)波形,例如正弦波。如果示波器在每次掃描時(shí)在屏幕上的相同位置顯示它,那就太好了。因此,示波器掃描應(yīng)該被啟動(dòng),就像波從負(fù)變?yōu)檎?/p>
首先我嘗試使用比較器來觸發(fā)掃描(即開始收集數(shù)據(jù))吉里諾做到了。它似乎很理想,但結(jié)果卻有缺點(diǎn)。我決定使用0.55V的固定觸發(fā)電壓 - 交流信號(hào)的中間位置。 Atmel允許您將比較器連接到當(dāng)前ADC通道。聽起來不錯(cuò)。但您必須關(guān)閉ADC,并在觸發(fā)發(fā)生時(shí)再次將其重新打開。 ADC需要一段時(shí)間才能啟動(dòng)。不太好。
所以我采取簡單的方法 - 運(yùn)行ADC并觀察它產(chǎn)生的值。當(dāng)它們從中途下降到中途時(shí),開始掃描。
在“邏輯”模式下,D8用作觸發(fā)器。
如果沒有信號(hào)則示波器應(yīng)該是自由運(yùn)行的。在等待一段時(shí)間后開始掃描。我選擇了最長等待250毫秒。程序初始化Timer1(一個(gè)16位定時(shí)器),然后等待,直到它計(jì)算了足夠數(shù)量的滴答。我只是看著Timer1的計(jì)數(shù)器 - 應(yīng)該有一個(gè)更好的方法來使用標(biāo)志,但它非常復(fù)雜,我無法讓它100%可靠地工作。
步驟6:測(cè)試信號(hào)輸出
您偶爾需要一個(gè)信號(hào)來測(cè)試您正在構(gòu)建的任何電路。很多人已經(jīng)有了信號(hào)發(fā)生器。
ArdOsc電路可以提供以下頻率的方波:
31250/1 = 31250Hz
31250/8 = 3906Hz
31250/32 = 977Hz
31250/64 = 488Hz
31250/128 = 244Hz
31250/256 = 122Hz
31250/1024 = 31Hz
測(cè)試信號(hào)在引腳D3上生成。
如果您不想要“測(cè)試信號(hào)”輸出,則不要包含連接器D3。在INO文件中,將bool常量bHasTestSignal設(shè)置為false。
步驟7:串行協(xié)議
示波器通過USB電纜將數(shù)據(jù)幀傳輸?shù)絇C,就好像它是115200波特,8位,無奇偶校驗(yàn)的串行數(shù)據(jù)流一樣。
PC可以將兩種命令發(fā)送到示波器。小寫命令是單個(gè)字節(jié):
‘a(chǎn)’將x軸設(shè)置為“1mS”= 1Msps
‘b’將x軸設(shè)置為“2mS”
‘c’將x軸設(shè)置為“5mS”
‘d’將x軸設(shè)置為“10mS”
‘e’將x軸設(shè)置為“ 20mS“
‘f’將x軸設(shè)置為”50mS“
‘g’將x軸設(shè)置為”100mS“
‘j’set y -axis to 5V
‘k’設(shè)置y軸為0.5V
‘l’設(shè)置y軸為0.1V‘m’設(shè)置y軸為200mV
‘n’將模式設(shè)置為“邏輯”
‘p’將觸發(fā)設(shè)置為下降
‘q’將觸發(fā)設(shè)置為上升
‘r ’設(shè)置測(cè)試信號(hào)關(guān)閉
‘s’設(shè)置測(cè)試信號(hào)31250Hz
‘t’設(shè)置測(cè)試信號(hào)3906Hz
‘u’設(shè)置測(cè)試信號(hào)976Hz
‘v’設(shè)置測(cè)試信號(hào)488Hz
‘w’設(shè)置測(cè)試信號(hào)244Hz
‘x’設(shè)置測(cè)試信號(hào)122Hz
‘y’設(shè)置測(cè)試信號(hào)30Hz
‘z’掃描并發(fā)送數(shù)據(jù)
掃描數(shù)據(jù)發(fā)送如下:
0xAA
0xBB
0xCC
1000字節(jié)數(shù)據(jù)
程序通過發(fā)送響應(yīng)每個(gè)命令一個(gè)Ack字節(jié) - “@”。
Arduino串行庫使用中斷來讀取串行輸入。掃描期間輸入關(guān)閉,因此輸入字節(jié)保留在Atmega的串行輸入寄存器中。掃描結(jié)束時(shí),串行庫收集字節(jié),程序可以讀取它。但是如果在掃描期間到達(dá)第二個(gè)字節(jié),它將被丟棄。
大寫命令可以包含幾個(gè)字節(jié),因此如果在掃描期間發(fā)送,則會(huì)損壞。在發(fā)送大寫命令之前,停止發(fā)送‘z’并等待結(jié)果。大寫命令僅用于調(diào)試和測(cè)試。有幾個(gè)可以包含整數(shù)十進(jìn)制值‘n’:
‘A’n將ADC通道設(shè)置為n
‘B’報(bào)告“電池”電壓= Vcc
‘D’報(bào)告狀態(tài)
‘F’n設(shè)置頻率pwm
‘R’n設(shè)置Vref為ADC
‘T’n觸發(fā)上升或下降
‘U’n設(shè)置預(yù)分頻器并發(fā)送掃描數(shù)據(jù)
‘V’n設(shè)置ADC的采樣周期
步驟8:添加顯示
示波器可以有自己的內(nèi)置顯示器--1.3“OLED。雖然1.3”聽起來很小,但這些顯示器非常清晰。
顯示器有1.3“OLE運(yùn)行在3.3V時(shí),由SH1106芯片通過I2C總線控制。(SPI版本可用,但我使用Arduino SPI引腳作為“邏輯”。)
我需要一個(gè)非??焖俚腁rduino庫和它最好是小的.U8glib庫很慢而且很大,所以我自己編寫。它只有很少的命令所以它叫做“SimpleSH1106”。
SH1106有一個(gè)內(nèi)置緩沖區(qū),每像素一位。它被安排為128列7個(gè)條帶(其他尺寸可用)。每個(gè)樣本高8像素,頂部有l(wèi)sb。在SH1106文檔中,swathes稱為“pages”,但“swathe”是計(jì)算機(jī)圖形學(xué)中的標(biāo)準(zhǔn)術(shù)語。您可以寫入的最小單位是一個(gè)字節(jié) - 從8像素邊界開始的8像素列。
我的庫在Arduino上沒有屏幕緩沖區(qū)所以所有命令都基于將整個(gè)字節(jié)寫入頁面。它不太方便,但你獲得1k的RAM。
Atmel328p內(nèi)置I2C驅(qū)動(dòng)程序連接到A4(SDA)和A5(SCL)引腳。 SDA和SCL需要上拉電阻;內(nèi)置的I2C驅(qū)動(dòng)程序使用Atmel328p弱上拉電阻約50kohm。 50k上拉電阻在低速下工作,但上升沿的速度不夠快,因此我在Nano的3V3引腳上增加了1k的上拉電阻。
Arduino IDE有一個(gè)名為Wire.h的I2C驅(qū)動(dòng)程序庫。這是一個(gè)不錯(cuò)的小型快速庫,但正如您對(duì)Arduino所期望的那樣,文檔記錄很少。該庫初始化I2C硬件以100kHz運(yùn)行,但我想要更快。因此在調(diào)用Wire.begin()之后,我將Atmel328p TWBR寄存器設(shè)置為較小的值。
生成的庫很快 - 示波器的掃描顯示在40mS內(nèi)繪制??梢允褂靡韵旅睿?/p>
void clearSH1106()用0字節(jié)(黑色)填充屏幕。
void DrawByteSH1106 繪制一個(gè)字節(jié)(一個(gè)8像素的列)。
int DrawImageSH1106 繪制圖像。
int DrawCharSH1106 繪制一個(gè)角色。
int DrawStringSH1106 繪制一個(gè)字符串。
int DrawIntSH1106 繪制一個(gè)整數(shù)。
圖像在程序存儲(chǔ)器(PROGMEM)中聲明。提供了一個(gè)Windows程序,用于將BMP文件轉(zhuǎn)換為SimpleSH1106的游程編碼圖像。
庫中給出了完整的描述。
我展示了一個(gè)條形板電路布局。有三個(gè)條形板 - 一個(gè)用于Nano,一個(gè)用于顯示器,一個(gè)用于LM358。他們應(yīng)該形成三明治。電路板從元件側(cè)顯示。精細(xì)的柔性電線連接兩塊板。將電路板與焊接的支架連接在一起。在我的圖表中,條形板的銅以青色顯示。紅線是條形板上的線鏈或?qū)暹B接在一起的柔性線。我沒有展示“測(cè)試線索”。
有些顯示器的引腳似乎有不同的順序。檢查它們。
我購買的0.9“顯示器的像素的x坐標(biāo)從x = 0到127運(yùn)行。使用1.3”顯示器它們是從x = 2到129.該庫包含一個(gè)常量“colOffset”,允許您調(diào)整顯示器的偏移量。
我已經(jīng)為SM PCB附加了Gerber文件和EasyPC源文件。這些尚未經(jīng)過測(cè)試,因此使用它們需要您自擔(dān)風(fēng)險(xiǎn)。
步驟9:不同的屏幕
模擬顯示屏顯示帶有刻度的波形。橫軸表示時(shí)間im mS??v軸表示伏特,虛線為4V,0.5V,0.1V和20mV;在DC模式下,0V位于底部;在AC模式下,0V在中間顯示為虛線。
邏輯顯示屏顯示四個(gè)通道位。 D8是頂部通道,D11是底部通道。橫軸表示以mS為單位的時(shí)間。
有兩個(gè)按鈕:一個(gè)用于調(diào)整時(shí)基軸的“水平”按鈕和一個(gè)用于調(diào)整增益軸的“垂直”按鈕。如果您按住任一按鈕1秒鐘,則會(huì)出現(xiàn)一個(gè)菜單屏幕。
當(dāng)菜單顯示時(shí),“垂直”按鈕會(huì)滾動(dòng)瀏覽不同的設(shè)置,“水平”按鈕會(huì)設(shè)置每個(gè)設(shè)置的值。 。如果您沒有按任何一個(gè)按鈕2秒鐘,程序?qū)⒎祷仫@示波形。
步驟10:頻率計(jì)數(shù)器
通過使用Timer1和Timer2,ArdOsc也可以充當(dāng)頻率計(jì)數(shù)器。頻率計(jì)有兩種工作方式:在一秒鐘內(nèi)計(jì)算上升沿的數(shù)量,或者測(cè)量從一個(gè)上升沿到下一個(gè)上升沿的時(shí)間。
再一次,值得嗎?也許。我不記得我需要一個(gè)頻率計(jì)數(shù)器的時(shí)間。為什么不這樣做很容易?
為了計(jì)算D8“邏輯”信號(hào)的邊沿,程序選擇D5作為Timer1的時(shí)鐘輸入(16位計(jì)數(shù)器/定時(shí)器)。 D5外部連接到D8 - “邏輯”輸入之一。 Timer0(一個(gè)8位定時(shí)器)設(shè)置為每毫秒溢出一次。每次Timer0溢出時(shí),都會(huì)產(chǎn)生中斷。 1000次中斷后,Timer1中的計(jì)數(shù)顯示為“頻率”。如果Timer1計(jì)數(shù)超過65536,則會(huì)產(chǎn)生中斷并記錄此類中斷的數(shù)量。
要測(cè)量從一個(gè)邊沿到下一個(gè)AC信號(hào)的時(shí)間,定時(shí)器1被設(shè)置為空閑 - 運(yùn)行16MHz計(jì)時(shí)器。 ICR1寄存器設(shè)置為在比較器變?yōu)楦唠娖綍r(shí)捕獲Timer1中的當(dāng)前值。比較器的負(fù)輸入連接到A3,正輸入連接到D6。每次比較器變?yōu)楦唠娖綍r(shí),都會(huì)產(chǎn)生中斷。一個(gè)中斷和下一個(gè)中斷之間的時(shí)間是周期(1/頻率)。程序顯示一秒鐘內(nèi)測(cè)量的平均頻率。比較器意味著在上升沿觸發(fā),但沒有雜音,因此如果有噪聲,下降沿將被視為上升沿。這在低頻時(shí)尤其重要,因此,例如,10Hz信號(hào)將被報(bào)告為20Hz。
同時(shí),Timer2可能產(chǎn)生“測(cè)試信號(hào)”。因此沒有定時(shí)器可用,我們不能使用正常的Arduino函數(shù)delay(),millis()等。
頻率計(jì)數(shù)器的代碼基于Nick Gammon的優(yōu)秀網(wǎng)頁。
如果您不想輸入“頻率計(jì)數(shù)器”,則不需要從D5到D8的連接。在INO文件中,將bool常量bHasFreq設(shè)置為false。
步驟11:電壓表
示波器還可以作為電壓表,可以測(cè)量大約-20V和+ 20V之間的電壓。它使用Atmega328p的內(nèi)置帶隙電壓參考,因此相當(dāng)準(zhǔn)確。
值得嗎?功能的數(shù)量越來越荒謬。好的,為什么不呢?
在A6測(cè)量電壓,ADC使用Vcc(即大約5V)作為參考。因?yàn)椤?V”是近似值,我們還通過將其與1.1V帶隙進(jìn)行比較來測(cè)量Vcc的實(shí)際值。根據(jù)數(shù)據(jù)表,帶隙僅為10%準(zhǔn)確,但我嘗試的幾個(gè)接近1.1V。
要測(cè)量的輸入電壓通過電阻網(wǎng)絡(luò)。我選擇了上面顯示的值
Ra = 120k
Rb = 150k
Rc = 470k
你會(huì)在MeasureVoltage()函數(shù)的開頭附近找到這些常數(shù)。
Rc告訴你電壓表的輸入阻抗。與便宜的數(shù)字萬用表相比,470k是低的,但是足夠高,可以使用。
電壓表可以測(cè)量的最低電壓是
-5 * Rc/Ra = -19.6V
它可以測(cè)量的最高值是
5 * Rc/Rb + 5 = 20.7V
如果需要,可以選擇不同的電阻。
如果超過這些電壓怎么辦?沒事的。如果Arduino輸入引腳上的電壓高于Vcc或低于0V,保護(hù)二極管可以承受1mA電流。使用470k意味著理論上可以測(cè)試470V的電壓。但是我不相信在470V的條形板絕緣,你不應(yīng)該玩這樣的電壓和這種原油電路。
如果想要精確的測(cè)量,你需要校準(zhǔn)電壓表。將電壓表輸入“探頭”連接到0V,看看電壓表報(bào)告的內(nèi)容。調(diào)整calibrateZero常數(shù),直到電壓表讀數(shù)為“0.00V”?,F(xiàn)在將電壓表輸入連接到已知電壓源 - 如果你有一個(gè)不錯(cuò)的萬用表,那么測(cè)量一個(gè)9V電池的電壓。調(diào)整calibrateVolts常數(shù)直到電壓表給出正確的答案。
如果您不想要“電壓表”輸入,那么您不需要連接到D6的電阻。在INO文件中,將bool常量bHasVoltmeter設(shè)置為false。
步驟12:測(cè)試引線
示波器通常具有花哨的測(cè)試引線。我通常使用無焊接面包板,所以我只是附加了一種用于面包板的插入式電線。由于示波器由5V供電,我將其連接到我在面包板上使用的任何5V和0V電源以及更多的插入式電線。
步驟13:添加信號(hào)發(fā)生器
信號(hào)發(fā)生器是一個(gè)非常有用的部分測(cè)試裝備這個(gè)使用AD9833模塊。我在這里描述了一個(gè)獨(dú)立的版本;此步驟描述如何將一個(gè)添加到ArdOsc。 (此步驟是對(duì)此原始Instructable的編輯。)
AD9833可以生成0.1 MHz至12.5 MHz的正弦波,三角波和方波 - 本項(xiàng)目中的軟件限制為1Hz至100kHz。它可以用作掃描發(fā)生器。掃頻發(fā)生器有助于測(cè)試濾波器,放大器等的頻率響應(yīng)。
我選擇的AD9833模塊與此類似。我不是說這是最好或最便宜的供應(yīng)商,但你應(yīng)該買一張看起來像那張照片。
模塊之間的連接是:
地面連接在一起
5V = AD9833的Vcc
D2 = FSync
D13 = Clk
D12 =數(shù)據(jù)
上面的示意圖是步驟8中的原理圖的補(bǔ)充。您可以使用另一塊stripboard將另一層添加到步驟8中描述的三明治中。
我已在步驟中更新了INO文件8包括控制AD9833的代碼。如果添加AD9833,則應(yīng)將bHasSigGen變量設(shè)置為true(我將其保留為false,因?yàn)榇蠖鄶?shù)人沒有AD9833)。
新菜單控制AD9833。它允許您選擇頻率和波形以及是否掃描頻率。
掃描發(fā)生器在1,5或20秒內(nèi)反復(fù)輸出逐漸增加的頻率。它以“min”頻率開始,1,5或20秒后處于“最大”頻率。頻率變化是對(duì)數(shù)的,并且每毫秒改變一次。在掃描頻率時(shí),示波器無法顯示頻率。
在不同模式下,掃描發(fā)生器輸出頻率,顯示示波器輸入,更改頻率,顯示示波器輸入等。頻率從“min”變?yōu)椤癿ax”超過這些步驟的20,100或500(或稱為“幀”)。頻率變化比“掃描”模式更加粗糙,但您可以觀察正在發(fā)生的事情。
步驟14:未來發(fā)展
可能是電池供電?是的,只需添加連接到Nano的RAW引腳的9V PP3。它通常使用25mA。
它可以由單個(gè)鋰電池供電嗎?這不是那么簡單,因?yàn)?.7V可能還不夠。在DC模式下顯示電壓的代碼已經(jīng)讀取Vcc電壓,因此它將調(diào)整刻度位置。 Nano可以在3.7V(進(jìn)入“5V”引腳)上運(yùn)行。但是,3V3輸出可能不會(huì)達(dá)到3.3V;監(jiān)管機(jī)構(gòu)的輟學(xué)率太大了。你可以直接從鋰電池的3.7V開始運(yùn)行顯示器,但是你從哪里獲得0.55V的參考電壓?它需要穩(wěn)定。也許您可以使用LM317(如果將其Adjust引腳連接到0V,則可提供穩(wěn)定的1.25V電壓 - 該電流下降應(yīng)該足夠低)?;蛘吣梢允褂?a target="_blank">LED作為齊納?;蛘?,只要您汲取微小電流,就可以使用Vref引腳上的電壓 - 將其連接到發(fā)射極跟隨器。您可能需要將LM358替換為工作電壓較低的運(yùn)算放大器。
觸發(fā)器可以更好嗎?數(shù)字示波器在觸發(fā)之前將數(shù)據(jù)收集到循環(huán)緩沖區(qū)中。觸發(fā)水平可以變化嗎?你能一次掃一掃嗎?是的,你可以做所有這些,但你可能更好只需購買“適當(dāng)?shù)摹笔静ㄆ鳌?/p>
你能使用Pro Mini嗎?是的,但這不值得。您需要為顯示器和0.55V參考電壓制作自己的3V3信號(hào)。如果您要將數(shù)據(jù)發(fā)送到PC,那么您將需要一個(gè)串口轉(zhuǎn)USB。只需使用Nano。
它可以是無線的嗎?是。添加自己的藍(lán)牙與HC-05(Instructables可用)并連接到PC或Android手機(jī)。 ESP 8266對(duì)于這個(gè)項(xiàng)目來說會(huì)更麻煩。
你能用更大的顯示器嗎?是的,但為什么這么麻煩,質(zhì)量不是那么好。只需買一臺(tái)示波器。
你能做得比LM358好嗎?是。如果您的組件抽屜中有各種運(yùn)算放大器,請(qǐng)嘗試使用它們。讓我知道哪一個(gè)效果最好。
-
示波器
+關(guān)注
關(guān)注
113文章
6161瀏覽量
184278
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論