강좌 순서

1. MATLAB 각 Window 사용법 [바로가기]
2. M-File을 사용한 기초연산법 및 데이터의 그래픽 출력 [바로가기]
3. 데이터의 3D 출력 [바로가기]
4. 조건문 및 반복문의 사용. 에러대비 [바로가기]
5. Simulink의 기초 [바로가기]
6. Simulink의 기초 2 [바로가기]
7.  Function 문의 사용 [바로가기]
8. 동역학 시뮬레이션하기 [바로가기]
9. 애니메이션 구현하기 [바로가기]
10. 애니메이션을 이용한 동역학 시뮬레이션하기 [바로가기]
11. LQR 툴박스를 사용하여 제어기 구현하기 [바로가기]
12. GUI 시작하기 - Static, Edit Text 및 Push Button [바로가기]
13. GUI - Slider 사용하기 [바로가기]
14. GUI - List Box와 Pop-up Menu [바로가기]
15. GUI - Check Box와 Radio Button [바로가기]
16. GUI - 종합 예제 [바로가기]

본 강좌에 사용되는 MATLAB은 버젼 7.9.0 (R2009b)을 대상으로 합니다.





   Structure 데이터 유형 !  
 

MATLAB도 Structure 데이터 유형을 가지고 있습니다. 닷(.)으로 표현하게 되는데요.

 
빈 행렬을 하나 만들고, 

 
위와 같이 입력하면

 
이렇게 structure 형태로 저장이 됩니다. 확인할때는 A.data 이렇게 호출해서 사용하게 됩니다.  나중에 simulink의 데이터를 workspace에 저장할때 사용할 거라 미리 설명합니다.^^




   Fcn 블럭과 Gain 블럭 !  
 

먼저


위 식을 simulink로 구현해서 출력 y를 확인해보도록 하죠.

 
복잡하게 sin블럭을 두개 꾸미지 말고 Fcn블럭을 사용해서 간단히 꾸며보는 겁니다. 위 Fcn블럭의 내용은

 
Fcn블럭을 더블클릭해서 위와 같이 적어주면 됩니다. u[1]은 첫번째 입력이라는 뜻인데, 우리는 입력이 하나뿐이라 그냥 u[1]이라고 적어주면 됩니다. 그러면

 
실행해보면 위의 결과를 얻을 수 있습니다.

다음으론 미분방정식을 한번 시뮬레이션을 해보겠습니다.


바로 위 식인데요. 이와 같은 미분방정식의 시뮬레이션은 적분기(integrator)를 사용합니다. 


위와 같이 꾸며주는 거죠. 적분기를 두개 통과한 Scope 바로 앞의 신호는 x가 되고 두 적분기 사이의 신호는 dot_x가 되는 겁니다. 위 미분방정식과 블럭의 구조가 이해가 되어야만 합니다.

Gain1 블럭의 방향이 반대죠? 저렇게 방향을 바구는 것은 Ctrl+R키를 누르거나 블럭에서 우클릭으로 나타나는 팝업에서 Rotation을 찾아가면 ClockWise라는 항목이 있습니다. 그러면 90도씩 회전합니다. 그리고 Sum 블럭을 보시면

 
위와 같이 "|--"로 입력했는데요. "|"기호는 빈공간입니다. 모양을 맞춰주는 거지요. 

위와 같이 구현하기도 하고, 저는 위의 방법보다는


이렇게 구현하는 것을 더 좋아합니다. 제일 왼쪽의 demux블럭의 1번은 x를 2번은 dot_x를 입력하도록 하고 Fcn블럭에 넣어두는 거지요.


그리고 나서 Fcn 블럭에다 위와 같이 입력해 두면 애초 제가 의도하는 형태의 미분방정식이 완성되는 겁니다.


이 상태로 플레이버튼을 누르면, 즉 시뮬레이션을 실행하면 그냥 '0'에 가만히 있습니다.저 표시된 블럭을 더블클릭해서 초기치를


좀 주고 시뮬레이션을 해야합니다.^^


결과입니다.




   Simulink 데이터의 Workspace 저장 !  
 

Simulink에서 실행되어 생성된 데이터를 workspace에 저장하는 것은 To Workspace라는 블럭이 따로 준비되어 있습니다.

 
위에서처럼 연결해주고, To Workspace 블럭을 더블클릭해서 보면

 
저장될 변수명을 선택할 수 있는데요. 그리고 Save Format이라는 항목에서 Structure로 되어있는 부분이 보이실텐데요. 여기에 들어가서


