資料介紹
描述
我制作了 2 種不同的示波器,這些都在這個(gè)平臺(tái)上有特色?,F(xiàn)在我想到了雙通道示波器。這個(gè)有主要的微控制器作為 Arduino 和1.3" OLED 顯示器。這次我還有電池操作選項(xiàng)和板載充電電路。您可以先在面包板上制作它,然后使用下面給出的 PCB 布局。非常感謝 JLCPCB贊助這個(gè)雙通道 Arduino 示波器項(xiàng)目。
這不僅是范圍,還有 DDS_PWM(具有 8 種不同波形的函數(shù)發(fā)生器)、脈沖發(fā)生器和頻率計(jì)數(shù)器的一些額外功能。我在日語網(wǎng)頁上找到了這個(gè)項(xiàng)目,但所有的解釋都在這里給你們看。
特征:
最大實(shí)時(shí)采樣率為 17.2ksps(2 個(gè)通道)和 307ksps(一個(gè)通道)。單通道最大等效時(shí)間采樣率為 16Msps。
單通道-30Khz帶寬
屏幕 - 伏特/格和時(shí)間/格
占空比監(jiān)控
小型 1.3 英寸 I2C
交流/直流測(cè)量選項(xiàng)
模式改變,保持狀態(tài)功能
雙通道切換模式
脈沖發(fā)生器選項(xiàng)
DDS_PWM波形發(fā)生器
頻率計(jì)數(shù)器
低電池消耗
便攜式和袖珍型
重要的提示:
該項(xiàng)目?jī)H用于教育目的,展示了 16Mhz 8 位微控制器板的功能。此 MCU 可支持 50KHz 以下的頻率,因此不適用于商業(yè)和專業(yè)用途。這樣,該項(xiàng)目也可以為我命名為 POOR MAN OSCILLOSCOPE。我還發(fā)現(xiàn)這對(duì)下面與音頻相關(guān)的項(xiàng)目很有幫助。
展示:
1.3寸OLED顯示屏帶I2C功能,有SSD1306和SH1106兩種不同型號(hào),可根據(jù)需要改碼。我們必須取消注釋我們?cè)谶@個(gè)項(xiàng)目中使用的是哪個(gè)版本的 LCD。并且屏幕能夠在兩個(gè)通道中用占空比和頻率來表示波的性質(zhì)。
使用的組件:
阿杜諾納米
1M電阻
10k電阻
1.3英寸OLED顯示屏
100nF 電容
4個(gè)觸覺按鈕
5v電源
電路圖:
與往常一樣,這是圖示電路,我將電路最小化為一個(gè)通道的操作。如果您想使用兩個(gè)通道,只需按照下面給出的主電路圖進(jìn)行操作即可。
非常感謝“ Cirkit designer ”軟件,證明它是一個(gè)以圖形格式呈現(xiàn)電路和布線的好工具。對(duì)于新手或?qū)W生來說,這將是一種更容易理解的方法。
目前,cirkit designer 對(duì)所有人免費(fèi)提供(從此處下載),因此沒有理由不利用此優(yōu)惠。作為回顧,我發(fā)現(xiàn)這對(duì)我的項(xiàng)目非常有幫助。該軟件的一些特殊功能是:代碼編譯、BOM 管理器、面包板和自定義組件創(chuàng)建。
電路圖:
1 / 2 ?雙通道簡(jiǎn)化示意圖
電路說明:
?
Pin usage A0 oscilloscope probe ch1 A1 oscilloscope probe ch2 A4 I2C SDA A5 I2C SCL D3 PWM output for trigger level D4 Up button D6 trigger level input D8 Down button D9 Right button D10 Pulse generator output D11 PWM DDS output D12 Left button
?
這種小型示波器可以使用 5volts @200mA 供電。您可以在上面看到兩個(gè)不同的電路,兩者都很好,但我制作的電路經(jīng)過簡(jiǎn)化并且在所有情況下都最有用。您可以根據(jù)自己的情況修改電路。
看看示波器中那些漂亮的波浪就知道了。
1 / 4 ?方形 380HZ
這次電路還具有外部頻率測(cè)量和 PWM、DDS 脈沖輸出選項(xiàng),具有 2 個(gè)通道。4 觸覺按鈕在下拉時(shí)觸發(fā)。所有的電阻都是為了適當(dāng)?shù)腷aising。作為一項(xiàng)改進(jìn),您可以制作電路的 PCB 布局,并以 2 美元的價(jià)格從JLCPCB訂購(gòu)它們。順便說一句,如果你想使用我的,下面給出你可以下載。使用我的鏈接注冊(cè)將為您提供 PCB 優(yōu)惠券作為原型 SMT 服務(wù)的獎(jiǎng)勵(lì)。為什么不免費(fèi)使用價(jià)值 27 美元的優(yōu)惠券。
探索菜單:
完整菜單比以前的 arduscope 項(xiàng)目有更多的選項(xiàng)。然而,我沒有得到大屏幕。可能下次我會(huì)使用 TFT 和 mega2560 板構(gòu)建一個(gè)。
通道切換選項(xiàng):
不使用時(shí)關(guān)閉第二個(gè)通道,因?yàn)檫@也會(huì)增加采樣率。
電壓讀數(shù):
還將顯示信號(hào)的最大值和最小值,稱為幅度。
電壓/分區(qū):
時(shí)間/部門:
代碼:
我得到了十六進(jìn)制格式的代碼,但確認(rèn)在 INO Arduino 文件中有一些支持文件。我得到了這些支持文件的 Arduino INO 代碼。一旦我得到完整的代碼,我會(huì)分享,你會(huì)自己改變它。HEX 文件仍然正常工作。如果您不知道如何使用 HEX文件對(duì) Arduino 進(jìn)行編程,請(qǐng)查看本教程。從這里下載這個(gè)項(xiàng)目的代碼。
頻率計(jì)數(shù)器:
?
//int dataMin; // buffer minimum value (smallest=0) //int dataMax; // maximum value (largest=1023) //int dataAve; // 10 x average value (use 10x value to keep accuracy. so, max=10230) //int dataRms; // 10x rms. value void dataAnalize() { // 波形の分析 get various information from wave form long d; long sum = 0; byte *waveBuff = data[sample+0]; // search max and min value dataMin = 255; // min value initialize to big number dataMax = 0; // max value initialize to small number for (int i = 0; i < SAMPLES; i++) { // serach max min value d = waveBuff[i]; sum = sum + d; if (d < dataMin) { // update min dataMin = d; } if (d > dataMax) { // updata max dataMax = d; } } // calculate average dataAve = (10 * sum + (SAMPLES / 2)) / SAMPLES; // Average value calculation (calculated by 10 times to improve accuracy) // 実効値の計(jì)算 rms value calc. // sum = 0; // for (int i = 0; i < SAMPLES; i++) { // バッファ全體に対し to all buffer // d = waveBuff[i] - (dataAve + 5) / 10; // オーバーフロー防止のため生の値で計(jì)算(10倍しない) // sum += d * d; // 二乗和を積分 // } // dataRms = sqrt(sum / SAMPLES); // 実効値の10倍の値 get rms value } void freqDuty() { // 周波數(shù)とデューティ比を求める detect frequency and duty cycle value from waveform data int swingCenter; // center of wave (half of p-p) float p0 = 0; // 1-st posi edge float p1 = 0; // total length of cycles float p2 = 0; // total length of pulse high time float pFine = 0; // fine position (0-1.0) float lastPosiEdge; // last positive edge position float pPeriod; // pulse period float pWidth; // pulse width int p1Count = 0; // wave cycle count int p2Count = 0; // High time count boolean a0Detected = false; // boolean b0Detected = false; boolean posiSerch = true; // true when serching posi edge swingCenter = (3 * (dataMin + dataMax)) / 2; // calculate wave center value for (int i = 1; i < SAMPLES - 2; i++) { // scan all over the buffer if (posiSerch == true) { // posi slope (frequency serch) if ((sum3(i) <= swingCenter) && (sum3(i + 1) > swingCenter)) { // if across the center when rising (+-3data used to eliminate noize) pFine = (float)(swingCenter - sum3(i)) / ((swingCenter - sum3(i)) + (sum3(i + 1) - swingCenter) ); // fine cross point calc. if (a0Detected == false) { // if 1-st cross a0Detected = true; // set find flag p0 = i + pFine; // save this position as startposition } else { p1 = i + pFine - p0; // record length (length of n*cycle time) p1Count++; } lastPosiEdge = i + pFine; // record location for Pw calcration posiSerch = false; } } else { // nega slope serch (duration serch) if ((sum3(i) >= swingCenter) && (sum3(i + 1) < swingCenter)) { // if across the center when falling (+-3data used to eliminate noize) pFine = (float)(sum3(i) - swingCenter) / ((sum3(i) - swingCenter) + (swingCenter - sum3(i + 1)) ); if (a0Detected == true) { p2 = p2 + (i + pFine - lastPosiEdge); // calucurate pulse width and accumurate it p2Count++; } posiSerch = true; }
?
脈沖發(fā)生器:
?
void dataAnalize() { // 波形の分析 get various information from wave form long d; long sum = 0; byte *waveBuff = data[sample+0]; // search max and min value dataMin = 255; // min value initialize to big number dataMax = 0; // max value initialize to small number for (int i = 0; i < SAMPLES; i++) { // serach max min value d = waveBuff[i]; sum = sum + d; if (d < dataMin) { // update min dataMin = d; } if (d > dataMax) { // updata max dataMax = d; } } // calculate average dataAve = (10 * sum + (SAMPLES / 2)) / SAMPLES; // Average value calculation (calculated by 10 times to improve accuracy) // 実効値の計(jì)算 rms value calc. // sum = 0; // for (int i = 0; i < SAMPLES; i++) { // バッファ全體に対し to all buffer // d = waveBuff[i] - (dataAve + 5) / 10; // オーバーフロー防止のため生の値で計(jì)算(10倍しない) // sum += d * d; // 二乗和を積分 // } // dataRms = sqrt(sum / SAMPLES); // 実効値の10倍の値 get rms value } void freqDuty() { // 周波數(shù)とデューティ比を求める detect frequency and duty cycle value from waveform data int swingCenter; // center of wave (half of p-p) float p0 = 0; // 1-st posi edge float p1 = 0; // total length of cycles float p2 = 0; // total length of pulse high time float pFine = 0; // fine position (0-1.0) float lastPosiEdge; // last positive edge position float pPeriod; // pulse period float pWidth; // pulse width int p1Count = 0; // wave cycle count int p2Count = 0; // High time count boolean a0Detected = false; // boolean b0Detected = false; boolean posiSerch = true; // true when serching posi edge swingCenter = (3 * (dataMin + dataMax)) / 2; // calculate wave center value for (int i = 1; i < SAMPLES - 2; i++) { // scan all over the buffer if (posiSerch == true) { // posi slope (frequency serch) if ((sum3(i) <= swingCenter) && (sum3(i + 1) > swingCenter)) { // if across the center when rising (+-3data used to eliminate noize) pFine = (float)(swingCenter - sum3(i)) / ((swingCenter - sum3(i)) + (sum3(i + 1) - swingCenter) ); // fine cross point calc. if (a0Detected == false) { // if 1-st cross a0Detected = true; // set find flag p0 = i + pFine; // save this position as startposition } else { p1 = i + pFine - p0; // record length (length of n*cycle time) p1Count++; } lastPosiEdge = i + pFine; // record location for Pw calcration posiSerch = false; } } else { // nega slope serch (duration serch) if ((sum3(i) >= swingCenter) && (sum3(i + 1) < swingCenter)) { // if across the center when falling (+-3data used to eliminate noize) pFine = (float)(sum3(i) - swingCenter) / ((sum3(i) - swingCenter) + (swingCenter - sum3(i + 1)) ); if (a0Detected == true) { p2 = p2 + (i + pFine - lastPosiEdge); // calucurate pulse width and accumurate it p2Count++; } posiSerch = true; } }
?
從這里下載代碼文件,目前為十六進(jìn)制格式。要在 Arduino 中上傳十六進(jìn)制文件,請(qǐng)參閱我們之前的教程。
電路板文件:
感謝積聯(lián)電路和EasyEda贊助并生成了如此優(yōu)質(zhì)的PCB 原型。訂購(gòu)過程也很簡(jiǎn)單,如下所示。
下載我的 Gerber 文件,轉(zhuǎn)到 JLCPCB,然后選擇厚度顏色參數(shù),只需 2 美元即可訂購(gòu) 5 個(gè) pcb。
測(cè)量:
這里的大問題是獲得正確的頻率,正如我所說,最好先使用音頻頻率。所以我將它與在線音調(diào)生成器工具配對(duì)。這將使我們能夠檢查精度以及不同的波形。
此處顯示了不同頻率下的正弦波測(cè)量值。
1 / 2
測(cè)量 2:
1 / 2
測(cè)量3:
1 / 2
觀察:
回到最大頻率和振幅,它能夠以 5Khz 的最大頻率測(cè)量高達(dá) 50v 的電壓。是的,波在這個(gè)頻率以上是扭曲的。
下一個(gè)更新:
下次我們將返回一個(gè)更大的微控制器 (2560),也許還有一個(gè) TFT 屏幕。順便說一句,這是我上一個(gè) Arduscope 項(xiàng)目的鏈接,該項(xiàng)目支持高達(dá) 10khz 頻率的 1 通道和Raspberry pi Pico 項(xiàng)目,模擬信號(hào)帶寬為 200Khz。再次感謝 JLCPCB。
- SC3361雙通道 16 位 250MSPS DAC替代AD9747
- Arduino LCD觸摸屏雙通道示波器
- 基于Arduino Zero/MKR的示波器
- 基于Arduino平臺(tái)的DIY示波器
- DIY Arduino示波器
- 雙通道UWB隧道人員定位解決方案
- 700mA雙通道定電流LED驅(qū)動(dòng)芯片NU512規(guī)格書 47次下載
- 雙通道數(shù)字隔離器ADuM1200/ADuM1201數(shù)據(jù)手冊(cè) 17次下載
- 700mA雙通道定電流LED驅(qū)動(dòng)芯片NU512數(shù)據(jù)手冊(cè) 33次下載
- Arduino示波器制作資料說明 35次下載
- 考慮雙通道隨機(jī)時(shí)延的區(qū)域互聯(lián)電網(wǎng)AGC方法 1次下載
- 雙通道接收機(jī)的設(shè)計(jì) 68次下載
- 雙通道音頻功率放大電路CD8227GP
- CD6282CS 4.6WX2雙通道音頻功率放大電路
- 基于FPGA的雙通道簡(jiǎn)易可存儲(chǔ)示波器設(shè)計(jì)
- 中微愛芯超高速雙通道比較器AiP3212概述 199次閱讀
- 示波器和信號(hào)發(fā)生器的使用方法 1916次閱讀
- 雙通道數(shù)字隔離器的用途 1345次閱讀
- 基于TSH22的雙通道音頻線路驅(qū)動(dòng)器的電路圖 1225次閱讀
- 國(guó)產(chǎn)車規(guī)級(jí)雙通道低壓比較器——RS393XK-Q1 1465次閱讀
- 雙通道三核便攜示波器FNIRSI-1013D拆解評(píng)測(cè) 1.7w次閱讀
- 基于STM32G031開發(fā)板的雙通道簡(jiǎn)易示波器設(shè)計(jì) 3267次閱讀
- 示波器的通道間隔離度怎么測(cè)量? 5043次閱讀
- 微雪電子雙通道隔離型CAN總線擴(kuò)展板介紹 3573次閱讀
- SM2202P雙通道DIMPWM調(diào)光驅(qū)動(dòng)電iC替換長(zhǎng)運(yùn)通雙通道調(diào)光電源應(yīng)用方案 2136次閱讀
- 解析示波器通道耦合與觸發(fā)耦合的區(qū)別 9012次閱讀
- 示波器輸入耦合方式解析(及示波器輸入通道) 4.3w次閱讀
- 混合信號(hào)示波器多少條通道合適? 1163次閱讀
- 自制雙通道數(shù)字示波器 1.9w次閱讀
- 基于DSP的雙通道數(shù)字存儲(chǔ)示波器 3694次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論