전기전자 배우기

매트랩으로 PWM 파형 만들기

빅우람 2022. 9. 15. 23:01
728x90

안녕하세요. 이번에 쓸 글은 MATLAB으로 PWM 파형 만들기 입니다!

원래 전력 시뮬레이션은 PSIM이나 Orcad를 많이들 사용하시죠?

저는 지금까지 PSIM을 주로 사용했었습니다.

 

그런데 최근 회사에서 MATLAB을 사용해서 전력 시뮬레이션도 하게 되어서 MATLAB 공부를 하고 있어요.

Simulink를 활용해서 PSIM처럼 시뮬레이션을 진행하기 위해 공부하고 있습니다!(근데 엄청 느리네요...컴퓨터가 구린건지...)

그래서 제가 공부한 내용을 올리면서 제 정리도 되고 다른 분들에게 도움이 될 수 있으면 좋을 것 같다는 생각에 MATLAB simulink 사용 내용들을 작성해보려고 해요!

매트랩은 뭔가 설명을 봐도 어렵고...그러더라구요...

내용은 어렵지 않고 대부분 아시는 회로나 구성으로 매트랩을 진행해서 좀 쉽게 내용이 전달될 수 있도록 해보려 합니다.

 

첫번째 글은 위에서도 말씀드렸지만, 단순하게 PWM 파형을 만드는 것 입니다.

순서는 아래와 같습니다.

 

1. PWM을 만들기 위한 구조

2. MATLAB simulink를 활용하여 PWM 생성 구조 만들기

3. 진행 중 발생한 문제

4. 해결 방법

5. 결론

 

1. PWM을 만들기 위한 구조

매트랩으로 PWM을 만들기 위해 사용한 방법은 아래 사진과 같이 삼각파와 reference파형을 비교하여 생성하는 방법을 사용했습니다.

많은 분들이 이미 알고 계실것이고 모르시는 분이라도 쉽게 이해하실 수 있는 구조입니다.

삼각파와 ref를 비교하여 PWM 생성

 

아래 사진은 삼각파와 reference파형(앞으로 간단하게 ref로 표기하겠습니다.)을 비교하여 PWM 파형이 생성되는 파형입니다.

일정한 주파수를 갖는 삼각파에 ref파형을 비교하여 삼각파의 값보다 ref 파형의 값이 더 클때 출력파형을 내는 구조 입니다.

아래 사진의 보라색이 삼각파와 ref가 만나는 지점들이고 해당 지점을 기점으로 출력 파형(빨간색 파형)이  나타나게됩니다.

삼각파(파란색)과 ref파형(노란색)을 이용하여 PWM 파형(발간색) 생성

해당 구조를 활용하여 매트랩으로 시뮬레이션을 진행해보도록 하겠습니다.

 

2. MATLAB simulink를 활용하여 PWM 생성 구조 만들기

다음은 위의 구조를 MATLAB simulink로 만들어 볼 것 입니다.

아래 사진은 MATLAB simulink를 활용해서 만든 PWM 생성 구조 입니다.

해당 구조에 사용된 simulink 라이브러리에 대해 설명하겠습니다.

MATLAB simulink를 활용한 PWM 생성 구조

1) Triangle Generator(삼각파 발생기)

우선 Triangle Generator(삼각파 발생기)입니다.

해당 라이브러리는 말 그대로 삼각파를 출력해주는 간단한 소스입니다. 해당 라이브러리를 모델에 생성하고 이를 더블클릭하게 되면 주파수, 위상, 샘플타임설정할 수 있습니다. 

https://kr.mathworks.com/help/physmod/sps/powersys/ref/trianglegenerator.html?searchHighlight=triangle%20generator&s_tid=srchtitle_triangle%20generator_2

하지만 해당 라이브러리는 0을 기준으로 ±1의 삼각파를 발생시킵니다.(위의 파형 참고)

일반적으로 비교하는 ref파형의 값양의 값을 갖고 있습니다.

그렇기 때문에 PWM을 만드는 구조에서 보면 삼각파의 최저 값은 0입니다. 그렇기 때문에 라이브러리 Add와 Constant를 사용합니다.

 

2) Add

해당 라이브러리는 매우 간단합니다. 더하기, 빼기를 연산하는 라이브러리입니다.

아래 MATLAB 홈페이지에 나와있는 모양은 동그란 모양인데 위의 설계한 구조는 사각형입니다. 이는 속성에서 바꿀 수 있습니다.

https://kr.mathworks.com/help/simulink/slref/add.html?searchHighlight=add&s_tid=srchtitle_add_1

 

3) Constant

말 그대로 상수이다. 1이든 2든 원하는 상수값을 사용하게 해주는 라이브러리입니다.

