Main Content

PMSM의 센서리스 자속 기준 제어

이 예제에서는 3상 영구 자석 동기 모터(PMSM)의 속도를 제어하는 자속 기준 제어(FOC) 기법을 구현합니다. FOC에 대한 자세한 내용은 자속 기준 제어(FOC) 항목을 참조하십시오.

이 예제는 센서리스 위치 추정 기법을 사용합니다. 이 예제에 사용된 FOC 알고리즘을 위한 위치 피드백을 추정하기 위해 슬라이딩 모드 관측기, 자속 관측기 또는 확장 EMF 관측기를 선택할 수 있습니다.

Sliding Mode Observer(SMO) 블록은 측정된 위치와 추정된 위치 사이의 오차에 대해 슬라이딩 모션을 생성합니다. 이 블록은 측정된 위치에 밀접하게 비례하는 추정 값을 생성합니다. 이 블록은 고정자 전압 $({V_\alpha },{V_\beta })$ 및 전류 $({I_\alpha },{I_\beta })$를 입력으로 사용하여 모터 모델의 기전력(EMF)을 추정합니다. 또한 EMF를 사용하여 회전자 위치와 회전자 속도를 추가로 추정합니다.

Flux Observer 블록은 동일한 입력 $({V_\alpha },{V_\beta },{I_\alpha },{I_\beta })$를 사용하여 고정자 플럭스, 생성된 토크, 회전자 위치를 추정합니다.

Extended EMF Observer 블록은 고정자 alpha-beta 기준 프레임에서 측정된 전압과 전류로부터 PMSM의 기계적 속도뿐만 아니라 전기적 위치 ${\theta _e}$(또는 $\sin {\theta _e}$$\cos {\theta _e}$)를 계산합니다.

검출된 회전자 위치의 정확성을 위해, 인버터 보드 저항 값을 모터 블록의 고정자 상 저항 파라미터에 추가하고 Sliding Mode Observer, Flux Observer, Extended EMF Observer 블록의 고정자 저항 파라미터에 추가하십시오.

자속 관측기를 사용하는 경우 이 예제에서는 PMSM 및 브러시리스 DC(BLDC) 모터를 모두 실행할 수 있습니다.

센서리스 관측기와 알고리즘에는 베이스 속도(base speed)를 초과하여 모터를 작동할 경우 알려진 제약이 있습니다. 센서리스 예제는 베이스 속도를 초과하지 않는 작동에 대해서만 사용할 것을 권장합니다.

개루프 제어에서 폐루프 제어로의 전환

폐루프 속도 제어를 사용하여 모터를 구동하려면 실시간 모터 위치를 정확하게 추정해야 합니다. 이 예제에서는 위치 추정을 위해 센서리스 관측기를 사용합니다. 그러나 회전자 위치를 성공적으로 추정하려면 자속 관측기, 슬라이딩 모드 관측기, 확장 EMF 관측기와 같은 센서리스 위치 관측기에 측정 가능한 모터 전류 값과 전압 값이 필요합니다. 센서리스 위치 추정에 필요한 전류와 전압을 생성하려면 개루프 제어를 사용하여 모터를 구동해야 합니다. 센서리스 관측기가 회전자 위치를 성공적으로 추정한 후에 개루프 제어에서 폐루프 제어로의 전환이 발생할 수 있습니다.

하지만 모터 동특성으로 인해 정확한 PI 제어 이득과 기타 파라미터를 확인하기가 어려울 수 있기 때문에 이러한 전환을 성공적으로 완료하는 것이 쉽지 않을 수 있습니다. 이 예제에서는 이러한 전환을 원활하게 달성하기 위한 단순화된 방법을 보여줍니다. 이 방법은 다음 세 단계로 구성됩니다.

  • 개루프 제어를 사용하여 모터를 시동하고 구동합니다.

  • 최대 개루프 속도 제한 값을 사용하여 폐루프로 전환합니다.

  • 폐루프 제어를 사용하여 지정된 기준 속도를 추종합니다.

