21 Giới thiệu nguyên lý ADC 
Kiến thức cơ bản về ADC 
ADC là gì? 
ADC (Analog-to-Digital Converter) là bộ chuyển đổi tín hiệu tương tự (analog) sang tín hiệu số (digital).
- Tín hiệu tương tự: liên tục, thay đổi theo thời gian (ví dụ: điện áp từ cảm biến)
- Tín hiệu số: rời rạc, chỉ nhận các giá trị cố định
Quá trình chuyển đổi bao gồm:
- Lấy mẫu: chọn thời điểm đọc giá trị
- Lượng hóa & mã hóa: chuyển giá trị analog sang biểu diễn số
Tần số lấy mẫu càng cao → tín hiệu số càng giống tín hiệu gốc → độ chính xác cao → nhưng tốn tài nguyên và năng lượng hơn.
Giới thiệu ADC trong STM32 
Dòng STM32F4 sử dụng bộ ADC 12-bit kiểu SAR (Successive Approximation Register – dần tiệm cận), với tổng cộng 19 kênh đầu vào có thể chuyển đổi.
Cụ thể:
- 16 kênh bên ngoài: lấy tín hiệu analog từ các chân GPIO qua chức năng đa năng (Alternate Function)
- 2 kênh nội bộ: - Cảm biến nhiệt độ bên trong
- Điện áp tham chiếu bên trong (VREFINT)
 
- 1 kênh đo điện áp pin (VBAT): chỉ dùng được khi có điện áp đưa vào chân VBAT
Lưu ý:
- 16 kênh ngoài tương ứng với các chân cụ thể trên vi điều khiển
- Một kênh có thể ánh xạ đến một hoặc nhiều chân GPIO tùy cấu trúc chip và sơ đồ mạch
Chế độ chuyển đổi ADC hỗ trợ: 
STM32 hỗ trợ 4 chế độ chuyển đổi:
- Chế độ đơn (Single Conversion) → Mỗi lần khởi động sẽ thực hiện một lần chuyển đổi duy nhất, sau đó tự động dừng → Kết quả được lưu trong thanh ghi dữ liệu ADC
- Chế độ liên tục (Continuous Conversion) → Sau khi hoàn thành một lần đo, ADC tự động lặp lại phép đo liên tục cho đến khi được dừng bằng phần mềm hoặc tín hiệu ngoài
- Chế độ quét (Scan Mode) → Dùng để đo nhiều kênh ADC lần lượt → ADC sẽ lấy mẫu và chuyển đổi từng kênh theo thứ tự đã cấu hình
- Chế độ gián đoạn (Discontinuous Mode) → Dùng khi bạn muốn ưu tiên kênh injected → ADC sẽ chuyển đổi các kênh "injected" trước, sau đó mới quay lại các kênh thông thường (regular)
Dữ liệu kết quả của ADC có thể được căn trái hoặc căn phải trong thanh ghi 16-bit, tùy cấu hình.
Trong phần thực hành của chương này, ta sử dụng:
- Chế độ quét (Scan Mode)
- Với từng lần đo chỉ lấy 1 kênh → gọi là “đa kênh đơn lần chuyển đổi”
Các thông số cơ bản của ADC 
- Độ phân giải (Resolution): Là độ chính xác đầu ra của bộ ADC, được biểu thị bằng số bit. Ví dụ: - 8 bit → 256 mức giá trị (0–255)
- 10 bit → 1024 mức
- 12 bit → 4096 mức → Bit càng nhiều → độ chính xác càng cao.
 
- Tốc độ lấy mẫu (Sampling Rate): Là tần suất mà ADC lấy mẫu tín hiệu analog đầu vào, thường đo bằng SPS (Samples Per Second) – số mẫu mỗi giây. → Còn gọi là tốc độ chuyển đổi, biểu thị số lần ADC có thể chuyển từ analog sang số mỗi giây. 
- Dải điện áp (Input Range): Là phạm vi điện áp mà ADC có thể đo được: - CopyEdit VREF- ≤ VADC ≤ VREF+- Trong đó: - VREF- là điện áp tham chiếu âm → thường nối với GND (0V) 
- VREF+ là điện áp tham chiếu dương → thường nối với VDDA → Trong bo mạch STM32F407VET6, VDDA = 3.3V - ⇒ Như vậy, giá trị điện áp đầu vào hợp lệ của ADC là từ 0V đến 3.3V 
 
Nguyên lý hoạt động cơ bản của ADC trong STM32F4 
STM32F4 sử dụng ADC 12-bit dạng SAR (Successive Approximation Register – Bộ ghi tiệm cận tuần tự), đây là một trong những nguyên lý hoạt động phổ biến và hiệu quả nhất trong các loại ADC.
Nguyên lý tiệm cận tuần tự hoạt động như sau:
- Tín hiệu đầu vào (analog) và điện áp tham chiếu (VREF) được đưa vào mạch so sánh vi sai (differential amplifier), tạo ra một điện áp chênh lệch.
- Điện áp này được đưa vào bộ lượng hóa SAR, nơi nó được so sánh lặp lại với các mức điện áp tham chiếu trung gian, theo kiểu nhị phân: - Ở mỗi bước, SAR sẽ chọn một giá trị trung gian và so sánh với điện áp đầu vào
- Nếu điện áp đầu vào lớn hơn, SAR sẽ giữ bit đó là 1
- Nếu nhỏ hơn, bit đó sẽ là 0
- Quá trình lặp tiếp tục từ bit cao đến bit thấp (MSB → LSB)
 