본문에서는 삼각파의 값을 1 증가시켜주기 위하여 사용했으므로 1을 사용했습니다.

https://kr.mathworks.com/help/simulink/slref/constant.html?searchHighlight=constant&s_tid=srchtitle_constant_1

4) Gain

Gain은 입력 값정해진 상수만큼 곱해주는 것 입니다.

기존 삼각파에 1을 더한 출력을 보면, 삼각파는 y축의 값 1을 기준으로 0~2값의 출력 파형을 갖게 됩니다.

제가 사용한 구조의 경우 ref값이 0~1의 값을 갖도록 했습니다. 때문에 삼각파도 0~1의 값을 갖는 파형으로 만들어주어야 합니다.

결국 0.5 gain을 줌으로써 삼각파의 파형은 0~1의 값을 갖도록 만들 수 있습니다.

https://kr.mathworks.com/help/simulink/slref/gain.html?searchHighlight=gain&s_tid=srchtitle_gain_1

5) Saturation

Saturaion은 입력값의 상한과 하한을 정해서 출력이 설정한 상한과 하한을 넘지 않도록 해주는 라이브러리 입니다.

위의 구조는 Saturation이 없어도 되는 구조 입니다. 해당 구조에서 나올 수 있는 상한은 1 하한은 0이기 때문입니다.

근데 제가 해당 라이브러리를 추가한 이유는 Saturation이라는 라이브러리의 역할을 알아보고자 넣었습니다.

Saturation 상한을 0.9로 설정하여 y값이 0.9로 나오는 것을 확인할 수 있습니다.

 

https://kr.mathworks.com/help/simulink/slref/saturation.html?searchHighlight=saturation&s_tid=srchtitle_saturation_1

 

3. 진행 중 발생한 문제

원래라면 위의 구조대로 시뮬레이션을 진행하면 삼각파와 ref파형이 비교된 출력값이 PWM으로 나와야합니다.

그러나 위의 상태로 시뮬레이션을 진행하면 아래 사진과 같이 오류가 발생하게 됩니다.

정확히 어떠한 오류인지는 모르겠으나 각 라이브러리 앞에 double, boolean이라는 것이 생겼습니다.

아래 파란색으로 표기된 오류의 원인을 보면 데이터 타입이 반드시 설정되어야 한다라고 써있습니다.

 

시뮬레이션 진행 시 발생한 오류 화면

4. 해결 방법

그래서 relational operator(비교기) 라이브러리의 설명을 찾아보니 아래와 같이 되어 있습니다.

아래 두번째 사진을 보면 하단 파란색으로 표기한 것처럼, 해당 라이브러리를 사용할 때 출력 데이터 파라미터를 설정해줘야한다. 라고 써있습니다. 그렇기 때문에 비교기 라이브러리 출력단에는 데이터 타입을 설정해줘야 시뮬레이션 진행이 됩니다.

https://kr.mathworks.com/help/simulink/slref/relationaloperator.html?searchHighlight=relational%20operator&s_tid=srchtitle_relational%20operator_1
https://kr.mathworks.com/help/simulink/slref/relationaloperator.html?searchHighlight=relational%20operator&s_tid=srchtitle_relational%20operator_1

 

위의 문제를 해결하고자 비교기 출력단데이터 타입 double을 사용했고 해당 회로는 아래와 같습니다.

비교기 출력단에 double 추가

수정된 회로로 시뮬레이션을 진행하니 정상적으로 동작하고 아래와 같이 제가 원하는 파형을 얻을 수 있었습니다.

노란색 파형은 삼각파이고 파란색이 ref파형입니다. 두개의 비교를 통해 초록색의 PWM파형을 얻을 수 있었습니다.

삼각파와 ref파형을 통해 얻은 PWM파형 결과

 

5. 결론

이번 글에서는 삼각파와 ref파형을 통해 PWM 파형을 출력하는 구조를 매트랩 simulink를 통해 구현해보았습니다.

전력전자를 수행하면 PWM 파형을 사용하는 것은 기본이기 때문에 처음 진행하는 매트랩 simulink 시뮬레이션 구조로 사용했습니다.

 

해당 구조는 간단하고 쉽게 이해할 수 있어서 많은 분들이 알고 계실거고 모르고 계셨다해도 쉽게 이해하실 수 있었을 것 입니다.

 

해당 구조 시뮬레이션을 진행하면서 매트랩 비교기를 사용할 때 출력 데이터 타입을 설정해줘야하는 것은 처음 알았네요.

저와 같이 처음 매트랩 시뮬링크를 진행하는데 이와 같은 어려움을 겪고 있는 분들에게 도움이 되면 좋겠습니다.

 

긴 글 읽어주셔서 감사합니다.

모두 좋은 하루되세요~