去年利用Arduino配合ADS1115 AD转换模块对一个微伏级输出的测试箱进行电压读取,配合上位机进行采样的数据进行数字滤波。

                

 

ADS1115是具有16位分辨率的高速AD转换芯片,可调增益,最小测量电压为0.0078125mV(约7.8uV),其实7.8uV对我来说还是大了。但没办法,精度越高成本也越高,个人玩家干不起来。

软件上使用了Adafruit为ADS系列芯片做好的库Adafruit_ADS1015,上手简单。ADS1115采样后的数据通过串口输出到上位机上进行处理。上位机需要发送一个“G”命令来获取数据,过程简单的不得了。

/* This module is simplily read data from ADS1115 and transfer to serial port.
 * Author: Daniel Gee
 * Date: 2019-06-08
 */

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

Adafruit_ADS1115 ads1115(0x48); // construct an ads1115 at address 0x48

float  volt = 0.0;
const int16_t duration = 1;
int16_t adc_data = 0;
char N = 30;
char i =0;

void setup() {
  
  Serial.begin(19200);
  ads1115.begin();
  ads1115.setGain(GAIN_SIXTEEN); // 16x gain, 1 bit = 0.0078125mV
}

void loop() {

  while(Serial.available()){
     char inChar = (char)Serial.read();
     if(inChar == 'G'){
      for (i = 0; i < N; i++){
        adc_data = ads1115.readADC_Differential_0_1();
        volt = adc_data * 0.0078125 * 10;
        Serial.print(volt,4);Serial.print(",");
        delay(duration);
        }
       Serial.println();
      }
     }
  }

 

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