Anh bạn ơi, chào cậu! Gặp phải những vấn đề “huyền học” kiểu này khi làm lại nguồn điện kinh điển trong kỳ thi thiết kế điện tử là chuyện quá bình thường. Đề bài này ngày xưa chính là cái “bẫy lớn” đã từng hành hạ không biết bao nhiêu người rồi. Khi làm phần mạch tương tự của nguồn xung, đặc biệt là cân bằng dòng song song, thì bố trí linh kiện (layout), đi dây và nhiễu loạn thường còn nghiêm trọng hơn cả sơ đồ nguyên lý.
Dựa vào sơ đồ nguyên lý, hiện tượng mà cậu mô tả cùng việc thay đổi vi điều khiển, mình sẽ giúp cậu phân tích từng bước một, hy vọng có thể giúp cậu định hình lại hướng xử lý:
1. Về nghi vấn hệ số khuếch đại của INA199A1 “thay đổi thất thường” và giá trị 0,2mV
Cậu nói rằng: dòng điện 0,2A, điện áp hai đầu điện trở mẫu là 0,2mV, hệ số khuếch đại dao động lung tung.
Ở đây tồn tại mâu thuẫn rõ ràng với định luật Ohm:
Trên sơ đồ, điện trở mẫu R3, R12 là 20mΩ (0,02Ω). Nếu dòng thực tế là 0,2A, thì sụt áp trên điện trở phải là: 0,2A × 0,02Ω = 0,004V (tức là 4mV).
Nhưng đồng hồ vạn năng của cậu chỉ đo được 0,2mV — điều này cho thấy khả năng sau:
- Đồng hồ bị nhiễu do tần số chuyển mạch cao: Tần số chuyển mạch của XL4015 khoảng 180kHz, độ gợn sóng đầu ra rất lớn. Bộ lọc thông thấp ở đầu vào INA199 (R1/R2/C1) có tần số cắt quá cao (tính ra cỡ MHz), hoàn toàn không loại bỏ được nhiễu 180kHz. Khi dùng đồng hồ vạn năng đo điện áp một chiều cực nhỏ nhưng chứa thành phần xoay chiều gợn sóng rất lớn như vậy, kết quả đọc được là không đáng tin cậy.
- Dòng điện không hoàn toàn đi qua điện trở mẫu: Hãy kiểm tra xem có phải do mặt đồng hoặc đường đi dây gây rò dòng hay không.
Tại sao hệ số khuếch đại lại dao động? Gần như chắc chắn là do nhiễu chuyển mạch ghép vào + tiếp đất kém. Điện áp “đầu ra” mà đồng hồ đo được thực chất là tín hiệu bị chồng chất bởi các xung nhiễu khổng lồ. Dùng một điện áp đầu ra sai chia cho một điện áp đầu vào sai, thì hệ số tính ra tất nhiên sẽ nhảy loạn từ 2 đến 200. Gợi ý: Mượn một cái máy hiện sóng để đo chân đầu ra của INA199, gần như chắc chắn cậu sẽ thấy một đống xung nhiễu chứ không phải dạng DC phẳng mịn.
2. Về OLED hiển thị dữ liệu vô lý, và vẫn có dòng 1A khi tắt (OFF)
- Thiếu phương pháp nối Kelvin – lỗi chết người: Điện trở mẫu của cậu là 20mΩ. Trên PCB, lớp đồng 1 ounce, vài mm dây dẫn có thể đã tạo ra điện trở vài mΩ! Nếu không dùng cách nối Kelvin (tức là từ chân hàn điện trở mẫu, tách riêng hai dây nhỏ nối trực tiếp đến INA199, không cho dòng lớn đi qua), thì sụt áp trên mối hàn và dây dẫn sẽ bị khuếch đại cùng tín hiệu, dẫn đến hiện tượng “dòng 1A thật phi lý” mà cậu nói.
- “Dòng ma” 1A khi trạng thái OFF:
- Sai lệch điểm không của OPAMP: Chân REF của INA199 nối mass, cấp nguồn đơn, nên đầu ra OPAMP không thể đạt tuyệt đối 0V (thường có ngưỡng dưới vài chục mV). Ví dụ nếu đầu ra bị kẹt ở 50mV, ADC đọc vào rồi chia cho hệ số 50, chia tiếp cho 20mΩ, hệ thống sẽ hiểu nhầm là có dòng nền 50mA.
- Hiệu ứng nảy mass (Ground Bounce): Khi cậu ngắt một kênh đầu ra (hoặc không tải), nếu sự chênh lệch điện thế giữa AGND và PGND (mass công suất) không được xử lý tốt, chỉ cần vài mV chênh lệch trên mass cũng bị INA199 khuếch đại lên.
- Khác biệt ADC giữa STM32 và Air32: Dù cậu đã đổi MCU, nhưng độ chính xác điện áp tham chiếu nội bộ ADC, trở kháng đầu vào và cấu hình mặc định có thể khác nhau chút ít. Trong code gốc, tác giả có thể đã thêm “xử lý phần mềm đặt về 0” hoặc hệ số hiệu chuẩn phù hợp với nhiễu nền của bo mạch đó. Sau khi đổi MCU, nhiễu nền ADC đọc được thay đổi, lập tức bị code quy đổi thành… 1A.
3. Phương án này có khả thi không? Phải điều chỉnh thế nào?
Kết luận: Phương án hoàn toàn khả thi, đây chính là giải pháp kinh điển trong kỳ thi điện tử ngày xưa (nguồn áp cố định làm chủ, nguồn dòng làm phụ, dùng bộ khuếch đại sai số điều chỉnh). Nhưng độ khó cực cao ở khâu bố trí mạch in (Layout).
Vì bo mạch đã sản xuất xong, mình đưa ra cho cậu một chuỗi bước kiểm tra phần cứng theo phương pháp “kiểm soát biến số”, đừng vội sửa code trước, hãy xác nhận trước xem mạch tương tự có ổn không:
- Kiểm tra tiêm tĩnh (loại trừ nhiễu chuyển mạch):
Tắt nguồn bo mạch. Dùng một nguồn ngoài, đặt ở chế độ dòng hằng (ví dụ cố định 1A), ép trực tiếp dòng 1A này vào điện trở mẫu R3 của cậu.
Sau đó cấp riêng 3.3V/5V cho INA199 và MCU. Dùng đồng hồ đo điện áp đầu ra INA199. Nếu lúc này điện áp ổn định ở mức 1A \\times 0.02\\Omega \\times 50 = 1V, chứng tỏ INA199 không hỏng, model đúng, và hoạt động hoàn hảo dưới tín hiệu một chiều thuần. Như vậy, 100% vấn đề nằm ở gợn sóng và layout của nguồn xung.
- Cải tạo bằng dây nối rời (“giả” phương pháp Kelvin):
Vì PCB chưa vẽ theo Kelvin, ta phải can thiệp vật lý. Cắt đứt đường nối IN+ và IN- của INA199 khỏi đường dẫn dòng lớn, dùng hai sợi dây men cực nhỏ, nối trực tiếp (hàn) vào phần gốc kim loại của điện trở mẫu 20mΩ. Cách này cải thiện mạnh mẽ tình trạng đo dòng bị sai.
- Xử lý phần mềm: chống nhiễu và hiệu chuẩn (dành cho STM32):
- Trong code, kéo dài chu kỳ lấy mẫu ADC.
- Làm hiệu chuẩn khởi động: Khi đảm bảo tải đã ngắt (trạng thái OFF), đọc giá trị ADC tại thời điểm này làm
Offset (sai lệch điểm 0). Sau này mọi phép tính dòng đều dùng công thức: Dòng thực = (ADC_đọc - Offset) × hệ số. Cách này loại bỏ ngay lập tức “dòng ma 1A” khi tắt.
- Kiểm tra mass (GND):
Sơ đồ có phân AGND và GND. Hai mass này được nối với nhau ở đâu? Nếu nối tùy tiện, dòng lớn quay về sẽ nhiễu mass analog. Cách đúng là nối tại một điểm duy nhất (thường ở cực âm tụ đầu vào của XL4015).
Gợi ý tiếp theo:
Nếu cậu chưa có máy hiện sóng, mình cực kỳ khuyên cậu hãy làm ngay bước 1 và bước 3 ở trên (đặc biệt là viết phần hiệu chuẩn loại bỏ nhiễu nền khi khởi động). Anh bạn cứ thử nghiệm theo phương pháp “tiêm tĩnh” ở bước 1 để kiểm tra INA199, xem hệ số khuếch đại với tín hiệu một chiều có đúng không. Sau khi có kết quả, chúng ta có thể tiếp tục tìm lỗi sâu hơn.