- Sau 12 lần lặp (với ADC 12-bit), ta có được một giá trị số đại diện cho điện áp đầu vào.
⚙️ Ví dụ: Nếu VREF+ = 3.3V và đầu vào là 1.65V → kết quả ADC sẽ xấp xỉ 2048 (tức là 50% của 4096 mức 12-bit)
Phương pháp SAR có ưu điểm:
- Độ chính xác tốt
- Tốc độ chuyển đổi khá cao
- Không yêu cầu nhiều phần tử tương tự phức tạp
Ưu điểm của ADC 
- Khả năng chống nhiễu tốt Tín hiệu số được biểu diễn bằng các giá trị rời rạc (dạng bit), do đó ít bị ảnh hưởng bởi nhiễu, dao động tín hiệu hay trôi giá trị như tín hiệu tương tự.
- Dễ dàng lưu trữ, xử lý và truyền tải Dữ liệu số có thể dễ dàng được lưu trữ trong bộ nhớ, xử lý bằng các thuật toán số, hoặc truyền đi qua các phương tiện kỹ thuật số như UART, USB, SPI...
- Có thể lập trình được ADC hiện đại hỗ trợ nhiều chức năng có thể cấu hình bằng phần mềm như: - Tăng độ lợi (Gain)
- Tốc độ lấy mẫu (Sampling rate)
- Bộ lọc số (Digital filters) → Giúp tối ưu hiệu năng theo từng ứng dụng cụ thể
 
- Ứng dụng rộng rãi ADC được sử dụng trong rất nhiều lĩnh vực như: - Công nghiệp tự động hóa
- Truyền thông và RF
- Y tế (máy đo điện tim, cảm biến sinh học…)
- Đo lường điện tử
- Xử lý âm thanh, hình ảnh, video Và có thể đo được nhiều loại tín hiệu: điện áp, dòng điện, âm thanh, ánh sáng,…
 
Ứng dụng của ADC 
ADC có ứng dụng vô cùng rộng rãi trong thực tế. Một số ví dụ điển hình:
- Chuyển đổi tín hiệu cảm biến: ADC được dùng để chuyển tín hiệu analog từ các loại cảm biến (nhiệt độ, ánh sáng, áp suất, dòng điện…) thành tín hiệu số để vi điều khiển hoặc máy tính xử lý.
- Xử lý âm thanh: Trong hệ thống âm thanh số, ADC sẽ chuyển tín hiệu âm thanh analog (microphone, nhạc cụ…) thành tín hiệu số để xử lý, lưu trữ hoặc truyền tải (ví dụ: MP3, gọi điện thoại, livestream).
- Truyền thông vô tuyến (RF): ADC được dùng trong các hệ thống điều chế/demodulation, giúp chuyển tín hiệu thu được từ ăng-ten thành dạng số để phân tích và xử lý.
Tóm lại, ADC là một khối chức năng quan trọng trong kỹ thuật điện – điện tử hiện đại, là cầu nối giữa thế giới analog và thế giới số, và là nền tảng cho các ứng dụng xử lý tín hiệu và điều khiển số.
Thực hành ADC 
Trong thí nghiệm này, ta sử dụng cảm biến quang trở (light-dependent resistor – LDR) làm ví dụ. Mục tiêu là sử dụng ADC trên STM32 để đo điện áp từ cảm biến, từ đó xác định mức độ sáng – tối của môi trường xung quanh.
Giới thiệu cảm biến 
Quang trở (LDR) là một loại điện trở đặc biệt, có giá trị thay đổi theo cường độ ánh sáng:
- Khi ánh sáng mạnh, điện trở của LDR giảm mạnh, cho điện áp đầu ra thấp.
- Khi ánh sáng yếu hoặc không có ánh sáng, điện trở của LDR tăng cao, cho điện áp đầu ra cao.
Nói cách khác:
Cường độ sáng tăng ⇒ điện áp giảmCường độ sáng giảm ⇒ điện áp tăng
Trong mạch thực hành, đầu ra điện áp của LDR (thường là chân AO) sẽ được kết nối với chân ADC của STM32, từ đó đọc và phân tích mức độ ánh sáng thông qua giá trị ADC.

Sơ đồ nguyên lý của module quang trở 
Trong sơ đồ mạch, U2.1 là một bộ so sánh điện áp (comparator). Nguyên lý hoạt động như sau:
- Khi điện áp ở chân 2 lớn hơn chân 3, đầu ra chân 1 sẽ ở mức thấp (LOW).
- Khi điện áp ở chân 2 nhỏ hơn chân 3, đầu ra chân 1 sẽ ở mức cao (HIGH).
R3 là điện trở quang (LDR) – thành phần chính phản ứng với ánh sáng:
- Khi môi trường sáng, điện trở của R3 giảm, làm cho điện áp tại chân AO giảm theo.
- Khi môi trường tối, điện trở của R3 tăng, khiến điện áp tại chân AO tăng lên.
Vì vậy:
Điện áp AO tỉ lệ nghịch với độ sáng môi trường.
Chúng ta sẽ nối chân AO vào chân ADC của STM32 để đo điện áp thay đổi theo ánh sáng. Dựa vào giá trị ADC thu được, có thể suy ra mức độ ánh sáng của môi trường xung quanh.

