개발이야기

MCP3202를 아두이노로 사용하는 방법 (전압 측정)

게임교수 2025. 4. 7. 08:25
반응형

1. MCP3202 기본 정보

  • 채널 수: 2채널 (CH0, CH1)
  • 분해능: 12비트 (0~4095)
  • 인터페이스: SPI (Serial Peripheral Interface)
  • 전원 공급: 2.7V~5.5V (일반적으로 5V 사용)
  • 입력 전압 범위: Vref에 따라 달라짐 (보통 Vref = 5V면 0~5V 측정 가능)

📦 2. 준비물

  • 아두이노 UNO 또는 Nano
  • MCP3202 칩
  • 브레드보드 및 점퍼선
  • 측정할 아날로그 전압 (예: 가변저항, 센서 등)

⚡ 3. 회로 연결

MCP3202 핀기능아두이노 연결
1 - CH0 입력채널 0 측정 전압 입력 (예: 센서 출력)
2 - CH1 입력채널 1 (사용 안 하면 GND 연결)
3 - VREF 기준전압 5V
4 - AGND 아날로그 GND GND
5 - CLK SPI Clock D13
6 - DOUT SPI MISO D12
7 - DIN SPI MOSI D11
8 - CS/SHDN SPI Chip Select D10
9 - DGND 디지털 GND GND
10 - VDD 전원 5V

주의: MCP3202는 5V 논리 신호에 안전하므로 아두이노와 직접 연결해도 됩니다.


 

🧠 4. 아두이노 코드

#include <SPI.h>

const int CS_PIN = 10;

void setup() {
  Serial.begin(9600);
  SPI.begin();
  pinMode(CS_PIN, OUTPUT);
  digitalWrite(CS_PIN, HIGH);
}

int readMCP3202(int channel) {
  // 채널: 0 또는 1
  if (channel < 0 || channel > 1) return -1;

  // MCP3202 SPI 통신 프로토콜
  byte command = 0b11000 | (channel << 2);  // Start bit(1), SGL(1), ODD(1 or 0), MSBF(0)

  digitalWrite(CS_PIN, LOW);

  SPI.transfer(command);                     // 첫 번째 바이트 전송
  byte highByte = SPI.transfer(0x00);       // 두 번째 바이트 (상위 비트)
  byte lowByte = SPI.transfer(0x00);        // 세 번째 바이트 (하위 비트)

  digitalWrite(CS_PIN, HIGH);

  // 상위 4비트는 highByte의 하위 4비트, 나머지 8비트는 lowByte
  int result = ((highByte & 0x0F) << 8) | lowByte;

  return result;
}

void loop() {
  int value = readMCP3202(0);  // CH0 읽기
  float voltage = value * (5.0 / 4096.0);  // Vref = 5V 기준

  Serial.print("ADC 값: ");
  Serial.print(value);
  Serial.print(" / 전압: ");
  Serial.print(voltage, 3);
  Serial.println(" V");

  delay(1000);
}

🔄 5. 동작 원리

  • SPI.transfer() 함수로 MCP3202에 명령 전송
  • 3바이트를 주고받아 12비트 ADC 결과 수신
  • 12비트 → 전압 계산: V = (ADC값 / 4096) * Vref

📈 6. 예시 출력 (시리얼 모니터)

yaml
복사편집
ADC 값: 2048 / 전압: 2.500 V ADC 값: 1023 / 전압: 1.249 V

💡 팁

  • Vref에 3.3V를 넣으면 더 좁은 범위에서 높은 정밀도로 측정 가능
  • 여러 센서를 동시에 쓰고 싶으면 CH0/CH1를 바꿔가며 측정하면 됨
  • 아두이노가 SPI 디바이스를 여러 개 쓸 경우, CS 핀은 개별로 따로 써야 함
반응형