
Bộ chuyển đổi số sang tương tự (DAC) là một mạch điện tử giúp biến đổi tín hiệu ở dạng số (digital) thành tín hiệu điện áp tương tự (analog).
Ví dụ, trong máy nghe nhạc, DAC sẽ lấy dữ liệu nhạc dưới dạng số (được lưu trữ trong file nhạc) và chuyển đổi thành tín hiệu âm thanh tương tự, rồi gửi đến loa để phát ra âm thanh mà chúng ta nghe được.
Hãy cùng chipstack.vn tìm hiểu về cách DAC hoạt động, và ứng dụng thực tế.
Kiến trúc DAC

1. Kiến trúc cơ bản của DAC
Như đã nói ở trên, DAC hoạt động bằng cách chuyển đổi một giá trị số (digital) thành một điện áp tương tự (analog).
Ví dụ, nếu có một DAC 4-bit, giá trị số đầu vào sẽ có dạng D3 D2 D1 D0, trong đó:
🔹 D3 là bit quan trọng nhất (MSB – Most Significant Bit).
🔹 D0 là bit ít quan trọng nhất (LSB – Least Significant Bit).
🔹 Mỗi bit Di có thể có giá trị là 0 hoặc 1.
Mỗi bit sẽ điều khiển một công tắc:
🔹 Nếu bit bằng 1, công tắc đóng.
🔹 Nếu bit bằng 0, công tắc mở.
Điện áp đầu ra Vout được tính theo công thức:

và sau đó được viết lại thành:

Với DAC 12-bit, điện áp đầu ra được tính bằng công thức:

với:
🔹 Vref là điện áp tham chiếu (ví dụ: 3.3V).
🔹 DOR là giá trị số đầu vào (từ 0 đến 4095 với 12 bit).
🔹 Điện áp đầu ra có thể nằm trong khoảng 0V đến Vref.
Xem thêm: Analog-to-Digital Converter (ADC): Nguyên lý và Ứng dụng
2. Các thông số quan trọng của DAC
Độ phân giải (Resolution):
🔹 Độ phân giải xác định mức thay đổi nhỏ nhất của điện áp đầu ra khi giá trị số thay đổi.
🔹 Ví dụ, DAC 8-bit có 256 mức điện áp. Nếu phạm vi đầu ra là 0 – 5V, thì mỗi bước sẽ là: 5V/256 = 19.5mV
Thời gian ổn định (Settling Time):
🔹 Là thời gian cần thiết để DAC đạt giá trị chính xác sau khi nhận dữ liệu mới.
🔹 Nếu DAC có thời gian ổn định chậm, tín hiệu đầu ra sẽ bị trễ.
Hiện tượng glitch (nhiễu chuyển đổi):
🔹 Khi giá trị đầu vào thay đổi, tín hiệu đầu ra có thể bị nhảy vọt do các công tắc không đóng/mở đồng bộ.
🔹 Glitch có thể gây nhiễu trong tín hiệu âm thanh hoặc tín hiệu đo lường.
DAC trên các vi điều khiển
Trên các vi điều khiển, DAC giúp tạo ra tín hiệu điện áp tương tự từ dữ liệu số, rất hữu ích trong các ứng dụng như phát nhạc, điều khiển động cơ, hay tạo sóng thử nghiệm.
Trên các vi điều khiển có 2 bộ DAC độc lập, mỗi bộ có 1 kênh chuyển đổi. Hỗ trợ độ phân giải 8-bit hoặc 12-bit. Có thể hoạt động độc lập hoặc đồng bộ.
Ví dụ: Ứng dụng phát nhạc stereo (2 kênh: trái và phải) cần DAC đồng bộ để tránh bị lệch tiếng.

