2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

Arduino使用ADS1115 ADC讀差分電壓

 新用戶5228KeDY 2021-10-10

以前用Arduino碰到過負(fù)電壓,例如某個電阻一端接地,而其上電流在某個時刻反向了,還要測量電阻兩端的電壓,這個時候就會遇到負(fù)電壓。Arduino本身沒有辦法測量負(fù)電壓,所以遇到的幾次,都是在GND前面加上3.3V或者用其他的電壓撐起來,之后再在代碼里面減去,挺笨拙地解決了,直到發(fā)現(xiàn)ADS1115。ADS1115可以直接測量負(fù)電壓。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ù),第一個位用于表達(dá)正負(fù)號,因此用于AD轉(zhuǎn)換的數(shù)值,只有個,首位0,最后一位32767。

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

這是遠(yuǎn)大于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因子也是默認(rèn)的。實際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差分測量

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

下面的示例,是在ADS1115的A0與A1之間測量差分電壓,如果A1電勢高,就會得到正的示數(shù),反之則為負(fù)數(shù)。接線圖如圖,注意A0、A1是ADS1115上面的,別找到Arduino板子上去。Arduino一般默認(rèn)即高阻態(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);
}

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

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

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多