- MCP4725 DAC 모듈 (디지털-아날로그 변환기)
- MCP4725 DAC의 I2C 통신
- 필요한 구성 요소
- 회로도
- DAC Arduino 프로그래밍
- MCP4725 및 Arduino를 사용한 디지털-아날로그 변환
우리 모두는 마이크로 컨트롤러가 디지털 값으로 만 작동한다는 것을 알고 있지만 현실 세계에서는 아날로그 신호를 처리해야합니다. 이것이 바로 ADC (Analog to Digital Converters) 가 실제 아날로그 값을 디지털 형식으로 변환하여 마이크로 컨트롤러가 신호를 처리 할 수있는 이유입니다. 하지만 디지털 값에서 아날로그 신호가 필요하다면 여기에 DAC (Digital to Analog Converter)가 있습니다.
디지털-아날로그 변환기 의 간단한 예 는 아티스트 가수가 마이크를 사용하여 노래를 부르는 스튜디오에서 노래를 녹음하는 것입니다. 이러한 아날로그 음파는 디지털 형식으로 변환 된 다음 디지털 형식 파일로 저장되며 저장된 디지털 파일을 사용하여 노래를 재생하면 해당 디지털 값이 스피커 출력을 위해 아날로그 신호로 변환됩니다. 따라서이 시스템에서는 DAC가 사용됩니다.
DAC는 모터 제어, LED 조명의 제어 밝기, 오디오 증폭기, 비디오 인코더, 데이터 수집 시스템 등과 같은 많은 애플리케이션에서 사용할 수 있습니다.
많은 마이크로 컨트롤러에는 아날로그 출력을 생성하는 데 사용할 수있는 내부 DAC가 있습니다. 그러나 ATmega328 / ATmega168과 같은 Arduino 프로세서에는 DAC가 내장되어 있지 않습니다. Arduino에는 ADC 기능 (아날로그-디지털 변환기)이 있지만 DAC (디지털-아날로그 변환기) 는 없습니다. 내부 ADC에 10 비트 DAC가 있지만이 DAC는 독립형으로 사용할 수 없습니다. 이 Arduino DAC 튜토리얼에서는 Arduino와 함께 MCP4725 DAC 모듈 이라는 추가 보드를 사용합니다 .
MCP4725 DAC 모듈 (디지털-아날로그 변환기)
MCP4725 IC는 12 비트 디지털-아날로그 변환기 모듈 로 (0 ~ 5V)의 출력 아날로그 전압을 생성하는 데 사용되며 I2C 통신을 사용하여 제어됩니다. 또한 온보드 비 휘발성 메모리 EEPROM과 함께 제공됩니다.
이 IC는 12 비트 분해능을 가지고 있습니다. 즉, 기준 전압에 대한 전압 출력을 제공하기 위해 (0 ~ 4096)을 입력으로 사용합니다. 최대 기준 전압은 5V입니다.
출력 전압 계산 공식
O / P 전압 = (기준 전압 / 분해능) x 디지털 값
예를 들어 5V를 기준 전압으로 사용하고 디지털 값이 2048이라고 가정하면 DAC 출력을 계산합니다.
O / P 전압 = (5/4096) x 2048 = 2.5V
MCP4725의 핀아웃
아래는 핀 이름을 명확하게 나타내는 MCP4725 이미지입니다.
MCP4725의 핀 |
사용하다 |
밖 |
아날로그 전압 출력 |
GND |
출력용 GND |
SCL |
I2C 직렬 클록 라인 |
SDA |
I2C 직렬 데이터 라인 |
VCC |
입력 기준 전압 5V 또는 3.3V |
GND |
입력 용 GND |
MCP4725 DAC의 I2C 통신
이 DAC IC는 I2C 통신을 사용하는 모든 마이크로 컨트롤러와 인터페이스 할 수 있습니다. I2C 통신에는 SCL과 SDA의 두 와이어 만 필요합니다. 기본적으로 MCP4725의 I2C 주소는 0x60 또는 0x61 또는 0x62입니다. 나를 위해 0x61. I2C 버스를 사용하여 여러 MCP4725 DAC IC를 연결할 수 있습니다. 유일한 것은 IC의 I2C 주소를 변경해야한다는 것입니다. Arduino의 I2C 통신은 이전 튜토리얼에서 이미 자세히 설명했습니다.
이 튜토리얼에서는 MCP4725 DAC IC를 Arduino Uno 와 연결 하고 전위차계를 사용하여 Arduino 핀 A0에 아날로그 입력 값을 제공합니다. 그런 다음 ADC를 사용하여 아날로그 값을 디지털 형식으로 변환합니다. 그런 다음 이러한 디지털 값은 I2C 버스를 통해 MCP4725로 전송되어 DAC MCP4725 IC를 사용하여 아날로그 신호로 변환됩니다. Arduino 핀 A1은 핀 OUT에서 MCP4725의 아날로그 출력을 확인하고 마지막으로 16x2 LCD 디스플레이에 ADC 및 DAC 값과 전압을 모두 표시하는 데 사용됩니다.
필요한 구성 요소
- Arduino Nano / Arduino Uno
- 16x2 LCD 디스플레이 모듈
- MCP4725 DAC IC
- 10k 전위차계
- 브레드 보드
- 점퍼 와이어
회로도
아래 표는 MCP4725 DAC IC, Arduino Nano 및 멀티 미터 간의 연결을 보여줍니다.
MCP4725 |
Arduino Nano |
멀티 미터 |
SDA |
A4 |
체크 안함 |
SCL |
A5 |
체크 안함 |
A0 또는 OUT |
A1 |
+ ve 터미널 |
GND |
GND |
-ve 터미널 |
VCC |
5V |
체크 안함 |
16x2 LCD와 Arduino Nano 연결
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
전위차계 중앙 핀에서 LCD 대비 조정 |
RS |
D2 |
RW |
GND |
이자형 |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
ㅏ |
+ 5V |
케이 |
GND |
전위차계 의 Arduino 나노 왼쪽 단자 GND에 접속되고, 5V의 Arduino의 가장 오른쪽에 연결된 핀의 A0 아날로그 입력에 접속 센터 핀으로 사용된다.
DAC Arduino 프로그래밍
DAC 튜토리얼을위한 완전한 Arduino 코드 는 데모 비디오와 함께 마지막에 제공됩니다. 여기에서는 코드를 한 줄씩 설명했습니다.
먼저 wire.h 및 liquidcrystal.h 라이브러리를 사용하여 I2C 및 LCD 용 라이브러리를 포함합니다.
#포함
다음으로 Arduino Nano와 연결 한 핀에 따라 LCD 핀을 정의하고 초기화합니다.
LiquidCrystal lcd (2,3,4,5,6,7); // LCD 디스플레이 핀 RS, E, D4, D5, D6, D7 정의
다음으로 MCP4725 DAC IC의 I2C 주소 정의
#define MCP4725 0x61
void setup ()에서
먼저 Arduino Nano의 핀 A4 (SDA) 및 A5 (SCL)에서 I2C 통신을 시작합니다.
Wire.begin (); // I2C 통신 시작
다음으로 LCD 디스플레이를 16x2 모드로 설정하고 환영 메시지를 표시합니다.
lcd.begin (16,2); // 16X2 모드로 LCD 설정 lcd.print ("CIRCUIT DIGEST"); 지연 (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("DAC with MCP4725"); 지연 (2000); lcd.clear ();
void loop ()에서
1. 먼저 버퍼에 제어 바이트 값 (0b01000000)을 입력합니다.
(010- 쓰기 모드에서 MCP4725 설정)
버퍼 = 0b01000000;
2. 다음 명령문은 핀 A0에서 아날로그 값을 읽고이를 디지털 값 (0-1023)으로 변환합니다. Arduino ADC는 10 비트 분해능이므로 DAC가 12 비트 분해능이므로 4를 곱하면 0-4096이됩니다.
adc = analogRead (A0) * 4;
3. ADC 입력 값 (0 ~ 4096)에서 전압을 구하고 기준 전압을 5V로 구하는 문장입니다.
float ipvolt = (5.0 / 4096.0) * adc;
4. 첫 번째 줄 아래는 ADC 변수에서 4 비트를 오른쪽으로 이동하여 버퍼에 최상위 비트 값을 넣고 두 번째 줄은 ADC 변수에서 4 비트를 왼쪽으로 이동하여 버퍼에 최하위 비트 값을 넣습니다.
버퍼 = adc >> 4; 버퍼 = adc << 4;
5. 다음 문은 DAC 출력 인 A1에서 아날로그 전압을 읽습니다 (MCP4725 DAC IC의 OUTPUT 핀). 이 핀을 멀티 미터에 연결하여 출력 전압을 확인할 수도 있습니다. 여기에서 멀티 미터 사용 방법을 알아보십시오.
unsigned int analogread = analogRead (A1) * 4;
6. 또한 변수 analogread 의 전압 값은 아래 공식을 사용하여 계산됩니다.
float opvolt = (5.0 / 4096.0) * analogread;
7. 다음 문장은 MCP4725로 전송을 시작하는 데 사용됩니다.
Wire.beginTransmission (MCP4725);
제어 바이트를 I2C로 보냅니다.
Wire.write (버퍼);
MSB를 I2C로 보냅니다.
Wire.write (버퍼);
LSB를 I2C로 보냅니다.
Wire.write (버퍼);
전송 종료
Wire.endTransmission ();
이제 마지막으로 lcd.print ()를 사용하여 LCD 16x2 디스플레이에 결과를 표시합니다.
lcd.setCursor (0,0); lcd.print ("A IP:"); lcd.print (adc); lcd.setCursor (10,0); lcd.print ("V:"); lcd.print (ipvolt); lcd.setCursor (0,1); lcd.print ("D OP:"); lcd.print (analogread); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); 지연 (500); lcd.clear ();
MCP4725 및 Arduino를 사용한 디지털-아날로그 변환
모든 회로 연결을 완료하고 코드를 Arduino에 업로드 한 후 전위차계를 변경하고 LCD에서 출력을 확인 합니다. LCD의 첫 번째 줄에는 입력 ADC 값과 전압이 표시되고 두 번째 줄에는 출력 DAC 값과 전압이 표시됩니다.
MCP4725의 OUT 및 GND 핀에 멀티 미터를 연결하여 출력 전압을 확인할 수도 있습니다.
DAC 모듈 MCP4725와 Arduino를 연결하여 디지털 값을 아날로그로 변환 하는 방법 입니다.