1. Cấu trúc của DAC trên vi điều khiển
- Thanh ghi dữ liệu đầu vào (DHR): Lưu giá trị số cần chuyển đổi.
- Bộ điều khiển logic: Xử lý dữ liệu trước khi xuất ra.
- Thanh ghi dữ liệu đầu ra (DOR): Giữ giá trị điện áp tương tự.
- Bộ DAC converter: Chuyển đổi từ số sang analog.
- Nguồn cấp:
- VddA (nguồn analog)
- VssA (mass analog)
- VREF (điện áp tham chiếu) → DAC xuất tín hiệu trong khoảng 0V đến VREF thông qua DAC_OUTx.
2. DAC có thể tạo ra dạng sóng gì?
Nhiễu trắng (white noise): Một dạng nhiễu ngẫu nhiên, hay dùng trong âm nhạc điện tử (ví dụ: tạo tiếng cymbal).
Sóng tam giác (triangle wave): Dùng để kiểm tra thiết bị hoặc tạo âm thanh số.
Xem thêm: Controller Area Network (CAN) bus – Hệ Thần Kinh Của Ô Tô Hiện Đại
3. Các thanh ghi dữ liệu của DAC

Mỗi kênh DAC có 4 thanh ghi lưu dữ liệu:
🔹 DAC_DHR12Rx (12-bit Data Holding Register, Right-aligned) – Thanh ghi dữ liệu 12-bit, căn phải.
🔹 DAC_DHR12Lx (12-bit Data Holding Register, Left-aligned) – Thanh ghi dữ liệu 12-bit, căn trái.
🔹 DAC_DHR8Rx (8-bit Data Holding Register, Right-aligned) – Thanh ghi dữ liệu 8-bit, căn phải.
Nếu dùng cả 2 kênh DAC, cần dùng thanh ghi đôi như:
🔹 DAC_DHR8RD (8-bit Dual Channel Data Holding Register, Right-aligned) – Thanh ghi dữ liệu 8-bit cho cả hai kênh, căn phải.
🔹 DAC_DHR12LD (12-bit Dual Channel Data Holding Register, Left-aligned) – Thanh ghi dữ liệu 12-bit cho cả hai kênh, căn trái.
🔹 DAC_DHR12RD (12-bit Dual Channel Data Holding Register, Right-aligned) – Thanh ghi dữ liệu 12-bit cho cả hai kênh, căn phải.

Conversion Trigger
DAC không tự động cập nhật giá trị đầu ra mà cần một tín hiệu kích hoạt (trigger) để bắt đầu chuyển đổi từ số (digital) sang tương tự (analog).
1. Các cách kích hoạt DAC
Có 3 cách để kích hoạt chuyển đổi DAC trên vi điều khiển:
Kích hoạt bằng phần mềm (Software Trigger):
🔹 Khi lập trình viên ghi giá trị vào bit kích hoạt trong thanh ghi bật DAC, DAC sẽ bắt đầu chuyển đổi.
🔹 Bit này sẽ tự động được xóa sau khi dữ liệu trong DAC_DHR được nạp vào DAC_DOR để xuất ra tín hiệu analog.
Kích hoạt bằng bộ định thời bên ngoài (External Timer Trigger):
🔹 Một số bộ đếm thời gian (Timer) có thể tạo tín hiệu kích hoạt DAC khi xảy ra cạnh lên (rising edge) của tín hiệu đầu ra TIMx_TRGO.
Kích hoạt bằng ngắt ngoài:
🔹 Khi có sự kiện trên chân ngắt ngoài, nó có thể kích hoạt DAC.
Xem thêm: Hiểu về Direct Memory Access (DMA)
2. Cách chọn nguồn kích hoạt cho DAC

Có 3 bit điều khiển (TSEL[2:0]) trong thanh ghi DAC_CR để chọn nguồn kích hoạt. Nếu cả hai kênh DAC dùng chung một nguồn kích hoạt (TSEL1 và TSEL2 giống nhau), hai kênh sẽ được đồng bộ, thực hiện chuyển đổi cùng lúc.
Buffered Output
1. Hiệu ứng tải
Khi DAC xuất tín hiệu trực tiếp đến một thiết bị bên ngoài (ví dụ: tai nghe), điện áp đầu ra VoUT có thể bị giảm so với giá trị mong muốn.
Nguyên nhân là do hiệu ứng tải: Nếu trở kháng của tải Rload bằng với trở kháng bên trong của DAC Rdac, điện áp đầu ra sẽ chỉ còn một nửa so với giá trị thực tế.

