Comparator là gì? Mạch so sánh điện áp và tạo tín hiệu Logic
Cơ bản2/9/2026- Tác giả: IoTlabs Maker

Comparator là gì? Mạch so sánh điện áp và tạo tín hiệu Logic

Hướng dẫn dùng comparator so sánh điện áp để tạo tín hiệu logic cho GPIO, giải thích pull-up cho ngõ ra open-drain và hysteresis chống chattering, ứng dụng cảnh báo pin yếu cho ESP32.

comparatormạch so sánh điện ápopen-drain pull-uphysteresiscảnh báo pin yếu ESP32

Comparator so sánh hai điện áp đầu vào và tạo tín hiệu logic HIGH/LOW ở ngõ ra, cho phép giám sát ngưỡng (pin yếu, mực nước, ánh sáng) mà không cần vi điều khiển liên tục lấy mẫu ADC.

Hướng dẫn chi tiết

Hướng dẫn dùng comparator để so sánh điện áp cảm biến với điện áp tham chiếu và tạo tín hiệu logic. Giải thích ngõ vào đảo, không đảo, open-collector/open-drain, pull-up, schematic, PCB và ứng dụng cảnh báo ngưỡng, pin yếu và cảm biến.

Comparator hay mạch so sánh điện áp là một khối analog rất phổ biến dùng để so sánh hai mức điện áp và biến kết quả thành tín hiệu logic.

Ví dụ, một cảm biến tạo điện áp:

VSENSOR = 0–3.3 V

và ta muốn biết:

VSENSOR > 2.0 V ?

Comparator có thể thực hiện việc này trực tiếp:

VSENSOR
   │
   ▼
Comparator
   ▲
   │
 2.0 V Reference
   │
   ▼
HIGH / LOW

Thay vì MCU liên tục đọc ADC và so sánh bằng phần mềm, comparator có thể tạo ngay một tín hiệu số khi điện áp vượt ngưỡng.

Ứng dụng phổ biến gồm:

  • Cảnh báo pin yếu.
  • Phát hiện quá áp.
  • Cảm biến ánh sáng.
  • Cảm biến nhiệt độ analog.
  • Water level.
  • Zero-cross hoặc threshold detection trong các mạch phù hợp.
  • Giám sát nguồn.
  • Tạo interrupt cho MCU.
  • Chuyển tín hiệu analog thành logic.

1. Comparator có hai đầu vào

Một comparator có:

+

là ngõ vào không đảo và:

-

là ngõ vào đảo.

Có thể hình dung:

          ┌───────────┐
VIN+ ─────► +         │
          │ Comparator├──── VOUT
VIN- ─────► -         │
          └───────────┘

Comparator kiểm tra quan hệ giữa:

\[ V_+ \]

và:

\[ V_- \]

Nếu:

\[ V_+>V_- \]

output chuyển sang một trạng thái.

Nếu:

\[ V_+<V_- \]

output chuyển sang trạng thái còn lại.

2. Cấu hình không đảo

Giả sử:

Sensor → Input +
Reference → Input -

Topology:

VSENSOR ─────► +
                \
                 >── OUTPUT
                /
VREF ─────────► -

Khi:

\[ V_{SENSOR}>V_{REF} \]

output chuyển sang trạng thái HIGH hoặc được release HIGH tùy loại output của comparator.

Khi:

\[ V_{SENSOR}<V_{REF} \]

output chuyển LOW.

Có thể nhớ:

Sensor > Reference
→ Output Active High

với cách mắc này.

3. Cấu hình đảo

Nếu đổi hai chân:

VREF → +
Sensor → -

thì logic bị đảo.

Khi:

\[ V_{SENSOR}>V_{REF} \]

ta có:

\[ V_->V_+ \]

và output chuyển về trạng thái ngược lại.

Topology:

VREF ────────► +
                \
                 >── OUTPUT
                /
VSENSOR ─────► -

