본문 바로가기
MCU/아두이노

[아두이노] UNO R4에서 ADS1220 24비트 ADC(BB-ADS1220) 사용방법

by linuxgo 2025. 8. 2.
반응형

ADS1220 모듈(BB-ADS1220)을 Arduino UNO R4와 연결하여 사용하는 예제를 작성해드리겠습니다. 단일 채널(single-ended) 아날로그 입력을 읽는 기본적인 설정을 기반으로 합니다. BB-ADS1220은 Texas Instruments의 ADS1220 24비트 ADC를 사용하며, SPI 통신을 통해 데이터를 주고받습니다. 이 예제에서는 ProtoCentral_ADS1220 라이브러리를 사용합니다.

하드웨어 연결

BB-ADS1220 모듈과 Arduino UNO R4의 연결은 다음과 같습니다.

 

BB-ADS1220 모듈
Arduino UNO R4 MINIMA

BB-ADS1220 핀Arduino UNO R4 핀설명

VCC 3.3V 또는 5V 전원 공급 (2.3V~5.5V 지원)
GND GND 접지
SCLK D13 (SCK) SPI 클럭
DIN D11 (MOSI) SPI 데이터 입력
DOUT/DRDY D12 (MISO) SPI 데이터 출력 및 데이터 준비 신호
CS D10 칩 선택 (Chip Select)
DRDY D2 데이터 준비 인터럽트 (선택적, 예제에서 사용)
AIN0 아날로그 신호 입력 측정할 아날로그 신호 (예: 센서)
AIN1 GND 또는 기준 전압 단일 채널 측정 시 기준점으로 사용

참고:

  • Arduino UNO R4는 5V 및 3.3V를 지원하므로, VCC를 3.3V 또는 5V에 연결 가능합니다. BB-ADS1220 모듈은 일반적으로 3.3V로 동작하니, 안전을 위해 3.3V를 권장합니다.
  • AIN0에 아날로그 신호(예: 전압)를 연결하고, AIN1을 GND에 연결하여 단일 채널 측정을 설정합니다.
  • Texas Instruments는 SPI 핀(CS, SCLK, DIN, DOUT/DRDY)에 47Ω 저항을 추가할 것을 권장하지만, BB-ADS1220 모듈은 이미 필요한 저항과 커패시터를 포함하고 있으므로 추가 부품 없이 연결 가능합니다.

소프트웨어 요구사항

  1. Arduino IDE: 최신 버전 설치.
  2. ProtoCentral_ADS1220 라이브러리:
  3. 설정 확인: Arduino UNO R4는 Renesas RA4M1 마이크로컨트롤러를 사용하므로, SPI 설정이 올바르게 초기화되었는지 확인하세요.

예제 코드

아래 코드는 AIN0 채널에서 단일 채널 아날로그 전압을 읽고, 이를 시리얼 모니터에 출력하는 예제입니다. 내부 전압 레퍼런스(2.048V)를 사용하며, PGA(Programmable Gain Amplifier) 게인은 1로 설정합니다.

#include <Protocentral_ADS1220.h>
#include <SPI.h>

// ADS1220 핀 정의
#define ADS_CS_PIN  10  // 칩 선택 핀
#define ADS_DRDY_PIN 2  // 데이터 준비 핀

// ADS1220 객체 생성
Protocentral_ADS1220 ads1220;

void setup() {
  // 시리얼 통신 시작
  Serial.begin(115200);
  while (!Serial); // 시리얼 포트가 열릴 때까지 대기
  delay(1000);
  Serial.println("ADS1220 초기화 시작");

  // SPI 통신 초기화
  SPI.begin();
  SPISettings spi_settings(1000000, MSBFIRST, SPI_MODE1); // 1MHz, MSB 우선, SPI 모드 1
  ads1220.begin(ADS_CS_PIN, ADS_DRDY_PIN);

  // ADS1220 설정
  ads1220.set_data_rate(600); // 데이터 레이트: 600 SPS (샘플/초)
  ads1220.set_pga_gain(1);    // PGA 게인: 1
  ads1220.set_vref_source(0); // 내부 레퍼런스 (2.048V)
  ads1220.set_conv_mode(0);   // 단일 샷 모드
  ads1220.set_channel(0);     // AIN0 단일 채널 선택

  Serial.println("ADS1220 초기화 완료");
}