단계 1: 개루프 제어를 사용하여 모터 시동 및 구동

이 예제에서는 개루프 제어를 사용하여 모터를 시동하고 구동합니다. 개루프 제어를 사용하여 모터를 구동하는 것은 d축 전압(Vd)과 최대 개루프 속도 제한 파라미터에 따라 달라집니다. 이 예제에서 사용하는 Vd의 디폴트 값은 관성이 크거나 마찰이 큰 모터에는 충분하지 않을 수 있습니다. 따라서 Vd의 최소 제한을 높이는 것이 좋습니다. Vd의 최소 제한을 높이면 모터 전류와 모터 온도가 증가하기 때문에 작은 스텝으로 Vd의 최소 제한을 늘리는 것이 좋습니다. 변수 MIN_OL_VD_LIMIT(이 예제와 연결된 모델 초기화 스크립트 mcb_pmsm_foc_sensorless_f28069MLaunchPad_datascript 또는 mcb_pmsm_foc_sensorless_f28379d_datascript에서 사용 가능)를 사용하여 Vd의 최소 제한을 변경합니다.

센서리스 관측기가 회전자 위치를 추종하기 시작하면 이 예제는 단계 2로 이동합니다.

단계 2: 최대 개루프 속도 제한 값을 사용하여 폐루프로 전환

이 단계에서 센서리스 관측기가 Vd에 대응하는 최소 전류 값(Id)을 사용하여 회전자 위치를 성공적으로 추정하는지 확인할 수 있습니다.

  • 이 예제에서는 최대 개루프 속도 제한(모델 초기화 스크립트에서 사용 가능한 MAX_OL_POS_SPD 변수 또는 MAX_OL_NEG_SPD 변수로 정의됨)을 사용하여 모터를 구동하면서 이 단계를 시작합니다.

참고: 이 예제에서 회전자 위치를 성공적으로 추정하기 위해 충분한 전류(Id)가 생성되도록 MAX_OL_POS_SPD 값과 MAX_OL_NEG_SPD 값을 조정할 수 있습니다.

  • 센서리스 관측기가 실시간 회전자 위치 값을 성공적으로 계산하는지 확인합니다.

  • 그런 다음, 이 예제에서는 d축 전류(Id), q축 전류(Iq), 속도 PI 제어기를 초기화하여 폐루프 자속 기준 제어(FOC)를 활성화합니다. 모델 초기화 스크립트에서 PI 제어기에 대한 초기 변수 값(Iq, Vd, Vq)을 설정해야 합니다.

이 예제에서는 서브시스템 State Machine Handler/Compute Control-loop Initial Values를 사용하여 Iq, Vd, Vq의 디폴트 초기값을 계산합니다. 또한 PI 제어 루프 내에서 사용 가능한 계산된 초기값을 활용합니다.

이 예제에서는 Id, Iq, 속도 PI 제어기가 처음으로 활성화될 때 제어기의 초기값이 변경되지 않은 채로 남아 있도록 합니다. 이러한 세 개의 PI 제어 루프 내에서 사용 가능한 적분기는 초기값 ${y_0} = {y_{t - 1}} - {K_p} \times error$를 사용합니다(여기서 ${y_{t - 1}}$은 이전 값이고 ${K_p}$는 제어기 이득임).

  • 그런 다음, 이 예제에서는 Stateflow를 사용하여 전류 Id를 현재 측정된 값에서 0까지 점진적으로 낮춥니다.

참고: 폐루프로 전환된 후에는 (센서리스 관측기를 통해 추정한) 회전자 위치, (0으로 설정된) 기준 Id 전류, (속도 제어 루프에서 구한) 기준 Iq 전류를 직접 사용할 수도 있습니다. 그러나 이 접근법을 사용하면 센서리스 위치 추정기의 출력값을 왜곡하는 전류 과도가 발생합니다. 원활한 전류 전환이 이루어지도록 하기 위해 이 예제에서는 전류 Id를 0까지 점차 낮춥니다. 모델 초기화 스크립트에서 사용 가능한 변수 RAMP_STEP_SIZE를 사용하여 Id 전류가 점차 낮아지도록 감소 속도를 설정할 수 있습니다(이 작업은 Stateflow에서 수행됨)

