본문 바로가기
Embedded SW/Control Theory

DAQ? Data Acquisition? DC모터 전달함수의 K와 Tau 값을 계산, 확인하는 방법 정리

by 방구석 임베디드 2022. 9. 24.
반응형

안녕하세요.

지금 저는 계속 제어에 대한 글을 적고 있습니다.

이 글은 계속 연제되는 글이며

 

아래와 같이 미리 보고 오시면 좋은 글이 있으니, 참고해 주세요.

 

1) 제어란 무엇인가?

https://embeddedchallenge.tistory.com/475

2) 매트랩이란? 매트랩 학생용 다운로드 및 라이센스 받는 방법

https://embeddedchallenge.tistory.com/477

3) 매트랩 기초 연습 (행렬 연산, 데이터 나누기, 그래프 그리기)

https://embeddedchallenge.tistory.com/478

4) 지수함수, 모터 모델링, 전달함수, 시간함수 정리

https://embeddedchallenge.tistory.com/479

5) DC모터 모델링, 매트랩 전달함수 생성 후 그래프 확인

https://embeddedchallenge.tistory.com/480

6) Simulink를 이용한 전달함수 시뮬레이션 수행 방법 정리

https://embeddedchallenge.tistory.com/481

 

이제 본격적으로 DC 모터를 모델링 하려고 합니다.

앞서서 제어가 무엇이고

제어를 수행해기 위해서 매트랩을 깔아야하며

매트랩의 기본 기능을 익혀 보았습니다.

또한 DC모터를 미분방정식으로 나타내어

DC모터를 수식화하였고

input에 따른 output을 함수(전달함수)의 형태로 만들어 보았습니다.

 

결국 아래와 같은 DC모터를

아래와 같이 수식화 하였습니다.

이 함수는 전달함수로

아래와 같이 DC전압을 주었을때, 속도에 대해 응답을 예측할수 있는 함수입니다.

따라서, 모터의 수식화는 하였지만

위의 모터이 파라미너 K와 tau는 아직 찾지 못하였습니다.

물론 저 파라미터는 모터종류에 따라 달라질 것입니다.

 

결국 이렇게 수식화된 모터의 

파라미터를 찾기 위해

역으로 결과 데이터가 필요합니다.

 

즉, DC전압에 따른 속도 Data를 알고 있다면

이 계측결과를 기반으로

K와 tau를 찾을 수 있습니다.

 

그러면 지금 사용하고 있는 모터의 모델링이 완성이 되는 것입니다.

 

우리는 지금까지 이 모터의 모델함수를 찾기 위해 엄청난 노력을 하였습니다.

제어에서 가장 중요한 부분이 바로 이 모델함수를 찾는 것입니다.

 

그런데 왜 우리는 이 모델함수를 찾기 위해 노력하는 것일까요?

바로 제어기를 만들기 위함입니다.

결국, 지금 우리가 모터 모델을 만든것은

바로 Processor입니다.

저 수식에

제어이론을 기반으로 제어기를 만들어서 

우리는 응답 조건을 우리가 원하는데로 변경을 할 수 있습니다.

즉, 속도에 대한 응답시간을 더 빠르게 가질수도 있으며

제어 목표에 맞게 모터속도를 제어할수도 있습니다.

그리고, 무엇보다도 모터가 급발진(발산)하는 것을 막기위하여

안전한 제어기 설계를 증명할수도 있습니다.

 

그렇다면 이제 모터 모델의 파라미터

K와 tau를 구해보도록 하겠습니다.

그렇기 위해서 먼저 모터의 속도를 계측해야 합니다.

그리고 모터의 속도를 계측하기 위해서는

엔코더라는 것이 필요합니다.

 

모터의 속도를 측정하는 글을 예전에 쓴것이 있는데 참고해 주세요.

1) Aurix (TC23x) DC모터를 Encoder를 통해 속도 측정

https://embeddedchallenge.tistory.com/45

2) Aurix (TC23x) SerialPlot을 이용하여 계측환경 구성

https://embeddedchallenge.tistory.com/46

3) Aurix (TC23x) DC모터를 속도 측정 값을 그래프로 확인
https://embeddedchallenge.tistory.com/47

 

이러한 방법으로 우리는 Data를 획득할수 있습니다.

왼쪽이 시간입니다.

그리고 오른쪽이 Encoder로 획득한 RPM값입니다.

여기서 RPM은 Revolution Per Minute

의 약자로서, 1분동안 바퀴가 회전하는 수입니다.

이 계측은

Duty 72%에서 Duty 74%로 변경을한 경우입니다.

MCU는 아날로그로 전압을 변경해서 주지 못합니다.

따라서 5V 일때 최대 속도를 내는 모터라면

Duty 100%일대 5V인것입니다.

하지만 Duty 72%라는 말은

5Vx 0.73 = 3.65V 를 내고 있다고 생각하시면 됩니다.

PWM에 대해서 더 궁금하신 분은 아래 글을 참고해 주세요.

https://embeddedchallenge.tistory.com/232

 

결국 지금 input은 DC전압이 아니라 Duty값이 되겠네요.

그리고 Output값은 RPM이 되는 것입니다.

이것을 메트랩을 이용하여 그래프를 그려보면 아래와 같습니다.

지금 Duty 72% 에서 Duty 74%로 변경한 경우입니다.

이때 RPM은 126RPM에서 215RPM으로 변하고 있는것을 알 수 있습니다.

그렇다면 우리는 K를 먼저 아래와 같이 구할 수 있습니다.

그리고 아래 그림은 모터엔코더를 통해 계측한 데이터를 시간으로

그림을 그린것입니다.

보이시나요?

이 그림을 통해서 우리는 Tau를 알아낼수 있습니다.

 

그렇다면 어떻게 Tau값을 알아낼수 있을까요?

저 그림에서 t1은 10.5초 입니다.

저 순간 Duty를 72%에서 74%로 변경을 한것입니다.

StepTime = 10.05;
importfile1('data.txt');
Time = (data(:,1) - data(1,1));
EndTime = max(Time);
RPM = (data(:,3));

.Time은 위에서 계측한 정보의 시간 Data입니다.

RPM은 위에서 계측한 정보의 RPM 정보입니다.

EndTime은 당연히 마시막 시간이 되겠네요.

Tau는 응답되는 RPM의 값이 63.2%가 되는 지점입니다.

따라서 RPM 126에서 215로 변하는 과정의 63.2%입니다.

따라서 RPMtau는 

126 + (215-126)x0.632 = 182.248가 됩니다.

 

Tau를 구하는 수식은 아래와 같습니다.

그러면 이제 tau를 구해 보도록 하겠습니다.

그렇다면 RPMi와 RPMi+1 을 알아야 합니다.

RPMi와 RPMi+1 사이에 182.248이 있어야 합니다.

이때가 되겠네요.

그리고 ti = 10.91

ti+1 = 10.92가 되겠네요. ㅎㅎ

그리고 t1 = 10.05

 

드디어 수식이 다 정해졌습니다.

tau = (182.248 - 176) * (0.01) / (183 - 176) + 10.91 - 10.05 

tau = 6.248 * 0.01 /7+ 10.91 - 10.05 

tau = 0.86

 

TauRPM = (MeanEnd - MeanStart) * 0.632 + MeanStart;
flag = 0;

for i = 1:DataLength
    if ( (RPM(i,1) < TauRPM) && (RPM(i+1,1) > TauRPM) && (flag == 0) )
        Tau = (TauRPM - RPM(i,1)) * (Time(i+1,1) - Time(i,1) ) / (RPM(i+1,1) - RPM(i,1)) - StepTime + Time(i,1);
        flag = 1;
    end
end

위와 같이 매틀랩으로 계산을 하니까

0.868이 나오네요

정학히 맞죠? 

ㅎㅎ

드디어 모델을 구했습니다.

이제부터 제어를 한번 알아보도록 하겠습니다!!

반응형

댓글