- 필요한 구성 요소
- MCP4725 DAC 모듈 (디지털-아날로그 변환기)
- MCP4725의 I2C 통신
- 회로도 및 설명
- 디지털-아날로그 변환을위한 STM32F103C8 프로그래밍
- STM32로 DAC 테스트
우리 모두는 마이크로 컨트롤러가 디지털 값으로 만 작동한다는 것을 알고 있지만 현실 세계에서는 아날로그 신호를 처리해야합니다. 이것이 바로 ADC (Analog to Digital Converters) 가 실제 아날로그 값을 디지털 형식으로 변환하여 마이크로 컨트롤러가 신호를 처리 할 수있는 이유입니다. 하지만 디지털 값에서 아날로그 신호가 필요하다면 여기에 DAC (Digital to Analog Converter)가 있습니다.
디지털-아날로그 변환기 의 간단한 예 는 아티스트 가수가 마이크를 사용하여 노래를 부르는 스튜디오에서 노래를 녹음하는 것입니다. 이러한 아날로그 음파는 디지털 형식으로 변환 된 다음 디지털 형식 파일로 저장되며 저장된 디지털 파일을 사용하여 노래를 재생하면 해당 디지털 값이 스피커 출력을 위해 아날로그 신호로 변환됩니다. 따라서이 시스템에서는 DAC가 사용됩니다.
DAC는 모터 제어, LED 조명의 제어 밝기, 오디오 증폭기, 비디오 인코더, 데이터 수집 시스템 등과 같은 많은 애플리케이션에서 사용할 수 있습니다.
우리는 이미 MCP4725 DAC 모듈을 Arduino와 인터페이스했습니다. 오늘 우리는 동일한 MCP4725 DAC IC를 사용하여 STM32F103C8 마이크로 컨트롤러를 사용 하는 디지털-아날로그 변환기 를 설계 할 것 입니다.
필요한 구성 요소
- STM32F103C8
- MCP4725 DAC IC
- 10k 전위차계
- 16x2 LCD 디스플레이
- 브레드 보드
- 전선 연결
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의 I2C 통신
이 DAC IC는 I2C 통신을 사용하는 모든 마이크로 컨트롤러와 인터페이스 할 수 있습니다. I2C 통신에는 SCL과 SDA의 두 와이어 만 필요합니다. 기본적으로 MCP4725의 I2C 주소는 0x60입니다. 링크를 따라 STM32F103C8의 I2C 통신에 대해 자세히 알아보십시오.
STM32F103C8의 I2C 핀:
SDA: PB7 또는 PB9, PB11.
SCL: PB6 또는 PB8, PB10.
회로도 및 설명
STM32F103C8 및 16x2 LCD 간 연결
LCD 핀 번호 |
LCD 핀 이름 |
STM32 핀 이름 |
1 |
접지 (Gnd) |
접지 (G) |
2 |
VCC |
5V |
삼 |
VEE |
대비를위한 전위차계 중심의 핀 |
4 |
등록 선택 (RS) |
PB11 |
5 |
읽기 / 쓰기 (RW) |
접지 (G) |
6 |
활성화 (EN) |
PB10 |
7 |
데이터 비트 0 (DB0) |
연결 없음 (NC) |
8 |
데이터 비트 1 (DB1) |
연결 없음 (NC) |
9 |
데이터 비트 2 (DB2) |
연결 없음 (NC) |
10 |
데이터 비트 3 (DB3) |
연결 없음 (NC) |
11 |
데이터 비트 4 (DB4) |
PB0 |
12 |
데이터 비트 5 (DB5) |
PB1 |
13 |
데이터 비트 6 (DB6) |
PC13 |
14 |
데이터 비트 7 (DB7) |
PC14 |
15 |
LED 긍정적 |
5V |
16 |
LED 네거티브 |
접지 (G) |
MCP4725 DAC IC와 STM32F103C8 간의 연결
MCP4725 |
STM32F103C8 |
멀티 미터 |
SDA |
PB7 |
체크 안함 |
SCL |
PB6 |
체크 안함 |
밖 |
PA1 |
포지티브 프로브 |
GND |
GND |
네거티브 프로브 |
VCC |
3.3V |
체크 안함 |
전위차계도 연결되어 있으며 중앙 핀은 STM32F10C8의 PA1 아날로그 입력 (ADC)에 연결되고 왼쪽 핀은 GND에 연결되고 맨 오른쪽 핀은 STM32F103C8의 3.3V에 연결됩니다.
이 튜토리얼에서는 MCP4725 DAC IC를 STM32 와 연결하고 10k 전위차계를 사용하여 STM32 ADC 핀 PA0에 아날로그 입력 값을 제공합니다. 그런 다음 ADC를 사용하여 아날로그 값을 디지털 형식으로 변환합니다. 그런 다음 I2C 버스를 통해 해당 디지털 값을 MCP4725로 보냅니다. 그런 다음 DAC MCP4725 IC를 사용하여 해당 디지털 값을 아날로그로 변환 한 다음 STM32의 다른 ADC 핀 PA1을 사용하여 핀 OUT에서 MCP4725의 아날로그 출력을 확인합니다. 마지막으로 16x2 LCD 디스플레이에 전압과 함께 ADC 및 DAC 값을 모두 표시합니다.
디지털-아날로그 변환을위한 STM32F103C8 프로그래밍
이제 STM32F103C8에 코드를 업로드하는 데 FTDI 프로그래머가 필요하지 않습니다. STM32의 USB 포트를 통해 PC에 연결하고 ARDUINO IDE로 프로그래밍을 시작하기 만하면됩니다. Arduino IDE에서 STM32 프로그래밍에 대해 자세히 알아 보려면이 링크를 방문하십시오. 이 STM32 DAC 자습서에 대한 전체 프로그램이 마지막에 제공됩니다.
먼저 wire.h, SoftWire.h 및 liquidcrystal.h 라이브러리를 사용하는 I2C 및 LCD 용 라이브러리를 포함 합니다. 여기에서 STM32 마이크로 컨트롤러의 I2C에 대해 자세히 알아보십시오.
#포함
다음으로 STM32F103C8에 연결된 LCD 핀에 따라 LCD 핀을 정의하고 초기화합니다.
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
그런 다음 MCP4725 DAC IC의 I2C 주소를 정의합니다. MCP4725 DAC 기본 I2C 주소는 0x60입니다.
#define MCP4725 0x60
void setup ()에서
먼저 STM32F103C8의 PB7 (SDA) 및 PB6 (SCL) 핀에서 I2C 통신을 시작합니다.
Wire.begin (); // I2C 통신 시작
다음으로 LCD 디스플레이를 16x2 모드로 설정하고 환영 메시지를 표시합니다.
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); 지연 (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); lcd.setCursor (0,1); lcd.print ("DAC with MCP4725"); 지연 (2000); lcd.clear ();
void loop ()에서
1. 먼저 버퍼에 제어 바이트 값 (0b01000000)을 입력합니다.
(010- 쓰기 모드에서 MCP4725 설정) buffer = 0b01000000;
2. 다음 명령문은 핀 PA0에서 아날로그 값을 읽고 ADC가 12 비트 분해능이고 변수 adc에 저장하므로 0에서 4096 범위의 디지털 값으로 변환합니다.
adc = analogRead (PA0);
3. 다음 설명은 3.3V의 기준 전압을 사용하여 ADC 입력 값 (0 ~ 4096)에서 전압을 계산하는 데 사용되는 공식입니다.
float ipvolt = (3.3 / 4096.0) * adc;
4. ADC 변수에서 4 비트를 오른쪽으로 이동하여 최상위 비트 값을 버퍼에, adc 변수 에서 4 비트를 왼쪽으로 이동하여 최하위 비트 값을 버퍼에 넣습니다.
버퍼 = adc >> 4; 버퍼 = adc << 4;
5. 다음 문장은 DAC 출력 인 STM32의 ADC 핀 PA1 (MCP4725 DAC IC의 OUTPUT 핀)에서 아날로그 값을 읽습니다. 이 핀을 멀티 미터에 연결하여 출력 전압을 확인할 수도 있습니다.
unsigned int analogread = analogRead (PA1);
6. 또한 변수 analogread 의 전압 값 은 다음과 같은 공식을 사용하여 계산됩니다.
float opvolt = (3.3 / 4096.0) * analogread;
7. 동일한 void 루프 () 에는 아래에 설명 된 다른 명령문이 거의 없습니다.
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 ();
STM32로 DAC 테스트
전위차계를 회전하여 입력 ADC 값과 전압을 변경하면 출력 DAC 값과 전압도 변경됩니다. 여기서 입력 값은 LCD 디스플레이의 첫 번째 행에 표시되고 출력 값은 두 번째 행에 표시됩니다. 멀티 미터는 또한 아날로그 전압을 확인하기 위해 MCP4725 출력 핀에 연결됩니다.
데모 비디오 가 포함 된 전체 코드 는 다음과 같습니다.