단계 3: 폐루프 제어를 사용하여 지정된 기준 속도 추종

이 예제는 Id를 0까지 점차 낮춘 후 이 단계로 진입합니다. 여기서는 FOC 알고리즘을 사용해서 지정된 폐루프 기준 속도를 추종하여 모터를 구동합니다.

참고: 모터 방향을 바꾸기 위해 Stateflow는 모터 속도를 현재의 폐루프 속도에서 최대 개루프 속도 제한값으로 변경하여 개루프 모드로 전환합니다. 그런 다음 개루프 작동 중에 모터 방향을 바꾸고, 그 후에 다시 폐루프 제어로 전환하고 기준 속도를 추종합니다. 모터 동특성으로 인해 소요되는 추가 시간을 활용하고 Stateflow에서 지연을 감당하도록 조정할 수 있습니다.

모델

이 예제에는 다음 모델이 포함됩니다.

이들 모델을 시뮬레이션과 코드 생성에 모두 사용할 수 있습니다.

여러 다른 하드웨어 구성에 사용 가능한 모델의 이름은 "코드를 생성하고 타깃 하드웨어에 모델 배포하기" 섹션의 "필수 하드웨어" 항목을 참조하십시오.

필요한 MathWorks 제품

모델을 시뮬레이션하려면:

1. 모델: mcb_pmsm_foc_sensorless_f28069MLaunchPad

  • Motor Control Blockset™

  • Fixed-Point Designer™

  • Stateflow®(예제 모델을 수정하는 경우에만 필요함)

2. 모델: mcb_pmsm_foc_sensorless_f28379d

  • Motor Control Blockset™

  • Stateflow(예제 모델을 수정하는 경우에만 필요함)

코드를 생성하고 모델을 배포하려면:

1. 모델: mcb_pmsm_foc_sensorless_f28069MLaunchPad

  • Motor Control Blockset™

  • Embedded Coder®

  • C2000™ Microcontroller Blockset

  • Fixed-Point Designer™

  • Stateflow(예제 모델을 수정하는 경우에만 필요함)

2. 모델: mcb_pmsm_foc_sensorless_f28379d

  • Motor Control Blockset™

  • Embedded Coder®

  • C2000™ Microcontroller Blockset

  • Fixed-Point Designer™(최적화된 코드 생성에만 필요함)

  • Stateflow(예제 모델을 수정하는 경우에만 필요함)

선행 조건

1. 모터 파라미터를 가져오십시오. Simulink® 모델에는 디폴트 모터 파라미터가 제공되며, 이를 모터 데이터시트나 다른 소스의 값으로 바꿀 수 있습니다.

하지만 모터 제어 하드웨어를 가지고 있다면 Motor Control Blockset 파라미터 추정 툴을 사용해서 해당 모터의 파라미터를 추정할 수 있습니다. 자세한 지침은 Estimate PMSM Parameters Using Recommended Hardware 항목을 참조하십시오.

파라미터 추정 툴은 (MATLAB® 작업 공간에 있는) motorParam 변수를 추정된 모터 파라미터로 업데이트합니다.

2. 데이터시트나 기타 소스에서 모터 파라미터를 가져오는 경우에는 Simulink® 모델과 연결된 모델 초기화 스크립트에서 모터 파라미터와 인버터 파라미터를 업데이트하십시오. 자세한 지침은 Estimate Control Gains and Use Utility Functions 항목을 참조하십시오.

파라미터 추정 툴을 사용하는 경우 인버터 파라미터를 업데이트할 수 있지만, 모델 초기화 스크립트의 모터 파라미터는 업데이트하지 마십시오. 스크립트가 업데이트된 motorParam 작업 공간 변수로부터 모터 파라미터를 자동으로 추출합니다.