Cấu hình nào tốt hơn phụ thuộc tín hiệu logic mong muốn.

4. Tạo điện áp tham chiếu VREF

Một cách đơn giản là dùng mạch chia áp:

VCC
 │
R1
 │
 ├──── VREF
 │
R2
 │
GND

Điện áp:

\[ V_{REF}=V_{CC}\frac{R_2}{R_1+R_2} \]

Ví dụ:

VCC = 3.3 V
R1 = 10 kΩ
R2 = 10 kΩ

thì:

\[ VREF=1.65V \]

Comparator có thể dùng mức này làm ngưỡng.

5. Ví dụ phát hiện sensor vượt 2 V

Giả sử:

VCC = 3.3 V
VREF = 2.0 V
VSENSOR = 0–3.3 V

Mắc:

VSENSOR → +
VREF    → -

Khi:

VSENSOR = 1.5 V

ta có:

\[ V_+<V_- \]

Output ở trạng thái thấp.

Khi:

VSENSOR = 2.2 V

ta có:

\[ V_+>V_- \]

Output chuyển trạng thái.

Ngưỡng chuyển nằm gần:

2.0 V

nhưng thực tế còn có sai số của comparator và reference.

6. Comparator không phải ADC

ADC trả về một giá trị số mô tả mức điện áp.

Ví dụ:

VIN = 1.82 V
→ ADC = một giá trị tương ứng

Comparator chỉ trả về:

HIGH

hoặc:

LOW

Comparator trả lời câu hỏi:

Điện áp này cao hơn hay thấp hơn ngưỡng?

Vì vậy comparator thường nhanh và đơn giản hơn ADC cho các bài toán threshold detection.

7. Comparator khác Op-Amp như thế nào?

Comparator và op-amp có symbol tương đối giống nhau:

+
-
OUT

nhưng được tối ưu cho mục đích khác.

Op-amp thường làm việc với:

Negative Feedback

để tạo output analog tuyến tính.

Comparator thường được dùng:

Open-Loop

để output chuyển nhanh giữa hai trạng thái.

Không nên mặc định lấy bất kỳ op-amp nào thay cho comparator.

Một số op-amp có thể:

  • Saturation recovery chậm.
  • Không được thiết kế cho differential input lớn.
  • Có behavior không phù hợp khi dùng open-loop.

Nếu mục tiêu là so sánh ngưỡng, comparator chuyên dụng thường là lựa chọn tốt hơn.

8. Output Push-Pull

Một số comparator có output:

Push-Pull

Output chủ động kéo được cả:

HIGH

và:

LOW

Ví dụ:

Comparator
   │
   ├── drive HIGH
   └── drive LOW

Loại này thường có thể nối trực tiếp tới input logic của MCU nếu mức điện áp tương thích.

9. Open-Collector là gì?

Nhiều comparator truyền thống có output:

Open-Collector

Bên trong có thể hình dung:

OUTPUT
   │
Collector
   │
 NPN
   │
Emitter
   │
  GND

Comparator chỉ có khả năng:

Pull LOW

Nó không tự tạo HIGH.

Do đó cần:

Pull-up resistor

ở bên ngoài.

10. Open-Drain là gì?

Open-drain có nguyên lý tương tự nhưng sử dụng MOSFET:

OUTPUT
   │
Drain
   │
N-MOS
   │
Source
   │
GND

Nó cũng chủ động:

Pull LOW

và cần resistor để đưa output lên HIGH.

11. Pull-Up Resistor

Schematic:

3.3V
 │
RPU
 │
 ├──── MCU GPIO
 │
Comparator OUT

Khi transistor output bên trong OFF:

RPU kéo output HIGH

Khi comparator kích transistor:

Output → GND

nên output LOW.

12. Chọn Pull-Up bao nhiêu?

Các giá trị thường gặp:

1 kΩ
4.7 kΩ
10 kΩ
47 kΩ