void loop() {
  // 데이터 읽기
  int32_t adc_data = ads1220.Read_Data_Samples();
  
  // 전압 계산 (내부 레퍼런스 2.048V, 24비트 해상도, 게인 1)
  float voltage = (float)adc_data * 2.048 / (pow(2, 23) - 1); // 23비트는 부호 비트 제외

  // 시리얼 모니터에 출력
  Serial.print("ADC 데이터: ");
  Serial.print(adc_data);
  Serial.print(" | 전압: ");
  Serial.print(voltage, 6); // 소수점 6자리까지 출력
  Serial.println(" V");

  delay(1000); // 1초 대기
}

코드 설명

  1. 라이브러리 포함 및 핀 정의:
    •   Protocentral_ADS1220.h 라이브러리를 사용하여 ADS1220을 제어합니다.
    •   CS 핀(D10)과 DRDY 핀(D2)을 정의합니다. DRDY는 데이터 준비 신호로, 정확한 데이터 읽기를 위해 사용됩니다.
  2. 초기화:
    •   SPI.begin()으로 SPI 통신을 시작하고, ADS1220에 적합한 SPI 설정(1MHz, SPI_MODE1)을 적용합니다.
    •   ads1220.begin()으로 ADS1220을 초기화합니다.
  3. ADS1220 설정:
    •   데이터 레이트: 600 SPS (초당 샘플 수).
    •   PGA 게인: 1 (입력 전압 증폭 없이).
    •   전압 레퍼런스: 내부 2.048V.
    •   변환 모드: 단일 샷 모드 (Single-shot).
    •   입력 채널: AIN0 (단일 채널).
  4. 데이터 읽기 및 전압 계산:
    •   Read_Data_Samples()로 24비트 ADC 데이터를 읽습니다.
    •   전압은 Voltage = n * VREF / (2^23 - 1) 공식으로 계산합니다. 여기서 VREF는 2.048V, n은 ADC 출력값입니다.
  5. 출력:
    •   ADC 데이터와 계산된 전압을 시리얼 모니터에 출력합니다.

실행 방법

  1. 하드웨어 연결:
    •   위 표에 따라 BB-ADS1220과 Arduino UNO R4를 연결합니다.
    •   AIN0에 아날로그 신호(예: 0~2.048V)를 연결하거나, 테스트를 위해 가변 저항(Potentiometer)을 연결하여 전압을 조절  할 수 있습니다.
  2. 코드 업로드:
    •   Arduino IDE에서 코드를 업로드합니다.
    •   시리얼 모니터를 열어 115200 보드레이트로 설정하고 결과를 확인합니다.
  3. 결과 확인:
    •   시리얼 모니터에 ADC 데이터와 변환된 전압이 출력됩니다. 예: ADC 데이터: 123456 | 전압: 0.012345 V

주의사항

  •   SPI 문제: Arduino UNO R4는 Renesas 기반이므로, SPI 초기화가 여러 번 호출되면 문제가 발생할 수 있습니다. 이 경우, SPI.begin()을 한 번만 호출하도록 코드를 수정하거나, ADS1220_WE 라이브러리의 대체 생성자를 사용할 수 있습니다.
  •   전원 안정성: BB-ADS1220은 저전력 모듈이므로, 안정적인 전원을 공급하세요. 노이즈를 줄이기 위해 추가적인 커패시터(예: 0.1µF)를 VCC와 GND 사이에 연결할 수 있습니다.
  •   라이브러리 호환성: ProtoCentral_ADS1220 라이브러리가 간단하지만, 복잡한 설정(예: 다채널, 차동 측정)을 위해서는 ADS1220_WE 또는 hideakitai/ADS1220 라이브러리를 고려하세요.
  •   데이터 레이트: 600 SPS로 설정했지만, 필요에 따라 20~2000 SPS로 조정 가능합니다. 높은 데이터 레이트는 노이즈를 증가시킬 수 있으니 주의하세요.

추가 참고

  •   다른 라이브러리: ADS1220_WE 라이브러리는 더 많은 설정 옵션을 제공하며, 다채널 및 차동 측정에 적합합니다. 예제는 GitHub에서 확인 가능합니다.
  •   문제 해결: SPI 통신이 안정적이지 않거나 데이터가 부정확할 경우, 연결을 다시 확인하고, SPI 클럭 속도를 낮춰보세요(예: 500kHz).
반응형