아래 각 절은 python/pe_core/derive/의 스크립트에서 생성됩니다. 같은
스크립트가 pytest에서도 실행되며, 유도 결과(derived result)와 equations.yaml에
저장된 수식의 기호적 차이(symbolic difference)가 0으로 정리되지 않으면 테스트가
실패합니다. 설명과 제목은 사람이 쓴 것이고, 이 페이지의 모든 수식은 그
스크립트에서 sympy가 출력한 것입니다.
소자 법칙을 일정한 전압 또는 전류에 대해 적분하고, 같은 법칙의 페이저 형태에서 임피던스를 구하며, 펄스열의 푸리에 계수와 실효값을 한 주기에 걸쳐 계산합니다. 이상적 변압기는 자기저항이 0인 무손실 코어를 가정하고 패러데이 법칙과 앙페르 법칙에서 얻습니다.
인덕터 법칙은 v = L d i / d t v = L\,\mathrm{d}i/\mathrm{d}t v = L d i / d t 입니다. 전압 V L V_L V L 이 일정하면 전류의 기울기도 일정하므로, 구간 t t t 에 걸쳐 적분합니다.
∫ 0 t V L L d τ \int\limits_{0}^{t} \frac{V_L}{L}\, d\tau 0 ∫ t L V L d τ 적분을 계산합니다.
Δ i = V L t L \Delta i = \frac{V_L t}{L} Δ i = L V L t ✓ 재현하는 수식 ind.di (pytest가 sympy로 일치를 검증함)
인덕터 법칙의 쌍대인 커패시터 법칙 i = C d v / d t i = C\,\mathrm{d}v/\mathrm{d}t i = C d v / d t 를 일정한 전류 I C I_C I C 에 대해 적분합니다.
∫ 0 t I C C d τ \int\limits_{0}^{t} \frac{I_C}{C}\, d\tau 0 ∫ t C I C d τ 적분을 계산합니다.
Δ v C = I C t C \Delta v_C = \frac{I_C t}{C} Δ v C = C I C t ✓ 재현하는 수식 cap.dv (pytest가 sympy로 일치를 검증함)
인덕터에 전달되는 에너지는 ∫ v i d t = ∫ L i d i \int v\,i\,\mathrm{d}t = \int L\,i\,\mathrm{d}i ∫ v i d t = ∫ L i d i 이며, 전류 0에서 I L I_L I L 까지 적분합니다.
∫ 0 I L L i d i \int\limits_{0}^{I_L} L i\, di 0 ∫ I L L i d i 적분을 계산합니다.
E L = L I L 2 2 E_L = \frac{L I_L^{2}}{2} E L = 2 L I L 2 ✓ 재현하는 수식 ind.E (pytest가 sympy로 일치를 검증함)
커패시터에 전달되는 에너지는 ∫ v i d t = ∫ C v d v \int v\,i\,\mathrm{d}t = \int C\,v\,\mathrm{d}v ∫ v i d t = ∫ C v d v 이며, 전압 0에서 V C V_C V C 까지 적분합니다.
∫ 0 V C C v d v \int\limits_{0}^{V_C} C v\, dv 0 ∫ V C C v d v 적분을 계산합니다.
E C = C V C 2 2 E_C = \frac{C V_C^{2}}{2} E C = 2 C V C 2 ✓ 재현하는 수식 cap.E (pytest가 sympy로 일치를 검증함)
정현파 정상상태에서는 d / d t \mathrm{d}/\mathrm{d}t d / d t 가 j ω j\omega j ω 를 곱하는 연산이 되며, ω = 2 π f \omega = 2\pi f ω = 2 π f 입니다. 인덕터 법칙에서 인덕터의 임피던스를 얻습니다.
Z L = 2 π i L f Z_L = 2 \pi i L f Z L = 2 π i L f 그 크기.
∣ Z L ∣ = 2 π f L |Z_L| = 2 \pi f L ∣ Z L ∣ = 2 π f L ✓ 재현하는 수식 imp.ZL (pytest가 sympy로 일치를 검증함)
커패시터 법칙에서 커패시터의 임피던스를 얻습니다.
Z C = − i 2 π C f Z_C = - \frac{i}{2 \pi C f} Z C = − 2 π C f i 그 크기.
∣ Z C ∣ = 1 2 π f C |Z_C| = \frac{1}{2 \pi f C} ∣ Z C ∣ = 2 π f C 1 ✓ 재현하는 수식 imp.ZC (pytest가 sympy로 일치를 검증함)
부하가 없는 R-C 저역통과 필터에서 출력은 R f R_f R f 와 커패시터 임피던스로 이루어진 분압기에서 커패시터에 걸리는 몫입니다.
G ( j ω ) = − i 2 π C f R f f − i G(j\omega) = - \frac{i}{2 \pi C_f R_f f - i} G ( j ω ) = − 2 π C f R f f − i i 크기의 제곱.
∣ G ( j ω ) ∣ 2 = 1 1 + 4 π 2 C f 2 R f 2 f 2 \left|{G(j\omega)}\right|^{2} = \frac{1}{1 + 4 \pi^{2} C_f^{2} R_f^{2} f^{2}} ∣ G ( j ω ) ∣ 2 = 1 + 4 π 2 C f 2 R f 2 f 2 1 차단(-3 dB) 주파수는 크기의 제곱이 1/2로 떨어지는 주파수입니다.
f c = 1 2 π R f C f f_c = \frac{1}{2 \pi R_f C_f} f c = 2 π R f C f 1 ✓ 재현하는 수식 rc.fc (pytest가 sympy로 일치를 검증함)
크기를 R f C f R_f C_f R f C f 대신 f c f_c f c 로 나타냅니다.
∣ G ∣ = f c f 2 + f c 2 = 1 1 + ( f f c ) 2 |G| = \frac{f_c}{\sqrt{f^{2} + f_c^{2}}} = \frac{1}{\sqrt{1 + \left(\frac{f}{f_c}\right)^{2}}} ∣ G ∣ = f 2 + f c 2 f c = 1 + ( f c f ) 2 1 ✓ 재현하는 수식 rc.gain (pytest가 sympy로 일치를 검증함)
기생 커패시턴스가 병렬로 붙은 인덕턴스에서는 어드미턴스가 더해집니다.
Y = 2 π i C p f − i 2 π L f Y = 2 \pi i C_p f - \frac{i}{2 \pi L f} Y = 2 π i C p f − 2 π L f i 공진에서 어드미턴스는 0입니다(무손실 모델에서는 임피던스가 무한대).
f s r f = 1 2 π L C p f_\mathrm{srf} = \frac{1}{2 \pi \sqrt{L C_p}} f srf = 2 π L C p 1 ✓ 재현하는 수식 passive.f_srf (pytest가 sympy로 일치를 검증함)
주기 T T T 마다 높이 V p k V_\mathrm{pk} V pk , 폭 D T D T D T 인 펄스열을 생각합니다. h h h 차 고조파의 코사인 계수는 다음과 같습니다.
a h , cos = V p k sin ( 2 π D h ) π h a_{h,\cos} = \frac{V_\mathrm{pk} \sin{\left(2 \pi D h \right)}}{\pi h} a h , c o s = π h V pk sin ( 2 π D h ) 사인 계수는 다음과 같습니다.
a h , sin = 2 V p k sin 2 ( π D h ) π h a_{h,\sin} = \frac{2 V_\mathrm{pk} \sin^{2}{\left(\pi D h \right)}}{\pi h} a h , s i n = π h 2 V pk sin 2 ( π D h ) 고조파 진폭의 제곱은 두 계수의 제곱의 합이며, 1 − cos 2 x = 2 sin 2 x 1 - \cos 2x = 2\sin^2 x 1 − cos 2 x = 2 sin 2 x 를 쓰면 완전제곱이 됩니다.
a h 2 = 4 V p k 2 sin 2 ( π D h ) π 2 h 2 a_h^{2} = \frac{4 V_\mathrm{pk}^{2} \sin^{2}{\left(\pi D h \right)}}{\pi^{2} h^{2}} a h 2 = π 2 h 2 4 V pk 2 sin 2 ( π D h ) 음이 아닌 제곱근을 취합니다.
a h = 2 V p k ∣ sin ( π h D ) ∣ π h a_h = \frac{2 V_\mathrm{pk} \left|{\sin{\left(\pi h D \right)}}\right|}{\pi h} a h = π h 2 V pk ∣ sin ( π h D ) ∣ ✓ 재현하는 수식 fourier.pulse.harm (pytest가 sympy로 일치를 검증함)
한 주기에 걸친 제곱 평균에는 펄스가 D T D T D T 동안 V p k 2 V_\mathrm{pk}^2 V pk 2 를 기여합니다.
V r m s 2 = D V p k 2 V_\mathrm{rms}^{2} = D V_\mathrm{pk}^{2} V rms 2 = D V pk 2 실효값은 그 제곱근입니다.
V r m s = V p k D V_\mathrm{rms} = V_\mathrm{pk} \sqrt{D} V rms = V pk D ✓ 재현하는 수식 fourier.pulse.rms (pytest가 sympy로 일치를 검증함)
리플 전류는 커패시터의 직렬 저항을 흐르며, 이 저항의 전압은 매 순간 전류를 따릅니다. 최댓값과 최솟값의 차는 다음과 같습니다.
Δ v E S R = i C , m a x R E S R − i C , m i n R E S R \Delta v_\mathrm{ESR} = i_{C,\mathrm{max}} R_\mathrm{ESR} - i_{C,\mathrm{min}} R_\mathrm{ESR} Δ v ESR = i C , max R ESR − i C , min R ESR 전류의 피크-피크 값은 최댓값에서 최솟값을 뺀 값입니다.
Δ v E S R = R E S R Δ i L , p p \Delta v_\mathrm{ESR} = R_\mathrm{ESR} \Delta i_{L,\mathrm{pp}} Δ v ESR = R ESR Δ i L , pp ✓ 재현하는 수식 cap.esr.ripple (pytest가 sympy로 일치를 검증함)
코어를 한 바퀴 도는 경로에 앙페르 법칙을 적용하면, H H H 의 선적분은 감싸인 전류, 즉 각각 I w I_w I w 가 흐르는 N N N 턴의 전류와 같습니다. 공극이 없고 자계가 균일한 코어에서 이 선적분은 H H H 와 자로 길이의 곱입니다.
H l e = I w N H l_e = I_w N H l e = I w N H H H 에 대해 풉니다.
H = N I w l e H = \frac{N I_w}{l_e} H = l e N I w ✓ 재현하는 수식 mag.H_ampere (pytest가 sympy로 일치를 검증함)
한 코어에 감긴 두 권선에 패러데이 법칙을 적용하면, 각 권선 전압은 턴 수에 공통 자속의 변화율을 곱한 값입니다. 1차 권선에서는 다음과 같습니다.
V 1 = N p d Φ / d t V_1 = N_p \mathrm{d}\Phi/\mathrm{d}t V 1 = N p d Φ/ d t 2차 권선에서는 다음과 같습니다.
V 2 = N s d Φ / d t V_2 = N_s \mathrm{d}\Phi/\mathrm{d}t V 2 = N s d Φ/ d t 두 식을 나누면 자속 항이 소거되며, 턴 수의 비는 n n n 입니다(1:n 규약).
V 2 = n V 1 V_2 = n V_1 V 2 = n V 1 ✓ 재현하는 수식 xfmr.V2 (pytest가 sympy로 일치를 검증함)
자기저항이 0인 이상적인 코어에 앙페르 법칙을 적용하면 순 기자력은 0입니다.
I 1 N p − I 2 N s = 0 I_1 N_p - I_2 N_s = 0 I 1 N p − I 2 N s = 0 N s = n N p N_s = n N_p N s = n N p 로 놓고 2차 전류에 대해 풉니다.
I 2 = I 1 n I_2 = \frac{I_1}{n} I 2 = n I 1 ✓ 재현하는 수식 xfmr.I2 (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/foundations.py
스위칭 컨버터는 직류 입력을 스위칭해 펄스열로 만들고, 저역통과 필터가 그 평균을 남깁니다. 각 회로 방정식을 한 주기에 걸쳐 평균하면 스위칭 회로가 직류 모델이 되며, 인덕터 권선 저항 R L R_L R L 같은 손실은 일반 저항으로 나타납니다.
벅의 스위치 노드는 0 < t < D T s 0 < t < D T_s 0 < t < D T s 동안 V g V_g V g , D T s < t < T s D T_s < t < T_s D T s < t < T s 동안 0 0 0 입니다. 이를 한 주기에 걸쳐 평균합니다.
⟨ v s ⟩ = ∫ 0 T s v s d t T s \langle v_s \rangle = \frac{\int\limits_{0}^{T_s} v_s\, dt}{T_s} ⟨ v s ⟩ = T s 0 ∫ T s v s d t 두 구간의 적분을 계산합니다.
⟨ v s ⟩ = D V g \langle v_s \rangle = D V_g ⟨ v s ⟩ = D V g ✓ 재현하는 수식 sw.v_avg (pytest가 sympy로 일치를 검증함)
인덕터는 v L = L d i / d t v_L = L \, di/dt v L = L d i / d t 를 따릅니다. 한 주기에 걸쳐 적분하면 전류의 변화는 전압의 적분을 L L L 로 나눈 값입니다.
Δ i = ∫ 0 T s v L d t L \Delta i = \frac{\int\limits_{0}^{T_s} v_L\, dt}{L} Δ i = L 0 ∫ T s v L d t D T s D T_s D T s 동안 v L , o n v_{L,\mathrm{on}} v L , on , 나머지 시간 동안 v L , o f f v_{L,\mathrm{off}} v L , off 인 전압이라면 적분은 한 주기 평균에 T s T_s T s 를 곱한 값입니다.
⟨ v L ⟩ = v L , o f f + v L , o n D − v L , o f f D \langle v_L \rangle = v_{L,\mathrm{off}} + v_{L,\mathrm{on}} D - v_{L,\mathrm{off}} D ⟨ v L ⟩ = v L , off + v L , on D − v L , off D 따라서 한 주기 동안의 변화는 평균 전압에 T s T_s T s 를 곱해 L L L 로 나눈 값이며, 평균이 0일 때만 0입니다(전압-초 평형).
Δ i = ⟨ v L ⟩ T s L \Delta i = \frac{\langle v_L \rangle T_s}{L} Δ i = L ⟨ v L ⟩ T s ✓ 재현하는 수식 vsb.drift (pytest가 sympy로 일치를 검증함)
소리플 근사를 쓰면 인덕터 전압(또는 커패시터 전류)은 D T s D T_s D T s 동안 x o n x_\mathrm{on} x on , ( 1 − D ) T s (1 - D) T_s ( 1 − D ) T s 동안 x o f f x_\mathrm{off} x off 값을 가지며, 그 평균은 0이어야 합니다.
x o f f ( 1 − D ) + x o n D = 0 x_\mathrm{off} \left(1 - D\right) + x_\mathrm{on} D = 0 x off ( 1 − D ) + x on D = 0 인덕터 전압(x = v L x = v_L x = v L )에 대해서는 전압-초 평형입니다.
v L , o f f = D v L , o n − 1 + D = − D v L , o n 1 − D v_{L,\mathrm{off}} = \frac{D v_{L,\mathrm{on}}}{-1 + D} = - \frac{D v_{L,\mathrm{on}}}{1 - D} v L , off = − 1 + D D v L , on = − 1 − D D v L , on ✓ 재현하는 수식 vsb.v_off (pytest가 sympy로 일치를 검증함)
커패시터 전류(x = i C x = i_C x = i C )에 대해서는 전하 평형입니다.
i C , o f f = D i C , o n − 1 + D = − D i C , o n 1 − D i_{C,\mathrm{off}} = \frac{D i_{C,\mathrm{on}}}{-1 + D} = - \frac{D i_{C,\mathrm{on}}}{1 - D} i C , off = − 1 + D D i C , on = − 1 − D D i C , on ✓ 재현하는 수식 csb.i_off (pytest가 sympy로 일치를 검증함)
인덕터 권선 저항 R L R_L R L 이 있는 부스트의 전압-초 평형: 인덕터에는 스위치 온 구간에 V g − I R L V_g - I R_L V g − I R L , 다이오드 도통 구간에 V g − I R L − V V_g - I R_L - V V g − I R L − V 가 걸립니다(I I I = 인덕터 직류 전류).
D ( V g − I R L ) + ( 1 − D ) ( V g − V − I R L ) = 0 D \left(V_g - I R_L\right) + \left(1 - D\right) \left(V_g - V - I R_L\right) = 0 D ( V g − I R L ) + ( 1 − D ) ( V g − V − I R L ) = 0 출력 커패시터의 전하 평형: 커패시터 전류는 스위치 온 구간에 − V / R -V/R − V / R , 다이오드 도통 구간에 I − V / R I - V/R I − V / R 입니다.
( 1 − D ) ( I − V R ) − D V R = 0 \left(1 - D\right) \left(I - \frac{V}{R}\right) - \frac{D V}{R} = 0 ( 1 − D ) ( I − R V ) − R D V = 0 두 1차 방정식을 I I I 에 대해 풉니다.
I = V g R + R L − 2 D R + R D 2 I = \frac{V_g}{R + R_L - 2 D R + R D^{2}} I = R + R L − 2 D R + R D 2 V g M = V / V g M = V/V_g M = V / V g 에 대해서도 풉니다.
M = R ( 1 − D ) R + R L − 2 D R + R D 2 = 1 ( 1 − D ) ( 1 + R L ( 1 − D ) 2 R ) M = \frac{R \left(1 - D\right)}{R + R_L - 2 D R + R D^{2}} = \frac{1}{\left(1 - D\right) \left(1 + \frac{R_L}{\left(1 - D\right)^{2} R}\right)} M = R + R L − 2 D R + R D 2 R ( 1 − D ) = ( 1 − D ) ( 1 + ( 1 − D ) 2 R R L ) 1 ✓ 재현하는 수식 boost.ccm.M_RL (pytest가 sympy로 일치를 검증함)
효율은 출력 전력 V 2 / R V^2/R V 2 / R 을 입력 전력 V g I V_g I V g I 로 나눈 값입니다.
η = R ( − 1 + D ) 2 R + R L − 2 D R + R D 2 = 1 1 + R L ( 1 − D ) 2 R \eta = \frac{R \left(-1 + D\right)^{2}}{R + R_L - 2 D R + R D^{2}} = \frac{1}{1 + \frac{R_L}{\left(1 - D\right)^{2} R}} η = R + R L − 2 D R + R D 2 R ( − 1 + D ) 2 = 1 + ( 1 − D ) 2 R R L 1 ✓ 재현하는 수식 boost.ccm.eta_RL (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/averaging.py
주기적 정상상태에서는 모든 인덕터 전류가 한 스위칭 주기의 끝에서 시작값으로 돌아오므로 한 주기 동안의 평균 인덕터 전압은 0입니다. 소리플 근사를 쓰면 각 구간에 걸리는 전압이 일정하므로 이 평형 조건은 출력 전압에 대한 1차 방정식이 됩니다.
전압-초 평형: 한 스위칭 주기 동안 평균한 인덕터 전압은 0입니다.
⟨ v L ⟩ = 0 \langle v_L \rangle = 0 ⟨ v L ⟩ = 0 벅: 인덕터에는 스위치 온 구간(비율 D D D )에 V g − V V_g - V V g − V , 다이오드 도통 구간(1 − D 1 - D 1 − D )에 − V -V − V 가 걸립니다.
D ( V g − V ) − V ( 1 − D ) = 0 D \left(V_g - V\right) - V \left(1 - D\right) = 0 D ( V g − V ) − V ( 1 − D ) = 0 V V V 에 대해 풀고 V g V_g V g 로 나눕니다.
✓ 재현하는 수식 buck.ccm.M (pytest가 sympy로 일치를 검증함)
부스트: 스위치 온 구간에는 V g V_g V g , 다이오드 도통 구간에는 V g − V V_g - V V g − V 가 걸립니다.
D V g + ( 1 − D ) ( V g − V ) = 0 D V_g + \left(1 - D\right) \left(V_g - V\right) = 0 D V g + ( 1 − D ) ( V g − V ) = 0 V V V 에 대해 풉니다.
M = − 1 − 1 + D = 1 1 − D M = - \frac{1}{-1 + D} = \frac{1}{1 - D} M = − − 1 + D 1 = 1 − D 1 ✓ 재현하는 수식 boost.ccm.M (pytest가 sympy로 일치를 검증함)
벅-부스트: 스위치 온 구간에는 V g V_g V g , 다이오드 도통 구간에는 (음의) 출력 전압 V V V 가 걸립니다.
V ( 1 − D ) + D V g = 0 V \left(1 - D\right) + D V_g = 0 V ( 1 − D ) + D V g = 0 V V V 에 대해 풉니다. 출력 극성은 반전됩니다.
M = D − 1 + D = − D 1 − D M = \frac{D}{-1 + D} = - \frac{D}{1 - D} M = − 1 + D D = − 1 − D D ✓ 재현하는 수식 buckboost.ccm.M (pytest가 sympy로 일치를 검증함)
플라이백(1:n n n , 1차 측 자화 인덕턴스): 스위치 온 구간에는 V g V_g V g 가 걸리고, 다이오드 도통 구간에는 2차 측이 V V V 로 클램프되어 1차 측에 − V / n -V/n − V / n 으로 반사됩니다.
D V g − V ( 1 − D ) n = 0 D V_g - \frac{V \left(1 - D\right)}{n} = 0 D V g − n V ( 1 − D ) = 0 V V V 에 대해 풉니다.
M = − D n − 1 + D = n D 1 − D M = - \frac{D n}{-1 + D} = \frac{n D}{1 - D} M = − − 1 + D D n = 1 − D n D ✓ 재현하는 수식 flyback.ccm.M (pytest가 sympy로 일치를 검증함)
포워드: 스위치 온 구간에 2차 측이 출력 필터에 n V g nV_g n V g 를 인가하므로 출력 인덕터에는 n V g − V nV_g - V n V g − V 가 걸리고, 환류 다이오드 도통 구간에는 − V -V − V 가 걸립니다.
D ( − V + V g n ) − V ( 1 − D ) = 0 D \left(- V + V_g n\right) - V \left(1 - D\right) = 0 D ( − V + V g n ) − V ( 1 − D ) = 0 V V V 에 대해 풉니다.
✓ 재현하는 수식 forward.ccm.M (pytest가 sympy로 일치를 검증함)
포워드 리셋: 자화 인덕턴스에는 D T s D T_s D T s 동안 V g V_g V g 가 걸리고, 이후 자화 전류가 0으로 돌아올 때까지 D 2 T s D_2 T_s D 2 T s 동안 리셋 권선(N r N_r N r 턴)이 이 전압을 − V g / n r -V_g/n_r − V g / n r 로 클램프합니다.
D V g − D 2 V g n r = 0 D V_g - \frac{D_2 V_g}{n_r} = 0 D V g − n r D 2 V g = 0 리셋 구간을 구합니다.
D 2 = D n r D_2 = D n_r D 2 = D n r 리셋은 한 주기 안에 끝나야 하므로 D + D 2 ≤ 1 D + D_2 \le 1 D + D 2 ≤ 1 이며, 등호일 때 듀티비가 최대입니다.
D m a x = 1 1 + n r D_\mathrm{max} = \frac{1}{1 + n_r} D max = 1 + n r 1 ✓ 재현하는 수식 forward.reset.Dmax (pytest가 sympy로 일치를 검증함)
벅 리플: 온 구간 D T s D T_s D T s 동안 인덕터 전류가 기울기 ( V g − V ) / L (V_g - V)/L ( V g − V ) / L 로 증가하며, 이 증가량이 피크-피크 리플, 즉 2 Δ i L 2\Delta i_L 2Δ i L 입니다.
2 Δ i L = D T s ( V g − V ) L 2 \Delta i_L = \frac{D T_s \left(V_g - V\right)}{L} 2Δ i L = L D T s ( V g − V ) 그 절반이 Erickson의 Δ i L \Delta i_L Δ i L 입니다.
Δ i L = ( V g − V ) D T s 2 L \Delta i_L = \frac{\left(V_g - V\right) D T_s}{2 L} Δ i L = 2 L ( V g − V ) D T s ✓ 재현하는 수식 buck.ripple.iL (pytest가 sympy로 일치를 검증함)
T s = 1 / f s T_s = 1/f_s T s = 1/ f s 로 쓴 피크-피크 값.
Δ i L , p p = ( V g − V ) D L f s \Delta i_{L,\mathrm{pp}} = \frac{\left(V_g - V\right) D}{L f_s} Δ i L , pp = L f s ( V g − V ) D ✓ 재현하는 수식 buck.ripple.iL_pp (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/ccm_ratios.py
인덕터 전류 리플이 커져 전류가 0에 닿으면 컨버터는 CCM을 벗어납니다. 경계에서는 리플의 절반 Δ i L \Delta i_L Δ i L 이 인덕터 직류 전류와 같습니다. DCM에서는 스위치와 다이오드가 모두 꺼진 세 번째 구간 D 3 T s D_3 T_s D 3 T s 가 생기고 그 길이를 모르므로, 전압-초 평형에 커패시터 전하 평형(평균 다이오드 전류 또는 평균 인덕터 전류가 부하 전류와 같음)을 함께 씁니다.
이 유도 전체에서 쓰는 정의: K = 2 L / ( R T s ) K = 2L/(R T_s) K = 2 L / ( R T s ) , 즉 L = K R T s / 2 L = K R T_s/2 L = K R T s /2 .
K = 2 L R T s K = \frac{2 L}{R T_s} K = R T s 2 L 벅: 인덕터 직류 전류는 부하 전류 V / R V/R V / R 이며, CCM에서 V = D V g V = D V_g V = D V g 입니다.
I L = D V g R I_L = \frac{D V_g}{R} I L = R D V g CCM 동작점을 대입한 온 구간의 리플 절반.
Δ i L = D T s ( V g − D V g ) 2 L \Delta i_L = \frac{D T_s \left(V_g - D V_g\right)}{2 L} Δ i L = 2 L D T s ( V g − D V g ) 경계 조건 Δ i L = I L \Delta i_L = I_L Δ i L = I L 에 L = K R T s / 2 L = K R T_s/2 L = K R T s /2 를 넣고 K K K 에 대해 풉니다.
K c r i t = 1 − D K_\mathrm{crit} = 1 - D K crit = 1 − D ✓ 재현하는 수식 Kcrit.buck (pytest가 sympy로 일치를 검증함)
부스트: 인덕터에는 입력 전류 V / ( ( 1 − D ) R ) V/((1 - D)R) V / (( 1 − D ) R ) 가 흐르며, V = V g / ( 1 − D ) V = V_g/(1 - D) V = V g / ( 1 − D ) 입니다.
I L = V g R ( 1 − D ) 2 I_L = \frac{V_g}{R \left(1 - D\right)^{2}} I L = R ( 1 − D ) 2 V g CCM 동작점을 대입한 온 구간의 리플 절반.
Δ i L = D T s V g 2 L \Delta i_L = \frac{D T_s V_g}{2 L} Δ i L = 2 L D T s V g 경계 조건 Δ i L = I L \Delta i_L = I_L Δ i L = I L 에 L = K R T s / 2 L = K R T_s/2 L = K R T s /2 를 넣고 K K K 에 대해 풉니다.
K c r i t = D ( − 1 + D ) 2 = D ( 1 − D ) 2 K_\mathrm{crit} = D \left(-1 + D\right)^{2} = D \left(1 - D\right)^{2} K crit = D ( − 1 + D ) 2 = D ( 1 − D ) 2 ✓ 재현하는 수식 Kcrit.boost (pytest가 sympy로 일치를 검증함)
벅-부스트: 인덕터 전류는 ∣ V ∣ / ( ( 1 − D ) R ) |V|/((1 - D)R) ∣ V ∣/ (( 1 − D ) R ) 이며, ∣ V ∣ = D V g / ( 1 − D ) |V| = D V_g/(1 - D) ∣ V ∣ = D V g / ( 1 − D ) 입니다.
I L = D V g R ( 1 − D ) 2 I_L = \frac{D V_g}{R \left(1 - D\right)^{2}} I L = R ( 1 − D ) 2 D V g CCM 동작점을 대입한 온 구간의 리플 절반.
Δ i L = D T s V g 2 L \Delta i_L = \frac{D T_s V_g}{2 L} Δ i L = 2 L D T s V g 경계 조건 Δ i L = I L \Delta i_L = I_L Δ i L = I L 에 L = K R T s / 2 L = K R T_s/2 L = K R T s /2 를 넣고 K K K 에 대해 풉니다.
K c r i t = ( − 1 + D ) 2 = ( 1 − D ) 2 K_\mathrm{crit} = \left(-1 + D\right)^{2} = \left(1 - D\right)^{2} K crit = ( − 1 + D ) 2 = ( 1 − D ) 2 ✓ 재현하는 수식 Kcrit.buckboost (pytest가 sympy로 일치를 검증함)
경계에서 K K K 는 K c r i t K_\mathrm{crit} K crit 과 같으므로, K K K 의 정의를 L L L 에 대해 풉니다.
L c r i t = K c r i t R T s 2 L_\mathrm{crit} = \frac{K_\mathrm{crit} R T_s}{2} L crit = 2 K crit R T s ✓ 재현하는 수식 L.crit (pytest가 sympy로 일치를 검증함)
벅 DCM, V = M V g V = M V_g V = M V g 로 쓴 전압-초 평형: D T s D T_s D T s 동안 V g − V V_g - V V g − V , D 2 T s D_2 T_s D 2 T s 동안 − V -V − V , D 3 T s D_3 T_s D 3 T s 동안 0 0 0 .
D ( V g − M V g ) − D 2 M V g = 0 D \left(V_g - M V_g\right) - D_2 M V_g = 0 D ( V g − M V g ) − D 2 M V g = 0 D 2 D_2 D 2 를 구합니다.
D 2 = − D + D M = D ( 1 − M ) M D_2 = - D + \frac{D}{M} = \frac{D \left(1 - M\right)}{M} D 2 = − D + M D = M D ( 1 − M ) ✓ 재현하는 수식 buck.dcm.D2 (pytest가 sympy로 일치를 검증함)
온 구간 끝의 인덕터 피크 전류.
i p k = D T s ( V g − M V g ) L i_\mathrm{pk} = \frac{D T_s \left(V_g - M V_g\right)}{L} i pk = L D T s ( V g − M V g ) 전하 평형: 평균 인덕터 전류(높이 i p k i_\mathrm{pk} i pk , 밑변 ( D + D 2 ) T s (D + D_2)T_s ( D + D 2 ) T s 인 삼각형)가 부하 전류 V / R V/R V / R 과 같습니다.
T s D 2 ( V g − M V g ) 2 L M = M V g R \frac{T_s D^{2} \left(V_g - M V_g\right)}{2 L M} = \frac{M V_g}{R} 2 L M T s D 2 ( V g − M V g ) = R M V g L = K R T s / 2 L = K R T_s/2 L = K R T s /2 를 대입하고 M M M 에 대한 2차식의 양의 근을 택합니다.
M = D ( − D + 4 K + D 2 ) 2 K = 2 1 + 1 + 4 K D 2 M = \frac{D \left(- D + \sqrt{4 K + D^{2}}\right)}{2 K} = \frac{2}{1 + \sqrt{1 + \frac{4 K}{D^{2}}}} M = 2 K D ( − D + 4 K + D 2 ) = 1 + 1 + D 2 4 K 2 ✓ 재현하는 수식 buck.dcm.M (pytest가 sympy로 일치를 검증함)
부스트 DCM 전압-초 평형: D T s D T_s D T s 동안 V g V_g V g , D 2 T s D_2 T_s D 2 T s 동안 V g − V V_g - V V g − V .
D V g + D 2 ( V g − M V g ) = 0 D V_g + D_2 \left(V_g - M V_g\right) = 0 D V g + D 2 ( V g − M V g ) = 0 D 2 D_2 D 2 를 구합니다.
D 2 = D − 1 + M D_2 = \frac{D}{-1 + M} D 2 = − 1 + M D 출력의 전하 평형: 평균 다이오드 전류(D 2 T s D_2 T_s D 2 T s 동안 높이 i p k i_\mathrm{pk} i pk 인 삼각형)가 부하 전류와 같습니다.
T s V g D 2 2 L ( − 1 + M ) = M V g R \frac{T_s V_g D^{2}}{2 L \left(-1 + M\right)} = \frac{M V_g}{R} 2 L ( − 1 + M ) T s V g D 2 = R M V g L = K R T s / 2 L = K R T_s/2 L = K R T s /2 를 대입하고 M > 1 M > 1 M > 1 인 근을 택합니다.
M = 1 2 + K + 4 D 2 2 K = 1 + 1 + 4 D 2 K 2 M = \frac{1}{2} + \frac{\sqrt{K + 4 D^{2}}}{2 \sqrt{K}} = \frac{1 + \sqrt{1 + \frac{4 D^{2}}{K}}}{2} M = 2 1 + 2 K K + 4 D 2 = 2 1 + 1 + K 4 D 2 ✓ 재현하는 수식 boost.dcm.M (pytest가 sympy로 일치를 검증함)
벅-부스트 DCM, 음의 출력 V = M V g V = M V_g V = M V g 로 쓴 전압-초 평형: D T s D T_s D T s 동안 V g V_g V g , D 2 T s D_2 T_s D 2 T s 동안 V V V .
D V g + D 2 V g M = 0 D V_g + D_2 V_g M = 0 D V g + D 2 V g M = 0 D 2 D_2 D 2 를 구합니다.
D 2 = − D M D_2 = - \frac{D}{M} D 2 = − M D 전하 평형: 평균 다이오드 전류가 부하 전류 ∣ V ∣ / R |V|/R ∣ V ∣/ R 과 같습니다.
− T s V g D 2 2 L M = − V g M R - \frac{T_s V_g D^{2}}{2 L M} = - \frac{V_g M}{R} − 2 L M T s V g D 2 = − R V g M L = K R T s / 2 L = K R T_s/2 L = K R T s /2 를 대입해 풉니다(M < 0 M < 0 M < 0 ).
M = − D K M = - \frac{D}{\sqrt{K}} M = − K D ✓ 재현하는 수식 buckboost.dcm.M (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/dcm.py
플라이백은 스위치 온 구간에 자화 인덕턴스 L M L_M L M 에 에너지를 저장하고, 오프 구간에 다이오드를 통해 출력으로 내보냅니다. 1:n n n 변압기(n = N s / N p n = N_s/N_p n = N s / N p )에서 2차 측 전압은 n n n 으로 나뉘어 1차 측에 반사되고, 2차 측 전류는 1차 측 환산 자화 전류를 n n n 으로 나눈 값입니다.
온 구간: L M L_M L M 양단에 V g V_g V g 가 걸려 자화 전류가 0(DCM)에서 i p k i_\mathrm{pk} i pk 까지 증가합니다.
i p k = D T s V g L M i_\mathrm{pk} = \frac{D T_s V_g}{L_M} i pk = L M D T s V g L M L_M L M 의 전압-초 평형: D T s D T_s D T s 동안 V g V_g V g , 이후 D 2 T s D_2 T_s D 2 T s 동안 반사된 출력 − V / n -V/n − V / n .
D V g − D 2 V n = 0 D V_g - \frac{D_2 V}{n} = 0 D V g − n D 2 V = 0 D 2 D_2 D 2 를 구합니다.
D 2 = D V g n V D_2 = \frac{D V_g n}{V} D 2 = V D V g n 전하 평형: 2차 측 전류는 i p k / n i_\mathrm{pk}/n i pk / n 에서 시작해 D 2 T s D_2 T_s D 2 T s 동안 0으로 감소하며, 그 평균이 부하 전류 V / R V/R V / R 과 같습니다.
T s D 2 V g 2 2 L M V = V R \frac{T_s D^{2} V_g^{2}}{2 L_M V} = \frac{V}{R} 2 L M V T s D 2 V g 2 = R V L M = K R T s / 2 L_M = K R T_s/2 L M = K R T s /2 를 대입해 V / V g V/V_g V / V g 를 구합니다. n n n 은 소거됩니다.
M = D K M = \frac{D}{\sqrt{K}} M = K D ✓ 재현하는 수식 flyback.dcm.M (pytest가 sympy로 일치를 검증함)
DCM 출력 전압을 대입한 DCM 감자(demagnetizing) 구간.
D 2 = n K D_2 = n \sqrt{K} D 2 = n K 감자 구간이 주기의 나머지를 모두 채울 때, 즉 D + D 2 = 1 D + D_2 = 1 D + D 2 = 1 일 때 경계에 도달합니다.
K c r i t = ( − 1 + D ) 2 n 2 = ( 1 − D ) 2 n 2 K_\mathrm{crit} = \frac{\left(-1 + D\right)^{2}}{n^{2}} = \frac{\left(1 - D\right)^{2}}{n^{2}} K crit = n 2 ( − 1 + D ) 2 = n 2 ( 1 − D ) 2 ✓ 재현하는 수식 Kcrit.flyback (pytest가 sympy로 일치를 검증함)
출력이 V V V 로 고정되고(배터리 또는 정전압 버스) 다이오드 강하가 V D V_D V D 이면, 감자 구간의 반사 전압은 − ( V + V D ) / n -(V + V_D)/n − ( V + V D ) / n 입니다.
D V g + D 2 ( − V − V D ) n = 0 D V_g + \frac{D_2 \left(- V - V_D\right)}{n} = 0 D V g + n D 2 ( − V − V D ) = 0 D + D 2 = 1 D + D_2 = 1 D + D 2 = 1 로 두면 컨버터가 CCM에 들어가는 입력 전압을 얻습니다. 그 이상에서는 CCM 전압-초 평형이 V g V_g V g 를 이 값에 묶어 둡니다.
V g , c r i t = V + V D − D ( V + V D ) D n = ( V + V D ) ( 1 − D ) n D V_{g,\mathrm{crit}} = \frac{V + V_D - D \left(V + V_D\right)}{D n} = \frac{\left(V + V_D\right) \left(1 - D\right)}{n D} V g , crit = D n V + V D − D ( V + V D ) = n D ( V + V D ) ( 1 − D ) ✓ 재현하는 수식 flyback.V_crit (pytest가 sympy로 일치를 검증함)
다이오드가 도통하는 동안 1차 권선의 반사 전압 ( V + V D ) / n (V + V_D)/n ( V + V D ) / n 이 V g V_g V g 에 더해지므로, 오프 상태의 스위치 전압은 그 합입니다(누설 스파이크는 이 위에 더해집니다).
V D S = V g + V + V D n V_\mathrm{DS} = V_g + \frac{V + V_D}{n} V DS = V g + n V + V D ✓ 재현하는 수식 flyback.Vds_off (pytest가 sympy로 일치를 검증함)
입력이 V g , c r i t V_{g,\mathrm{crit}} V g , crit 에 묶이면 오프 상태의 스위치 전압이 간단해집니다.
V D S = V + V D n D V_\mathrm{DS} = \frac{V + V_D}{n D} V DS = n D V + V D ✓ 재현하는 수식 flyback.Vds_clamped (pytest가 sympy로 일치를 검증함)
스위치 온 구간에는 2차 권선 전압 n V g n V_g n V g 가 출력 전압에 더해져 역바이어스된 다이오드에 걸립니다.
V R = V + n V g V_R = V + n V_g V R = V + n V g ✓ 재현하는 수식 flyback.diode.VR (pytest가 sympy로 일치를 검증함)
CCM 전하 평형: 다이오드가 도통하는 ( 1 − D ) T s (1 - D) T_s ( 1 − D ) T s 동안 2차 측에는 I M / n I_M/n I M / n 이 흐르며(소리플 근사), 그 평균이 부하 전류 V / R V/R V / R 과 같습니다.
I M ( 1 − D ) n = V R \frac{I_M \left(1 - D\right)}{n} = \frac{V}{R} n I M ( 1 − D ) = R V I M I_M I M 에 대해 풉니다.
I M = − V n R ( − 1 + D ) = n V ( 1 − D ) R I_M = - \frac{V n}{R \left(-1 + D\right)} = \frac{n V}{\left(1 - D\right) R} I M = − R ( − 1 + D ) V n = ( 1 − D ) R nV ✓ 재현하는 수식 flyback.IM (pytest가 sympy로 일치를 검증함)
온 구간: D T s D T_s D T s 동안 L M L_M L M 양단에 V g V_g V g 가 걸리므로 자화 전류는 리플 절반 Δ i M \Delta i_M Δ i M 의 두 배만큼 증가합니다.
2 Δ i M = D T s V g L M 2 \Delta i_M = \frac{D T_s V_g}{L_M} 2Δ i M = L M D T s V g Δ i M \Delta i_M Δ i M 에 대해 풉니다.
Δ i M = V g D T s 2 L M \Delta i_M = \frac{V_g D T_s}{2 L_M} Δ i M = 2 L M V g D T s ✓ 재현하는 수식 flyback.ripple.iM (pytest가 sympy로 일치를 검증함)
스위치가 켜져 있는 동안 다이오드는 꺼져 있으므로 D T s D T_s D T s 동안 커패시터만이 부하 전류 V / R V/R V / R 을 공급하고, 그 전압은 리플 절반 Δ v \Delta v Δ v 의 두 배만큼 떨어집니다.
2 Δ v = D T s V C R 2 \Delta v = \frac{D T_s V}{C R} 2Δ v = C R D T s V Δ v \Delta v Δ v 에 대해 풉니다.
Δ v = V D T s 2 R C \Delta v = \frac{V D T_s}{2 R C} Δ v = 2 R C V D T s ✓ 재현하는 수식 flyback.ripple.v (pytest가 sympy로 일치를 검증함)
T s = 1 / f s T_s = 1/f_s T s = 1/ f s 로 쓴 DCM 피크 자화 전류.
I p k = V g D L M f s I_\mathrm{pk} = \frac{V_g D}{L_M f_s} I pk = L M f s V g D ✓ 재현하는 수식 flyback.Ipk.dcm (pytest가 sympy로 일치를 검증함)
매 온 구간이 끝날 때 L M L_M L M 에 저장된 에너지입니다(DCM에서는 매 주기 이 에너지가 모두 전달됩니다).
E = D 2 T s 2 V g 2 2 L M E = \frac{D^{2} T_s^{2} V_g^{2}}{2 L_M} E = 2 L M D 2 T s 2 V g 2 전력은 주기당 에너지 × 스위칭 주파수입니다. V g V_g V g , D D D , L M L_M L M , f s f_s f s 로 정해지며 부하와는 무관합니다.
P = V g 2 D 2 2 L M f s P = \frac{V_g^{2} D^{2}}{2 L_M f_s} P = 2 L M f s V g 2 D 2 ✓ 재현하는 수식 dcm.P_in (pytest가 sympy로 일치를 검증함)
P = V g 2 / R i n P = V_g^2/R_\mathrm{in} P = V g 2 / R in 이므로 입력은 아무것도 소산하지 않는 저항(무손실 저항)처럼 동작합니다.
R i n = 2 L M f s D 2 R_\mathrm{in} = \frac{2 L_M f_s}{D^{2}} R in = D 2 2 L M f s ✓ 재현하는 수식 lfr.R_in (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/flyback.py
플라이백의 스위치가 꺼지면 자화 전류는 2차 측으로 넘어가지만, 누설 인덕턴스 L l k L_\mathrm{lk} L lk 의 전류는 1차 측에 연결된 클램프 외에는 흐를 곳이 없습니다. 클램프는 이 전류가 0으로 줄어들 때까지 1차 측을 V c l a m p V_\mathrm{clamp} V clamp 에 묶어 둡니다.
출력 다이오드가 도통하는 동안 2차 권선에는 출력 전압과 다이오드 전압 강하의 합이 걸립니다.
v s = V + V D v_s = V + V_D v s = V + V D 이상적인 1:n n n 변압기에서 2차 측 전압은 1차 측에서 n n n 으로 나뉩니다.
V O R = V + V D n V_\mathrm{OR} = \frac{V + V_D}{n} V OR = n V + V D ✓ 재현하는 수식 flyback.V_OR (pytest가 sympy로 일치를 검증함)
스위치는 입력과 1차 권선 사이에 있으며, 클램프가 도통하는 동안 1차 권선은 V c l a m p V_\mathrm{clamp} V clamp 에 묶입니다.
V D S = V g + V c l a m p V_\mathrm{DS} = V_g + V_\mathrm{clamp} V DS = V g + V clamp ✓ 재현하는 수식 clamp.Vds (pytest가 sympy로 일치를 검증함)
출력 다이오드가 도통하는 동안 자화 인덕턴스 양단은 V O R V_\mathrm{OR} V OR 이므로, 누설 인덕턴스에는 V c l a m p − V O R V_\mathrm{clamp} - V_\mathrm{OR} V clamp − V OR 가 걸려 전류가 I p k I_\mathrm{pk} I pk 에서 선형으로 감소합니다.
i l k = I p k − t ( V c l a m p − V O R ) L l k i_\mathrm{lk} = I_\mathrm{pk} - \frac{t \left(V_\mathrm{clamp} - V_\mathrm{OR}\right)}{L_\mathrm{lk}} i lk = I pk − L lk t ( V clamp − V OR ) 전류는 이 시간 뒤에 0이 되며, 이 시간은 오프 시간 안에 들어가야 합니다.
t r = L l k I p k V c l a m p − V O R t_r = \frac{L_\mathrm{lk} I_\mathrm{pk}}{V_\mathrm{clamp} - V_\mathrm{OR}} t r = V clamp − V OR L lk I pk ✓ 재현하는 수식 clamp.t_reset (pytest가 sympy로 일치를 검증함)
클램프는 클램프 전압과 감소하는 이 전류의 곱을 흡수합니다. 그동안 반사 전압이 전류를 계속 밀어 주므로 흡수하는 에너지는 누설 에너지 1 2 L l k I p k 2 \tfrac12 L_\mathrm{lk} I_\mathrm{pk}^2 2 1 L lk I pk 2 보다 많습니다.
E c l a m p = L l k V c l a m p I p k 2 2 ( V c l a m p − V O R ) E_\mathrm{clamp} = \frac{L_\mathrm{lk} V_\mathrm{clamp} I_\mathrm{pk}^{2}}{2 \left(V_\mathrm{clamp} - V_\mathrm{OR}\right)} E clamp = 2 ( V clamp − V OR ) L lk V clamp I pk 2 스위칭 주기마다 한 번씩.
P c l a m p = L l k V c l a m p f s I p k 2 2 ( V c l a m p − V O R ) = L l k I p k 2 f s V c l a m p 2 ( V c l a m p − V O R ) P_\mathrm{clamp} = \frac{L_\mathrm{lk} V_\mathrm{clamp} f_s I_\mathrm{pk}^{2}}{2 \left(V_\mathrm{clamp} - V_\mathrm{OR}\right)} = \frac{L_\mathrm{lk} I_\mathrm{pk}^{2} f_s V_\mathrm{clamp}}{2 \left(V_\mathrm{clamp} - V_\mathrm{OR}\right)} P clamp = 2 ( V clamp − V OR ) L lk V clamp f s I pk 2 = 2 ( V clamp − V OR ) L lk I pk 2 f s V clamp ✓ 재현하는 수식 clamp.P (pytest가 sympy로 일치를 검증함)
RCD 클램프에서는 커패시터가 V c l a m p V_\mathrm{clamp} V clamp 를 유지하고 저항이 클램프 전력을 소산합니다.
V c l a m p 2 R c l a m p = L l k V c l a m p f s I p k 2 2 ( V c l a m p − V O R ) \frac{V_\mathrm{clamp}^{2}}{R_\mathrm{clamp}} = \frac{L_\mathrm{lk} V_\mathrm{clamp} f_s I_\mathrm{pk}^{2}}{2 \left(V_\mathrm{clamp} - V_\mathrm{OR}\right)} R clamp V clamp 2 = 2 ( V clamp − V OR ) L lk V clamp f s I pk 2 V O R V_\mathrm{OR} V OR 보다 큰 근.
V c l a m p = V O R + V O R 2 + 2 R c l a m p L l k I p k 2 f s 2 V_\mathrm{clamp} = \frac{V_\mathrm{OR} + \sqrt{V_\mathrm{OR}^{2} + 2 R_\mathrm{clamp} L_\mathrm{lk} I_\mathrm{pk}^{2} f_s}}{2} V clamp = 2 V OR + V OR 2 + 2 R clamp L lk I pk 2 f s ✓ 재현하는 수식 clamp.rcd.V (pytest가 sympy로 일치를 검증함)
부하를 제거하고 레귤레이션이 없으면 출력은 계속 충전되고, 반사 전압은 클램프 전압에 도달할 때까지 오릅니다. 그 뒤에는 클램프가 입력 전력을 모두 가져갑니다. 이는 전압이 그 전력에 따라 변하지 않는 클램프(TVS)에 해당하며, RCD 클램프의 전압은 그 전력에 따라 올라갑니다.
V D + V o , m a x n = V c l a m p \frac{V_D + V_\mathrm{o,max}}{n} = V_\mathrm{clamp} n V D + V o , max = V clamp 출력 전압에 대해 풉니다.
V o , m a x = n V c l a m p − V D V_\mathrm{o,max} = n V_\mathrm{clamp} - V_D V o , max = n V clamp − V D ✓ 재현하는 수식 flyback.V_ceiling (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/clamp.py
스위칭 에지는 노드의 기생 인덕턴스와 커패시턴스를 링잉시킵니다. 레이아웃에서 읽을 수 없는 이 값들은 링잉 주파수를 두 번, 즉 원래 회로에서 한 번, 값을 아는 커패시터를 추가해서 한 번 재면 구할 수 있습니다.
원래 회로에서 노드는 인덕턴스와 커패시턴스의 공진 주파수로 링잉합니다.
f r 0 = 1 2 π C p a r L p a r f_{r0} = \frac{1}{2 \pi \sqrt{C_\mathrm{par}} \sqrt{L_\mathrm{par}}} f r 0 = 2 π C par L par 1 노드에 값을 아는 커패시터를 달면 커패시턴스는 그만큼 늘고 인덕턴스는 그대로입니다.
f r 1 = 1 2 π L p a r C a d d + C p a r f_{r1} = \frac{1}{2 \pi \sqrt{L_\mathrm{par}} \sqrt{C_\mathrm{add} + C_\mathrm{par}}} f r 1 = 2 π L par C add + C par 1 두 주파수의 비 x = f r 0 / f r 1 x = f_{r0}/f_{r1} x = f r 0 / f r 1 에서 인덕턴스가 소거됩니다.
x 2 = C a d d + C p a r C p a r x^{2} = \frac{C_\mathrm{add} + C_\mathrm{par}}{C_\mathrm{par}} x 2 = C par C add + C par 노드의 커패시턴스에 대해 풀면:
C p a r = C a d d f r 1 2 f r 0 2 − f r 1 2 = C a d d ( f r 0 f r 1 ) 2 − 1 C_\mathrm{par} = \frac{C_\mathrm{add} f_{r1}^{2}}{f_{r0}^{2} - f_{r1}^{2}} = \frac{C_\mathrm{add}}{\left(\frac{f_{r0}}{f_{r1}}\right)^{2} - 1} C par = f r 0 2 − f r 1 2 C add f r 1 2 = ( f r 1 f r 0 ) 2 − 1 C add ✓ 재현하는 수식 snub.C_par (pytest가 sympy로 일치를 검증함)
그러면 첫 번째 공진에서 인덕턴스가 나옵니다.
L p a r = 1 4 π 2 f r 0 2 C p a r L_\mathrm{par} = \frac{1}{4 \pi^{2} f_{r0}^{2} C_\mathrm{par}} L par = 4 π 2 f r 0 2 C par 1 ✓ 재현하는 수식 snub.L_par (pytest가 sympy로 일치를 검증함)
AN11160은 기생 인덕턴스, 스너버 저항, 스너버 커패시터를 직렬로 본 루프의 감쇠 계수를 쓰며, 노드 자체의 커패시턴스는 넣지 않습니다. 이 루프의 고유 주파수는 다음 식을 만족합니다.
1 + s C s n u b R s n u b + C s n u b L p a r s 2 = 0 1 + s C_\mathrm{snub} R_\mathrm{snub} + C_\mathrm{snub} L_\mathrm{par} s^{2} = 0 1 + s C snub R snub + C snub L par s 2 = 0 L p a r C s n u b L_\mathrm{par} C_\mathrm{snub} L par C snub 로 나누어 ω 0 = 1 / L p a r C s n u b \omega_0 = 1/\sqrt{L_\mathrm{par} C_\mathrm{snub}} ω 0 = 1/ L par C snub 인 s 2 + 2 ζ ω 0 s + ω 0 2 = 0 s^2 + 2\zeta\omega_0 s + \omega_0^2 = 0 s 2 + 2 ζ ω 0 s + ω 0 2 = 0 꼴로 쓰면, 감쇠 계수는 다음과 같습니다.
ζ = R s n u b C s n u b 2 L p a r \zeta = \frac{R_\mathrm{snub} \sqrt{C_\mathrm{snub}}}{2 \sqrt{L_\mathrm{par}}} ζ = 2 L par R snub C snub 저항에 대해 풀면:
R s n u b = 2 ζ L p a r C s n u b R_\mathrm{snub} = 2 \zeta \sqrt{\frac{L_\mathrm{par}}{C_\mathrm{snub}}} R snub = 2 ζ C snub L par ✓ 재현하는 수식 snub.R (pytest가 sympy로 일치를 검증함)
에지에서 노드 전압이 V s n u b V_\mathrm{snub} V snub 만큼 바뀌면 스너버 커패시터가 저항을 통해 충전되며, 전류는 i = ( V s n u b / R ) e − t / ( R C s n u b ) i = (V_\mathrm{snub}/R)\,e^{-t/(R C_\mathrm{snub})} i = ( V snub / R ) e − t / ( R C snub ) 입니다. 저항이 가져가는 에너지는 R R R 과 무관합니다.
E R = C s n u b V s n u b 2 2 E_R = \frac{C_\mathrm{snub} V_\mathrm{snub}^{2}}{2} E R = 2 C snub V snub 2 다음 에지에서는 커패시터가 저항과 켜지는 스위치를 통해 방전하며 저장된 에너지, 즉 같은 양을 다시 잃습니다. 따라서 한 주기에 잃는 에너지는 다음과 같습니다.
2 E R = C s n u b V s n u b 2 2 E_R = C_\mathrm{snub} V_\mathrm{snub}^{2} 2 E R = C snub V snub 2 초당 f s f_s f s 주기이므로:
P = C s n u b V s n u b 2 f s P = C_\mathrm{snub} V_\mathrm{snub}^{2} f_s P = C snub V snub 2 f s ✓ 재현하는 수식 snub.P (pytest가 sympy로 일치를 검증함)
AN11160은 기생 인덕턴스에 전류 I r i n g I_\mathrm{ring} I ring 이 흐르는 동안 커패시터를 충전하는 에지로 저항의 정격을 정합니다. 전원은 커패시터의 전하 C s n u b V s n u b C_\mathrm{snub} V_\mathrm{snub} C snub V snub 을 전압 V s n u b V_\mathrm{snub} V snub 에서 공급합니다.
E s = C s n u b V s n u b 2 E_s = C_\mathrm{snub} V_\mathrm{snub}^{2} E s = C snub V snub 2 커패시터는 그 에너지의 절반을 저장하고 인덕턴스는 자신의 에너지 L p a r I r i n g 2 / 2 L_\mathrm{par} I_\mathrm{ring}^2/2 L par I ring 2 /2 를 모두 내놓습니다. 나머지는 저항값과 관계없이 저항이 가져갑니다.
W R = C s n u b V s n u b 2 2 + L p a r I r i n g 2 2 W_R = \frac{C_\mathrm{snub} V_\mathrm{snub}^{2}}{2} + \frac{L_\mathrm{par} I_\mathrm{ring}^{2}}{2} W R = 2 C snub V snub 2 + 2 L par I ring 2 한 주기에 한 번이므로:
P R , s n u b = f s ( C s n u b V s n u b 2 + L p a r I r i n g 2 ) 2 P_{R,\mathrm{snub}} = \frac{f_s \left(C_\mathrm{snub} V_\mathrm{snub}^{2} + L_\mathrm{par} I_\mathrm{ring}^{2}\right)}{2} P R , snub = 2 f s ( C snub V snub 2 + L par I ring 2 ) ✓ 재현하는 수식 snub.P_R (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/snubbers.py
출력 커패시터의 전하 평형으로 각 컨버터의 인덕터 직류 전류를 구합니다. 온 구간 동안 인덕터에는 일정한 전압이 걸리므로 전류는 리플 절반 Δ i L \Delta i_L Δ i L 의 두 배만큼 선형으로 변하며, 같은 방식으로 한 주기 동안 커패시터가 주고받는 전하에서 전압 리플 Δ v \Delta v Δ v 를 구합니다. 트랜지스터 이용률 U U U 는 부하 전력을 트랜지스터의 피크 전압과 실효 전류의 곱과 비교한 값입니다.
벅, 전하 평형: 커패시터 전류는 두 구간 모두에서 I L − V / R I_L - V/R I L − V / R 입니다(소리플 근사).
⟨ i C ⟩ = I L − V R \langle i_C \rangle = I_L - \frac{V}{R} ⟨ i C ⟩ = I L − R V 평균을 0으로 놓습니다.
I L = V R I_L = \frac{V}{R} I L = R V ✓ 재현하는 수식 buck.IL (pytest가 sympy로 일치를 검증함)
벅 출력 리플: 커패시터는 인덕터 전류의 삼각파 교류 성분을 받습니다. 그중 양의 부분은 T s / 2 T_s/2 T s /2 동안 이어지고 최댓값이 Δ i L \Delta i_L Δ i L 이므로 전하 q q q 를 전달합니다.
q = Δ i L T s 4 q = \frac{\Delta i_L T_s}{4} q = 4 Δ i L T s 그 전하가 커패시터 전압을 최솟값에서 최댓값까지, 즉 2 Δ v 2\Delta v 2Δ v 만큼 올립니다.
2 C Δ v = Δ i L T s 4 2 C \Delta v = \frac{\Delta i_L T_s}{4} 2 C Δ v = 4 Δ i L T s Δ v \Delta v Δ v 에 대해 풉니다.
Δ v = Δ i L T s 8 C \Delta v = \frac{\Delta i_L T_s}{8 C} Δ v = 8 C Δ i L T s ✓ 재현하는 수식 buck.ripple.v (pytest가 sympy로 일치를 검증함)
부스트, 전하 평형: 스위치 온 구간에 − V / R -V/R − V / R , 다이오드 도통 구간에 I L − V / R I_L - V/R I L − V / R .
( 1 − D ) ( I L − V R ) − D V R = 0 \left(1 - D\right) \left(I_L - \frac{V}{R}\right) - \frac{D V}{R} = 0 ( 1 − D ) ( I L − R V ) − R D V = 0 I L I_L I L 에 대해 풉니다.
I L = − V R ( − 1 + D ) = V ( 1 − D ) R I_L = - \frac{V}{R \left(-1 + D\right)} = \frac{V}{\left(1 - D\right) R} I L = − R ( − 1 + D ) V = ( 1 − D ) R V ✓ 재현하는 수식 boost.IL (pytest가 sympy로 일치를 검증함)
부스트 전류 리플: 인덕터에 D T s D T_s D T s 동안 V g V_g V g 가 걸리므로 전류는 V g D T s / L V_g D T_s/L V g D T s / L , 즉 2 Δ i L 2\Delta i_L 2Δ i L 만큼 증가합니다.
2 Δ i L = D T s V g L 2 \Delta i_L = \frac{D T_s V_g}{L} 2Δ i L = L D T s V g Δ i L \Delta i_L Δ i L 에 대해 풉니다.
Δ i L = V g D T s 2 L \Delta i_L = \frac{V_g D T_s}{2 L} Δ i L = 2 L V g D T s ✓ 재현하는 수식 boost.ripple.iL (pytest가 sympy로 일치를 검증함)
부스트 전압 리플: 스위치가 켜져 있는 D T s D T_s D T s 동안 커패시터만이 부하 전류 V / R V/R V / R 을 공급하므로 전압이 2 Δ v 2\Delta v 2Δ v 만큼 떨어집니다.
2 Δ v = D T s V C R 2 \Delta v = \frac{D T_s V}{C R} 2Δ v = C R D T s V Δ v \Delta v Δ v 에 대해 풉니다.
Δ v = V D T s 2 R C \Delta v = \frac{V D T_s}{2 R C} Δ v = 2 R C V D T s ✓ 재현하는 수식 boost.ripple.v (pytest가 sympy로 일치를 검증함)
출력 크기 V V V 로 쓴 벅-부스트: 인덕터에는 스위치 온 구간에 V g V_g V g , 다이오드 도통 구간에 − V -V − V 가 걸립니다.
D V g − V ( 1 − D ) = 0 D V_g - V \left(1 - D\right) = 0 D V g − V ( 1 − D ) = 0 V V V 에 대해 풉니다.
V = − D V g − 1 + D = D V g 1 − D V = - \frac{D V_g}{-1 + D} = \frac{D V_g}{1 - D} V = − − 1 + D D V g = 1 − D D V g ✓ 재현하는 수식 buckboost.V (pytest가 sympy로 일치를 검증함)
전하 평형은 부스트와 같습니다. 스위치 온 구간에는 커패시터가 부하에 전류를 공급하고, 다이오드 도통 구간에는 I L I_L I L 을 받습니다.
I L = − V R ( − 1 + D ) = V ( 1 − D ) R I_L = - \frac{V}{R \left(-1 + D\right)} = \frac{V}{\left(1 - D\right) R} I L = − R ( − 1 + D ) V = ( 1 − D ) R V ✓ 재현하는 수식 buckboost.IL (pytest가 sympy로 일치를 검증함)
부스트와 마찬가지로 인덕터에는 D T s D T_s D T s 동안 V g V_g V g 가 걸립니다.
Δ i L = V g D T s 2 L \Delta i_L = \frac{V_g D T_s}{2 L} Δ i L = 2 L V g D T s ✓ 재현하는 수식 buckboost.ripple.iL (pytest가 sympy로 일치를 검증함)
부스트와 마찬가지로 D T s D T_s D T s 동안 커패시터만이 부하에 전류를 공급합니다.
Δ v = V D T s 2 R C \Delta v = \frac{V D T_s}{2 R C} Δ v = 2 R C V D T s ✓ 재현하는 수식 buckboost.ripple.v (pytest가 sympy로 일치를 검증함)
벅: 다이오드가 도통하는 동안 스위치 노드는 접지 전위에 있으므로(이상적 다이오드), 입력과 그 노드 사이의 스위치는 V g V_g V g 를 차단합니다.
V D S = V g V_\mathrm{DS} = V_g V DS = V g ✓ 재현하는 수식 buck.Vds (pytest가 sympy로 일치를 검증함)
부스트: 다이오드가 도통하는 동안 스위치 노드는 출력에 연결되므로, 그 노드와 접지 사이의 스위치는 V V V 를 차단합니다.
V D S = V V_\mathrm{DS} = V V DS = V ✓ 재현하는 수식 boost.Vds (pytest가 sympy로 일치를 검증함)
다이오드가 도통하는 동안 스위치의 반대쪽 단자는 출력 전위 − V -V − V 에 있으므로, 스위치는 V g − ( − V ) V_g - (-V) V g − ( − V ) 를 차단합니다.
V D S = V g + V V_\mathrm{DS} = V_g + V V DS = V g + V ✓ 재현하는 수식 buckboost.Vds (pytest가 sympy로 일치를 검증함)
포워드, 리셋 구간: 리셋 권선(N r N_r N r 턴)이 반대 극성으로 V g V_g V g 에 연결되므로 1차 권선(N p N_p N p 턴)에는 − V g N p / N r -V_g N_p/N_r − V g N p / N r 이 걸립니다.
v p r i = − V g n r v_\mathrm{pri} = - \frac{V_g}{n_r} v pri = − n r V g 스위치는 입력 전압에서 1차 전압을 뺀 값을 차단합니다.
V D S = V g ( 1 + n r ) n r = V g ( 1 + 1 n r ) V_\mathrm{DS} = \frac{V_g \left(1 + n_r\right)}{n_r} = V_g \left(1 + \frac{1}{n_r}\right) V DS = n r V g ( 1 + n r ) = V g ( 1 + n r 1 ) ✓ 재현하는 수식 forward.Vds (pytest가 sympy로 일치를 검증함)
포워드 출력 인덕터: 스위치가 켜져 있는 동안 2차 권선이 n V g n V_g n V g 를 인가하므로 인덕터에는 D T s D T_s D T s 동안 n V g − V n V_g - V n V g − V 가 걸립니다.
2 Δ i L = D T s ( − V + V g n ) L 2 \Delta i_L = \frac{D T_s \left(- V + V_g n\right)}{L} 2Δ i L = L D T s ( − V + V g n ) Δ i L \Delta i_L Δ i L 에 대해 풉니다.
Δ i L = ( n V g − V ) D T s 2 L \Delta i_L = \frac{\left(n V_g - V\right) D T_s}{2 L} Δ i L = 2 L ( n V g − V ) D T s ✓ 재현하는 수식 forward.ripple.iL (pytest가 sympy로 일치를 검증함)
트랜지스터 이용률은 부하 전력 P = V I P = V I P = V I 를 트랜지스터의 피크 전압과 실효 전류의 곱으로 나눈 값입니다. 소리플 근사에서 트랜지스터 전류는 D T s D T_s D T s 동안 높이 I Q I_Q I Q 인 평평한 펄스이며, 그 실효값은 I Q D I_Q \sqrt{D} I Q D 입니다.
벅: V = D V g V = D V_g V = D V g 이고, 트랜지스터는 V g V_g V g 를 차단하며 인덕터 전류 I I I 를 흘립니다.
정리합니다.
✓ 재현하는 수식 util.buck (pytest가 sympy로 일치를 검증함)
부스트: 트랜지스터는 V V V 를 차단하고 인덕터 전류 I / ( 1 − D ) I/(1 - D) I / ( 1 − D ) 를 흘립니다.
U = 1 − D D U = \frac{1 - D}{\sqrt{D}} U = D 1 − D 정리합니다.
U = 1 − D D U = \frac{1 - D}{\sqrt{D}} U = D 1 − D ✓ 재현하는 수식 util.boost (pytest가 sympy로 일치를 검증함)
벅-부스트: V = D V g / ( 1 − D ) V = D V_g/(1 - D) V = D V g / ( 1 − D ) 이고, 트랜지스터는 V g + V V_g + V V g + V 를 차단하며 I / ( 1 − D ) I/(1 - D) I / ( 1 − D ) 를 흘립니다.
U = V g D V g + D V g 1 − D U = \frac{V_g \sqrt{D}}{V_g + \frac{D V_g}{1 - D}} U = V g + 1 − D D V g V g D 정리합니다.
U = ( 1 − D ) D U = \left(1 - D\right) \sqrt{D} U = ( 1 − D ) D ✓ 재현하는 수식 util.buckboost (pytest가 sympy로 일치를 검증함)
플라이백: V = n D V g / ( 1 − D ) V = n D V_g/(1 - D) V = n D V g / ( 1 − D ) 이고, 트랜지스터는 V g + V / n V_g + V/n V g + V / n 을 차단하며 1차 측 환산 자화 전류 n I / ( 1 − D ) n I/(1 - D) n I / ( 1 − D ) 를 흘립니다. 권선비가 상쇄되어 벅-부스트와 같은 결과가 됩니다.
U = D ( 1 − D ) U = \sqrt{D} \left(1 - D\right) U = D ( 1 − D ) 포워드: V = n D V g V = n D V_g V = n D V g 이고, 트랜지스터는 V g ( 1 + 1 / n r ) V_g(1 + 1/n_r) V g ( 1 + 1/ n r ) 를 차단하며 반사된 인덕터 전류 n I n I n I 를 흘립니다(자화 전류 무시).
U = D 1 + 1 n r U = \frac{\sqrt{D}}{1 + \frac{1}{n_r}} U = 1 + n r 1 D 정리합니다.
U = n r D 1 + n r = D 1 + 1 n r U = \frac{n_r \sqrt{D}}{1 + n_r} = \frac{\sqrt{D}}{1 + \frac{1}{n_r}} U = 1 + n r n r D = 1 + n r 1 D ✓ 재현하는 수식 util.forward (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/topologies.py
평균화로 스위칭 리플을 없앤 뒤, 평균 방정식을 동작점 주변에서 섭동(d = D + d ^ d = D + \hat d d = D + d ^ , v = V + v ^ v = V + \hat v v = V + v ^ , i = I + i ^ i = I + \hat i i = I + i ^ )하고 2차 항을 버리면 선형 방정식이 되며, 이를 라플라스 변환하면 v ^ / d ^ \hat v/\hat d v ^ / d ^ 를 얻습니다. 아래 각 컨버터는 이득 G d 0 G_{d0} G d 0 , 품질계수 Q Q Q 인 ω 0 \omega_0 ω 0 의 극점, 그리고 부스트와 벅-부스트의 경우 우반평면 영점 ω z \omega_z ω z 를 갖는 표준 2차 형태로 정리됩니다.
벅의 선형화된 평균 방정식(v ^ g = 0 \hat v_g = 0 v ^ g = 0 ): 인덕터에는 d v g − v d\,v_g - v d v g − v 가 걸리고 커패시터에는 i − v / R i - v/R i − v / R 이 흐릅니다.
( i ^ s L = − v ^ + d ^ V g , s v ^ C = i ^ − v ^ R ) \left( \hat i s L = - \hat v + \hat d V_g, \ s \hat v C = \hat i - \frac{\hat v}{R}\right) ( i ^ s L = − v ^ + d ^ V g , s v ^ C = i ^ − R v ^ ) v ^ / d ^ \hat v/\hat d v ^ / d ^ 를 구합니다.
G v d ( s ) = R V g R + s L + C L R s 2 G_{vd}(s) = \frac{R V_g}{R + s L + C L R s^{2}} G v d ( s ) = R + s L + C L R s 2 R V g 직류 이득: s = 0 s = 0 s = 0 에서의 값.
G d 0 = V g G_{d0} = V_g G d 0 = V g ✓ 재현하는 수식 buck.ss.Gd0 (pytest가 sympy로 일치를 검증함)
극점: s 2 s^2 s 2 계수 a 2 a_2 a 2 로부터 ω 0 = 1 / a 2 \omega_0 = 1/\sqrt{a_2} ω 0 = 1/ a 2 .
ω 0 = 1 L C \omega_0 = \frac{1}{\sqrt{L C}} ω 0 = L C 1 ✓ 재현하는 수식 buck.ss.w0 (pytest가 sympy로 일치를 검증함)
s s s 계수 a 1 a_1 a 1 로부터 Q = a 2 / a 1 Q = \sqrt{a_2}/a_1 Q = a 2 / a 1 .
Q = R C L Q = R \sqrt{\frac{C}{L}} Q = R L C ✓ 재현하는 수식 buck.ss.Q (pytest가 sympy로 일치를 검증함)
부스트: 평균 인덕터 전압은 v g − d ′ v v_g - d' v v g − d ′ v , 커패시터 전류는 d ′ i − v / R d' i - v/R d ′ i − v / R 입니다(d ′ = 1 − d d' = 1 - d d ′ = 1 − d ). d ′ = D ′ − d ^ d' = D' - \hat d d ′ = D ′ − d ^ 로 섭동하고 선형화하면:
( i ^ s L = d ^ V − v ^ D ′ , s v ^ C = i ^ D ′ − d ^ I − v ^ R ) \left( \hat i s L = \hat d V - \hat v D', \ s \hat v C = \hat i D' - \hat d I - \frac{\hat v}{R}\right) ( i ^ s L = d ^ V − v ^ D ′ , s v ^ C = i ^ D ′ − d ^ I − R v ^ ) D ′ = 1 − D D' = 1 - D D ′ = 1 − D 로 쓴 정상상태 동작점: V = V g / D ′ V = V_g/D' V = V g / D ′ , I = V / ( D ′ R ) I = V/(D' R) I = V / ( D ′ R ) .
( V = V g D ′ , I = V g D ′ 2 R ) \left( V = \frac{V_g}{D'}, \ I = \frac{V_g}{D'^{2} R}\right) ( V = D ′ V g , I = D ′ 2 R V g ) v ^ / d ^ \hat v/\hat d v ^ / d ^ 를 구합니다.
G v d ( s ) = V g ( − s L + R D ′ 2 ) D ′ 2 ( s L + R D ′ 2 + C L R s 2 ) G_{vd}(s) = \frac{V_g \left(- s L + R D'^{2}\right)}{D'^{2} \left(s L + R D'^{2} + C L R s^{2}\right)} G v d ( s ) = D ′ 2 ( s L + R D ′ 2 + C L R s 2 ) V g ( − s L + R D ′ 2 ) 직류 이득(결과는 D ′ = 1 − D D' = 1 - D D ′ = 1 − D 를 대입한 형태로 나타냄).
G d 0 = V g ( 1 − D ) 2 G_{d0} = \frac{V_g}{\left(1 - D\right)^{2}} G d 0 = ( 1 − D ) 2 V g ✓ 재현하는 수식 boost.ss.Gd0 (pytest가 sympy로 일치를 검증함)
극점 주파수.
ω 0 = 1 − D L C \omega_0 = \frac{1 - D}{\sqrt{L C}} ω 0 = L C 1 − D ✓ 재현하는 수식 boost.ss.w0 (pytest가 sympy로 일치를 검증함)
품질계수.
Q = ( 1 − D ) R C L Q = \left(1 - D\right) R \sqrt{\frac{C}{L}} Q = ( 1 − D ) R L C ✓ 재현하는 수식 boost.ss.Q (pytest가 sympy로 일치를 검증함)
분자가 양의 실수 s s s 에서 0이 되므로 우반평면 영점입니다.
ω z = ( 1 − D ) 2 R L \omega_z = \frac{\left(1 - D\right)^{2} R}{L} ω z = L ( 1 − D ) 2 R ✓ 재현하는 수식 boost.ss.wz (pytest가 sympy로 일치를 검증함)
벅-부스트: 평균 인덕터 전압은 d v g + d ′ v d\,v_g + d' v d v g + d ′ v , 커패시터 전류는 − d ′ i − v / R -d' i - v/R − d ′ i − v / R 이며 출력 v v v 는 음수입니다. 선형화하면:
( i ^ s L = d ^ ( V g − V ) + v ^ D ′ , s v ^ C = d ^ I − i ^ D ′ − v ^ R ) \left( \hat i s L = \hat d \left(V_g - V\right) + \hat v D', \ s \hat v C = \hat d I - \hat i D' - \frac{\hat v}{R}\right) ( i ^ s L = d ^ ( V g − V ) + v ^ D ′ , s v ^ C = d ^ I − i ^ D ′ − R v ^ ) D ′ = 1 − D D' = 1 - D D ′ = 1 − D 로 쓴 동작점: V = − D V g / D ′ V = -D V_g/D' V = − D V g / D ′ , I = D V g / ( D ′ 2 R ) I = D V_g/(D'^2 R) I = D V g / ( D ′2 R ) .
( V = V g ( − 1 + D ′ ) D ′ , I = V g ( 1 − D ′ ) D ′ 2 R ) \left( V = \frac{V_g \left(-1 + D'\right)}{D'}, \ I = \frac{V_g \left(1 - D'\right)}{D'^{2} R}\right) ( V = D ′ V g ( − 1 + D ′ ) , I = D ′ 2 R V g ( 1 − D ′ ) ) v ^ / d ^ \hat v/\hat d v ^ / d ^ 를 구합니다.
G v d ( s ) = V g ( − s L ( − 1 + D ′ ) − R D ′ 2 ) D ′ 2 ( s L + R D ′ 2 + C L R s 2 ) G_{vd}(s) = \frac{V_g \left(- s L \left(-1 + D'\right) - R D'^{2}\right)}{D'^{2} \left(s L + R D'^{2} + C L R s^{2}\right)} G v d ( s ) = D ′ 2 ( s L + R D ′ 2 + C L R s 2 ) V g ( − s L ( − 1 + D ′ ) − R D ′ 2 ) 직류 이득은 음수(반전 출력)이며, 그 크기는 다음과 같습니다.
G d 0 = V g ( 1 − D ) 2 G_{d0} = \frac{V_g}{\left(1 - D\right)^{2}} G d 0 = ( 1 − D ) 2 V g ✓ 재현하는 수식 buckboost.ss.Gd0 (pytest가 sympy로 일치를 검증함)
극점 주파수.
ω 0 = 1 − D L C \omega_0 = \frac{1 - D}{\sqrt{L C}} ω 0 = L C 1 − D ✓ 재현하는 수식 buckboost.ss.w0 (pytest가 sympy로 일치를 검증함)
품질계수.
Q = ( 1 − D ) R C L Q = \left(1 - D\right) R \sqrt{\frac{C}{L}} Q = ( 1 − D ) R L C ✓ 재현하는 수식 buckboost.ss.Q (pytest가 sympy로 일치를 검증함)
우반평면 영점.
ω z = R ( − 1 + D ) 2 D L = ( 1 − D ) 2 R D L \omega_z = \frac{R \left(-1 + D\right)^{2}}{D L} = \frac{\left(1 - D\right)^{2} R}{D L} ω z = D L R ( − 1 + D ) 2 = D L ( 1 − D ) 2 R ✓ 재현하는 수식 buckboost.ss.wz (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/small_signal.py
전압 모드 제어기는 제어 전압을 주기적인 램프와 비교해 듀티비를 정합니다. 루프를 한 바퀴 돌면 보상기, 변조기, 전력단, 센서의 이득이 곱해지며, 그 곱인 루프 이득 T T T 가 외란을 얼마나 강하게 억제하는지 결정합니다.
램프는 T s T_s T s 동안 0 0 0 에서 V M V_M V M 까지 증가하며, V c t r l V_\mathrm{ctrl} V ctrl 을 넘는 순간 스위치가 꺼집니다.
V M t o f f T s = V c t r l \frac{V_M t_\mathrm{off}}{T_s} = V_\mathrm{ctrl} T s V M t off = V ctrl 온 시간 비율은 D = t o f f / T s D = t_\mathrm{off}/T_s D = t off / T s 입니다.
D = V c t r l V M D = \frac{V_\mathrm{ctrl}}{V_M} D = V M V ctrl ✓ 재현하는 수식 pwm.d (pytest가 sympy로 일치를 검증함)
루프를 따라가면 보상기 출력이 변조기(이득 1 / V M 1/V_M 1/ V M )를 구동하고, 전력단이 d ^ \hat d d ^ 를 v ^ \hat v v ^ 로 바꾸며(이득 G v d G_{vd} G v d ), 센서가 H v ^ H \hat v H v ^ 를 피드백합니다.
루프 이득은 루프를 한 바퀴 도는 이득들의 곱입니다.
T = G c G v d H V M T = \frac{G_c G_{vd} H}{V_M} T = V M G c G v d H ✓ 재현하는 수식 loop.T (pytest가 sympy로 일치를 검증함)
출력 외란 v ^ d i s t \hat v_\mathrm{dist} v ^ dist 가 제어된 출력에 더해지고, 제어기는 오차 v ^ r e f − H v ^ \hat v_\mathrm{ref} - H\hat v v ^ ref − H v ^ 에 따라 동작합니다.
v ^ = v ^ d i s t + G c G v d ( v ^ r e f − v ^ H ) V M \hat v = \hat v_\mathrm{dist} + \frac{G_c G_{vd} \left(\hat v_\mathrm{ref} - \hat v H\right)}{V_M} v ^ = v ^ dist + V M G c G v d ( v ^ ref − v ^ H ) 출력에 도달하는 외란은 1 + T 1 + T 1 + T 로 나뉩니다.
S = 1 1 + T S = \frac{1}{1 + T} S = 1 + T 1 ✓ 재현하는 수식 loop.suppression (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/control.py
인덕터나 커패시터에 저장된 에너지는 공급된 전력 v i v i v i 의 적분입니다. 스위칭 주기마다 반복되는 손실은 주기당 손실 에너지 × f s f_s f s 이고, 도통 손실은 순시 전력의 주기 평균입니다.
인덕턴스에 공급되는 에너지: p = v i p = v i p = v i 이고 v = L d i / d t v = L\,di/dt v = L d i / d t 이므로 d E = L i d i dE = L i\,di d E = L i d i 입니다. 0에서 턴오프 전류까지 적분합니다.
E l k = ∫ 0 I p k i L l k d i E_\mathrm{lk} = \int\limits_{0}^{I_\mathrm{pk}} i L_\mathrm{lk}\, di E lk = 0 ∫ I pk i L lk d i 적분을 계산합니다.
E l k = L l k I p k 2 2 E_\mathrm{lk} = \frac{L_\mathrm{lk} I_\mathrm{pk}^{2}}{2} E lk = 2 L lk I pk 2 ✓ 재현하는 수식 flyback.leak.E (pytest가 sympy로 일치를 검증함)
이 에너지를 매 주기 제거하면(클램프하거나 소산시키면) 평균 전력은 E l k f s E_\mathrm{lk} f_s E lk f s 입니다.
P l k = E l k f s P_\mathrm{lk} = E_\mathrm{lk} f_s P lk = E lk f s ✓ 재현하는 수식 flyback.leak.P (pytest가 sympy로 일치를 검증함)
V s w V_\mathrm{sw} V sw 로 충전된 스위치 노드 커패시턴스의 저장 에너지: d E = v d q = C v d v dE = v\,dq = C v\,dv d E = v d q = C v d v .
E C = ∫ 0 V s w v C n o d e d v E_C = \int\limits_{0}^{V_\mathrm{sw}} v C_\mathrm{node}\, dv E C = 0 ∫ V sw v C node d v 하드 턴온은 매 주기 이 에너지를 스위치 채널로 방전시키므로 P = E C f s P = E_C f_s P = E C f s 입니다.
P = C n o d e V s w 2 f s 2 P = \frac{C_\mathrm{node} V_\mathrm{sw}^{2} f_s}{2} P = 2 C node V sw 2 f s ✓ 재현하는 수식 loss.sw.cap (pytest가 sympy로 일치를 검증함)
도통 손실은 순시 전력 i ( t ) 2 R x i(t)^2 R_x i ( t ) 2 R x 의 주기 평균입니다.
P = ∫ 0 T s R x i 2 ( t ) d t T s P = \frac{\int\limits_{0}^{T_s} R_x i^{2}{\left(t \right)}\, dt}{T_s} P = T s 0 ∫ T s R x i 2 ( t ) d t 정의상 rms 전류는 i ( t ) 2 i(t)^2 i ( t ) 2 의 주기 평균의 제곱근입니다.
I r m s 2 = ∫ 0 T s i 2 ( t ) d t T s I_\mathrm{rms}^{2} = \frac{\int\limits_{0}^{T_s} i^{2}{\left(t \right)}\, dt}{T_s} I rms 2 = T s 0 ∫ T s i 2 ( t ) d t R x R_x R x 는 상수이므로 평균 밖으로 나옵니다.
P = I r m s 2 R x P = I_\mathrm{rms}^{2} R_x P = I rms 2 R x ✓ 재현하는 수식 loss.cond (pytest가 sympy로 일치를 검증함)
도통 중인 다이오드는 순방향 전압 절편과 동저항으로 모델링합니다. v D = V F + r d i v_D = V_F + r_d i v D = V F + r d i 이므로 p = V F i + r d i 2 p = V_F i + r_d i^2 p = V F i + r d i 2 입니다.
P = ∫ 0 T s ( V F i ( t ) + r d i 2 ( t ) ) d t T s P = \frac{\int\limits_{0}^{T_s} \left(V_F i{\left(t \right)} + r_d i^{2}{\left(t \right)}\right)\, dt}{T_s} P = T s 0 ∫ T s ( V F i ( t ) + r d i 2 ( t ) ) d t i i i 의 평균은 I a v g I_\mathrm{avg} I avg , i 2 i^2 i 2 의 평균은 I r m s 2 I_\mathrm{rms}^2 I rms 2 입니다.
P = V F I a v g + r d I r m s 2 P = V_F I_\mathrm{avg} + r_d I_\mathrm{rms}^{2} P = V F I avg + r d I rms 2 ✓ 재현하는 수식 loss.diode (pytest가 sympy로 일치를 검증함)
드라이버는 매 주기 V G S V_\mathrm{GS} V GS 전원에서 게이트 전하 Q g Q_g Q g 를 끌어옵니다. 전원에서 가져가는 에너지는 V G S d q V_\mathrm{GS}\,dq V GS d q 의 적분입니다.
E G = ∫ 0 Q g V G S d q E_G = \int\limits_{0}^{Q_g} V_\mathrm{GS}\, dq E G = 0 ∫ Q g V GS d q 이 에너지는 모두 드라이버와 게이트의 저항에서 열이 되며, 여기에 f s f_s f s 를 곱합니다.
P = Q g V G S f s P = Q_g V_\mathrm{GS} f_s P = Q g V GS f s ✓ 재현하는 수식 loss.gate (pytest가 sympy로 일치를 검증함)
감쇠 없는 L-C 루프는 L C d 2 v / d t 2 + v = 0 L C\,d^2v/dt^2 + v = 0 L C d 2 v / d t 2 + v = 0 을 따르며, 특성 방정식은 L C s 2 + 1 = 0 L C s^2 + 1 = 0 L C s 2 + 1 = 0 입니다.
1 + C n o d e L M s 2 = 0 1 + C_\mathrm{node} L_M s^{2} = 0 1 + C node L M s 2 = 0 근은 ± j ω 0 \pm j\omega_0 ± j ω 0 입니다.
ω 0 = 1 C n o d e L M \omega_0 = \frac{1}{\sqrt{C_\mathrm{node}} \sqrt{L_M}} ω 0 = C node L M 1 f = ω 0 / ( 2 π ) f = \omega_0/(2\pi) f = ω 0 / ( 2 π ) .
f r i n g = 1 2 π L M C n o d e f_\mathrm{ring} = \frac{1}{2 \pi \sqrt{L_M C_\mathrm{node}}} f ring = 2 π L M C node 1 ✓ 재현하는 수식 dcm.ring.f (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/energy.py
자기 경로는 저항 회로처럼 동작합니다. 기자력 N i N i N i 가 자기저항 R = l / ( μ A ) \mathcal{R} = l/(\mu A) R = l / ( μ A ) 를 통해 자속 Φ \Phi Φ 를 흐르게 합니다. 유효 단면적 A e A_e A e 에서 자속 밀도가 균일하면 B = Φ / A e B = \Phi/A_e B = Φ/ A e 입니다.
코어 자기저항(비투자율 μ i \mu_i μ i ).
R c = l e A e μ 0 μ i \mathcal{R}_c = \frac{l_e}{A_e \mu_0 \mu_i} R c = A e μ 0 μ i l e 공극 자기저항(프린징 무시: 공극 면적 = A e A_e A e ).
R g = l g A e μ 0 \mathcal{R}_g = \frac{l_g}{A_e \mu_0} R g = A e μ 0 l g 두 자기저항은 직렬입니다.
R = l g A e μ 0 + l e A e μ 0 μ i \mathcal{R} = \frac{l_g}{A_e \mu_0} + \frac{l_e}{A_e \mu_0 \mu_i} R = A e μ 0 l g + A e μ 0 μ i l e 쇄교 자속이 λ = N Φ = N ( N i / R ) \lambda = N\Phi = N (N i/\mathcal{R}) λ = N Φ = N ( N i / R ) 이므로 L = λ / i = N 2 / R L = \lambda/i = N^2/\mathcal{R} L = λ / i = N 2 / R 입니다.
L = N 2 R L = \frac{N^{2}}{\mathcal{R}} L = R N 2 인덕턴스 계수는 턴 수 제곱당 인덕턴스, 즉 A L = L / N 2 = 1 / R A_L = L/N^2 = 1/\mathcal{R} A L = L / N 2 = 1/ R 입니다.
A L = 1 R A_L = \frac{1}{\mathcal{R}} A L = R 1 두 자기저항을 대입합니다.
A L = A e μ 0 μ i l e + l g μ i = μ 0 A e l g + l e μ i A_L = \frac{A_e \mu_0 \mu_i}{l_e + l_g \mu_i} = \frac{\mu_0 A_e}{l_g + \frac{l_e}{\mu_i}} A L = l e + l g μ i A e μ 0 μ i = l g + μ i l e μ 0 A e ✓ 재현하는 수식 mag.AL_gap (pytest가 sympy로 일치를 검증함)
따라서 L = A L N 2 L = A_L N^2 L = A L N 2 입니다.
L = A L N 2 L = A_L N^{2} L = A L N 2 ✓ 재현하는 수식 mag.L_from_AL (pytest가 sympy로 일치를 검증함)
쇄교 자속과 인덕턴스: λ = N Φ = L i \lambda = N\Phi = L i λ = N Φ = L i 이므로 Φ = L i / N \Phi = L i/N Φ = L i / N 입니다.
피크 전류에서는 B p k = Φ p k / A e = L I p k / ( N A e ) B_\mathrm{pk} = \Phi_\mathrm{pk}/A_e = L I_\mathrm{pk}/(N A_e) B pk = Φ pk / A e = L I pk / ( N A e ) 입니다.
B p k = L I p k N A e B_\mathrm{pk} = \frac{L I_\mathrm{pk}}{N A_e} B pk = N A e L I pk ✓ 재현하는 수식 mag.B_pk (pytest가 sympy로 일치를 검증함)
자속 밀도는 전류를 따라 B = L i / ( N A e ) B = L i/(N A_e) B = L i / ( N A e ) 입니다. 직류 전류를 중심으로 한 ± Δ i L \pm\Delta i_L ± Δ i L 의 리플은 자속 밀도를 직류 값을 중심으로 ± L Δ i L / ( N A e ) \pm L\,\Delta i_L/(N A_e) ± L Δ i L / ( N A e ) 만큼 움직이며, 이 진폭이 B a c B_\mathrm{ac} B ac 입니다.
B a c = L Δ i L N A e B_\mathrm{ac} = \frac{L \Delta i_L}{N A_e} B ac = N A e L Δ i L ✓ 재현하는 수식 mag.B_ac (pytest가 sympy로 일치를 검증함)
B p k B_\mathrm{pk} B pk 를 한계 B m a x B_\mathrm{max} B max 로 두고 턴 수에 대해 풀면, 한계를 넘지 않는 최소 턴 수가 나옵니다.
N = L I p k B m a x A e N = \frac{L I_\mathrm{pk}}{B_\mathrm{max} A_e} N = B max A e L I pk ✓ 재현하는 수식 mag.N_Bmax (pytest가 sympy로 일치를 검증함)
N N N 이 정해지면 인덕턴스 L = N 2 / ( R c + R g ) L = N^2/(\mathcal{R}_c + \mathcal{R}_g) L = N 2 / ( R c + R g ) 가 공극 자기저항을, 따라서 공극 길이를 정합니다.
l g = μ 0 A e N 2 L − l e μ i l_g = \frac{\mu_0 A_e N^{2}}{L} - \frac{l_e}{\mu_i} l g = L μ 0 A e N 2 − μ i l e ✓ 재현하는 수식 mag.gap_length (pytest가 sympy로 일치를 검증함)
코어 선정: 구리 단면적이 A w A_w A w 인 N N N 턴 권선은 창 면적 W A W_A W A 중 비율 K u K_u K u 만큼만 채울 수 있습니다.
K u W A = A w N K_u W_A = A_w N K u W A = A w N 한계에서는 평균 길이 MLT인 N N N 턴 권선의 저항이 구리 손실 한도 R d c , m a x R_\mathrm{dc,max} R dc , max 와 같습니다.
R d c , m a x = M L T N ρ w A w R_\mathrm{dc,max} = \frac{\mathrm{MLT} N \rho_w}{A_w} R dc , max = A w MLT N ρ w 창이 선재를 정하므로(A w = K u W A / N A_w = K_u W_A/N A w = K u W A / N ) 저항은 턴 수의 제곱에 비례해 커집니다.
R d c , m a x = M L T ρ w N 2 K u W A R_\mathrm{dc,max} = \frac{\mathrm{MLT} \rho_w N^{2}}{K_u W_A} R dc , max = K u W A MLT ρ w N 2 자속 한계가 턴 수를 정합니다: N = L I p k / ( B m a x A e ) N = L I_\mathrm{pk}/(B_\mathrm{max} A_e) N = L I pk / ( B max A e ) .
R d c , m a x = M L T ρ w I p k 2 L 2 A e 2 B m a x 2 K u W A R_\mathrm{dc,max} = \frac{\mathrm{MLT} \rho_w I_\mathrm{pk}^{2} L^{2}}{A_e^{2} B_\mathrm{max}^{2} K_u W_A} R dc , max = A e 2 B max 2 K u W A MLT ρ w I pk 2 L 2 코어 치수를 한쪽으로 모으면 코어 기하 상수가 정의되고, 다른 쪽은 사양만으로 정해집니다.
K g = W A A e 2 M L T K_g = \frac{W_A A_e^{2}}{\mathrm{MLT}} K g = MLT W A A e 2 코어의 K g K_g K g 가 다음 값 이상이면 자속 한계, 창, 저항 한도를 함께 만족합니다.
K g = ρ w L 2 I p k 2 B m a x 2 R d c , m a x K u K_g = \frac{\rho_w L^{2} I_\mathrm{pk}^{2}}{B_\mathrm{max}^{2} R_\mathrm{dc,max} K_u} K g = B max 2 R dc , max K u ρ w L 2 I pk 2 ✓ 재현하는 수식 mag.Kg_req (pytest가 sympy로 일치를 검증함)
패러데이 법칙 v = N A e d B / d t v = N A_e\,dB/dt v = N A e d B / d t 에 따라 온 구간 동안의 B B B 변화는 v / ( N A e ) v/(N A_e) v / ( N A e ) 의 적분입니다.
Δ B = ∫ 0 t o n V w A e N d t \Delta B = \int\limits_{0}^{t_\mathrm{on}} \frac{V_w}{A_e N}\, dt Δ B = 0 ∫ t on A e N V w d t 권선 전압 V w V_w V w 가 일정하면 변화폭은 전압-초 V w t o n V_w t_\mathrm{on} V w t on 에 비례합니다.
Δ B = V w t o n N A e \Delta B = \frac{V_w t_\mathrm{on}}{N A_e} Δ B = N A e V w t on ✓ 재현하는 수식 mag.dB_faraday (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/magnetics.py
권선은 층으로 감긴 긴 도체입니다. 저항은 길이와 단면적에서 나오고, 주파수가 높으면 전류가 표면층으로 몰리며, 권선 사이의 자계는 누설 인덕턴스로 나타나는 에너지를 저장합니다.
권선은 평균 길이 MLT인 N N N 턴으로 된 도체 하나입니다.
l w = M L T N l_w = \mathrm{MLT} N l w = MLT N 직류 저항은 저항률에 길이를 곱하고 도체 단면적으로 나눈 값입니다.
R d c = ρ w N M L T A w R_\mathrm{dc} = \frac{\rho_w N \mathrm{MLT}}{A_w} R dc = A w ρ w N MLT ✓ 재현하는 수식 wind.dcr (pytest가 sympy로 일치를 검증함)
양도체(전도율 1 / ρ w 1/\rho_w 1/ ρ w ) 안의 정현파 전류 밀도는 d 2 J / d x 2 = j ω μ 0 J / ρ w d^2 J/dx^2 = j\omega\mu_0 J/\rho_w d 2 J / d x 2 = j ω μ 0 J / ρ w 를 따르므로 e − k x e^{-k x} e − k x 로 변하며, k k k 는 다음과 같습니다.
k 2 = 2 π i f μ 0 ρ w k^{2} = \frac{2 \pi i f \mu_0}{\rho_w} k 2 = ρ w 2 π i f μ 0 실수부가 양수인 근:
k = π f μ 0 ρ w + i π f μ 0 ρ w k = \frac{\sqrt{\pi} \sqrt{f} \sqrt{\mu_0}}{\sqrt{\rho_w}} + \frac{i \sqrt{\pi} \sqrt{f} \sqrt{\mu_0}}{\sqrt{\rho_w}} k = ρ w π f μ 0 + ρ w i π f μ 0 크기는 표피 깊이, 곧 k k k 실수부의 역수만큼 들어갈 때마다 e e e 배씩 줄어듭니다.
δ = ρ w π μ 0 f \delta = \sqrt{\frac{\rho_w}{\pi \mu_0 f}} δ = π μ 0 f ρ w ✓ 재현하는 수식 wind.skin_depth (pytest가 sympy로 일치를 검증함)
두께가 표피 깊이의 φ \varphi φ 배인 층 M ℓ M_\ell M ℓ 개의 Dowell 교류 저항 계수(`wind.dowell`):
F R = φ ( sin ( 2 φ ) + sinh ( 2 φ ) − cos ( 2 φ ) + cosh ( 2 φ ) + ( − 2 3 + 2 M ℓ 2 3 ) ( − sin ( φ ) + sinh ( φ ) ) cos ( φ ) + cosh ( φ ) ) F_R = \varphi \left(\frac{\sin{\left(2 \varphi \right)} + \sinh{\left(2 \varphi \right)}}{- \cos{\left(2 \varphi \right)} + \cosh{\left(2 \varphi \right)}} + \frac{\left(- \frac{2}{3} + \frac{2 M_\ell^{2}}{3}\right) \left(- \sin{\left(\varphi \right)} + \sinh{\left(\varphi \right)}\right)}{\cos{\left(\varphi \right)} + \cosh{\left(\varphi \right)}}\right) F R = φ − cos ( 2 φ ) + cosh ( 2 φ ) sin ( 2 φ ) + sinh ( 2 φ ) + cos ( φ ) + cosh ( φ ) ( − 3 2 + 3 2 M ℓ 2 ) ( − sin ( φ ) + sinh ( φ ) ) 얇은 층에서는 쌍곡선 함수와 삼각 함수를 φ \varphi φ 의 거듭제곱으로 전개합니다. φ 3 \varphi^3 φ 3 까지의 항은 상쇄되고, 처음 나타나는 초과분은 4차 항입니다.
F R = 1 − φ 4 45 + M ℓ 2 φ 4 9 = 1 + ( 5 M ℓ 2 − 1 ) φ 4 45 F_R = 1 - \frac{\varphi^{4}}{45} + \frac{M_\ell^{2} \varphi^{4}}{9} = 1 + \frac{\left(5 M_\ell^{2} - 1\right) \varphi^{4}}{45} F R = 1 − 45 φ 4 + 9 M ℓ 2 φ 4 = 1 + 45 ( 5 M ℓ 2 − 1 ) φ 4 ✓ 재현하는 수식 wind.dowell_low (pytest가 sympy로 일치를 검증함)
주파수가 정해지면 표피 깊이도 정해지므로, 두께가 표피 깊이의 φ \varphi φ 배인 층의 직류 저항은 R δ / φ R_\delta/\varphi R δ / φ 입니다(R δ R_\delta R δ 는 두께가 표피 깊이 하나인 층의 직류 저항). 전류 I I I 가 흐르면 손실은 다음과 같습니다.
P = F R R δ I 2 φ P = \frac{F_R R_\delta I^{2}}{\varphi} P = φ F R R δ I 2 같은 전류가 직류로 흐르는, 두께가 표피 깊이 하나인 층의 손실 R δ I 2 R_\delta I^2 R δ I 2 에 대한 비는 다음과 같습니다.
P / P δ = F R φ P/P_\delta = \frac{F_R}{\varphi} P / P δ = φ F R ✓ 재현하는 수식 wind.loss_rel (pytest가 sympy로 일치를 검증함)
얇은 층의 급수를 쓰면:
P / P δ = 1 − φ 4 45 + M ℓ 2 φ 4 9 φ P/P_\delta = \frac{1 - \frac{\varphi^{4}}{45} + \frac{M_\ell^{2} \varphi^{4}}{9}}{\varphi} P / P δ = φ 1 − 45 φ 4 + 9 M ℓ 2 φ 4 도함수가 0인 곳에서 가장 작습니다.
φ o p t = ( 15 5 M ℓ 2 − 1 ) 1 4 \varphi_\mathrm{opt} = \left(\frac{15}{5 M_\ell^{2} - 1}\right)^{\frac{1}{4}} φ opt = ( 5 M ℓ 2 − 1 15 ) 4 1 ✓ 재현하는 수식 wind.phi_opt (pytest가 sympy로 일치를 검증함)
그곳에서 교류 저항 계수는 층 수와 관계없이 같습니다.
F R = 4 3 F_R = \frac{4}{3} F R = 3 4 창 안의 자계는 폭 b w b_w b w 방향으로 향하므로, 그 높이까지 둘러싸인 기자력을 F \mathcal{F} F 라 하면 H = F / b w H = \mathcal{F}/b_w H = F / b w 이고, 턴 길이 MLT에 걸쳐 저장되는 에너지는 다음과 같습니다.
E = M L T μ 0 ∫ F 2 d y 2 b w E = \frac{\mathrm{MLT} \mu_0 \int \mathcal{F}^{2}\, dy}{2 b_w} E = 2 b w MLT μ 0 ∫ F 2 d y 1차 권선 다음에 2차 권선이 있으면, 기자력은 1차 권선을 지나며 N I N I N I 까지 선형으로 오르고, 간격에서는 그대로 유지되다가, 2차 권선을 지나며 0으로 돌아옵니다.
F = I N \mathcal{F} = I N F = I N L l k = 2 E / I 2 L_\mathrm{lk} = 2E/I^2 L lk = 2 E / I 2 에서 각 권선은 높이의 1/3이, 간격은 전부가 들어갑니다.
L l k = M L T μ 0 N 2 ( h p + h s + 3 h g ) 3 b w = μ 0 N 2 M L T ( h p 3 + h g + h s 3 ) b w L_\mathrm{lk} = \frac{\mathrm{MLT} \mu_0 N^{2} \left(h_p + h_s + 3 h_g\right)}{3 b_w} = \frac{\mu_0 N^{2} \mathrm{MLT} \left(\frac{h_p}{3} + h_g + \frac{h_s}{3}\right)}{b_w} L lk = 3 b w MLT μ 0 N 2 ( h p + h s + 3 h g ) = b w μ 0 N 2 MLT ( 3 h p + h g + 3 h s ) ✓ 재현하는 수식 xfmr.leakage.ps (pytest가 sympy로 일치를 검증함)
1차 권선을 2차 권선 양쪽으로 나누면, 기자력은 첫 번째 절반에서 N I / 2 N I/2 N I /2 까지 오르고, 2차 권선을 지나며 N I / 2 N I/2 N I /2 에서 − N I / 2 -N I/2 − N I /2 로 바뀐 뒤, 두 번째 절반에서 0으로 돌아옵니다.
F = I N 2 \mathcal{F} = \frac{I N}{2} F = 2 I N 최대 기자력이 절반이 되므로 에너지와 누설은 약 1/4로 줄고, 두 간격이 모두 들어갑니다.
L l k = M L T μ 0 N 2 ( h p + h s + 6 h g ) 12 b w = μ 0 N 2 M L T ( h p 3 + 2 h g + h s 3 ) 4 b w L_\mathrm{lk} = \frac{\mathrm{MLT} \mu_0 N^{2} \left(h_p + h_s + 6 h_g\right)}{12 b_w} = \frac{\mu_0 N^{2} \mathrm{MLT} \left(\frac{h_p}{3} + 2 h_g + \frac{h_s}{3}\right)}{4 b_w} L lk = 12 b w MLT μ 0 N 2 ( h p + h s + 6 h g ) = 4 b w μ 0 N 2 MLT ( 3 h p + 2 h g + 3 h s ) ✓ 재현하는 수식 xfmr.leakage.psp (pytest가 sympy로 일치를 검증함)
각자의 인덕턴스와 둘 사이의 상호 인덕턴스 L 12 L_{12} L 12 를 갖는 두 결합 권선:
v 1 = d i 1 d t L 11 + d i 2 d t L 12 v_1 = \frac{di_1}{dt} L_{11} + \frac{di_2}{dt} L_{12} v 1 = d t d i 1 L 11 + d t d i 2 L 12 권선 2에서는:
v 2 = d i 1 d t L 12 + d i 2 d t L 22 v_2 = \frac{di_1}{dt} L_{12} + \frac{di_2}{dt} L_{22} v 2 = d t d i 1 L 12 + d t d i 2 L 22 권선 2를 단락하면 v 2 = 0 v_2 = 0 v 2 = 0 이므로 그 전류는 권선 1의 전류와 반대로 변합니다.
d i 2 d t = − d i 1 d t L 12 L 22 \frac{di_2}{dt} = - \frac{\frac{di_1}{dt} L_{12}}{L_{22}} d t d i 2 = − L 22 d t d i 1 L 12 그러면 권선 1이 보는 인덕턴스는 v 1 / ( d i 1 / d t ) v_1/(di_1/dt) v 1 / ( d i 1 / d t ) 입니다.
L s c = L 11 − L 12 2 L 22 L_\mathrm{sc} = L_{11} - \frac{L_{12}^{2}}{L_{22}} L sc = L 11 − L 22 L 12 2 결합 계수 k = L 12 / L 11 L 22 k = L_{12}/\sqrt{L_{11} L_{22}} k = L 12 / L 11 L 22 (`xfmr.k`)를 쓰면:
L s c = L 11 ( 1 − k 2 ) L_\mathrm{sc} = L_{11} \left(1 - k^{2}\right) L sc = L 11 ( 1 − k 2 ) ✓ 재현하는 수식 xfmr.L_sc (pytest가 sympy로 일치를 검증함)
변압기 모델(1:n n n , 자화 인덕턴스 L M L_M L M 와 누설 인덕턴스는 모두 1차 기준)에서 권선 인덕턴스는 다음과 같습니다.
L 11 = L M + L ℓ 1 L_{11} = L_M + L_{\ell 1} L 11 = L M + L ℓ 1 상호 인덕턴스는
L 12 = L M n L_{12} = L_M n L 12 = L M n 권선 2의 인덕턴스는(누설 L ℓ 2 = n 2 L ℓ 2 ′ L_{\ell 2} = n^2 L_{\ell 2}' L ℓ 2 = n 2 L ℓ 2 ′ )
L 22 = n 2 ( L M + L ℓ 2 ′ ) L_{22} = n^{2} \left(L_M + L_{\ell 2}'\right) L 22 = n 2 ( L M + L ℓ 2 ′ ) 이를 대입하면 권선비가 소거됩니다. 1차 누설에, 2차 누설과 L M L_M L M 의 병렬이 직렬로 더해집니다.
L s c = L ℓ 1 + L ℓ 2 ′ L M L ℓ 2 ′ + L M L_\mathrm{sc} = L_{\ell 1} + \frac{L_{\ell 2}' L_M}{L_{\ell 2}' + L_M} L sc = L ℓ 1 + L ℓ 2 ′ + L M L ℓ 2 ′ L M ✓ 재현하는 수식 xfmr.L_sc_T (pytest가 sympy로 일치를 검증함)
권선 2를 개방하면 그 권선에는 전류가 흐르지 않으므로(d i 2 / d t = 0 di_2/dt = 0 d i 2 / d t = 0 ) 두 전압의 비는 다음과 같습니다.
V 2 / V 1 = L 12 L 11 V_2/V_1 = \frac{L_{12}}{L_{11}} V 2 / V 1 = L 11 L 12 변압기 모델에서는 1차 누설이 전압의 일부를 나누어 가지므로 권선비보다 조금 작습니다.
V 2 / V 1 = n L M L ℓ 1 + L M V_2/V_1 = \frac{n L_M}{L_{\ell 1} + L_M} V 2 / V 1 = L ℓ 1 + L M n L M ✓ 재현하는 수식 xfmr.V_oc (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/windings.py
권선은 턴 사이 커패시턴스가 병렬로 붙은 인덕턴스입니다. 임피던스 측정기는 측정한 리액턴스를 ω \omega ω 로 나누어 인덕턴스로 표시합니다.
병렬로 연결된 인덕턴스와 커패시턴스:
Z = 1 i C p ω − i L ω Z = \frac{1}{i C_p \omega - \frac{i}{L \omega}} Z = i C p ω − L ω i 1 이는 순수 리액턴스입니다.
Z = − i L ω − 1 + C p L ω 2 Z = - \frac{i L \omega}{-1 + C_p L \omega^{2}} Z = − − 1 + C p L ω 2 i L ω 따라서 측정기는 Z / ( j ω ) Z/(j\omega) Z / ( j ω ) 를 인덕턴스로 읽습니다.
L a p p = − L − 1 + C p L ω 2 L_\mathrm{app} = - \frac{L}{-1 + C_p L \omega^{2}} L app = − − 1 + C p L ω 2 L 자기 공진 주파수(`passive.f_srf`)로 쓰면 ω 2 L C p = ( f / f s r f ) 2 \omega^2 L C_p = (f/f_\mathrm{srf})^2 ω 2 L C p = ( f / f srf ) 2 입니다.
f s r f = 1 2 π C p L f_\mathrm{srf} = \frac{1}{2 \pi \sqrt{C_p} \sqrt{L}} f srf = 2 π C p L 1 ω = 2 π f \omega = 2\pi f ω = 2 π f 를 대입하면:
L a p p = − L f s r f 2 f 2 − f s r f 2 = L 1 − ( f f s r f ) 2 L_\mathrm{app} = - \frac{L f_\mathrm{srf}^{2}}{f^{2} - f_\mathrm{srf}^{2}} = \frac{L}{1 - \left(\frac{f}{f_\mathrm{srf}}\right)^{2}} L app = − f 2 − f srf 2 L f srf 2 = 1 − ( f srf f ) 2 L ✓ 재현하는 수식 meas.L_app (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/measurement.py
선형 에너지원은 테브난 등가회로, 즉 전원 저항 R s R_s R s 뒤의 개방 전압 V o c V_\mathrm{oc} V oc 로 모델링합니다. 가용 전력 중 얼마가 컨버터에 도달하는지는 컨버터 입력이 어떻게 보이는지에 달려 있습니다.
부하 저항 R L R_L R L 로 들어가는 전력.
P L = R L V o c 2 ( R L + R s ) 2 P_L = \frac{R_L V_\mathrm{oc}^{2}}{\left(R_L + R_s\right)^{2}} P L = ( R L + R s ) 2 R L V oc 2 d P L / d R L = 0 dP_L/dR_L = 0 d P L / d R L = 0 에서 정합 부하를 얻습니다.
R L = R s R_L = R_s R L = R s 를 대입합니다.
P m a x = V o c 2 4 R s P_\mathrm{max} = \frac{V_\mathrm{oc}^{2}}{4 R_s} P max = 4 R s V oc 2 ✓ 재현하는 수식 src.Pmax (pytest가 sympy로 일치를 검증함)
전압 V c V_c V c 의 정전압 싱크(예: 입력이 고정 전압에 묶인 컨버터)는 I = ( V o c − V c ) / R s I = (V_\mathrm{oc} - V_c)/R_s I = ( V oc − V c ) / R s 를 끌어옵니다.
I = V o c − V c R s I = \frac{V_\mathrm{oc} - V_c}{R_s} I = R s V oc − V c 싱크가 흡수하는 전력입니다. V c > V o c V_c > V_\mathrm{oc} V c > V oc 이면 음수이며, 이때 싱크는 전원으로 에너지를 되돌려 보냅니다.
P = V c ( V o c − V c ) R s P = \frac{V_c \left(V_\mathrm{oc} - V_c\right)}{R_s} P = R s V c ( V oc − V c ) ✓ 재현하는 수식 src.cv_power (pytest가 sympy로 일치를 검증함)
P m a x P_\mathrm{max} P max 로 정규화합니다.
η e x t = 4 V c ( V o c − V c ) V o c 2 \eta_\mathrm{ext} = \frac{4 V_c \left(V_\mathrm{oc} - V_c\right)}{V_\mathrm{oc}^{2}} η ext = V oc 2 4 V c ( V oc − V c ) ✓ 재현하는 수식 src.cv_extraction (pytest가 sympy로 일치를 검증함)
DCM 컨버터는 입력 전압에 비례하는 평균 입력 전류를 끌어오므로, 입력이 저항 R i n R_\mathrm{in} R in , 즉 무손실 저항으로 보이며 R L R_L R L 자리에 들어갑니다.
전원 저항과 R i n R_\mathrm{in} R in 이 전원 전압을 분압합니다.
V g = V o c R i n R s + R i n V_g = \frac{V_\mathrm{oc} R_\mathrm{in}}{R_s + R_\mathrm{in}} V g = R s + R in V oc R in ✓ 재현하는 수식 lfr.Vg (pytest가 sympy로 일치를 검증함)
R L = R i n R_L = R_\mathrm{in} R L = R in 일 때의 P L P_L P L 을 P m a x P_\mathrm{max} P max 로 정규화합니다. 전원 전압은 소거됩니다.
η e x t = 4 R s R i n ( R s + R i n ) 2 \eta_\mathrm{ext} = \frac{4 R_s R_\mathrm{in}}{\left(R_s + R_\mathrm{in}\right)^{2}} η ext = ( R s + R in ) 2 4 R s R in ✓ 재현하는 수식 lfr.eta (pytest가 sympy로 일치를 검증함)
무손실 저항은 입력 전압이 걸린 저항과 같은 전력을 끌어옵니다.
P = V g 2 R i n P = \frac{V_g^{2}}{R_\mathrm{in}} P = R in V g 2 V g V_g V g 에 대해 풉니다. 전력이 클수록 입력 전압이 높아야 합니다.
V g = P R i n V_g = \sqrt{P R_\mathrm{in}} V g = P R in ✓ 재현하는 수식 lfr.Vg_power (pytest가 sympy로 일치를 검증함)
DCM 플라이백의 입력 저항은 R i n = 2 L M f s / D 2 R_\mathrm{in} = 2 L_M f_s / D^2 R in = 2 L M f s / D 2 입니다(플라이백에서 유도).
R i n = 2 L M f s D 2 R_\mathrm{in} = \frac{2 L_M f_s}{D^{2}} R in = D 2 2 L M f s L M L_M L M 에 대해 풀면, 원하는 R i n R_\mathrm{in} R in (전원과 정합하려면 R s R_s R s )을 만드는 인덕턴스가 나옵니다.
L M = R i n D 2 2 f s L_M = \frac{R_\mathrm{in} D^{2}}{2 f_s} L M = 2 f s R in D 2 ✓ 재현하는 수식 lfr.L_M (pytest가 sympy로 일치를 검증함)
포락선이 버스에 비해 충분히 느리면 무손실 저항은 매 순간 η e x t V o c 2 / ( 4 R s ) \eta_\mathrm{ext} V_\mathrm{oc}^2/(4 R_s) η ext V oc 2 / ( 4 R s ) 를 받습니다. 포락선의 반파 하나인 V o c ( t ) = V ^ o c sin ( π t / T e n v ) V_\mathrm{oc}(t) = \hat{V}_\mathrm{oc} \sin(\pi t / T_\mathrm{env}) V oc ( t ) = V ^ oc sin ( π t / T env ) 를 생각합니다(정류된 사인은 이를 반복합니다).
P = η e x t V ^ o c 2 sin 2 ( π t T e n v ) 4 R s P = \frac{\eta_\mathrm{ext} \hat{V}_\mathrm{oc}^{2} \sin^{2}{\left(\frac{\pi t}{T_\mathrm{env}} \right)}}{4 R_s} P = 4 R s η ext V ^ oc 2 sin 2 ( T env π t ) 반파에 걸쳐 평균합니다. 사인의 제곱은 평균이 최댓값 제곱의 절반입니다.
P ˉ = η e x t V ^ o c 2 8 R s \bar{P} = \frac{\eta_\mathrm{ext} \hat{V}_\mathrm{oc}^{2}}{8 R_s} P ˉ = 8 R s η ext V ^ oc 2 ✓ 재현하는 수식 lfr.P_env (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/harvesting.py
진폭이 일정한 정현파 진동을 받는 압전 소자는 클램프 커패시턴스 C 0 C_0 C 0 와 병렬인 전류원 I p sin ω t I_p \sin \omega t I p sin ω t 입니다. 부하나 인터페이스가 가져가는 에너지는 반주기마다 그 전류의 전하가 어디로 가는지로 정해집니다.
아무것도 연결하지 않으면 전류 전부가 C 0 C_0 C 0 를 충전합니다: v = 1 C 0 ∫ I p sin ω t d t v = \frac{1}{C_0}\int I_p \sin \omega t \, dt v = C 0 1 ∫ I p sin ω t d t .
v = − I p cos ( ω t ) C 0 ω v = - \frac{I_p \cos{\left(\omega t \right)}}{C_0 \omega} v = − C 0 ω I p cos ( ω t ) 그 진폭.
V p = I p ω C 0 V_p = \frac{I_p}{\omega C_0} V p = ω C 0 I p ✓ 재현하는 수식 piezo.Vp (pytest가 sympy로 일치를 검증함)
소자 양단의 저항 R R R 은 C 0 C_0 C 0 와 전류를 나눕니다. 전압 진폭은 I p ∣ R ∥ 1 / ( j ω C 0 ) ∣ I_p |R \parallel 1/(j\omega C_0)| I p ∣ R ∥ 1/ ( j ω C 0 ) ∣ 이고, 저항이 받는 전력은 그 제곱의 절반을 R R R 로 나눈 값입니다.
P = R I p 2 2 ( 1 + C 0 2 R 2 ω 2 ) P = \frac{R I_p^{2}}{2 \left(1 + C_0^{2} R^{2} \omega^{2}\right)} P = 2 ( 1 + C 0 2 R 2 ω 2 ) R I p 2 d P / d R = 0 dP/dR = 0 d P / d R = 0 .
R = 1 ω C 0 R = \frac{1}{\omega C_0} R = ω C 0 1 ✓ 재현하는 수식 piezo.R_opt (pytest가 sympy로 일치를 검증함)
이를 대입합니다.
P = I p 2 4 ω C 0 P = \frac{I_p^{2}}{4 \omega C_0} P = 4 ω C 0 I p 2 ✓ 재현하는 수식 piezo.P_R (pytest가 sympy로 일치를 검증함)
전원은 변위의 두 극값 사이, 즉 반주기마다 2 I p / ω 2 I_p/\omega 2 I p / ω 의 전하를 흘립니다.
q = 2 I p ω q = \frac{2 I_p}{\omega} q = ω 2 I p 전파 브리지를 거쳐 V D C V_\mathrm{DC} V DC 에 연결하면, 소자 전압이 − V D C -V_\mathrm{DC} − V DC 에서 V D C V_\mathrm{DC} V DC 까지 바뀐 뒤에야 브리지가 도통하며, 이 변화에 전하 2 C 0 V D C 2 C_0 V_\mathrm{DC} 2 C 0 V DC 가 듭니다. 나머지 전하가 V D C V_\mathrm{DC} V DC 로 들어갑니다.
E 1 / 2 = V D C ( − 2 C 0 V D C + 2 I p ω ) E_{1/2} = V_\mathrm{DC} \left(- 2 C_0 V_\mathrm{DC} + \frac{2 I_p}{\omega}\right) E 1/2 = V DC ( − 2 C 0 V DC + ω 2 I p ) 단위 시간당: π / ω \pi/\omega π / ω 마다 반주기 하나.
P = 2 I p V D C π − 2 C 0 ω V D C 2 π = 2 V D C ( I p − ω C 0 V D C ) π P = \frac{2 I_p V_\mathrm{DC}}{\pi} - \frac{2 C_0 \omega V_\mathrm{DC}^{2}}{\pi} = \frac{2 V_\mathrm{DC} \left(I_p - \omega C_0 V_\mathrm{DC}\right)}{\pi} P = π 2 I p V DC − π 2 C 0 ω V DC 2 = π 2 V DC ( I p − ω C 0 V DC ) ✓ 재현하는 수식 piezo.P_std (pytest가 sympy로 일치를 검증함)
d P / d V D C = 0 dP/dV_\mathrm{DC} = 0 d P / d V DC = 0 : 개방 전압 진폭의 절반.
V D C = I p 2 C 0 ω V_\mathrm{DC} = \frac{I_p}{2 C_0 \omega} V DC = 2 C 0 ω I p 이를 대입합니다.
P s t d , m a x = I p 2 2 π ω C 0 P_\mathrm{std,max} = \frac{I_p^{2}}{2 \pi \omega C_0} P std , max = 2 π ω C 0 I p 2 ✓ 재현하는 수식 piezo.P_std_max (pytest가 sympy로 일치를 검증함)
SECE는 극값 사이에서 소자를 개방해 두므로 전압이 0에서 2 I p / ( ω C 0 ) 2 I_p/(\omega C_0) 2 I p / ( ω C 0 ) 까지 오릅니다. 극값에서 1 2 C 0 v 2 \tfrac12 C_0 v^2 2 1 C 0 v 2 전부를 꺼내며, 이는 부하와 무관합니다.
E 1 / 2 = 2 I p 2 C 0 ω 2 E_{1/2} = \frac{2 I_p^{2}}{C_0 \omega^{2}} E 1/2 = C 0 ω 2 2 I p 2 단위 시간당.
P = 2 I p 2 π ω C 0 P = \frac{2 I_p^{2}}{\pi \omega C_0} P = π ω C 0 2 I p 2 ✓ 재현하는 수식 piezo.P_sece (pytest가 sympy로 일치를 검증함)
병렬 SSHI는 극값마다 소자 전압을 ∓ V D C \mp V_\mathrm{DC} ∓ V DC 에서 ± γ V D C \pm\gamma V_\mathrm{DC} ± γ V DC 로 반전시키므로, 반대쪽 레일까지의 변화에는 ( 1 − γ ) C 0 V D C (1 - \gamma) C_0 V_\mathrm{DC} ( 1 − γ ) C 0 V DC 만 듭니다.
E 1 / 2 = V D C ( − C 0 V D C ( 1 − γ ) + 2 I p ω ) E_{1/2} = V_\mathrm{DC} \left(- C_0 V_\mathrm{DC} \left(1 - \gamma\right) + \frac{2 I_p}{\omega}\right) E 1/2 = V DC ( − C 0 V DC ( 1 − γ ) + ω 2 I p ) 단위 시간당.
P = 2 I p V D C π − C 0 ω V D C 2 π + C 0 γ ω V D C 2 π = 2 V D C ( I p − ω C 0 V D C ( 1 − γ ) 2 ) π P = \frac{2 I_p V_\mathrm{DC}}{\pi} - \frac{C_0 \omega V_\mathrm{DC}^{2}}{\pi} + \frac{C_0 \gamma \omega V_\mathrm{DC}^{2}}{\pi} = \frac{2 V_\mathrm{DC} \left(I_p - \frac{\omega C_0 V_\mathrm{DC} \left(1 - \gamma\right)}{2}\right)}{\pi} P = π 2 I p V DC − π C 0 ω V DC 2 + π C 0 γ ω V DC 2 = π 2 V DC ( I p − 2 ω C 0 V DC ( 1 − γ ) ) ✓ 재현하는 수식 piezo.P_sshi (pytest가 sympy로 일치를 검증함)
d P / d V D C = 0 dP/dV_\mathrm{DC} = 0 d P / d V DC = 0 .
V D C = I p C 0 ω ( 1 − γ ) V_\mathrm{DC} = \frac{I_p}{C_0 \omega \left(1 - \gamma\right)} V DC = C 0 ω ( 1 − γ ) I p 이를 대입합니다.
P S S H I , m a x = I p 2 π ω C 0 ( 1 − γ ) P_\mathrm{SSHI,max} = \frac{I_p^{2}}{\pi \omega C_0 \left(1 - \gamma\right)} P SSHI , max = π ω C 0 ( 1 − γ ) I p 2 ✓ 재현하는 수식 piezo.P_sshi_max (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/piezo.py
전류 출력형 하이사이드 모니터는 션트 양단의 작은 전압을 전류로 바꾸고, 출력 저항이 이를 다시 접지 기준 전압으로 바꿉니다.
션트 양단의 옴의 법칙입니다. 이 전압은 신호이면서, 션트가 측정 대상 회로에서 빼앗는 전압이기도 합니다.
V S E N S E = I S E N S E R S E N S E V_\mathrm{SENSE} = I_\mathrm{SENSE} R_\mathrm{SENSE} V SENSE = I SENSE R SENSE ✓ 재현하는 수식 sense.burden (pytest가 sympy로 일치를 검증함)
이상적 증폭기는 같은 전압을 R I N R_\mathrm{IN} R IN 양단에 걸므로, R I N R_\mathrm{IN} R IN 을 흐르는 전류는 V S E N S E / R I N V_\mathrm{SENSE}/R_\mathrm{IN} V SENSE / R IN 입니다.
I O U T = V S E N S E R I N I_\mathrm{OUT} = \frac{V_\mathrm{SENSE}}{R_\mathrm{IN}} I OUT = R IN V SENSE 그 전류가 R O U T R_\mathrm{OUT} R OUT 으로 흘러 나가므로 V O U T = I O U T R O U T V_\mathrm{OUT} = I_\mathrm{OUT} R_\mathrm{OUT} V OUT = I OUT R OUT 입니다.
V O U T = I S E N S E R S E N S E R O U T R I N V_\mathrm{OUT} = \frac{I_\mathrm{SENSE} R_\mathrm{SENSE} R_\mathrm{OUT}}{R_\mathrm{IN}} V OUT = R IN I SENSE R SENSE R OUT ✓ 재현하는 수식 sense.current_out_monitor (pytest가 sympy로 일치를 검증함)
전압 출력형 증폭기는 센스 전압에 고정 이득 G G G 를 곱하고, 전류가 0일 때의 출력을 정하는 REF 핀 전압을 더합니다.
V O U T = G I S E N S E R S E N S E + V R E F V_\mathrm{OUT} = G I_\mathrm{SENSE} R_\mathrm{SENSE} + V_\mathrm{REF} V OUT = G I SENSE R SENSE + V REF ✓ 재현하는 수식 sense.voltage_out_monitor (pytest가 sympy로 일치를 검증함)
입력 오프셋 전압은 센스 전압에 그대로 더해지므로, 두 증폭기 모두 출력이 나타내는 전류는 다음과 같습니다.
I m e a s = V O S + I S E N S E R S E N S E R S E N S E I_\mathrm{meas} = \frac{V_\mathrm{OS} + I_\mathrm{SENSE} R_\mathrm{SENSE}}{R_\mathrm{SENSE}} I meas = R SENSE V OS + I SENSE R SENSE 측정값은 전류와 관계없이 오프셋을 센스 저항으로 나눈 만큼 실제 전류보다 큽니다.
I O S , e q = V O S R S E N S E I_\mathrm{OS,eq} = \frac{V_\mathrm{OS}}{R_\mathrm{SENSE}} I OS , eq = R SENSE V OS ✓ 재현하는 수식 sense.offset_current (pytest가 sympy로 일치를 검증함)
켈빈 연결이 없으면 센스 연결점이 패드와 납땜부 너머에 있고, 그 저항 R p a d R_\mathrm{pad} R pad 에도 같은 전류가 흐릅니다. R S E N S E R_\mathrm{SENSE} R SENSE 로 환산한 측정값은 다음과 같습니다.
I m e a s = I S E N S E ( R S E N S E + R p a d ) R S E N S E I_\mathrm{meas} = \frac{I_\mathrm{SENSE} \left(R_\mathrm{SENSE} + R_\mathrm{pad}\right)}{R_\mathrm{SENSE}} I meas = R SENSE I SENSE ( R SENSE + R pad ) 상대 오차는 전류와 무관하며, 션트가 작을수록 커집니다.
ε p a d = R p a d R S E N S E \varepsilon_\mathrm{pad} = \frac{R_\mathrm{pad}}{R_\mathrm{SENSE}} ε pad = R SENSE R pad ✓ 재현하는 수식 sense.pad_error (pytest가 sympy로 일치를 검증함)
둘이 함께 있으면 증폭기는 I S E N S E ( R S E N S E + R p a d ) + V O S I_\mathrm{SENSE} (R_\mathrm{SENSE} + R_\mathrm{pad}) + V_\mathrm{OS} I SENSE ( R SENSE + R pad ) + V OS 를 보고 이를 R S E N S E R_\mathrm{SENSE} R SENSE 에 흐르는 전류로 읽습니다. 출력은 이 전류를 출력 식에 넣은 값이며, 출력을 높이는 부호의 오프셋이 출력의 상한을, 반대 부호의 오프셋이 하한을 줍니다.
I m e a s = V O S + I S E N S E ( R S E N S E + R p a d ) R S E N S E = I S E N S E ( R S E N S E + R p a d ) R S E N S E + V O S R S E N S E I_\mathrm{meas} = \frac{V_\mathrm{OS} + I_\mathrm{SENSE} \left(R_\mathrm{SENSE} + R_\mathrm{pad}\right)}{R_\mathrm{SENSE}} = \frac{I_\mathrm{SENSE} \left(R_\mathrm{SENSE} + R_\mathrm{pad}\right)}{R_\mathrm{SENSE}} + \frac{V_\mathrm{OS}}{R_\mathrm{SENSE}} I meas = R SENSE V OS + I SENSE ( R SENSE + R pad ) = R SENSE I SENSE ( R SENSE + R pad ) + R SENSE V OS ✓ 재현하는 수식 sense.reading (pytest가 sympy로 일치를 검증함)
상대 오차는 교차 항 없이 두 몫의 합입니다. 오프셋의 몫은 1 / I S E N S E 1/I_\mathrm{SENSE} 1/ I SENSE 에 비례해 줄고, 패드의 몫은 그대로입니다.
ε I = V O S + I S E N S E R p a d I S E N S E R S E N S E = V O S I S E N S E R S E N S E + R p a d R S E N S E \varepsilon_I = \frac{V_\mathrm{OS} + I_\mathrm{SENSE} R_\mathrm{pad}}{I_\mathrm{SENSE} R_\mathrm{SENSE}} = \frac{V_\mathrm{OS}}{I_\mathrm{SENSE} R_\mathrm{SENSE}} + \frac{R_\mathrm{pad}}{R_\mathrm{SENSE}} ε I = I SENSE R SENSE V OS + I SENSE R pad = I SENSE R SENSE V OS + R SENSE R pad ✓ 재현하는 수식 sense.rel_error (pytest가 sympy로 일치를 검증함)
전류 출력형 증폭기는 노드 A에서 전류 I O U T I_\mathrm{OUT} I OUT 을 R O U T R_\mathrm{OUT} R OUT 으로 흘립니다. 그 뒤에 R-C 필터가 이어집니다. R f R_f R f 는 노드 A와 노드 B 사이에, C f C_f C f 는 노드 B와 접지 사이에 있고, 노드 B에는 다른 부하가 없습니다. 노드 A의 전류 평형(라플라스 영역)은 다음과 같습니다.
I O U T = V A − V B R f + V A R O U T I_\mathrm{OUT} = \frac{V_A - V_B}{R_f} + \frac{V_A}{R_\mathrm{OUT}} I OUT = R f V A − V B + R OUT V A 노드 B에서는 다음과 같습니다.
V A − V B R f = V B s C f \frac{V_A - V_B}{R_f} = V_B s C_f R f V A − V B = V B s C f 커패시터 전압에 대해 풀면 극점이 하나이며, 직류에서 출력은 그대로 I O U T R O U T I_\mathrm{OUT} R_\mathrm{OUT} I OUT R OUT 입니다.
V B I O U T = R O U T 1 + s C f R O U T + s C f R f \frac{V_B}{I_\mathrm{OUT}} = \frac{R_\mathrm{OUT}}{1 + s C_f R_\mathrm{OUT} + s C_f R_f} I OUT V B = 1 + s C f R OUT + s C f R f R OUT 그 극점의 시정수는 C f ( R O U T + R f ) C_f (R_\mathrm{OUT} + R_f) C f ( R OUT + R f ) 입니다. 커패시터는 R f R_f R f 와 직렬인 R O U T R_\mathrm{OUT} R OUT 을 봅니다. R O U T R_\mathrm{OUT} R OUT 은 자신이 부하로 걸린 전류원의 테브난 저항입니다.
R f i l t = R O U T + R f R_\mathrm{filt} = R_\mathrm{OUT} + R_f R filt = R OUT + R f ✓ 재현하는 수식 sense.filter_R (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/sensing.py
벤치: 에지, 게이트 구동, 상승 시간, 돌입 전류, 열, 배터리 단자 섹션 제목: “벤치: 에지, 게이트 구동, 상승 시간, 돌입 전류, 열, 배터리 단자”
인덕터와 커패시터의 법칙, 1차 회로의 계단 응답, 게이트 저항 양단의 옴의 법칙, 직렬 열 경로, Rint 배터리 모델에서 나오는 결과를 벤치에서 쓰는 형태로 정리합니다.
인덕턴스 양단 전압은 전류의 변화율에 비례합니다.
v = L l o o p d d t i ( t ) v = L_\mathrm{loop} \frac{d}{d t} i{\left(t \right)} v = L loop d t d i ( t ) 에지 t e d g e t_\mathrm{edge} t edge 동안 Δ I \Delta I Δ I 만큼 선형으로 변하는 전류는 일정한 속도로 변합니다.
d d t i ( t ) = Δ I t e d g e \frac{d}{d t} i{\left(t \right)} = \frac{\Delta I}{t_\mathrm{edge}} d t d i ( t ) = t edge Δ I 따라서 에지 동안 루프 인덕턴스에 걸리는 전압은 다음과 같습니다.
V s p i k e = L l o o p Δ I t e d g e V_\mathrm{spike} = \frac{L_\mathrm{loop} \Delta I}{t_\mathrm{edge}} V spike = t edge L loop Δ I ✓ 재현하는 수식 layout.v_spike (pytest가 sympy로 일치를 검증함)
턴오프 에지 뒤에 루프 인덕턴스는 스위치 노드 커패시턴스와 직렬 L-C를 이루어 다음 주파수로 링잉합니다.
f r i n g = 1 2 π C n o d e L l o o p f_\mathrm{ring} = \frac{1}{2 \pi \sqrt{C_\mathrm{node}} \sqrt{L_\mathrm{loop}}} f ring = 2 π C node L loop 1 따라서 링잉 주파수에서 루프 인덕턴스를 구할 수 있습니다.
L l o o p = 1 4 π 2 f r i n g 2 C n o d e L_\mathrm{loop} = \frac{1}{4 \pi^{2} f_\mathrm{ring}^{2} C_\mathrm{node}} L loop = 4 π 2 f ring 2 C node 1 ✓ 재현하는 수식 layout.L_ring (pytest가 sympy로 일치를 검증함)
드레인 전압이 바뀌는 동안 게이트는 플래토 전압 V p l V_\mathrm{pl} V pl 에 머뭅니다. 드라이버는 게이트 루프 저항 R G R_G R G 뒤에서 출력을 V G S V_\mathrm{GS} V GS (턴온) 또는 0(턴오프)으로 바꾸므로, 옴의 법칙에 따라 그동안 게이트 전류는 일정합니다.
턴온 때
I G = V G S − V p l R G I_G = \frac{V_\mathrm{GS} - V_\mathrm{pl}}{R_G} I G = R G V GS − V pl ✓ 재현하는 수식 gate.I_on (pytest가 sympy로 일치를 검증함)
턴오프 때
I G = V p l R G I_G = \frac{V_\mathrm{pl}}{R_G} I G = R G V pl ✓ 재현하는 수식 gate.I_off (pytest가 sympy로 일치를 검증함)
일정한 전류는 일정한 속도로 전하를 전달합니다.
따라서 게이트가 게이트-드레인 전하 Q G D Q_\mathrm{GD} Q GD 를 받는 플래토는 다음 시간 동안 지속됩니다.
t p l = Q G D I G t_\mathrm{pl} = \frac{Q_\mathrm{GD}}{I_G} t pl = I G Q GD ✓ 재현하는 수식 gate.t_pl (pytest가 sympy로 일치를 검증함)
커패시터의 전하는 커패시턴스와 전압의 곱이므로, 전하 Q b o o t Q_\mathrm{boot} Q boot 를 공급하면 전압이 다음만큼 떨어집니다.
Δ V b o o t = Q b o o t C b o o t \Delta V_\mathrm{boot} = \frac{Q_\mathrm{boot}}{C_\mathrm{boot}} Δ V boot = C boot Q boot 강하가 Δ V b o o t \Delta V_\mathrm{boot} Δ V boot 이하가 되려면 커패시턴스는 적어도 다음 값이어야 합니다.
C b o o t = Q b o o t Δ V b o o t C_\mathrm{boot} = \frac{Q_\mathrm{boot}}{\Delta V_\mathrm{boot}} C boot = Δ V boot Q boot ✓ 재현하는 수식 boot.C (pytest가 sympy로 일치를 검증함)
단일 극점 시스템은 단위 계단 입력에 다음과 같이 응답합니다.
y = 1 − e − t τ y = 1 - e^{- \frac{t}{\tau}} y = 1 − e − τ t 최종값의 10 %와 90 %에 도달하는 시각은 각각 다음과 같습니다.
( t 10 = τ ln ( 10 9 ) , t 90 = τ ln ( 10 ) ) \left( t_{10} = \tau \ln{\left(\frac{10}{9} \right)}, \ t_{90} = \tau \ln{\left(10 \right)}\right) ( t 10 = τ ln ( 9 10 ) , t 90 = τ ln ( 10 ) ) 따라서 10-90 % 상승 시간은 다음과 같습니다.
t r i s e = 2 τ ln ( 3 ) t_\mathrm{rise} = 2 \tau \ln{\left(3 \right)} t rise = 2 τ ln ( 3 ) -3 dB 대역폭은 같은 극점의 차단 주파수입니다.
f B W = 1 2 π τ f_\mathrm{BW} = \frac{1}{2 \pi \tau} f BW = 2 π τ 1 τ \tau τ 를 소거하면:
t r i s e = ln ( 3 ) π f B W = ln ( 9 ) 2 π f B W t_\mathrm{rise} = \frac{\ln{\left(3 \right)}}{\pi f_\mathrm{BW}} = \frac{\ln{\left(9 \right)}}{2 \pi f_\mathrm{BW}} t rise = π f BW ln ( 3 ) = 2 π f BW ln ( 9 ) ✓ 재현하는 수식 probe.t_rise (pytest가 sympy로 일치를 검증함)
팁과 접지가 이루는 루프의 인덕턴스와 프로브 입력 커패시턴스는 직렬 L-C를 이룹니다. 손실이 없으면 전류 i i i 는 다음 식을 따릅니다.
L g n d d 2 d t 2 i ( t ) + i ( t ) C p r o b e = 0 L_\mathrm{gnd} \frac{d^{2}}{d t^{2}} i{\left(t \right)} + \frac{i{\left(t \right)}}{C_\mathrm{probe}} = 0 L gnd d t 2 d 2 i ( t ) + C probe i ( t ) = 0 그 해는 다음 각주파수로 링잉합니다.
ω 0 = 1 C p r o b e L g n d \omega_0 = \frac{1}{\sqrt{C_\mathrm{probe}} \sqrt{L_\mathrm{gnd}}} ω 0 = C probe L gnd 1 주파수로 나타내면 다음과 같습니다.
f p r o b e = 1 2 π L g n d C p r o b e f_\mathrm{probe} = \frac{1}{2 \pi \sqrt{L_\mathrm{gnd} C_\mathrm{probe}}} f probe = 2 π L gnd C probe 1 ✓ 재현하는 수식 probe.f_ring (pytest가 sympy로 일치를 검증함)
빈 커패시터가 직렬 저항을 통해 계단 전압 V g V_g V g 에 연결되면 다음 전류로 충전됩니다.
i = V g e − t C i n R s e r R s e r i = \frac{V_g e^{- \frac{t}{C_\mathrm{in} R_\mathrm{ser}}}}{R_\mathrm{ser}} i = R ser V g e − C in R ser t 이 전류는 커패시터 전압이 0인 계단 순간에 가장 큽니다.
I i n r u s h = V g R s e r I_\mathrm{inrush} = \frac{V_g}{R_\mathrm{ser}} I inrush = R ser V g ✓ 재현하는 수식 inrush.I_pk (pytest가 sympy로 일치를 검증함)
펄스 전체에 걸친 전류 제곱의 적분은 다음과 같습니다.
I 2 t = V g 2 C i n 2 R s e r I^2 t = \frac{V_g^{2} C_\mathrm{in}}{2 R_\mathrm{ser}} I 2 t = 2 R ser V g 2 C in ✓ 재현하는 수식 inrush.I2t (pytest가 sympy로 일치를 검증함)
커패시터 전류는 커패시턴스와 전압 변화율의 곱입니다.
i = C i n d d t v ( t ) i = C_\mathrm{in} \frac{d}{d t} v{\left(t \right)} i = C in d t d v ( t ) 따라서 전압을 t r a m p t_\mathrm{ramp} t ramp 동안 0에서 V g V_g V g 까지 선형으로 올리면 일정한 전류가 흐릅니다.
I r a m p = C i n V g t r a m p I_\mathrm{ramp} = \frac{C_\mathrm{in} V_g}{t_\mathrm{ramp}} I ramp = t ramp C in V g ✓ 재현하는 수식 inrush.I_ramp (pytest가 sympy로 일치를 검증함)
열저항은 열 경로의 한 부분 양단 온도 차를 그 부분을 지나는 전력 1 W당으로 나타낸 값입니다. 소자의 전력 전부가 접합에서 케이스로, 케이스에서 방열판으로, 방열판에서 주위로 차례로 흐르면 다음이 성립합니다.
( T J − T C = P D θ J C , T C − T S = P D θ C S , T S − T A = P D θ S A ) \left( T_J - T_C = P_D \theta_\mathrm{JC}, \ T_C - T_S = P_D \theta_\mathrm{CS}, \ T_S - T_A = P_D \theta_\mathrm{SA}\right) ( T J − T C = P D θ JC , T C − T S = P D θ CS , T S − T A = P D θ SA ) 주위 온도에서부터 온도 상승분을 더하면 다음과 같습니다.
T J = T A + P D ( θ J C + θ C S + θ S A ) T_J = T_A + P_D \left(\theta_\mathrm{JC} + \theta_\mathrm{CS} + \theta_\mathrm{SA}\right) T J = T A + P D ( θ JC + θ CS + θ SA ) ✓ 재현하는 수식 therm.Tj (pytest가 sympy로 일치를 검증함)
Rint 모델은 내부 저항 뒤의 개방 전압입니다. 충전 전류는 저항을 거쳐 양극 단자로 들어갑니다(`bat.rint`).
I b = V − V b R b I_b = \frac{V - V_b}{R_b} I b = R b V − V b 따라서 단자 전압은 다음과 같습니다.
V = V b + I b R b V = V_b + I_b R_b V = V b + I b R b ✓ 재현하는 수식 bat.v_term (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/bench.py
시뮬레이터는 회로의 상태를 한 타임 스텝씩 계산합니다. 한 스텝 안에서 스위칭 컨버터는 전원이 일정한 선형 회로이며, 1차 회로의 예에서 보듯 이런 회로는 한 스텝을 정확히 계산할 수 있습니다. 흔히 쓰는 적분 규칙들은 감쇠 모드 하나, 곧 시험 방정식(test equation)으로 비교합니다. 이 방정식에서 각 규칙은 스텝마다 편차에 일정한 배율을 곱합니다. 끝으로 출력 필터 링잉의 포락선을 이용해, 정지 상태에서 시작한 시뮬레이션을 몇 스위칭 주기 동안 실행해야 마지막 주기들이 정상상태를 보여 주는지 구합니다.
한 스텝 안에서 회로는 선형이고 전원은 일정합니다. 그러면 저항을 통해 충전되는 커패시터는 남은 전압 차에 비례하고 시정수 τ \tau τ 에 반비례하는 속도로 전압 v ∞ v_\infty v ∞ 에 다가갑니다.
d d t v ( t ) = v ∞ − v ( t ) τ \frac{d}{d t} v{\left(t \right)} = \frac{v_\infty - v{\left(t \right)}}{\tau} d t d v ( t ) = τ v ∞ − v ( t ) 스텝이 시작할 때의 전압 v 0 v_0 v 0 을 초기값으로 풉니다.
v ( t ) = v ∞ + ( v 0 − v ∞ ) e − t τ v{\left(t \right)} = v_\infty + \left(v_0 - v_\infty\right) e^{- \frac{t}{\tau}} v ( t ) = v ∞ + ( v 0 − v ∞ ) e − τ t 스텝이 끝나는 t = Δ t t = \Delta t t = Δ t 에서의 값입니다. 근사한 것이 없으므로 스텝을 그 구간 전체만큼 길게 잡아도 됩니다.
v 1 = v ∞ + ( v 0 − v ∞ ) e − Δ t τ v_1 = v_\infty + \left(v_0 - v_\infty\right) e^{- \frac{\Delta t}{\tau}} v 1 = v ∞ + ( v 0 − v ∞ ) e − τ Δ t ✓ 재현하는 수식 sim.exact_step (pytest가 sympy로 일치를 검증함)
흔히 쓰는 규칙들을 감쇠 모드 하나만 떼어 비교합니다. 이 모드는 회로가 향하는 값에서 벗어난 편차 x x x 이며, − x / τ -x/\tau − x / τ 의 속도로 변합니다(시험 방정식). Δ t \Delta t Δ t 동안 편차를 x 0 x_0 x 0 에서 x 1 x_1 x 1 로 계산하는 규칙은 매 스텝 편차에 배율 g = x 1 / x 0 g = x_1/x_0 g = x 1 / x 0 를 곱합니다.
d d t x ( t ) = − x ( t ) τ \frac{d}{d t} x{\left(t \right)} = - \frac{x{\left(t \right)}}{\tau} d t d x ( t ) = − τ x ( t ) 전진 오일러(forward Euler)는 스텝 시작점의 기울기를 씁니다.
x 1 = x 0 − x 0 Δ t τ x_1 = x_0 - \frac{x_0 \Delta t}{\tau} x 1 = x 0 − τ x 0 Δ t 스텝당 배율은 다음과 같습니다.
g F E = 1 − Δ t τ g_\mathrm{FE} = 1 - \frac{\Delta t}{\tau} g FE = 1 − τ Δ t ✓ 재현하는 수식 num.gain_fe (pytest가 sympy로 일치를 검증함)
사다리꼴 규칙(trapezoidal rule)은 스텝 양 끝의 기울기를 평균하므로 x 1 x_1 x 1 이 양변에 나타납니다.
x 1 = x 0 + Δ t ( − x 0 τ − x 1 τ ) 2 x_1 = x_0 + \frac{\Delta t \left(- \frac{x_0}{\tau} - \frac{x_1}{\tau}\right)}{2} x 1 = x 0 + 2 Δ t ( − τ x 0 − τ x 1 ) x 1 x_1 x 1 에 대해 풀고 x 0 x_0 x 0 으로 나눕니다.
g T R = − Δ t − 2 τ Δ t + 2 τ = 1 − Δ t 2 τ 1 + Δ t 2 τ g_\mathrm{TR} = - \frac{\Delta t - 2 \tau}{\Delta t + 2 \tau} = \frac{1 - \frac{\Delta t}{2 \tau}}{1 + \frac{\Delta t}{2 \tau}} g TR = − Δ t + 2 τ Δ t − 2 τ = 1 + 2 τ Δ t 1 − 2 τ Δ t ✓ 재현하는 수식 num.gain_tr (pytest가 sympy로 일치를 검증함)
후진 오일러(backward Euler)는 스텝 끝점의 기울기를 씁니다.
x 1 = x 0 − x 1 Δ t τ x_1 = x_0 - \frac{x_1 \Delta t}{\tau} x 1 = x 0 − τ x 1 Δ t 스텝당 배율은 다음과 같습니다.
g B E = τ Δ t + τ = 1 1 + Δ t τ g_\mathrm{BE} = \frac{\tau}{\Delta t + \tau} = \frac{1}{1 + \frac{\Delta t}{\tau}} g BE = Δ t + τ τ = 1 + τ Δ t 1 ✓ 재현하는 수식 num.gain_be (pytest가 sympy로 일치를 검증함)
스텝이 τ \tau τ 보다 훨씬 긴 강성(stiff) 모드에서는 정확한 배율 e − Δ t / τ e^{-\Delta t/\tau} e − Δ t / τ 가 거의 0입니다. 이때 전진 오일러의 배율은 한없이 커지고, 사다리꼴 규칙의 배율은 − 1 -1 − 1 에 가까워져 모드가 크기를 유지한 채 매 스텝 부호만 바뀌며, 후진 오일러의 배율은 정확한 배율처럼 0에 가까워집니다.
( lim Δ t → ∞ ( − Δ t − 2 τ Δ t + 2 τ ) = − 1 , lim Δ t → ∞ ( τ Δ t + τ ) = 0 ) \left( \lim_{\Delta t \to \infty}\left(- \frac{\Delta t - 2 \tau}{\Delta t + 2 \tau}\right) = -1, \ \lim_{\Delta t \to \infty}\left(\frac{\tau}{\Delta t + \tau}\right) = 0\right) ( Δ t → ∞ lim ( − Δ t + 2 τ Δ t − 2 τ ) = − 1 , Δ t → ∞ lim ( Δ t + τ τ ) = 0 ) 후진 오일러는 인덕터 전류를 스텝 끝점의 기울기, 곧 인덕터 전압 v L , 1 v_{L,1} v L , 1 을 인덕턴스로 나눈 값으로 계산합니다.
i 1 = i 0 + v L , 1 Δ t L i_1 = i_0 + \frac{v_{L,1} \Delta t}{L} i 1 = i 0 + L v L , 1 Δ t 다이오드가 꺼지기 전에 다이오드 전류가 0을 지나 − I o s -I_\mathrm{os} − I os 까지 내려갔습니다. 이 전류가 흐를 다른 경로가 없으면 다음 스텝은 전류가 0인 상태로 끝나야 합니다.
0 = − I o s + v L , 1 Δ t L 0 = - I_\mathrm{os} + \frac{v_{L,1} \Delta t}{L} 0 = − I os + L v L , 1 Δ t 그 스텝에서 인덕터에 걸리는 전압에 대해 풉니다.
v j u m p = L I o s Δ t v_\mathrm{jump} = \frac{L I_\mathrm{os}}{\Delta t} v jump = Δ t L I os ✓ 재현하는 수식 sim.step_jump (pytest가 sympy로 일치를 검증함)
이상적인 부품으로 된 벅을 생각합니다. 전원을 끄면(전압원은 단락) 필터의 인덕턴스와 커패시턴스, 부하 저항이 병렬이 됩니다. 이 병렬 RLC 회로의 자연 응답은 e s t e^{st} e s t 꼴이며, s s s 는 특성 방정식의 근입니다.
1 C L + s C R + s 2 = 0 \frac{1}{C L} + \frac{s}{C R} + s^{2} = 0 C L 1 + C R s + s 2 = 0 필터가 링잉할 때 두 근은 켤레 복소수입니다. 두 근의 합의 절반인 공통 실수부가 − α -\alpha − α 이며, α \alpha α 는 링잉 포락선의 감쇠율, 곧 네퍼 주파수(neper frequency)입니다.
α = 1 2 C R \alpha = \frac{1}{2 C R} α = 2 C R 1 포락선은 e − α t e^{-\alpha t} e − α t 로 감쇠하며, 시정수는 인덕턴스와 관계없이 1 / α 1/\alpha 1/ α 입니다(이상적인 부품에서).
τ e n v = 2 R C \tau_\mathrm{env} = 2 R C τ env = 2 R C ✓ 재현하는 수식 filter.tau_env (pytest가 sympy로 일치를 검증함)
정지 상태에서 시작한 시뮬레이션은 처음 오차가 정상상태 값만큼 큽니다. N N N 스위칭 주기 뒤에는 이 오차가 처음 값의 ε r \varepsilon_r ε r 배로 줄어듭니다.
ε r = e − N T s τ e n v \varepsilon_r = e^{- \frac{N T_s}{\tau_\mathrm{env}}} ε r = e − τ env N T s N N N 에 대해 풉니다.
N s e t = − τ e n v ln ( ε r ) T s = τ e n v ln ( 1 ε r ) T s N_\mathrm{set} = - \frac{\tau_\mathrm{env} \ln{\left(\varepsilon_r \right)}}{T_s} = \frac{\tau_\mathrm{env} \ln{\left(\frac{1}{\varepsilon_r} \right)}}{T_s} N set = − T s τ env ln ( ε r ) = T s τ env ln ( ε r 1 ) ✓ 재현하는 수식 sim.periods_settle (pytest가 sympy로 일치를 검증함)
유도 스크립트: python/pe_core/derive/numerics.py