2023년 2월 9일 목요일

18650 배터리 용량을 측정해보자

1. 내부 저항만을 측정하기에는 아까운 장비

 일전에 18650의 배터리 내부 저항을 측정하기 위하여 작업을 하였는데, 단순히 내부 저항만 측정하기에는 장치가 너무 아깝게 느껴졌다. 

어떻게 만들어졌는가는 아래의 링크를 확인하면 된다.

[ 18650 배터리 내부 저항을 ESP8266으로 측정하자 ]





2. 배터리 용량 측정 원리

원리는 사실상 간단하다. Cut-Off 까지 방전 시키면서 방전에 걸린 시간, 중간 중간에 측정한 전압을 이용하여 산술적으로 계산한다. 

전력량 (Wh) = 전류 X 전압 X 시간 
전하량 (mAh) = 전력량 / 공칭전압


3. 실제 사용된 계산법

핵심은 아래의 3줄 코드이다.

  fLoadVolt = (이전 측정 전압 + 현재 측정 전압) / 2.0; // 2개 측정 평균값 구하기
  fCurrent = fLoadVolt / 방전저항값;
  g_fBatCapacity += (fLoadVolt * fCurrent) *
((float)(현재 전압 측정 시간 - 이전 전압 측정 시간) / 3600000.0);

부하를 건 상태에서 주기적으로 전압을 측정한다.

이 전압을 바탕으로 V = IR 공식에 입거하여 전류를 계산하고, 전력량은 시간 X 전압 X 전류로 계산한다. 전력량은 계속해서 더해 주면 된다.


4. 표시 방법

 이미 변수에 저장된 측정된 값들을 표시한다. 다만 전하량(mAh)는 Wh에서 공칭전압으로 나누고 1000을 곱하여 단위를 맞춰준다. 

  Serial.println("-----------------------------------------------");
  sprintf(g_strPrintBuf, "Internal Registance = %.4f", g_fInternalResistance);
  Serial.println(g_strPrintBuf);
  sprintf(g_strPrintBuf, "Wh = %.4f", g_fBatCapacity);
  Serial.println(g_strPrintBuf);
  sprintf(g_strPrintBuf, "mAh = %.4f", g_fBatCapacity * 1000 / BASE_VOLT );
  Serial.println(g_strPrintBuf);


특별히 이번 버전은 OLED를 사용하고 있지 않기에, Arduino IDE의 Serial Monitor를 켜고 있어야 상태가 보인다. 

5. 전체 소스 코드

두개의 소스 파일로 구성되어 있으며, Arduino IDE 에서 18650_Measure.ino 파일을 열면 나머지 파일 하나가 추가 탭으로 열린다.  전체 소스코드는 아래의 링크로 다운로드 가능하다. 

[ 소스코드 다운로드 ]

이 코드를 그대로 사용하기 위해서는 1번에서 소개한 링크로 들어가보면 회로도가 있다. 해당 회로도 대로 구성하면 된다. 



댓글 없음:

댓글 쓰기

3단 6핀 스위치로 DC 모터의 회전 방향을 바꾸어 보자

1. 필요는 연구의 어머니 항상 느끼는 부분이다. 필요하지 않으면 연구하지 않으며, 필요하면 연구한다. DC 모터를 조건에 따라서 정방향 또는 역방향으로 회전시켜야 하는 필요가 생겼다. 처음에는 MCU 및 Relay Switch를 이용하는 방법을 생각...