INA226 测量偏移/非线性问题

안녕하세요, 저는 ESP32, TFT 디스플레이 및 기타 흥미로운 구성 요소들을 사용하여 DIY 배터리 테스터 / 전자 부하를 만들고 있습니다. 이 프로젝트의 핵심은 디지털 제어 설정점이 있는 피드백 루프를 갖춘 전류 싱크입니다. 디자인 개선에 대한 몇 가지 아이디어가 있긴 합니다(부적절한 선택을 몇 가지 했다는 것을 인정합니다), 하지만 현재 가장 골치 아픈 문제는 INA226의 전류 측정에 있습니다.

문제 설명:

PCB 터미널의 입력 전압이 낮을 때(예: 약 4V), 전류를 증가시켜 보면 INA226의 측정값이 실제 전류(디지털 멀티미터로 검증됨)보다 낮게 나타나며, 비선형성이 존재합니다. 설정 전류가 증가함에 따라 이러한 편차가 점점 더 두드러집니다.

  • 이 문제는 전류가 약 50mA를 초과할 때 발생합니다.
  • 입력 전압이 높을 때(약 18V) 문제가 거의 사라집니다.
  • 흥미롭게도, 피드백 루프의 설정값과 실제 전류가 매우 근접합니다 — 일반적으로 오차가 ±0.5mA 이내입니다.

따라서 본질적으로, 제 부하는 예상대로 작동하지만, INA226은 저전압에서 전류 값을 "과소 측정"하는 것처럼 보입니다.

질문:

  1. INA226에서 부하가 걸린 저버스 전압 조건에서 이러한 동작을 경험한 적이 있으신가요?
  2. 이것이 션트 전압 강하, I2C 타이밍 또는 기타 요인과 관련이 있을 수 있을까요?
  3. 이 시나리오에서 안정적인 측정값을 얻거나 측정 정확도를 높일 수 있는 조언이 있을까요?

추가 정보가 필요하시다면, 더 많은 사진, 배선도, 코드 조각 또는 전체 KiCad 프로젝트 파일을 공유할 수 있습니다. 여러분의 조언이나 유사한 경험 공유에 대해 매우 감사드립니다!

C1와 R4의 상호작용으로 인해 발생할 수 있는 안정성 문제를 고려해 보셨나요? 이는 연산 증폭기의 반전 입력 단자에 지연을 일으키고, 달링턴 트랜지스터가 도입하는 지연과 함께 발진이나 일종의 링잉 현상을 충분히 일으킬 수 있습니다.

이 점을 미처 고려하지 못했습니다. 제 생각은 배터리 전압이 안정적이기 때문에 빠른 조정이 불필요하고, RC 저역통과필터를 사용하면 노이즈/진동을 줄일 수 있다는 것이었습니다. 이 문제는 반드시 오실로스코프로 확인하겠습니다.

그리고, 언급하지 않았는데 Q1이 2N2222에서 BD139로 교체되었습니다.

피드백 루프의 RC 저역통과 필터(C1 및 R4)가 문제의 원인일 수 있습니다, 답변에서 언급했듯이. 낮은 입력 전압에서 루프 지연(RC 및 달링턴 트랜지스터 Q1로 인한)이 위상 이동을 일으켜 전류 조정이 불안정해지고 결국 INA226 판독값이 왜곡될 수 있습니다. RC 시간 상수를 줄여보세요—더 작은 커패시터 C1(예: 100nF에서 10nF로) 또는 저항 R4를 사용하여—피드백 응답을 빠르게 하세요. 또한, Q1을 BD139로 교체했으므로, 그 베이스 구동이 충분한지 확인하세요; 구동이 부족하면 트랜지스터가 선형 영역에서 동작하여 전류 비선형성이 증가할 수 있습니다. 션트 전압 파형을 관찰하기 위해 오실로스코프를 사용하세요—링잉이나 발진이 있는 경우, 션트 저항에 작은 스너버 커패시터(예: 10pF)를 병렬로 추가하면 신호를 안정화하는 데 도움이 될 수 있습니다.

현상을 먼저 분석해 보겠습니다:

  1. 전류 루프 자체에는 문제가 없습니다(설정값≈실측값). 이는 MOSFET, 연산증폭기, DAC로 이루어진 폐루프가 정상 작동한다는 뜻입니다;

  2. INA226의 '보고값’만 낮게 나타나며, 특히 VBUS가 낮고 전류가 클 때 발생합니다;

  3. 18 V에서는 오차가 거의 보이지 않습니다.

이는 거의 직접적으로 '병렬 저항 양단의 공통 모드 전압이 너무 낮다’는 것을 가리키며, 이로 인한 칩 수준 측정 오차이지 코드나 I²C 타이밍 문제가 아닙니다.

  1. 공통 모드가 너무 낮으면, 내부 PGA의 정확도가 떨어지기 시작합니다
    INA226의 입력 단은 ΔΣ형 ADC이며, 전단에 2 MHz 스위치드 커패시터 어레이가 있습니다. 공통 모드 전압이 낮을수록 내부 샘플 앤 홀드의 전하 주입 불일치가 더 두드러지며, 등가 오프셋이 증폭됩니다. 데이터시트에 명확히 나와 있습니다: VCM = 0 V일 때 typical 오프셋은 50 µV, VCM ≥ 1 V일 때는 10 µV 수준으로 떨어집니다. 4 V 입력, 50 mA 전류, 병렬 저항 50 mΩ이라면 VBUS는 실제로 4 V – 2.5 mV ≈ 3.9975 V로 끌려 내려가며, 공통 모드는 여전히 ‘낮은’ 편입니다. 하지만 더 심각한 문제는 병렬 전압이 고작 2.5 mV에 불과해 오프셋 전압과 같은 수준이라는 점입니다. 전류를 더 높이면 판독값이 부족하게 나타나기 시작합니다.

  2. 병렬 저항의 Kelvin 배선/패드 열전대 효과
    저전압 대전류 시, 1 µΩ의 추가 금속 저항은 1 µV의 오차를 유발합니다. 최상층 구리박이 ‘먹혀’ 많이 손실되었거나 샘플링 지점이 패드에서 너무 멀다면, 실제 INA226에 가해지는 Vshunt는 멀티미터로 측정한 값보다 낮을 것입니다.

  3. 보드 내 ground bounce
    전력 그라운드, 디지털 그라운드, INA226의 GND가 얇은 선로를 공유한다면, 50 mA의 스위칭 스파이크로 수백 µV의 그라운드 전위차가 발생해 차동 측정값에 직접 중첩됩니다.

  4. I²C 타이밍/노이즈
    이런 종류의 오차는 일반적으로 ‘깜빡임’ 또는 '코드값 깜박임’이며, 계통적인 낮은 값이 아니므로 우선순위를 뒤로 미룹니다.

개선 목록(투입 대비 산출 순으로 정렬)

A. 병렬 저항을 '하이사이드’로 변경
INA226의 VBUS 핀을 배터리 양극에 직접 연결하여 공통 모드를 ≈4 V로 만들면, 1 V의 '편안한 영역’을 훨씬 상회하므로 칩 오프셋이 즉시 한 자릿수 줄어듭니다. 하이사이드 측정을 위해서는:
– 병렬 저항을 양극 쪽으로 이동;
– INA226의 V+ 전원은 3.3 V로 공급해도 되며, 공통 모드가 36 V까지 허용되기 때문;
– 새 배선은 반드시 Kelvin 방식이어야 하며, 전력 경로와 분리되어야 합니다.

B. 병렬 전압 증가
최대 전류가 1 A라면 50 mΩ을 100 mΩ로 교체하여 전체 범위를 100 mV로 만들면, LSB는 여전히 2.5 µV이지만 신호/오프셋 비율이 두 배가 됩니다. 소비 전력은 100 mW로 1 A 애플리케이션에서 허용 가능합니다.

C. ‘영점 오프셋’ 보정
코드에서 ‘영 전류’ 샘플링을 한 번 수행(릴레이 차단 또는 DAC=0)하여 결과를 EEPROM에 저장하고, 매번 공식 테스트 전에 빼줍니다. INA226 자체에 Calibration 레지스터가 있지만, 이는 전력/전류 계산에만 유효할 뿐 원시 병렬 전압에는 효과가 없습니다. 따라서 Shunt Voltage Register를 직접 읽은 후 오프셋을 빼는 것이 가장 간단합니다.

D. 보드 배선 소규모 재작업
– 전력 그라운드, 디지털 그라운드를 분리한 후 단일 지점에서 연결;
– INA226 아래 전체 층을 ‘아날로그 그라운드’ 구리박으로 만들고, 전력 그라운드와는 0 Ω 저항이나 핀헤더를 통해 단일 지점에서만 접합;
– 병렬 저항 패드 내측에 Kelvin via를 두 쌍 뚫고, 차동 신호선은 내부층으로 평행 배선하며 길이는 15 mm 미만.

E. 소프트웨어 필터링
64회 샘플링하여 평균낸 후, 그 결과를 2차 IIR 필터로 평활화하면 무작위 노이즈를 0.2 LSB 이하로 억제할 수 있지만, 계통적인 오프셋에는 효과가 없으므로 A/B/C와 함께 사용해야 합니다.

빠른 검증 방법

  1. 임시로 실험실 전원에 1 Ω 저항을 직렬 연결하여 VBUS를 인위적으로 8 V 이상으로 높이면 오차가 즉시 줄어드는지 확인;

  2. 정밀 밀리볼트 소스(또는 DAC+분압기)를 사용해 INA226 차동 핀에 직접 1 mV, 5 mV, 10 mV를 주입하고 Shunt Voltage Register를 읽어 ‘입력-코드값’ 곡선을 그리면, 칩 자체의 선형 영역을 한눈에 파악할 수 있습니다.

일반적으로 A+B+C 세 항목을 완료하면 4 V/1 A 지점의 오차를 ±0.5 %FS 이내로 억제할 수 있으며, 나머지는 소프트웨어 보정 문제입니다. 디버깅을 잘 마치시기 바랍니다!

귀하의 설명에 따르면, 낮은 입력 전압(예: 4V)에서 대전류 시 INA226의 전류 측정값이 실제값보다 낮고 비선형적인 문제가 발생하지만, 고전압(18V)에서는 문제가 사라지는 현상은 다음과 같이 분석하고 해결할 수 있습니다:

1. 공통 모드 전압 및 션트 전압 강하

INA226의 공통 모드 전압 범위가 중요합니다. INA226는 V- ≤ VCM ≤ V+(V-는 접지, V+는 일반적으로 버스 전압)가 필요합니다. 그러나 션트 저항의 전압 강하(I×Rshunt)는 샘플링 전압을 변경합니다. 입력 전압이 낮을 때(예: 4V), 전류를 증가시키면 샘플링 단자의 공통 모드 전압이 INA226의 최소 공통 모드 동작 전압에 접근하거나 그 이하로 떨어져 측정 정확도가 감소하고 비선형성이 발생합니다.

예를 들어, 회로도의 R5=0.02Ω에서 추정되는 션트 저항이 0.02Ω인 경우, 500mA에서 전압 강하는 10mV입니다. 4V 버스 전압에서 샘플링 지점의 공통 모드 전압은 이 강하로 인해 감소하여 INA226의 공통 모드 범위 하한에 접근하여 측정 편차를 일으킵니다. 18V에서는 션트 강하가 무시할 수 있으므로 공통 모드 전압이 정상 범위에 유지됩니다.

2. 션트 저항 전력 소산 및 온도 드리프트

대전류에서 션트 저항이 발열하여 저항값이 온도에 따라 변화(온도 드리프트) 하여 비선형 측정을 일으킵니다. 특히 낮은 전압과 대전류에서는 션트 저항의 전력 소산(I²×R)이 상당하여 온도 상승과 저항 변화가 뚜렷하여 샘플링 전압으로 계산된 전류값이 실제값에서 벗어납니다.

3. I2C 타이밍 및 통신 안정성

피드백 루프는 정상 작동하지만, INA226의 I2C 통신은 저전압 공급에서 타이밍 편차가 있을 수 있습니다. 회로도의 AMS1117에서 공급되는 INA226의 전원 전압(3.3V)이 낮은 버스 전압에서 안정적인지 확인하세요. 또한 I2C의 풀업 저항과 통신 속도(예: 장치가 지원하는 속도를 초과하는 경우)도 데이터 판독 정확도에 영향을 주어 판독 편차를 일으킬 수 있습니다.

4. 회로 배치 및 노이즈 간섭

션트 저항 배선의 기생 인덕턴스나 저항, 또는 TFT 디스플레이 및 ESP32의 고주파 신호와 같은 다른 고주파 회로와의 크로스토크도 샘플링 정확도에 영향을 줄 수 있습니다. 특히 저전압과 작은 신호 시나리오에서는 노이즈 영향이 확대됩니다.

안정적인 판독 및 정확도 향상을 위한 제안사항

  • 공통 모드 전압 최적화: INA226의 공통 모드 전압이 항상 사양 범위 내에 있도록 하세요. 션트 저항값 조정(예: 전압 강하를 줄이기 위해 더 작은 저항값 선택, 전력과 해상도 균형 고려)을 시도하거나, 낮은 전압 시나리오에서 최대 전류를 제한하여 공통 모드 전압이 지나치게 낮아지는 것을 방지하세요.
  • 션트 저항 선택: 낮은 온도 계수의 합금 저항(망가닌 합금 등)을 사용하고, 충분한 전력 여유(실제 소비 전력의 최소 2배)를 확보하여 온도 드리프트 영향을 줄이세요. 동시에 션트 저항의 방열 설계를 최적화하여 방열 패드나 구리 면적을 늘리세요.
  • I2C 통신 최적화: I2C 통신 속도를 줄이세요(예: 400kHz에서 100kHz로), 풀업 저항값이 적절한지 확인하세요(일반적으로 3.3V 시스템에서 4.7kΩ 정도), ESP32와 INA226 간의 I2C 타이밍이 장치 매뉴얼을 엄격히 준수하는지 확인하세요. 또한 INA226의 V+ 핀에 바이패스 캐패시터(10μF와 0.1μF 캐패시터 병렬)를 추가하여 전원 안정성을 개선할 수 있습니다.
  • 회로 배치 개선: 션트 저항의 샘플링 라인을 가능한 한 짧고 두껍게 유지하여 기생 매개변수를 줄이세요; INA226를 고주파 간섭원(TFT 디스플레이 구동 회로 등)으로부터 멀리 배치하고, 필요시 샘플링 라인을 차폐하거나 단일 지점 접지를 사용하세요.
  • 소프트웨어 보정 및 보상: 코드에서 저전압 시나리오에 대한 보정 테이블을 작성하고, 입력 전압과 설정 전류에 따라 INA226 판독값을 보상하세요. 예를 들어, 디지털 멀티미터로 다양한 전압과 전류에서 편차를 측정하고, 보상 함수를 피팅하여 소프트웨어에서 실시간으로 보정하세요.