tùy:

  • Tốc độ switching.
  • Capacitance đường tín hiệu.
  • Dòng output comparator.
  • Mức tiêu thụ mong muốn.

R quá thấp:

Current khi LOW ↑

R quá cao:

Rise time chậm

Với tín hiệu threshold chậm và MCU GPIO, 4.7–10 kΩ thường là vùng dễ sử dụng, nhưng cần kiểm tra datasheet.

13. Lợi ích của Open-Collector/Open-Drain

Một lợi ích lớn là có thể chọn rail logic riêng.

Ví dụ comparator chạy:

5 V

nhưng MCU dùng:

3.3 V

Nếu output open-collector cho phép điều kiện này, ta có thể pull-up output về:

3.3 V

Topology:

Comparator 5 V
      │
 Open Collector
      │
      ├──── MCU GPIO
      │
    10 kΩ
      │
     3.3 V

Nhờ vậy comparator và MCU có thể dùng hai rail khác nhau.

Phải kiểm tra output voltage rating trong datasheet.

14. Input Common-Mode Range

Comparator cũng có giới hạn điện áp input.

Nếu cấp:

VCC = 3.3 V

không có nghĩa cả hai input luôn được phép chạy:

0–3.3 V

Cần kiểm tra:

Input Common-Mode Voltage Range

Một comparator có thể chỉ hỗ trợ tới:

VCC - 1.5 V

hoặc có giới hạn khác.

Nếu sensor vượt vùng này, kết quả có thể không còn đáng tin cậy.

15. Input Offset Voltage

Comparator không chuyển chính xác tại:

\[ V_+=V_- \]

một cách hoàn hảo.

Có sai số:

Input Offset Voltage

hay:

VOS

Ví dụ nếu:

VOS = 3 mV

ngưỡng thực tế có thể dịch vài millivolt so với tính toán lý tưởng.

Với cảnh báo pin 12 V qua divider, sai số vài mV có thể không quan trọng.

Với cảm biến precision, cần xem kỹ hơn.

16. Resistor tolerance ảnh hưởng ngưỡng

Nếu VREF được tạo bằng divider:

\[ VREF=VCC\frac{R_2}{R_1+R_2} \]

sai số R1 và R2 trực tiếp làm ngưỡng thay đổi.

Nếu cần threshold chính xác, có thể dùng:

Resistor 1%

hoặc:

0.1%

và reference ổn định hơn nguồn VCC.

17. VREF từ Zener hoặc Reference IC

Nếu VCC thay đổi nhưng cần threshold ổn định, divider từ VCC có thể không đủ.

Có thể dùng:

Zener Reference

hoặc tốt hơn trong mạch precision:

Voltage Reference IC

Topology:

Reference
   │
   └── VREF → Comparator

Sensor
   │
   └── VSENSOR → Comparator

18. Ví dụ cảnh báo pin yếu

Giả sử cần giám sát pin.

Architecture:

BATTERY
   │
Voltage Divider
   │
VBAT_SENSE
   │
Comparator
   ▲
   │
 VREF
   │
   ▼
LOW_BATTERY

Khi điện áp pin xuống dưới ngưỡng:

Comparator
→ LOW_BATTERY = active

MCU có thể nhận interrupt thay vì liên tục đọc ADC.

19. Tính Divider cho Battery Monitor

Giả sử cần scale:

12 V

xuống khoảng:

2.4 V

Có thể chọn tỷ lệ:

\[ \frac{R_2}{R_1+R_2}=0.2 \]

Ví dụ:

R1 = 40 kΩ
R2 = 10 kΩ

thì:

\[ VOUT=12\times\frac{10}{50} \]

\[ VOUT=2.4V \]

Comparator so sánh điện áp này với VREF.

Giá trị cuối cùng phải kiểm tra cả điện áp pin lớn nhất và giới hạn input comparator.

20. Comparator với cảm biến ánh sáng

Một LDR có thể tạo divider:

VCC
 │
LDR
 │
 ├──── VSENSE
 │
R
 │
GND

VSENSE thay đổi theo ánh sáng.

Comparator:

VSENSE
   │
   ▼
Comparator
   ▲
   │
 VREF

Output có thể dùng để:

  • Bật đèn khi tối.
  • Tạo interrupt.
  • Báo trạng thái.

21. Comparator với NTC

NTC thay đổi resistance theo nhiệt độ.

Có thể tạo:

NTC Divider
    │
    ▼
 VSENSE
    │
 Comparator
    ▲
    │
   VREF

Khi nhiệt độ vượt ngưỡng:

OUTPUT

đổi trạng thái.

Dùng cho:

  • Overtemperature warning.
  • Fan control mức đơn giản.
  • Thermal shutdown signal.

22. Vấn đề khi tín hiệu gần ngưỡng

Giả sử:

VREF = 2.000 V

sensor có noise:

1.995 V
2.005 V
1.998 V
2.003 V

Comparator có thể liên tục đổi:

HIGH
LOW
HIGH
LOW

Tạo:

  • Chattering.
  • Nhiều interrupt.
  • Relay rung.
  • LED nhấp nháy.

Đây là vấn đề rất phổ biến.

23. Giải pháp: Hysteresis

Thay vì chỉ có một threshold:

2.000 V

ta tạo hai threshold:

Upper Threshold = 2.05 V
Lower Threshold = 1.95 V

Ví dụ:

VSENSOR tăng
→ chỉ chuyển HIGH khi > 2.05 V

VSENSOR giảm
→ chỉ chuyển LOW khi < 1.95 V

Khoảng:

1.95–2.05 V

là vùng hysteresis.

Mạch này chính là nền tảng của:

Schmitt Trigger

24. RC Filter trước Comparator

Nếu sensor có noise high-frequency, có thể thêm RC filter:

Sensor ── R ──┬──── Comparator
              │
              C
              │
             GND

Tần số cắt:

\[ f_C=\frac{1}{2\pi RC} \]

RC filter giảm noise nhưng không thay thế hysteresis trong mọi trường hợp.

Hai kỹ thuật có thể được dùng cùng nhau.

25. Output Comparator nối MCU

Architecture:

Analog Sensor
      │
      ▼
   RC Filter
      │
      ▼
  Comparator
      │
   Pull-Up
      │
      ▼
   MCU GPIO

MCU có thể cấu hình:

Interrupt on rising edge

hoặc:

falling edge

để phản ứng ngay khi threshold bị vượt qua.

26. Comparator không trực tiếp điều khiển tải lớn

Comparator output thường chỉ phù hợp điều khiển:

  • MCU input.
  • Logic gate.
  • Transistor base/gate.
  • LED nhỏ trong giới hạn datasheet.

Nếu muốn bật relay:

Comparator
   │
   ▼
Transistor / MOSFET
   │
   ▼
Relay

Nếu relay là tải cảm ứng cần thêm:

Flyback Diode

27. Schematic mẫu

                    3.3V
                     │
                    R3
                     │
                     ├──────── OUTPUT → MCU
                     │
                  Comparator
              + ─────┤
VSENSOR ──────────────┤
                      │
VREF ───────────── - ─┤
                      │
                     GND

VREF:

3.3V
 │
R1
 │
 ├──── VREF
 │
R2
 │
GND

Nếu comparator có push-pull output thì có thể không cần R3.

28. Decoupling

Comparator cần capacitor nguồn giống các IC analog khác.

Ví dụ:

VCC
 │
100 nF
 │
GND

Tụ nên đặt sát chân:

VCC
GND

của comparator.

Có thể thêm capacitor bulk local theo yêu cầu của hệ thống.

29. PCB Layout

Comparator thường xử lý tín hiệu nhỏ nên input traces cần:

  • Ngắn.
  • Tránh motor.
  • Tránh relay.
  • Tránh MOSFET switch node.
  • Tránh DC-DC inductor.
  • Tránh clock tốc độ cao.

VREF nên được giữ sạch.

Không nên route VREF song song lâu với tín hiệu PWM hoặc switch node.

30. Đặt Divider gần Comparator

Nếu R1/R2 tạo VREF:

[R1]
 │
 ├── VREF ── Comparator
 │
[R2]

nên đặt tương đối gần comparator để VREF trace ngắn.

Có thể thêm capacitor nhỏ tại VREF nếu cần lọc, nhưng phải kiểm tra ảnh hưởng startup và response time.

31. Ground Reference

Comparator quyết định dựa trên chênh lệch điện áp nhỏ.

Nếu ground reference bị thay đổi bởi:

Motor Current
Relay Current
High-current MOSFET

threshold thực tế có thể bị dịch.

PCB cần giữ high-current return path khỏi khu vực comparator.

32. Open-Collector PCB

Pull-up resistor nên đặt gần:

Comparator / MCU logic area

để output có trạng thái xác định.

Nếu output đi ra connector dài, có thể cần thêm:

  • Protection.
  • Filtering.
  • Buffer.

tùy môi trường.

33. BOM mẫu

RefLinh kiệnGiá trị/Yêu cầuChức năng
U1ComparatorSupply/input range phù hợpSo sánh điện áp
R1Divider resistorTheo VREFTạo reference
R2Divider resistorTheo VREFTạo reference
R3Pull-up4.7–10 kΩ ví dụOpen-collector output
C1100 nFCeramicDecoupling
R4/C2Tùy chọnRC filterLọc sensor
TP1VSENSORTest pointDebug
TP2VREFTest pointDebug
TP3OUTPUTTest pointDebug

34. Những lỗi thường gặp

Quên Pull-Up

Open-collector output không lên HIGH đúng.

Pull-Up lên sai điện áp

Có thể đưa 5 V vào GPIO 3.3 V.

Input vượt common-mode range

Comparator cho kết quả không đáng tin.

Không kiểm tra output type

Tưởng open-collector là push-pull hoặc ngược lại.

Không có hysteresis

Output rung khi sensor ở gần ngưỡng.

Divider dùng resistor tolerance lớn

Threshold sai.

VREF lấy trực tiếp từ nguồn nhiễu

Ngưỡng thay đổi theo load.

Comparator đặt sát MOSFET switching

Noise gây false trigger.

Dùng op-amp thay comparator mà không kiểm tra datasheet

Response có thể không đúng mong muốn.

35. Checklist chọn Comparator

  • [ ] Supply voltage phù hợp.
  • [ ] Input common-mode range phù hợp.
  • [ ] Differential input rating phù hợp.
  • [ ] Input offset đủ thấp.
  • [ ] Propagation delay phù hợp.
  • [ ] Push-pull hay open-collector/open-drain?
  • [ ] Output voltage/current phù hợp MCU.
  • [ ] Quiescent current phù hợp thiết bị pin.
  • [ ] Temperature range phù hợp.
  • [ ] Có hysteresis tích hợp hay không.

36. Checklist PCB

  • [ ] Comparator gần nguồn tín hiệu nếu phù hợp.
  • [ ] VREF trace ngắn.
  • [ ] Input tránh switch node.
  • [ ] 100 nF sát IC.
  • [ ] Pull-up đúng rail logic.
  • [ ] Ground reference sạch.
  • [ ] High-current return không đi qua comparator.
  • [ ] Có test point VSENSE/VREF/OUT.
  • [ ] RC filter gần input nếu dùng.
  • [ ] Footprint và pinout được kiểm tra.

37. Kiểm tra mạch

Đầu tiên đo:

VREF

xác nhận đúng threshold.

Sau đó tăng VSENSOR từ thấp lên cao.

Ghi lại điện áp tại thời điểm output đổi trạng thái:

VTH_UP

Sau đó giảm VSENSOR và ghi lại:

VTH_DOWN

Nếu chưa có hysteresis:

VTH_UP ≈ VTH_DOWN

Nếu có hysteresis:

VTH_UP ≠ VTH_DOWN

38. Kiểm tra bằng Oscilloscope

Đo:

CH1 → VSENSOR
CH2 → OUTPUT

Quan sát:

  • Threshold.
  • Propagation delay.
  • Chattering.
  • Noise.
  • Rise time của open-collector output.

Nếu cạnh lên quá chậm:

Pull-up có thể quá lớn

hoặc capacitance đường output quá cao.

39. Ứng dụng thực tế

Comparator phù hợp với nhiều bài toán embedded.

Battery Low

Battery
 │
Divider
 │
Comparator
 │
LOW_BAT

Water Level

Analog Sensor
 │
Comparator
 │
LEVEL_HIGH

Light Detection

LDR
 │
Comparator
 │
DARK / LIGHT

Temperature Alarm

NTC
 │
Comparator
 │
OVER_TEMP

Power Good

Power Rail
 │
Divider
 │
Comparator
 │
POWER_GOOD

40. Comparator hay ADC?

Dùng comparator khi:

  • Chỉ cần HIGH/LOW.
  • Muốn phản ứng nhanh.
  • Muốn interrupt phần cứng.
  • Muốn MCU ngủ.
  • Threshold cố định.

Dùng ADC khi:

  • Cần biết giá trị cụ thể.
  • Threshold thay đổi bằng firmware.
  • Cần logging.
  • Cần nhiều mức cảnh báo.

Trong nhiều hệ thống có thể dùng cả hai.

41. Công thức cần nhớ

Điện áp divider:

\[ V_{REF}=V_{CC}\frac{R_2}{R_1+R_2} \]

Điều kiện comparator không đảo:

\[ V_+>V_- \]

và:

\[ V_+<V_- \]

quyết định trạng thái output.

RC filter:

\[ f_C=\frac{1}{2\pi RC} \]

Sai số threshold thực tế còn phụ thuộc:

Comparator Offset
+
Reference Error
+
Resistor Tolerance
+
Noise

42. Tóm tắt thiết kế

Một threshold detector hoàn chỉnh có thể là:

External Sensor
      │
      ▼
Protection
      │
      ▼
RC Filter
      │
      ▼
Comparator ◄──── VREF
      │
      ▼
Pull-Up
      │
      ▼
MCU GPIO / Interrupt

Nếu tín hiệu có noise quanh threshold:

Comparator
   │
   ▼
Add Hysteresis
   │
   ▼
Stable Logic

43. Kết luận

Comparator là mạch chuyển một bài toán analog:

Điện áp hiện tại cao hơn hay thấp hơn ngưỡng?

thành tín hiệu logic:

HIGH / LOW

Hai input quan trọng:

+
-

cho phép ta chọn logic không đảo hoặc đảo.

VREF có thể được tạo bằng:

  • Voltage divider.
  • Zener.
  • Voltage reference IC.
  • DAC từ MCU trong các hệ thống phù hợp.

Một điểm đặc biệt cần nhớ là nhiều comparator có output:

Open-Collector

hoặc:

Open-Drain

nên cần pull-up resistor trước khi kết nối MCU.

Khi thiết kế thực tế phải kiểm tra:

Input Common-Mode Range
Input Offset
Output Type
Pull-Up Voltage
Propagation Delay
Reference Accuracy
Resistor Tolerance

Trên PCB, comparator nên được giữ xa các node switching nhiễu mạnh và có decoupling đặt sát IC.

Cuối cùng, comparator đơn giản có một vấn đề quan trọng: khi tín hiệu dao động quanh đúng ngưỡng, output có thể liên tục HIGH/LOW.

Giải pháp là tạo hai ngưỡng khác nhau bằng hysteresis.

Đây chính là nguyên lý của Schmitt Trigger — nội dung bài tiếp theo.