Ví dụ:
🔹 Nếu DAC_DOR = 0xFFF (giá trị tối đa, lẽ ra phải xuất 3V), nhưng vì tải có cùng trở kháng với DAC, điện áp thực tế chỉ còn 1.5V.
🔹 Điều này khiến tín hiệu bị suy giảm, không đạt đúng mức điện áp mong muốn.

2. Cách khắc phục: Dùng bộ đệm (Buffered Output)

Có thể sử dụng bộ đệm nội hoặc bộ đệm ngoại để loại bỏ ảnh hưởng của trở kháng tải.
Bộ đệm này thực chất là một bộ khuếch đại (op-amp) với 2 đặc điểm quan trọng:
🔹 Trở kháng đầu vào rất cao (~∞ Ω) → Không làm suy hao điện áp đầu ra của DAC.
🔹 Trở kháng đầu ra rất thấp (~0 Ω) → Loại bỏ ảnh hưởng của tải bên ngoài.
Nhờ vậy, Vout luôn gần bằng giá trị mong muốn, không bị sụt áp do tải.


Musical Synthesizing
Nốt nhạc là một yếu tố cơ bản trong âm nhạc. Nó là một tín hiệu tuần hoàn và có các thuộc tính chính như:
🔹 Tần số (pitch): Quyết định cao độ của âm thanh.
🔹 Biên độ (amplitude): Quyết định độ lớn của âm thanh (to hay nhỏ).
🔹 Độ dài (duration): Khoảng thời gian âm thanh kéo dài.
🔹 Âm sắc (timbre): Quyết định đặc trưng riêng của âm thanh.
Giả sử đàn piano và đàn guitar chơi cùng một nốt nhạc, cùng độ lớn và kéo dài cùng một thời gian, nhưng ta vẫn có thể phân biệt được chúng. Điều này là do âm sắc (timbre) – tức là mỗi nhạc cụ có thành phần tần số khác nhau theo thời gian. Một người có kinh nghiệm có thể dễ dàng nhận ra sự khác biệt giữa các nhạc cụ nhờ vào âm sắc.
Sóng sin (sinusoidal waveform) được sử dụng rộng rãi để tạo nhạc kỹ thuật số do tính đơn giản và linh hoạt của nó.Các nhạc cụ như đàn guitar, sáo, piano có thể được mô hình hóa bằng sóng sin vì chúng có các đặc tính vật lý cơ bản và chứa nhiều họa âm (harmonics).
Xem thêm: Hệ thống nhúng là gì? Cái nhìn tổng quan về hệ thống nhúng và vi điều khiển
1. Musical Pitch (Cao độ)
Cao độ (Pitch) của một âm thanh trong âm nhạc được xác định bởi tần số (frequency) của sóng sin tạo ra nó.
Ví dụ, nốt A4 (A440) – nốt La ngay trên nốt Đô trung (middle C) – đã được tiêu chuẩn hóa với tần số 440 Hz. Đây là nốt nhạc tham chiếu khi chỉnh dây nhạc cụ.
a. MIDI và công thức tính tần số

Trong chuẩn MIDI (Musical Instrument Digital Interface), nốt A4 được gán giá trị 69 trên thang pitch number.
Để tính tần số f của một nốt nhạc có cao độ p, ta dùng công thức:

Ngược lại, nếu biết tần số f, có thể tính cao độ p bằng công thức:


b. Bậc quãng tám (Octave) và sự thay đổi tần số
Khi cao độ tăng thêm 12 bậc, tức là sau 12 nốt nhạc liên tiếp, thì tần số tăng gấp đôi.
Các nốt nhạc được sắp xếp thành các quãng tám (octave), mỗi quãng tám gồm đúng 12 nốt.
Các quãng tám được đánh số từ 0 đến 8.
Nốt A4 thuộc quãng tám thứ 4, có tần số 440 Hz.
Mỗi nốt trong quãng tám thứ n có tần số gấp đôi so với nốt tương ứng trong quãng tám thứ (n-1).
Ví dụ về tần số các nốt nhạc:
🔹 A3: 220 Hz
🔹 A4: 440 Hz
🔹 A5: 880 Hz
Ta thấy mỗi quãng tám thứ 4 có tần số gấp đôi quãng tám thứ 3. Tương tự, quãng tám thứ 5 có tần số gấp đôi quãng tám thứ 4.
2. Musical Duration (thời lượng âm nhạc)
Thời lượng là khoảng thời gian một âm thanh kéo dài, và nó được xác định bằng số nhịp BPM (Beats Per Minute) – tức là số nhịp trong một phút.
a. BPM là gì?
BPM = 60 → Mỗi giây có 1 nhịp.
BPM = 120 → Gấp đôi tốc độ, mỗi giây có 2 nhịp.
BPM thông thường nằm trong khoảng 40 – 200.
b. Ảnh hưởng của BPM đến cảm xúc người nghe
Nhịp chậm (68 – 80 BPM) → Nhạc nhẹ, thư giãn (ví dụ: Ballad, Jazz).
Nhịp nhanh (120 – 140 BPM) → Tạo cảm giác sôi động, tràn đầy năng lượng (ví dụ: EDM, Rock).
c. Nhịp 4/4 là gì?
Trong âm nhạc, nhịp 4/4 là một trong những loại nhịp phổ biến nhất:
🔹 Số 4 đầu tiên → Cho biết mỗi ô nhịp có 4 phách.
🔹 Số 4 thứ hai → Cho biết mỗi phách tương ứng với một nốt đen và 1 nốt đen được xem là 1 nhịp.
Hiểu đơn giản: Trong một ô nhịp 4/4, ta sẽ đếm “1 – 2 – 3 – 4”, và mỗi số tương ứng với một nốt đen.
Xem thêm: Tổng quan kiến trúc ARM Cortex-M3
d. Ứng dụng của BPM trong công nghệ
Phần mềm có thể xác định các nhịp trong bài hát.
BPM giúp đồng bộ hóa nhạc với đèn LED, máy trống, hiệu ứng âm thanh.
BPM còn giúp phân tích sở thích âm nhạc của người nghe dựa trên thói quen.
3. Điều chế biên độ của âm thanh (Amplitude Modulation of Tones)
Biên độ (Amplitude) quyết định độ lớn hay âm lượng của một nốt nhạc.
🔹 Nếu biên độ cao → âm thanh lớn.
🔹 Nếu biên độ thấp → âm thanh nhỏ.
Tuy nhiên, trong thực tế, hầu hết các nhạc cụ không phát ra âm thanh với biên độ cố định. Âm thanh không thể tăng ngay lập tức lên mức tối đa hoặc giảm đột ngột về 0.
a. Mô hình ADSR giúp điều chế biên độ âm thanh theo thời gian
Để mô phỏng cách âm thanh thay đổi theo thời gian khi chơi nhạc cụ, người ta sử dụng mô hình ADSR (Attack – Decay – Sustain – Release). Mô hình này chia quá trình phát âm thành 4 giai đoạn:
🔹 Attack (Tấn công): Khi một nốt nhạc được nhấn, âm thanh tăng nhanh đến mức biên độ cao nhất.
🔹 Decay (Suy giảm): Sau khi đạt đỉnh, biên độ bắt đầu giảm dần.
🔹 Sustain (Duy trì): Khi giữ phím nhạc hoặc nhấn pedal, biên độ giữ ở mức gần như cố định.
🔹 Release (Nhả phím): Khi thả phím hoặc pedal, biên độ giảm dần về 0.
Ứng dụng thực tế:
🔹 Khi gảy đàn guitar, âm lượng ban đầu lớn rồi nhanh chóng giảm dần (Attack nhanh, Decay nhanh).
🔹 Khi bấm phím đàn organ, âm lượng gần như không đổi trong thời gian giữ phím (Sustain dài).
b. Công thức điều chế biên độ ADSR
Biểu diễn tín hiệu sóng hình sin của âm thanh:

trong đó:
🔹 f là tần số của nốt nhạc.
🔹 fs là tần số lấy mẫu.
🔹 n là số mẫu (sample).
Điều chế biên độ bằng ADSR:

Trong đó:
- ~S(n) là tín hiệu được điều chế biên độ.
- ADSR(n) là biên độ được điều chế theo mô hình ADSR.
- S(n) là tín hiệu gốc trước khi điều chế.
ADSR(n) được tính theo công thức:

với:
🔹 g: Hệ số khuếch đại (gain), kiểm soát tốc độ thay đổi biên độ.
🔹 ADSR(arrow) là giá trị biên độ điều chế mục tiêu.
Mô hình ADSR có 4 giai đoạn khác nhau, và mỗi giai đoạn có 3 tham số quan trọng:
🔹 Thời gian (Duration) – Khoảng thời gian của từng giai đoạn.
🔹 Giá trị biên độ mục tiêu (Target Amplitude Value) – Mức biên độ mà giai đoạn đó muốn đạt được.
🔹 Tham số khuếch đại (Gain Parameter) – Xác định tốc độ thay đổi biên độ (nhanh hay chậm).
Vì âm thanh số được tạo ra bằng cách lấy mẫu liên tục theo tần số f, thời gian của mỗi giai đoạn có thể được đo bằng số lượng mẫu (samples). Điều quan trọng là tổng số mẫu của tất cả 4 giai đoạn phải bằng tổng số mẫu của toàn bộ nốt nhạc. Nghĩa là khi cộng tất cả thời gian của Attack, Decay, Sustain và Release lại thì phải đúng bằng thời gian mà âm thanh tồn tại.
Xem thêm: Xung Clock: Nhịp tim của Hệ thống nhúng
4. Tần số lấy mẫu & Dữ liệu âm thanh trên CD
Trong âm thanh kỹ thuật số, tần số lấy mẫu phổ biến là 44.1 kHz (44,100 Hz). Nếu âm thanh không nén, dung lượng dữ liệu của CD âm thanh được tính như sau:
🔹 CD có 2 kênh (stereo), mỗi mẫu có 2 byte, và mỗi kênh có 44,100 mẫu mỗi giây:

🔹 Với 74 phút nhạc, tổng dung lượng dữ liệu sẽ là:

Vì dung lượng lớn, dữ liệu âm thanh thường được nén để tiết kiệm bộ nhớ hoặc không gian lưu trữ.
4. Xuất tín hiệu DAC trên vi điều khiển
Trên các vi điều khiển, đầu ra của DAC (Bộ chuyển đổi số – tương tự) luôn có điện áp dương.
Để loại bỏ thành phần DC, cần sử dụng tụ điện lớn để lọc tín hiệu.
Điện trở được thêm vào để giảm dòng điện, bảo vệ tai nghe như trong Hình 11.

Tần số (frequency) và thời gian phát (duration) của từng nốt nhạc được lưu trữ trong bộ nhớ dưới dạng dữ liệu, có thể lập trình để phát nhạc.

Ví dụ về bài “Happy Birthday”:
Trong đoạn mã Assembly, bài hát “Happy Birthday” được lưu dưới dạng danh sách các nốt nhạc và thời gian phát của chúng:
🔹 HB_S = 25: Bài hát Happy Birthday có 25 nốt nhạc.
🔹 HB_F: Danh sách tần số của từng nốt: Ví dụ: 392 Hz (G), 440 Hz (A), 523 Hz (C cao)…
🔹 HB_T: Thời gian phát từng nốt: Ví dụ: 1, 2, 4, 6 nhịp cho từng nốt khác nhau.
🔹 BPM = 240: Nhạc có tốc độ 240 nhịp/phút.
DAC đóng vai trò quan trọng trong việc chuyển đổi tín hiệu số thành tín hiệu tương tự, giúp tái tạo âm thanh, điều khiển thiết bị và tạo ra các dạng sóng cần thiết trong nhiều ứng dụng. Hiểu về nguyên lý hoạt động, các thông số kỹ thuật và cách sử dụng DAC trên vi điều khiển giúp tối ưu hóa hiệu suất và độ chính xác trong các hệ thống nhúng. Từ âm thanh kỹ thuật số đến điều khiển tín hiệu, DAC là một thành phần không thể thiếu trong thế giới điện tử hiện đại.
Xem thêm: Tổng quan về Run Mode và Low Power Mode trong vi điều khiển