首页 > 解决方案 > ADS 1015 采样率

问题描述

我最近得到了一个 ADS 1015(为了对电容器上的电压进行高频测量)。数据表指定 3.3 kSPS(每秒采样数)。但是我最多只能得到大约 500SPS。在环顾四周后,我发现了几个讨论寄存器覆盖的资源......但是,我不是这个领域的专家,需要你的帮助!

这是我用来测试采样率的代码(使用 Arduino nano,arduino 代码是 C++ 变体):

  #include <Wire.h>
  #include <Adafruit_ADS1015.h>
  #include <SPI.h>
  
  
  
   
  Adafruit_ADS1015 ADS_0(0x48);
  
  int i = 0;
  long results = 0;
   
  void setup(void)
  {
    Serial.begin(9600);
  
  
  
    
          // CODE FOUND ON THE INTERNET BUT REJECT ERROR BC OF readRegister function not defined... However, I haven't found any library missing... Strange ---------------
           const uint8_t adcAddress = 0x48;
           const uint8_t configRegister = 0x01;
           uint16_t configValue = readRegister( adcAddress, configRegister );
           
           Serial.print( "read config value 0x" );
           Serial.println( configValue, HEX );
           
           configValue = ( configValue & !ADS1015_REG_CONFIG_DR_MASK) | ADS1015_REG_CONFIG_DR_3300SPS;
           writeRegister( adcAddress, configRegister, configValue );
        
           Serial.print( "sent config value 0x" );
           Serial.println( configValue, HEX );
        
           configValue = readRegister( adcAddress, configRegister );
        
           Serial.print( "verifying by rereading config value 0x" );
           Serial.println( configValue, HEX );
           // -------------------------------------------------------------
  
  
    ads1015.begin();
  }
  
  
   
  void loop(void)
  {
    int i=0;
    long depart = micros();
    while(i != 1000) {
        i++;
        results = ads1015.readADC_SingleEnded(0);
    }
    Serial.println(micros() - depart); 
  }

此代码返回大约 2,000,000,对应于 2 秒或 500 Hz 采样率...

在此先感谢,〜待定

标签: arduinoadcarduino-c++

解决方案


根据数据表,我认为您必须首先设置MODE0(连续转换模式)并DR0b111配置寄存器中设置(第 24 页)。

然后,您可能可以使用ISRon ALERT/RDY pin(在正确配置后 - 第 15 页)并在每次触发中断时读取数据。

第 15 页:

ALERT/RDY 引脚也可以配置为转换就绪引脚。将 Hi_thresh 寄存器的最高有效位设置为 1,将 Lo_thresh 寄存器的最高有效位设置为 0,以使该引脚成为转换就绪引脚。


推荐阅读