차분 방정식 구현, 1kW 태양광 MPPT 제어기 재귀식과 계수 계산 2편

이 글은 차분 방정식 구현, 1kW 태양광 MPPT 제어기 재귀식과 계수 계산 시리즈의 2편입니다. 앞 편에 이어 직접형 재귀 차분 방정식 변환과 1kW급 계수 산출, 초기 조건 정합과 인터럽트 연산 시퀀스 구현, 맺음말을 설명합니다.

1kW 태양광 MPPT 제어기 직접형 차분 방정식 및 인터럽트 시퀀스 블록선도 1단계: 오차 샘플링 ADC 인터럽트 (Ts = 50μs) Vref[k] (지령) + − Vpv[k] (센싱) fs = 20kHz x[k] 무충격 기동 (k = 0) • x[-1] = 0 (오차 초기화) • y[-1] = 0.2 (초기 듀티) → 기동 스파이크 방지 x[k] = Vref[k] − Vpv[k] 샘플링 주기 Ts = 50μs 정합 x[k] 전달 2단계: 차분 방정식 연산 직접형 1형식 (Direct Form I) x[k] b0 = 0.805 + + y[k] x[k-1] z⁻¹ b1 = -0.795 z⁻¹ y[k-1] +1 -a1 = +1 피드백 y[k] = y[k-1] + 0.805x[k] − 0.795x[k-1] Kp = 0.8, Ki = 200/s (Tustin 이산화) y[k] 전달 3단계: 포화 및 PWM 갱신 안티와인드업 / 버퍼 시프트 포화 리미터 최댓값 0.95 최솟값 0.0 D[k] PWM 타이머 비교기 주기 50μs 다음 주기 준비 (버퍼 갱신) • y[k-1] ← y[k] • x[k-1] ← x[k] 0.0 ≤ Duty ≤ 0.95 클램핑 와인드업 방지 및 ISR 복귀
1kW 태양광 MPPT 제어기를 위한 20kHz(Ts = 50μs) 오차 샘플링, 직접형 1형식(Direct Form I) 차분 방정식 재귀 연산, 그리고 안티와인드업 포화 한계와 PWM 레지스터 갱신 시퀀스를 나타낸 제어 블록선도입니다.

직접형 재귀 차분 방정식 변환과 1kW급 계수 산출

z 영역 이산 전달함수 G_c(z)는 제어 입력 오차 신호 X(z)에 대한 제어 출력 신호 Y(z)의 비를 나타내는 전달함수입니다. 1편의 식 (5)의 전달함수 정의에 따라 입출력 관계식을 양변의 곱 형태로 정리합니다.

Y⁡(z)·(1+a1·z−1)=X⁡(z)·(b0+b1·z−1)(6)

식 (6)의 좌변과 우변 괄호를 각각 분배 법칙에 따라 전개합니다.

Y⁡(z)+a1·Y⁡(z)·z−1=b0·X⁡(z)+b1·X⁡(z)·z−1(7)

z^-1 연산자는 시간 영역에서 정확히 1 샘플링 주기(T_s) 지연을 의미하므로, 식 (7)의 양변에 역 z 변환(Inverse z-Transform)을 취하면 이산 시간 영역의 차분 방정식을 얻습니다.

y[k]+a1·y[k−1]=b0·x[k]+b1·x[k−1](8)

식 (8)에서 현재 시점 k의 제어 출력 y[k]를 좌변에 남기고 이전 출력 항을 우변으로 이항하면 마이크로컨트롤러 메모리 갱신 구조에 적합한 직접형 1형식(Direct Form I) 재귀식을 완성합니다.

y[k]=−a1·y[k−1]+b0·x[k]+b1·x[k−1](9)

1kW 태양광 MPPT 시스템의 전압 제어기 설계를 위해 비례 게인 K_p는 0.8로 설정하고, 적분 게인 K_i는 200/s로 설정합니다. 전력 변환 스위칭 주파수 20kHz와 완벽히 동기화된 샘플링 주파수 f_s = 20kHz를 적용하면 샘플링 주기 T_s는 50μs(0.00005s)의 값을 갖습니다. 각 계수를 산출하기 위해 1편의 식 (4)와 1편의 식 (5)의 관계식을 적용합니다.

b0=Kp+Ki·Ts2(10)
b1=−Kp+Ki·Ts2(11)

주어진 제어 파라미터를 대입하여 적분 보상 성분을 계산하면 200 * 0.00005 / 2의 계산을 거쳐 0.005의 값을 도출합니다. 식 (10)에 따라 b_0는 0.8 + 0.005를 계산하여 0.805의 수치를 얻습니다. 식 (11)에 따라 b_1은 -0.8 + 0.005를 계산하여 -0.795의 수치를 얻습니다. 분모 계수 a_1은 -1이므로, 산출된 수치 계수를 식 (9)에 대입하여 1kW 태양광 MPPT 제어기용 최종 재귀 차분 방정식을 도출합니다.

