콘텐츠로 이동

M1 · 벅 컨버터 유도와 검증

  • 벅 컨버터의 CCM 변환비를 전압-초 평형(volt-second balance)으로, 손 계산과 sympy로 각각 유도합니다.
  • 온 구간(on-interval) 동안의 전류 기울기로 인덕터 전류 리플을 유도합니다.
  • 식 하나가 사이트의 검사를 거치는 과정을 따라갑니다: equations.yaml의 항목, 그 테스트 값, 그 식을 재현해야 하는 sympy 유도, 그리고 생성기(generator). 각각을 일부러 망가뜨려 어떤 검사가 실패하는지 봅니다.
  • 전압-초 평형과 전하 평형과 벅 컨버터를 읽습니다.
  • 저장소를 클론하고 Python 패키지를 설치해 둡니다(README에 있는 대로 pip install -e "python[dev,figures]"). 아래 명령은 클론의 최상위 폴더에서 실행합니다.
  • 이 사이트에서 ΔiL\Delta i_L은 Erickson과 같이 인덕터 전류의 피크-피크 리플의 절반입니다.

CCM에서 스위치는 DTsD T_s 동안 인덕터를 VgV_g에 연결하고, 주기의 나머지 동안에는 다이오드가 인덕터를 접지에 연결합니다. 출력 전압 VV를 일정하다고 보고(소리플 근사, small-ripple approximation) 각 구간의 인덕터 전압을 식으로 씁니다. 한 주기에 걸쳐 평균하고, 그 평균을 0으로 놓은 뒤 VV에 대해 풉니다. V/VgV/V_g를 벅 변환비와 비교합니다.

같은 계산을 sympy에 맡깁니다. 두 인덕터 전압을 채웁니다.

import sympy as sp
D, Vg, V = sp.symbols('D V_g V', positive=True)
v_on = ... # 스위치가 켜져 있는 동안의 인덕터 전압
v_off = ... # 다이오드가 도통하는 동안의 인덕터 전압
print(sp.solve(sp.Eq(D * v_on + (1 - D) * v_off, 0), V))

저장소의 유도는 python/pe_core/derive/ccm_ratios.py에 있고, 유도 페이지에서 단계별로 볼 수 있습니다.

온 구간 동안 인덕터 전류는 일정한 기울기로 오릅니다. DTsD T_s 동안 오른 양이 피크-피크 리플이고, 그 절반이 ΔiL\Delta i_L입니다. 결과를 벅 인덕터 리플과 비교합니다.

벅 예제는 VgV_g = 24 V, DD = 0.5, LL = 100 µH, fsf_s = 100 kHz입니다. 이 예제의 출력 전압과 ΔiL\Delta i_L을 계산해 완료 기준에 입력합니다. 그런 다음 수식 탐색기에서 리플을 열고 인덕턴스를 바꿔 보면, 리플이 1/L1/L에 비례해 줄어듭니다.

▶ 수식 탐색기에서 열기: 벅 인덕터 전류 리플(피크-피크의 절반), CCM
초기값을 가져온 예제 buck-basic

클론에서 python scripts/gen_equations.py, pytest, python scripts/mathlint.py를 실행합니다. 세 가지 모두 통과하고, git status를 보면 생성기가 packages/pe-core/equations/를 바꾸지 않았습니다.

packages/pe-core/equations/equations.yaml에서 buck.ccm.M의 tests 중 첫 번째 기댓값을 바꿉니다. python scripts/gen_equations.py를 실행하면 생성기가 거부하고, 메시지에 항목, 테스트, 식이 실제로 주는 값이 나옵니다. git checkout -- packages/pe-core/equations/로 되돌립니다.

이번에는 buck.ccm.M의 식과 두 기댓값을 서로 맞도록 함께 바꿉니다(예를 들어 셋 다 절반으로). 생성기는 이것을 받아들이지만, pytest는 test_derivation_reproduces_yaml[buck.ccm.M]에서 실패합니다. sympy 유도는 여전히 1단계에서 구한 변환비를 주기 때문입니다. 앞에서처럼 되돌리면, 같은 checkout이 생성기가 다시 쓴 파일도 함께 되돌립니다.

  • 예제의 값 보기

    12 V (출처 buck-basic: 벅 예제)

  • 예제의 값 보기

    300 mA (출처 buck-basic: 벅 예제)

