Bài 4: Lập trình ESP32 DAC tạo xung hình sin

lap trinh esp32 dac dieu che song sin, tam giac

Trong bài này chúng ta sẽ lập trình ESP32 DAC tạo ra sóng hình Sin hoặc hình tam giác, DAC là một ngoại vi rất mạnh nếu bạn làm các ứng dụng liên quan tới âm thanh ( audio).

Bài 4 trong Seri Lập trình ESP32 từ A tới Z

DAC là gì?

DAC là viết tắt của cụm từ Digital Analog Converter – bộ chuyển đổi tín hiệu digital thành analog.

DAC thường được sử dụng trong các mạch Audio. Trong đó nó nhiệm vụ thu thập thông tin âm thanh số và chuyển đối nó sang một tín hiệu tương tự. Sau đó, tín hiệu đó sẽ được truyền sang bộ khuếch đại âm thanh rồi mới đến tai nghe hoặc loa để bạn có thể nghe được.

DAC là một thành phần thiếu yếu của bất kỳ hệ thống âm thanh nào trên PC. Khu vực âm thanh trên bo mạch chủ có 1 DAC, tương tự như trên card âm thanh, smartphone, tai nghe dạng USB cùng những thiết bị kỹ thuật số khác. Bạn không thể truyền âm thanh từ PC hoặc thiết bị số nào khác vào tai người nếu không có DAC nhằm chuyển đối tín hiệu âm thanh số sang tương tự.

Trong vi điều khiển DAC còn rất hay được sử dụng để điều chế các loại xung khác nhau như xung hình sin, tam giác hay hình dạng bất kì.

ESP32 DAC
Một bộ DAC độ phân giải 4bit hoạt động

Lập trình ESP32 DAC điều khiển độ sáng của LED

Ở bài này, chúng ta sẽ sử dụng ESP32 điều khiển độ sáng của Led, kết quả sẽ tương tự như bài ESP32 PWM, nhưng hình dạng xung ra của DAC sẽ khác. Cùng bắt tay vào làm nhé.
Chúng ta cần chuẩn bị:
  • Breaboard
  • KIT ESP32
  • Trở 200R
  • Led cắm

 Sơ đồ nguyên lý

Kết nối chân DAC1 với Led và trở

esp32 dac
Sơ đồ kết nối ESP32 DAC với Led

Code và giải thích Code

Trong ESP32 sẽ có 2 kênh DAC đó là DAC1 và DAC2. Hai chân này sẽ được fix cứng tại chân GPIO 25 và 26 của ESP32. Thế nên các bạn muốn sử dụng DAC bắt buộc phải dùng 2 chân này nhé.
DAC tren ESP32 sẽ mặc định có độ phân giải là 8bit và đây cũng là độ phân giải lớn nhất.
Việc sử dụng cũng rất đơn giản chỉ cần sử dụng hàm: dacWrite() truyền vào 2 tham số là kênh DAC và giá trị DAC.
#include <Arduino.h>

#define DAC1 25
// khởi tạo giá trị DAC
int Value = 0; //255= 3.3V 128=1.65V
void setup() {
  Serial.begin(115200);
}

void loop() { 
  //Khởi tạo tín hiệu hình sin
  // tăng dần điện áp
  for(int Value = 0; Value <= 255; Value++){   
    //ghi giá trị điện áp lên chân DAC
    dacWrite(DAC1, Value);
    delay(15);
  }
  // giảm dần điện áp
  for(int Value = 255; Value >= 0; Value--){
    //ghi giá trị điện áp lên chân DAC
    dacWrite(DAC1, Value); 
  }
}
}

Giải thích code:

Chúng ta khởi tạo một biến lưu giá trị DAC. Giá trị tương ứng từ 0 – 255 là từ 0V- 3.3V.
#define DAC1 25
// khởi tạo giá trị DAC

Trong loop, tăng giảm giá trị của biến đó, sau đó ghi vào DAC1

// tăng dần điện áp
for(int Value = 0; Value <= 255; Value++){   
  //ghi giá trị điện áp lên chân DAC
  dacWrite(DAC1, Value);
  delay(15);
}
// giảm dần điện áp
for(int Value = 255; Value >= 0; Value--){
  //ghi giá trị điện áp lên chân DAC
  dacWrite(DAC1, Value); 
}

Nạp code và kết quả

Nạp code vào KIT, nhấn nút upload sau đó xem kết quả.

esp32 dac nap

 

Kết luận

Sử dụng ESP32 DAC cũng rất đơn giản, chúng rất hữu dụng trong việc điều chế các loại xung khác nhau, và thường được sử dụng khi làm các mạch phát âm thanh, mp3.

Đừng quên tham gia nhóm Nghiện lập trình để kết nối với những người cùng đam mê.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *