在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>基于Arduino的雙通道示波器

基于Arduino的雙通道示波器

2023-02-03 | zip | 0.01 MB | 次下載 | 2積分

資料介紹

描述

我制作了 2 種不同的示波器,這些都在這個平臺上有特色。現在我想到了雙通道示波器。這個有主要的微控制器作為 Arduino1.3" OLED 顯示器。這次我還有電池操作選項和板載充電電路。您可以先在面包板上制作它,然后使用下面給出的 PCB 布局。非常感謝 JLCPCB贊助這個雙通道 Arduino 示波器項目。

mini_20220320_113232_yVRzn4MTQW.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

這不僅是范圍,還有 DDS_PWM(具有 8 種不同波形的函數發生器)、脈沖發生器和頻率計數器的一些額外功能。我在日語網頁上找到了這個項目,但所有的解釋都在這里給你們看。

特征:

最大實時采樣率為 17.2ksps(2 個通道)和 307ksps(一個通道)。單通道最大等效時間采樣率為 16Msps。

20220320_111601_VVX5aHKUM7.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

單通道-30Khz帶寬

屏幕 - 伏特/格和時間/格

占空比監控

小型 1.3 英寸 I2C

交流/直流測量選項

模式改變,保持狀態功能

雙通道切換模式

脈沖發生器選項

DDS_PWM波形發生器

頻率計數器

低電池消耗

便攜式和袖珍型

重要的提示:

該項目僅用于教育目的,展示了 16Mhz 8 位微控制器板的功能。此 MCU 可支持 50KHz 以下的頻率,因此不適用于商業和專業用途。這樣,該項目也可以為我命名為 POOR MAN OSCILLOSCOPE。我還發現這對下面與音頻相關的項目很有幫助。

展示:

mini_20220320_112957_mcMp7Ayn5U.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

1.3寸OLED顯示屏帶I2C功能,有SSD1306和SH1106兩種不同型號,可根據需要改碼。我們必須取消注釋我們在這個項目中使用的是哪個版本的 LCD。并且屏幕能夠在兩個通道中用占空比和頻率來表示波的性質。

使用的組件:

阿杜諾納米

1M電阻

10k電阻

1.3英寸OLED顯示屏

100nF 電容

4個觸覺按鈕

5v電源

電路圖:

ice_screenshot_20220320-225332_BzZ0cwGm1i.png?auto=compress%2Cformat&w=740&h=555&fit=max

與往常一樣,這是圖示電路,我將電路最小化為一個通道的操作。如果您想使用兩個通道,只需按照下面給出的主電路圖進行操作即可。

非常感謝“ Cirkit designer ”軟件,證明它是一個以圖形格式呈現電路和布線的好工具。對于新手或學生來說,這將是一種更容易理解的方法。

目前,cirkit designer 對所有人免費提供(從此處下載),因此沒有理由不利用此優惠。作為回顧,我發現這對我的項目非常有幫助。該軟件的一些特殊功能是:代碼編譯、BOM 管理器、面包板和自定義組件創建。

電路圖:

ice_screenshot_20220322-120530_buiTKLAUX1.png?auto=compress%2Cformat&w=740&h=555&fit=max

1 / 2 ?雙通道簡化示意圖

電路說明:

?

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 供電。您可以在上面看到兩個不同的電路,兩者都很好,但我制作的電路經過簡化并且在所有情況下都最有用。您可以根據自己的情況修改電路。

看看示波器中那些漂亮的波浪就知道了。

square_380hz_noCLB8Z73B.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

1 / 4 ?方形 380HZ

這次電路還具有外部頻率測量和 PWM、DDS 脈沖輸出選項,具有 2 個通道。4 觸覺按鈕在下拉時觸發。所有的電阻都是為了適當的baising。作為一項改進,您可以制作電路的 PCB 布局,并以 2 美元的價格從JLCPCB訂購它們。順便說一句,如果你想使用我的,下面給出你可以下載。使用我的鏈接注冊將為您提供 PCB 優惠券作為原型 SMT 服務的獎勵。為什么不免費使用價值 27 美元的優惠券。

探索菜單:

完整菜單比以前的 arduscope 項目有更多的選項。然而,我沒有得到大屏幕。可能下次我會使用 TFT 和 mega2560 板構建一個。

通道切換選項:

不使用時關閉第二個通道,因為這也會增加采樣率。

電壓讀數:

還將顯示信號的最大值和最小值,稱為幅度。

電壓/分區:

時間/部門:

代碼:

我得到了十六進制格式的代碼,但確認在 INO Arduino 文件中有一些支持文件。我得到了這些支持文件的 Arduino INO 代碼。一旦我得到完整的代碼,我會分享,你會自己改變它。HEX 文件仍然正常工作。如果您不知道如何使用 HEX文件對 Arduino 進行編程,請查看本教程。從這里下載這個項目的代碼。

頻率計數器:

?

//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)

  // 実効値の計算 rms value calc.
//  sum = 0;
//  for (int i = 0; i < SAMPLES; i++) {     // バッファ全體に対し to all buffer
//    d = waveBuff[i] - (dataAve + 5) / 10;  // オーバーフロー防止のため生の値で計算(10倍しない)
//    sum += d * d;                          // 二乗和を積分
//  }
//  dataRms = sqrt(sum / SAMPLES);          // 実効値の10倍の値 get rms value
}

void freqDuty() {                               // 周波數とデューティ比を求める 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;
      }

?

脈沖發生器:

?

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)

  // 実効値の計算 rms value calc.
//  sum = 0;
//  for (int i = 0; i < SAMPLES; i++) {     // バッファ全體に対し to all buffer
//    d = waveBuff[i] - (dataAve + 5) / 10;  // オーバーフロー防止のため生の値で計算(10倍しない)
//    sum += d * d;                          // 二乗和を積分
//  }
//  dataRms = sqrt(sum / SAMPLES);          // 実効値の10倍の値 get rms value
}

void freqDuty() {                               // 周波數とデューティ比を求める 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;
      }
    }

?

從這里下載代碼文件,目前為十六進制格式。要在 Arduino 中上傳十六進制文件,請參閱我們之前的教程。

電路板文件:

ghdg_ZQDvB38xfE.png?auto=compress%2Cformat&w=740&h=555&fit=max

感謝積聯電路和EasyEda贊助并生成了如此優質的PCB 原型。訂購過程也很簡單,如下所示。

下載我的 Gerber 文件,轉到 JLCPCB,然后選擇厚度顏色參數,只需 2 美元即可訂購 5 個 pcb。

測量:

這里的大問題是獲得正確的頻率,正如我所說,最好先使用音頻頻率。所以我將它與在線音調生成器工具配對。這將使我們能夠檢查精度以及不同的波形。

此處顯示了不同頻率下的正弦波測量值。

1_HtmffATKL1.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

1 / 2

測量 2:

3_cfSuPBK40d.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

1 / 2

測量3:

5_WorKlrvMax.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

1 / 2

觀察:

8k_8m5DysuPuo.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

回到最大頻率和振幅,它能夠以 5Khz 的最大頻率測量高達 50v 的電壓。是的,波在這個頻率以上是扭曲的。

下一個更新:

mini_wer_FayxNNPIV5.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

下次我們將返回一個更大的微控制器 (2560),也許還有一個 TFT 屏幕。順便說一句,這是我上一個 Arduscope 項目的鏈接,該項目支持高達 10khz 頻率的 1 通道和Raspberry pi Pico 項目,模擬信號帶寬為 200Khz。再次感謝 JLCPCB。

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 天天摸夜夜操 | 久久精品国产99精品最新 | 亚洲成年 | 免费在线黄色网址 | 爽好舒服老师快点 | 国产一级做a爱免费视频 | 亚洲狠狠婷婷综合久久久久图片 | 色婷婷在线视频观看 | 天天色天天操天天 | 亚洲人成伊人成综合网久久 | 国产激情三级 | 99久久久精品 | 久久免费观看国产精品 | 久久国产精品岛国搬运工 | 久久亚洲国产精品五月天 | 天天干夜夜玩 | 免费精品99久久国产综合精品 | 中文天堂最新版资源新版天堂资源 | 天天做天天爱天天干 | 日本黄色片在线观看 | 色婷婷激情 | 久久午夜影视 | 日本三级理论片 | 国产特黄一级一片免费 | tube日本videos69| 男女免费网站 | 真爽~张开腿~让我插 | freesex性欧美重口 | 久久刺激视频 | 亚洲一区二区三区在线播放 | 午夜高清在线观看免费6 | 欧美性video精品 | bt天堂在线www种子搜索 | 2017天天操| 欧美一级视频在线 | 欧美激情综合色综合啪啪五月 | 日本一区二区三区在线观看视频 | 午夜100| 亚洲综合精品香蕉久久网97 | 在线免费观看91 | 国产一区中文字幕在线观看 |