체크 표시는 이 브라우저에만 저장됩니다. 계정이 필요 없고 아무것도 전송되지 않습니다.

  • 여기서 ΔiL\Delta i_L은 피크-피크 리플의 절반입니다. 전류의 피크-피크 변화폭은 확인 칸이 기대하는 값의 두 배입니다.
  • 이 변환비는 CCM에서만 성립합니다. 주기가 끝나기 전에 인덕터 전류가 0에 닿으면 출력은 DVgD V_g보다 올라갑니다(CCM과 DCM, 그리고 미션 M2).
  • pytest는 pe_core가 설치된 Python으로 실행합니다. 다른 인터프리터로 실행하면 검사가 시작되기도 전에 import에서 실패합니다.
  • 생성기가 받아들인 실험은 생성기의 출력 파일도 다시 씁니다. git checkout -- packages/pe-core/equations/는 YAML과 그 파일들을 함께 되돌립니다.
  1. 정상상태에서 한 스위칭 주기 동안 평균한 인덕터 전압이 0인 이유는 무엇입니까?

    1. 출력 커패시터가 출력 전압을 일정하게 유지하기 때문에
    2. 인덕터 전류가 매 주기 끝에서 시작값으로 돌아오기 때문에
    3. 스위치와 다이오드가 같은 시간 동안 도통하기 때문에
    4. 입력 전압이 일정하기 때문에
    정답과 해설

    정답: B 한 주기 동안 인덕터 전류의 변화는 평균 전압에 주기를 곱하고 인덕턴스로 나눈 값입니다. 주기마다 반복되는 전류는 변화가 0이므로 평균 전압도 0입니다. 이것이 전압-초 평형입니다.

  2. CCM 벅 컨버터가 48 V에서 듀티비 0.25로 동작합니다. 출력 전압은 얼마입니까?

    1. 36 V
    2. 64 V
    3. 12 V
    4. 16 V
    정답과 해설

    정답: C 변환비가 듀티비이므로 0.25 × 48 V = 12 V입니다.

  3. 벅의 인덕터 전류가 1.0 A와 1.6 A 사이를 오갑니다. 이 사이트의 규약으로 ΔiL\Delta i_L은 얼마입니까?

    1. 0.6 A
    2. 0.3 A
    3. 1.3 A
    4. 1.6 A
    정답과 해설

    정답: B 피크-피크 리플은 0.6 A이고, ΔiL\Delta i_L은 Erickson과 같이 그 절반인 0.3 A입니다. 평균 전류는 1.3 A입니다.

  4. CCM 벅의 인덕턴스를 두 배로 하고 나머지는 그대로 둡니다. ΔiL\Delta i_L은 어떻게 됩니까?

    1. 절반이 됩니다
    2. 두 배가 됩니다
    3. 그대로입니다
    4. 4분의 1이 됩니다
    정답과 해설

    정답: A 온 구간 동안 전류의 기울기는 인덕터 전압을 인덕턴스로 나눈 값이므로, 같은 시간 동안 오르는 양이 절반이 됩니다.

  5. equations.yaml에서 어떤 식의 테스트 하나의 기댓값만 바꾸고 식은 그대로 둡니다. 어떻게 됩니까?

    1. 사이트를 빌드할 때까지 아무 일도 없습니다
    2. TypeScript 테스트만 실패합니다
    3. 생성기가 거부하고, 항목과 테스트, 식이 실제로 주는 값을 밝힙니다
    4. mathlint가 손으로 쓴 수식이라고 보고합니다
    정답과 해설

    정답: C 카탈로그를 불러올 때 모든 테스트를 식으로 계산해 보므로, 생성기와 pytest는 첫 불일치에서 멈추고 그 위치를 알려 줍니다.

  6. 식과 기댓값을 서로 맞도록 함께 바꿉니다. 이것을 여전히 잡아내는 검사는 무엇입니까?

    1. 없습니다. 테스트는 통과합니다
    2. 유도 테스트: sympy 유도가 equations.yaml의 식을 재현해야 합니다
    3. 개인정보 검사
    4. 링크 검사기
    정답과 해설

    정답: B 테스트 값은 식을 그 자신과 비교할 뿐입니다. python/pe_core/derive/의 유도는 YAML과 독립적이고, pytest가 둘을 비교합니다.

이 사이트의 예제, 프리셋, 연습 문제에 나오는 수치는 교육용으로 만든 어림수(합성 값)이며, 실제 설계의 데이터가 아닙니다.