Structure With Time으로 변경하시면 시간도 같이 저장됩니다. 그리고 다시 실행하시면


Workspace에 simout이라는 변수로된 데이터가 하나 나타났음을 볼 수 있습니다. 예가 Struct 구조에요.


내용은 위와 같구요. time이라는 변수에 시간이 signals를 다시 더블클릭해서 보시면


values에 원하는 데이터가 들어가 있습니다.


위와 같이 plot명령으로 깨끗한 그래프를 얻을 수 있습니다. 일일이 저렇게 그림을 얻는 것이 싫다면

Annotation을 이용해서 한 mdl화일에 두실 수도 있습니다. => 참조자료

그리고, To workspace 블럭보다 저는 그냥 scope의 기능을 이용하는 것을 좋아하는데요.


위에서 표시된 부분을 클릭해보시면


나타나는 창에서 Data History 탭을 선택하세요


위에 표시된 부분은 데이터의 표시개수입니다. 보통은 해제해서 사용합니다. 그리고


위의 표시된 부분을 보시면 To Workspace 블럭과 같다는 것을 확인 할 수 있습니다. 디폴트로 된 이름만 다르네요^^ 





참고자료



http://pinkwink.kr/trackback/272 관련글 쓰기
  • 2010/03/21 22:45

    비밀댓글입니다

    • PinkWink 2010/03/22 03:53

      이상한 내용으로
      교수님께 누가 되진 않을지 오히려 걱정됩니다...^^

  • 엘리 2010/04/19 09:52

    x''=-2x'-x를 라플라스 한후 왜 simulink 그렇게 나오는지......
    왜 적분이.....ㅡㅜ
    기초가 없어서....돼지목에 진주ㅠㅠ

    • PinkWink 2010/04/19 10:24

      응? 제가 어디서 라플라스 변환이라고??? 했을까요?? ㅎㅎ

      물론 라플라스의 형태이긴 합니다만...(1/s을 쓰고 있으니)
      그냥 미방을 1/s(적분기)를 이용해 표현한 거라고 생각하시는게 더 편합니다.^^

      --'1'---1/s---'2'------1/s----'3'----

      에서 '1'은 ddot_x
      '2'는 dot_x
      '3'은 x

      입니다. 그래서 '1'의 위치를 기준으로 보면

      ddot_x = -2 dot_x -x 라는 식이 표현완료된것이지요

      결국 다시 x를 관찰하고 싶어서 '3'의 위치에서 scope를 연결한 것입니다...^^

  • 엘리 2010/04/19 22:51

    단박에 이해 했습니다......럴수럴수 이럴수!!!!
    설명 감사드립니다 ^^

  • 공상 2010/08/28 23:58

    ddot_x = -2 dot_x - x 이게 어떻게 그래프가 그려지는거죠 ? x라는 변수 하나 밖에 없는데, y 축은 뭘 나타내는 건가요 ?

    • PinkWink 2010/08/30 02:23

      제가 축에 설명을 하지 않았네요. 가로축은 시간이고, 세로축이 x입니다. x는 시간에 따라 변화하는 함수입니다. 사실 함수의 표현해도 위의 수식은 모두 x(t)라고 적어야하지만, 살짝 간단히 그냥 적는다는 것이 설명을 빠뜨린모양이네요.

  • 로첸 2010/10/07 16:38

    강좌에서 40% 정도 위치에 보면

    제일 왼쪽의 demux블럭의 1번은 x를 2번은 dot_x를 입력하도록 하고 Fcn블럭에 넣어두는 거지요.

    라고 해서 demux 블럭이라고 나왔는데 아무리 봐도 demux가 아니라 mux 블럭이 아닌지요?? demux 블럭을 놓고 따라해봤는데 해당 설명이 있는 부분의 그림처럼 라인이 연결이 되지 않습니다.

  • RaNulFe 2011/03/12 16:36

    삼각함수의 미적분이나
    파이와 세타간의 식으로 만들어진방정식은 어떻게 해야하나요.
    변수를 각각잡아야하는건가요?

    • PinkWink 2011/03/14 09:30

      다양한 방법이 있을겁니다. mux를 이용해도 되구요. 그러나 이렇게만 질문하시면 사실 답변드릴 말이 없답니다.

  • 맹순 2011/03/17 20:48

    연재 정주행중입니다. 좋은자료들 보고 많이 배우고있습니다 ^^

  • JJP 2011/03/27 20:54

    http://blog.naver.com/wjddydghl11/memo/10105866261
    DC 모터 시뮬중에 파형이 잘 안나와서 질문할려구 하는데
    이렇게 질문해도 대는건가요??

    • PinkWink 2011/03/28 09:57

      죄송합니다. 제가 화일을 분석할 만한 시간적 여유가 없습니다.

  • jun's 2011/03/31 19:13

    자료 잘 보고 있습니다. 제가 3차 미분 방정식을 시뮬링크 하는데
    2sin(x(2))랑 +exp(-3t) 는 어떤 식으로 해야지 시뮬 링크에 포함대나요?

    제가 만들 식은 x(''') = 4x('')-2sin(x('))-1x+exp(-3t)
    이거 에요 (''')은 미분수..에요

    • PinkWink 2011/04/01 08:37

      http://pinkwink.kr/272 에 보면 Fcn 블럭을 사용하는 방법이 있습니다. 그것을 이용하시면 손쉽게 구현될것입니다.

  • jun's 2011/04/01 09:06

    fcn으로 손쉽게 해결됫습니다 감사해요..
    근데 ㅠ exp(-3) 까지는 댓눈데 exp(-3*t) 을 넣을려고 하는데
    클럭으로 입력할려고 하는데 어디서 입력해야 하나요?

    • PinkWink 2011/04/01 11:57

      simulink library에서 clock을 찾아보시면 될겁니다.

  • jun's 2011/04/01 15:56

    그러면 입력할때 exp(-3t)라고 해야 하나요? 아니면 exp(-3) 이라고 해야하나요? exp(-3t)라고 fcn에 입력하니깐 에러가 떠요

    • PinkWink 2011/04/04 08:15

      clock의 출력을 별도로 mux에 받아서 fcn에 넣어주면 됩니다.
      그러면 u(1) u(2) 뭐 이렇게 선언이 되겠지요.

  • 2011/04/12 15:45

    비밀댓글입니다

    • PinkWink 2011/04/12 17:08

      블로그상에 첨부화일이 없는 거라면...
      현재는 저도 가지고 있지 않습니다.

  • Bruce 2011/05/12 14:17

    안녕하세요 scope 에 입력값을 여러개 받게 할수도 있나요???
    제가 참고하고 있는 책에는 한개의 scope에 입력값을 여러개 받고 있는데 어떻게 하는지 궁금합니다~~

    • PinkWink 2011/05/12 16:12

      scope창 프린터 아이콘 옆의 설정아이콘을 클릭해서
      General에서 number of axes의 숫자를 조절하면 됩니다.

  • 시뮬링 2011/09/27 00:13

    안녕하세요 ㅠ
    여쭤볼게 있어서요~!?
    simulation stop time 설정을 어떻게 하는지 궁금합니다.
    숫자를 넣어 시간을 입력할 수도 있지만, 제가 원하는건
    일정 값에 도달했을 때 멈추게 하고 싶거든요.. 이럴경우 어떻게 입력을
    해줘야 하나요'?>

    • PinkWink 2011/09/27 18:55

      앗... 글쎄요...
      그러고보니.. 저는 한번도 그런적이 없어서... 음...
      테스트를 해보면 좋겠지만,
      요즘은 블로그활동도 못할 정도로 갑자기 바빠져서 말이죠...
      도움이 되지 못해 죄송합니다.ㅠㅠ

  • kjw4676 2011/11/10 06:55

    최고에요`~

  • junllama 2011/11/10 21:40

    감사합니다 덕분에 많은거 알고갑니다^^최고에요

  • 2011/12/22 15:11

    비밀댓글입니다

    • PinkWink 2011/12/26 13:43

      시뮬링크에서의 FFT가 생각보다 잘 되지 않습니다.
      시뮬링크를 시간에 대해 구성하셨다면
      데이터를 모아두고, 처리하는 과정이 필요합니다.
      물론 FFT블럭이 있었던걸로 기억납니다만..
      simulink의 help에서 fft로 검색해보시면 나올거 같습니다.
      저는 사용하진 않았구요
      직접 꾸몄던적은 있습니다..
      위에서 말씀드린데로, 시간이 다 돌면 저장한 데이터를
      function으로 다시 처리하는 과정을 거쳤습니다.

  • 초보 2012/03/05 10:52

    매트랩 초보 입니다.
    혹시 simulink 상에서 figure를 띄우는 것도 가능한가요??
    제가 점이 깜박이는 figure를 만들고 싶은데 matlab상에서 get, set을 이용하여 만들었습니다.
    하지만 simulink에서는 사용을 할 수가 없네요;;ㅠㅠ

    • PinkWink 2012/03/05 11:38

      네.. 하나의 방법이 아니라 아주 많습니다.
      단순히 fcn문에서 figure를 작성하도록 m-file을 작성하셔도 됩니다.

  • DSP 2012/03/06 19:42

    강좌 정말 잘 보고있습니다
    질문이 있는데요
    simulink에서 scope에 나오는 그림을 실시간으로 천천히 나오게 할 순 없나요?
    스코프를 열어놓고 실행을 시키면 sine wave가 나오는 과정을 내가 직접 볼수있다던지
    이런걸로 필터의 인풋과 아웃풋이 나오는걸 실시간으로 비교해보려고 하거든요

    • PinkWink 2012/03/07 08:34

      글쎄요.. 그건 안해봐서... (사실.. 저 한테는 그럴 필요가 없었거든요ㅠㅠ)
      시간축에 대한 비교는 결과가 나온다음에 해도 되어서 말이죠

  • 초보 2012/03/06 22:10

    답변 감사드립니다. 그냥 단순히 figure를 띄우는 것은 확인이 되었습니다.
    그런데 문제점이 figure의 속성을 바꿀려니 좀 어렵네요.
    matlab에서 m파일로 만들었으나 simulink에서 적용이 안되네요.
    가능하시다면 이메일로 문의드리고 싶은데 가능한가요..ㅠㅠ
    그리고 혹시 국내에 mathworks에서는 기술지원을 하지는 않는지요?
    감사합니다.

    • PinkWink 2012/03/07 08:35

      m-file에서 입력으로 사용하는 것을 fcn블럭에 입력으로 인가해야합니다.

  • 에릭 2012/10/14 15:00

    질문이 있는데요
    제어공학의 전달함수와 피드백함수 G H가 있을때 시뮬링크로 구성해보려고하는데요
    G는 트랜스폼 펑션을 이용해서 가능했는데
    만약 H 피드백 함수가 10s와 같이 s가 분모보다 큰 차수로 존재하게 될경우
    시뮬링크로 어떻게 구성해야할까요??

    G(s) = 1/ (s^2 * (s+12) ) , H(s)=Kts
    Kt=10

    위와같은 경우입니다 ㅜㅜ

    • PinkWink 2012/10/19 12:47

      그런경우, 직접 matlab function으로 구현하시면 됩니다.

  • 에릭 2012/11/02 17:59

    안녕하세요? ^^
    관련 링크들 하나하나 살펴보면서 공부하고 있는 학생입니다
    너무나도 도움이 되고 있고 정말 감사하단 말씀드리고 싶습니다
    혹시 실례가 되지 않는다면
    저도 이러한 시뮬링크랑 매틀랩 공부를 하고 싶은데
    시중에서는 이러한 관련된 책들을 구할 수 있을까요??
    따라해 보면서 공부하고 싶은데..... ~~
    혹시 추천해주실 만한 책이 있으면 알려주시면 정말로... 감사하겠습니다ㅎㅎㅎ
    현재 전기공학과 4학년 재학생이고 모터드라이브 쪽 PWM 등 이러한 제어에 대해서
    공부해보고 싶습니다 ^^
    방명록보단 댓글로 남겨야 보실 것 같아서 이곳에 남긴점 양해해 주세요 !

    • PinkWink 2012/11/05 09:33

      MATLAB의 기초에 관한 책이라면, 사실 아무거나 괜찮던데요.^^
      요즘은 책들이 하도 잘나와서 말이죠^^

    • 에릭 2012/11/11 17:43

      학생인지라 중도한번 들러봤는데
      신간 책들이 다 있더라구요 ~~
      yse24에 있는 책들 다 빌려와서
      봤는데 다들 괜찮은거같아요 ㅎㅎㅎ
      물론 어려운것도 있지만....
      코멘트 감사합니다
      자주 놀러와서 정보도 얻고 질문도 하구 그럴게요
      늦었지만 결혼 축하드려요 ~

    • PinkWink 2012/11/14 12:58

      네.. 감사합니다. 무언가를 알아간다는건 참 즐거운 일이지요^^