乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Arduino使用ADS1115 ADC讀差分電壓

       新用戶5228KeDY 2021-10-10

      以前用Arduino碰到過負電壓,例如某個電阻一端接地,而其上電流在某個時刻反向了,還要測量電阻兩端的電壓,這個時候就會遇到負電壓。Arduino本身沒有辦法測量負電壓,所以遇到的幾次,都是在GND前面加上3.3V或者用其他的電壓撐起來,之后再在代碼里面減去,挺笨拙地解決了,直到發(fā)現(xiàn)ADS1115。ADS1115可以直接測量負電壓。ADS1115是16位分辨率的高精度ADC,51、Arduino、樹莓派等都能使用它,精度高,成本低,資料多(其實也不多)。

      1. ADS1115ADC引腳

      下面的模塊是最常見的。它需要尋址。ADDR不同地址不同解碼方式。有四個地址可用。

      以下模塊不太常見。地址預(yù)設(shè)為0x48。不包括警報/就緒信號。在大多數(shù)應(yīng)用中,也不需要此信號。

      2. ADS1115ADC模塊尋址

      ADS1115的四個地址是通過將ADDR引腳連接到SCL、SDA、GND或VDD來設(shè)置的。下圖說明了這些連接是如何建立的,并提供了這些連接的地址號。

      3.ADS1115精度與范圍

      ADS1115的輸出是有符號整數(shù),第一個位用于表達正負號,因此用于AD轉(zhuǎn)換的數(shù)值,只有個,首位0,最后一位32767。

      默認模式下,ADS1115測量范圍為,即32767表示6.144V,這樣,ADS1115的分辨率就是。

      這是遠大于Arduino ADC的5 mV/bit的分辨率的。

      4.Arduino ADS1115單端應(yīng)用

      先需要下載Adafruit發(fā)布的ADS1X15的庫,地址https://github.com/adafruit/Adafruit_ADS1X15。

      作為Demo,我們要測量Arduino的3.3V電壓。注意接線圖ADDR與GND連接。

      使用以下代碼,注意“Adafruit_ADS1115 ads(0x48);”的地址0x48,目前這個構(gòu)造函數(shù)在新的庫里面,是不需要顯式聲明地址的,這可以在庫示例里面看到。另外,0.1875 mV因子也是默認的。實際A0、A1、A2、A3是可以同時采集電壓的。

      #include <Wire.h>
      #include <Adafruit_ADS1015.h>

      Adafruit_ADS1115 ads(0x48);
      float Voltage = 0.0;

      void setup(void)
      {
      Serial.begin(9600);
      ads.begin();
      }

      void loop(void)
      {
      int16_t adc0; // we read from the ADC, we have a sixteen bit integer as a result

      adc0 = ads.readADC_SingleEnded(0);
      Voltage = (adc0 * 0.1875)/1000;

      Serial.print("AIN0: ");
      Serial.print(adc0);
      Serial.print("\tVoltage: ");
      Serial.println(Voltage, 7);
      Serial.println();

      delay(1000);
      }

      5.ADS1115 Arduino差分測量

      我們前面提到負電壓,即低于GND的電勢Arduino無法直接測量,實際上對差分來說,即使兩端均非GND,也是可以直接測量的,這正是差分測量的好處。

      下面的示例,是在ADS1115的A0與A1之間測量差分電壓,如果A1電勢高,就會得到正的示數(shù),反之則為負數(shù)。接線圖如圖,注意A0、A1是ADS1115上面的,別找到Arduino板子上去。Arduino一般默認即高阻態(tài),18650即使接到A0與A1之間,也不會有什么危險,但不會得到正確的示數(shù)。

      使用的代碼。庫文件里面也有示例。

      #include <Wire.h>
      #include <Adafruit_ADS1015.h>

      Adafruit_ADS1115 ads; // Declare an instance of the ADS1115

      int16_t rawADCvalue; // The is where we store the value we receive from the ADS1115
      float scalefactor = 0.1875F; // This is the scale factor for the default +/- 6.144 Volt Range we will use
      float volts = 0.0; // The result of applying the scale factor to the raw value

      void setup(void)
      {
      Serial.begin(9600);
      ads.begin();
      }

      void loop(void)
      {

      rawADCvalue = ads.readADC_Differential_0_1();
      volts = (rawADCvalue * scalefactor)/1000.0;

      Serial.print("Raw ADC Value = ");
      Serial.print(rawADCvalue);
      Serial.print("\tVoltage Measured = ");
      Serial.println(volts,6);
      Serial.println();


      delay(1000);
      }

      實物圖,左右兩個圖里,電源正負極換了一下位置。

      當(dāng)電壓為負時,串口得到。我們的穩(wěn)壓電源監(jiān)視器則顯示電壓為3.33V。

        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多