y[k]=y[k−1]+0.805·x[k]−0.795·x[k−1](12)

초기 조건 정합과 인터럽트 연산 시퀀스 구현

마이크로컨트롤러 펌웨어에서 식 (12)의 차분 방정식을 실행할 때, 제어기 기동 시점(k = 0)에서 과거 상태 버퍼인 y[-1]과 x[-1]의 초기 조건 정합은 제어 안정성을 결정짓는 핵심 요소에 해당합니다. 만약 변수 선언 시 메모리를 0으로 일괄 초기화한 상태에서 제어기를 즉시 가동하면, 태양광 패널의 개방 전압과 목표 지령 전압 사이의 큰 편차로 인해 첫 번째 제어 주기에서 제어 출력이 급증하고 과도한 전압 스파이크가 발생합니다.

이러한 기동 충격을 방지하기 위해 제어기 인에이블 직전의 정상상태 운전점 초기 듀티비(예: 0.2)를 y[-1] 버퍼에 사전에 대입하고, x[-1] 오차 버퍼는 0으로 정합하여 무충격 기동(Bumpless Start)을 구현해야 합니다. 실제 펌웨어의 인터럽트 서비스 루틴(ISR) 내부에서는 매 50μs 주기마다 다음과 같은 엄격한 시퀀스에 따라 연산을 수행합니다.

첫째, ADC 인터럽트 진입 즉시 태양광 모듈의 입력 전압 V_pv[k]를 측정하고 MPPT 전압 지령 V_ref[k]와의 오차 x[k]를 산출합니다.

x[k]=Vref[k]−Vpv[k](13)

둘째, 산출된 현재 오차 x[k]와 메모리에 저장된 이전 버퍼(y[k-1], x[k-1])를 식 (12)에 대입하여 현재 제어 출력 y[k]를 연산합니다. 셋째, 연산된 y[k]가 PWM 변조 범위인 0에서 0.95 사이를 벗어나지 않도록 포화 한계를 적용하고 적분기 와인드업을 방지합니다. 넷째, 한계 처리된 제어 출력을 하드웨어 타이머의 PWM 비교 레지스터에 기록하여 듀티비를 갱신합니다. 다섯째, 다음 샘플링 주기의 연산을 위해 현재의 제한 출력값을 y[k-1] 버퍼에 저장하고 현재 오차 x[k]를 x[k-1] 버퍼로 갱신한 후 인터럽트를 정상적으로 종료합니다.

맺음말

본 글에서는 1kW급 태양광 MPPT 전압 제어기의 연속시간 PI 모델을 Tustin 쌍일차 변환을 적용하여 직접형 재귀 차분 방정식으로 구현하는 전체 이론과 계산 과정을 명확히 정립하였습니다.

Ki=200s(14)

20kHz 샘플링 주파수(T_s = 50μs)와 제어 게인 K_p = 0.8 및 식 (14)의 적분 게인 조건에서 산출된 이산 계수는 a_1 = -1, b_0 = 0.805, b_1 = -0.795의 수치로 확정합니다.

이산 전달함수의 특성방정식 1 – z^-1 = 0의 극점은 z = 1에 위치하여 단위원(Unit Circle) 경계에 존재하지만, 태양광 플랜트와의 폐루프 결합을 통해 모든 폐루프 극점이 단위원 내부(|z| < 1)로 배치되므로 제어 시스템의 안정도를 완벽하게 확보합니다.

실무 개발 과정에서는 하드웨어 부동소수점 유닛(FPU)이 없는 저가형 고정소수점(Fixed-Point) MCU를 적용할 경우 계수 양자화 오차로 인해 출력 전압에 미세한 진동(Limit Cycle)이 발생할 수 있으므로 Q-포맷 배율 확장을 신중하게 검토해야 합니다. 아울러 제어기 기동 시 과거 출력 버퍼 y[-1]의 초기 조건을 실제 운전점에 일치시키는 정합 절차를 철저히 준수하여 전압 오버슈트와 전력 손실을 사전에 차단해야 합니다.

이 글은 앞선 내용을 몰라도 읽을 수 있게 썼습니다. 배경이 궁금하다면 시간 지연 모델링, 50kW ESS 파데 근사와 위상 여유 계산을 함께 보면 도움이 됩니다: https://www.infoshirimp.co.kr/?p=268

이것으로 시리즈를 마칩니다. 앞선 편들과 함께 읽으면 전체 흐름을 파악할 수 있습니다.

댓글 남기기