파라미터 추정 툴을 사용하여 추정된 모터 파라미터와 함께 Sliding Mode Observer를 사용하는 경우 Sliding Mode Observer 파라미터를 조정해야 합니다.

모델 시뮬레이션하기

이 예제는 시뮬레이션을 지원합니다. 다음 단계에 따라 모델을 시뮬레이션합니다.

1. 이 예제에 포함된 타깃 모델을 엽니다.

2. Position Estimator 버튼을 사용하여 다음 센서리스 위치 추정 기법 중 하나를 선택합니다.

3. 모델을 시뮬레이션하려면 시뮬레이션 탭에서 실행을 클릭합니다.

4. 시뮬레이션 결과를 보고 분석하려면 시뮬레이션 탭에서 데이터 인스펙터를 클릭합니다.

코드를 생성하고 타깃 하드웨어에 모델 배포하기

이 섹션은 코드를 생성하고 타깃 하드웨어에서 FOC 알고리즘을 실행하기 위한 지침을 제공합니다.

이 예제는 호스트 모델과 타깃 모델을 사용합니다. 호스트 모델은 제어기 하드웨어 보드에 대한 사용자 인터페이스입니다. 호스트 모델은 호스트 컴퓨터에서 실행할 수 있습니다. 호스트 모델을 사용하기 위한 선행 조건은 타깃 모델을 제어기 하드웨어 보드에 배포하는 것입니다. 호스트 모델은 직렬 통신을 사용하여 타깃 Simulink® 모델에 명령을 내리고 폐루프 제어에서 모터를 실행합니다.

필수 하드웨어

이 예제는 다음 하드웨어 구성을 지원합니다. MATLAB® 명령 프롬프트에서 타깃 모델 이름을 사용하여 해당 하드웨어 구성의 모델을 열 수도 있습니다.

위의 하드웨어 구성과 관련된 연결은 LAUNCHXL-F28069M and LAUNCHXL-F28379D Configurations 항목을 참조하십시오.

코드 생성 및 타깃 하드웨어에서 모델 실행

1. 타깃 모델을 시뮬레이션하고 시뮬레이션 결과를 관찰합니다.

2. 하드웨어 연결을 완료합니다.

3. 모델이 아날로그-디지털 컨버터(ADC) 또는 전류 오프셋 값을 자동으로 계산합니다. 이 기능(기본적으로 활성화되어 있음)을 비활성화하려면 모델 초기화 스크립트에서 변수 inverter.ADCOffsetCalibEnable을 값 0으로 업데이트하십시오.

또는 ADC 오프셋 값을 계산하고 모델 초기화 스크립트에서 수동으로 업데이트할 수 있습니다. 자세한 지침은 개루프 제어에서 3상 AC 모터를 구동하고 ADC 오프셋 보정하기 항목을 참조하십시오.

4. 사용하려는 하드웨어 구성의 타깃 모델을 엽니다. 모델의 디폴트 하드웨어 구성 설정을 변경하려면 Model Configuration Parameters 항목을 참조하십시오.

5. 샘플 프로그램을 LAUNCHXL-F28379D의 CPU2에 불러옵니다. 예를 들어, GPIO31을 사용하여 CPU2 파란색 LED를 작동하는 프로그램(c28379D_cpu2_blink.slx)을 불러옴으로써 CPU2가 의도치 않게 CPU1용 보드 주변 기기를 사용하지 않도록 합니다. 샘플 프로그램 또는 모델에 대한 자세한 내용은 Getting Started with Texas Instruments C2000 Microcontroller Blockset (C2000 Microcontroller Blockset)의 "작업 2 - TI Delfino F28379D LaunchPad(Dual Core)용 모델 생성, 구성 및 실행" 섹션을 참조하십시오.

6. Position Estimator 버튼을 사용하여 센서리스 위치 추정 기법을 선택합니다.

7. Hardware 탭에서 빌드, 배포, 시작을 클릭하여 타깃 모델을 하드웨어에 배포합니다.

8. 타깃 모델에서 host model 하이퍼링크를 클릭하여 연결된 호스트 모델을 엽니다.

호스트 모델과 타깃 모델 간의 직렬 통신에 대한 자세한 내용은 Host-Target Communication 항목을 참조하십시오.

9. 타깃 모델과 연결된 모델 초기화 스크립트에서 변수 target.comport를 사용하여 통신 포트를 지정합니다. 이 예제에서는 이 변수를 사용하여 호스트 모델에서 사용할 수 있는 Host Serial Setup, Host Serial Receive, Host Serial Transmit 블록의 Port 파라미터를 업데이트합니다.

10. 호스트 모델에서 Reference Speed 값을 업데이트합니다.

참고:

  • (Sliding Mode Observer, Flux Observer 또는 Extended EMF Observer를 사용하여) 필요한 Reference Speed로 모터를 구동하기 전에 개루프 제어를 사용하여 0.1 x pmsm.N_base 속도로 모터 구동을 시작하십시오. 그런 다음 속도를 0.25 x pmsm.N_base(여기서 pmsm.N_base는 모터의 베이스 속도에 대한 MATLAB 작업 공간 변수임)로 늘려 폐루프 제어로 전환합니다.

  • 가속과 감속의 값을 높게 설정하면 센서리스 위치 계산에 영향을 미칠 수 있습니다.

11. 시뮬레이션 탭에서 실행을 클릭하여 호스트 모델을 실행합니다.

12. Start / Stop Motor 스위치의 위치를 On으로 변경하여 개루프 조건에서 모터 구동을 시작합니다(기본적으로 모터는 베이스 속도의 10%로 회전함).

참고: (이 예제를 사용하여) 모터를 개루프 조건에서 장시간 구동하지 마십시오. 모터가 높은 전류를 소비해 과도한 열이 발생할 수 있습니다.

개루프 제어는 베이스 속도의 10%보다 작거나 같은 Reference Speed로 모터를 구동하도록 설계되었습니다.

하드웨어에서 Reference Speed를 낮은 값으로 설정한 상태에서 이 예제를 실행할 경우 알려진 문제로 인해 PMSM이 낮은 Reference Speed를 추종하지 않을 수 있습니다.

13. 모터의 Reference Speed를 베이스 속도의 10%를 넘는 값으로 지정하여 개루프 제어에서 폐루프 제어로 전환합니다.

참고: 모터의 회전 방향을 변경하려면 모터의 Reference Speed를 베이스 속도의 10%보다 작은 값으로 줄이십시오. 그러면 모터가 개루프 조건으로 다시 돌아갑니다. 회전 방향을 변경하되 Reference Speed 크기는 일정하게 유지합니다. 그런 다음 폐루프 조건으로 전환합니다.

14. 호스트 모델의 시간 스코프에서 RX 서브시스템의 디버그 신호를 관찰합니다.

참고:

  • 기준 속도와 기준 토크의 값이 높으면 Sliding Mode Observer 블록 성능에 영향을 미칠 수 있습니다.

  • F28379D 기반 제어기를 사용하는 경우 모니터링하려는 디버그 신호를 선택할 수도 있습니다.

기타 시도해 볼 작업

SoC Blockset™으로 센서리스 폐루프 모터 제어를 위한 응용 사례를 구현하여 ADC-PWM 동기화, 제어기 응답, 다양한 PWM 설정 연구와 관련한 과제를 해결해 볼 수 있습니다. 자세한 내용은 Integrate MCU Scheduling and Peripherals in Motor Control Application 항목을 참조하십시오.

또한 SoC Blockset™으로 센서리스 실시간 모터 제어 개발을 통해 복수의 프로세서 코어를 사용해서 설계를 모듈화하고, 제어기 성능을 개선하고, 다양한 설계 목표를 달성해 볼 수 있습니다. 자세한 내용은 Partition Motor Control for Multiprocessor MCUs 항목을 참조하십시오.