시스템 시뮬레이션 연재 목차

1. 라그랑지 방법을 이용한 동역학 모델 구축하기 [바로가기]
2. DC 모터의 동역학 포함시키기 [바로가기]
3. MATLAB을 이용하여 시뮬레이션 구축하기 [바로가기]
4. 시스템의 선형화 [바로가기]
5. LQR 기법을 이요한 선형제어기 설계하기 [바로가기]
6. 경로추적 [바로가기]

지난번에 시스템의 동역학 모델을 얻기 위해 라그랑지 방정식을 찾는 법에 대해 이야기했습니다. 이제 구동원에 대해 이야기를 해야하는데요. 


이렇게 생긴 진자 모델에 회전 중심축에 DC모터가 하나 달려있다고 가정했습니다. 




그리고


지난번에 구했던 라그랑지 모델인데요. F_theta에 대해 생각을 해봐야겠네요. 구동력이죠.


흔히들 보는 DC 모터입니다. 이 DC 모터는 사실 간단히 사용할 거라면 대부분의 제어라는 글자가 들어간 책에서는 모두 다루는 내용입니다. 저는 뭐 언제나 그렇듯... 간단히 결과식만 클클


위를 보시면, 모터가 내는 힘(F)은 전류(i)에 토크상수(K_t)를 곱하고 기어비(n)를 곱하면 됩니다. 그러나 마찰력이 힘의 발생을 방해하기 때문에 마찰계수를 고려합니다. 



그 아래에 있는 식은 전류와 전압에 관한 식입니다. 그냥 저항이면 v=R_m*i 가 되겠죠. 그러나 모터는 인덕턴스가 있으므로 l*dot_i 도 고려가 됩니다. 거기에, 역기전력(Kb)도 들어가는 형태죠...ㅠㅠ


보통 데이터 시트에서 위 수치들은 다 줍니다. 





그런데 간혹 L과 f_m을 안주는 경우가 있어요...ㅠㅠ.. f_m은 [관련글]에서 구하는 방법을 언급했습니다. 그리고 L은 안줘도 될때가 있는데, 원체 작을 때입니다. 그래서 무시하겠다는 것이죠...


위에 보다시피 L은 원체 작아서 무시하고, i로 정리한다음


힘의 식에 대입한 것입니다. 그러면, 전압(v)을 결정하면, 모터가 가지는 힘(F)이 나오는 거죠. 전압은 보통 마이크로 프로세서에서 PWM으로 많이들 구현하니까요.


방금 구한 힘과 전압에 대한 모터의 식을 라그랑지 방정식에 대입하면 되겠는데요.


위와 같이 구성이 끝난거죠^^


DC 모터 하나를 가진 진자의 일반적인 비선형방정식의 유도를 마쳤습니다. 이제 다음에는 어떻게 시뮬레이션을 하고, 또 어떻게 제어기를 설계하는지 한번 이야기를 해보도록 하겠습니다.^^

http://pinkwink.kr/trackback/357 관련글 쓰기
  • 핑구야 날자 2010/08/11 13:13

    출석 도장 꽝...

  • 김현진 2010/09/27 23:30

    핑크윙크님 모터 동역학을 동체 동역학에 집어넣으면서 theta라는 변수의 의미가 중첩이 되신건 아닌지요? 모터 동역학에서 theta_dot은 바퀴의 회전각속도이고 동체 동역학에서 theta_dot은 pitch_rate이 아닌가여?

    • PinkWink 2010/09/28 13:57

      이 글에서는 단지 시뮬링크로 시뮬레이션하는 것을 목적으로 잡아서 진자의 기울어지는 각도가 바로 모터의 회전각도로 보고 있어서 그렇습니다.^^

    • 김현진 2010/10/04 15:31

      앗 제가 헷갈렸군여 ㅋㅋㅋ

    • PinkWink 2010/10/05 05:55

      아닙니다.. 언제나 관심가져 주셔서 감사합니다.^^

  • 전기과공돌이 2010/11/02 20:00

    핑크님 파라미터 관련 질문입니다.
    L값은 극히 적기때문에 생략가능하지만 제가 측정을 해보려 하는데요
    보드 입력측에 파형을 넣고 모터부에서 파형을 출력하여 두개를 비교해서 딜레이 된 만큼이 L값이라고 들었는데요 입력측 파형이 무쟈게 깨지네요;;
    방법이 맞는지 아니면 다른방법으로 L값을 쉽게구할 수 있는지 궁금합니다~

    • PinkWink 2010/11/03 10:43

      L이 보통 0.1mH정도이지 않나요?? 잘 모르겠네요.ㅜㅜ 아무튼 이 정도로 작은 값이니 아마 그 영향을 관찰할려고 할때 실험환경을 조심하셔야할텐데요.^^ 그런데 입출력파형이 딜레이된 만큼이라는 것이 위상차이를 말씀하시는것 같은데, 당연히 입출력파형을 비교하면 위상차이가 납니다만,그게 L의 영향때문에만 나타나는 걸까요??? 음... 의문이 살짝 드네요. 시간날때 한번 확인해보겠습니다.^^

  • 전기과공돌이 2010/11/03 14:46

    저도 측정하기 어렵다고 생각합니다 ㅋ
    그런데 관측기(칼만필터) 쪽 관련된 자료는 없나용?
    위에처럼 LQ제어까지는 했는데 관측기도 추가해서 구현 해볼려고요

    • PinkWink 2010/11/03 15:55

      네.. 해보질 않았네요. DORF의 최신제어시스템에 나와있을겁니다만..
      요즘은 너무 바빠 자료의 업데이트를 잘 못하고 있답니다...ㅠㅠ

    • 전기과공돌이 2010/11/03 16:13

      DORF요?? 먼지 잘 몰것네 ㅋㅋ
      그러면 갠찬은 책이나 관련 사이트 아시면 알려주실수 있나요? (DORF가 저자 였군요;; ㅜㅜ)

    • PinkWink 2010/11/03 16:47

      네.. DORF의 최신제어시스템 10판이 저희 지도교수님께서 번역을.. 흠흠^^
      제어를 공부하는 사람에게는 바이블과 같은 책이죠^^

    • 전기과공돌이 2010/11/03 16:50

      오홍 능력자 셨군요 ㅋㅋ
      또 궁금한게 LQ에서 마지막 이득값 u=-kx 에서 k를 구했는데 K가 2개의 값이 나오자나요? 두개의 값을 더해서 -k로 해줘야 하나요??? 값을 넣는걸 잘 몰라서

    • PinkWink 2010/11/03 16:53

      음.. K만 생각해서 그런겁니다. 분명 K*X라고 하셨잖아요. 그러니 X를 생각해야죠^^. 제어기 디자이너가 상태 X를 어떻게 잡았는진 몰라도, X가 X=[theta dot_theta]'라면, 행렬곱의 법칙으로 K의 첫 숫자는 현재 theta와 K의 두번째 숫자는 현재 dot_theta와 곱해져서 더해지면 제어입력 u가 결정되지요

    • 전기과공돌이 2010/11/07 15:53

      흠... 그렇다면 핑크님이 게인값을 넣는 방법을 알았으면 합니다. 매트랩으로 하셨는데 간단한 방법좀;;

    • PinkWink 2010/11/07 16:59

      이 연재에 나와있습니다. 해당글은 http://www.pinkwink.kr/361 입니다.

    • 전기과공돌이 2010/11/07 19:25

      아.. 저는 연재글 보고 그냥 K값 두개를 더해서 넣어주었는데(예로 k= 1, 2 이면 3을 k에 넣음) 그게좀 틀린것 같아서 자유운동때는 진동운동하다가 K값 넣어주니 값이 튄 후에 바로 0으로 감소하는 그래프가 그려져서요 게인 블록에 값넣는 것만 알려주시면..

    • PinkWink 2010/11/07 20:22

      정말 죄송합니다. 무슨 말씀이신지... 이 연재에서 다루는 제어게인은 방금 위에 말씀드린 글로 가시면, MATLAB의 lqr 명령만 간단히 사용하면 나타난다는 내용을 확인하실 수 있습니다. 그리고, 혹시 게인을 입력하는 방법이라고 하신 내용이...
      게인 블럭에서 -K*u 라고 되었는데, 그냥 -K라고 입력했을 뿐입니다. 물론 K가 2*1의 크기를 가진 행렬이지만, 상태를 궤환시킨것도 2개이니 게인블럭의 옵션에서 행렬곱으로 지정해주시면 됩니다.
      이걸 의미하신것인지...ㅠㅠ

    • 전기과공돌이 2010/11/08 14:13

      아~~~ 이해 갔습니다. ㅋㅋ 혼란스럽게 해서 죄송하네요 ㅎ
      암튼 좋은 자료 감사합니다. 앞으로도 많이 찾아와서 귀찮게 할게요 ~~

    • PinkWink 2010/11/08 17:51

      네.. 하여간 잘 되었다니 다행입니다.^^

  • 전기과공돌이 2010/12/06 16:27

    또 오게 되엇네요 ㅎ 궁금한게
    간단한 F=ma 에서 이 뉴턴 방식을 상태방정식으로 표현하고 싶은데 관련자료 있을까요??

    • PinkWink 2010/12/08 05:00

      F=ma를 상태방정식으로 표현하고싶다는 것인가요?? 왜죠?? 상태방정식은 흔히 동역학 방정식을 다시 표현한 것인데요. F=ma는 힘에 관한 방정식으로 '상태'가 모두 표현되지 않았는데요.

    • 전기과공돌이 2010/12/08 15:06

      문제중에 M=1인 물체가 있고 T초후에 위치 x에 도달시키기 위한(딱 서지 않고 지나쳐도됨) 힘 F를(minimize)
      구하라는데 일단 뉴턴 방정식을 상태 방정식으로 바꿔야 한다네요..
      여타 마찰 이런건 없구요

    • PinkWink 2010/12/09 03:18

      만약그러시다면.. F=ma자체가 바로 상태방정식이 됩니다. m=1이라고 하셨으니 바꾸어 적으면, ddot_x = F 가 되는 것이지요. 이 방정식이 바로 그냥 상태방정식이 됩니다. 그리고, 시뮬링크에서 꾸며보시면, 그냥 F에 아무값이나 양의 값을 주면, '1'의 위치를 분명 그냥 지나갈겁니다.

    • 전기과공돌이 2010/12/09 21:36

      흠...해봐야 겟군요 ㅋ
      그런데 매트랩하다가 optimization toolbox 가없어서 코딩이 안되는데 툴박스 따로 구할수 있나요?

    • PinkWink 2010/12/09 21:37

      글쎄요.. 잘 모르겠는데요..ㅠㅠ

    • 전기과공돌이 2010/12/12 17:31

      ddot_x=F가 상태방저식이 된다면 이때의
      파라미터 A,B를 알아야 리카티 방정식을 풀 수 있을것 같은데 A,B를 어떻게 알 수 있나요?

    • PinkWink 2010/12/12 18:55

      http://pinkwink.kr/361 를 보시면 됩니다.

    • 전기과공돌이 2010/12/12 19:14

      라그랑지 방정식에 대입해서 풀라는 건가요??
      흠.. 물체의 무게 m=1 이것 만으로 대입 할 수 있는지..
      잘모르겟네요...ㅜㅜ

    • PinkWink 2010/12/12 20:14

      '전기과공돌이'님꼐.. 약간 죄송한 말씀을 한마디 해야겠습니다. 이는 저역시 한때 학생이었고.. 지금은 학부생을 대상으로한 각종 수업을 진행하는 강사의 입장에서 드리는 말씀이니 개인적인 감정이 아니라 오히려... 조언으로 받아들여주시길 바랍니다.

      먼저 이 댓글의 시작인 F=ma에 대해 말씀을 드리겠습니다. 이것이 리포트인지 혹은 개인적인 관심에서 시작하신것인지 모르겠습니다만, 아주 간략한 예제로서 얼핏 MATLAB을 실습하고 제어기를 구성하는데 좋은 예제로 보입니다만, 사실 그렇지 않습니다. 이는 힘을 나타내는 방정식과 동역학적 모델 사이에서 혼돈을 가져와서 배우고자하는 초심자에게 오히려 제대로 된 개념의 적립을 방해하는 상황이 생길 수 있습니다.

      이는 어린학생들 중 처음 인수분해를 배우는 학생에게, x^2 - 2x +1 = 0를 인수분해하라고 하면 잘하겠지만, x=0를 인수분해하라고 하면 생각보다 많은 학생이 머뭇거리는 것과 같습니다.

      그다음...

      제가 바로 위 답글에서 " http://pinkwink.kr/361 를 보시면 됩니다."라고 답변을 드렸는데요. 그 글을 읽어보셨는지 또한 궁금합니다. 해당글에는 라그랑지방정식을 다루고 있지 않습니다. 해당글은 시스템의 동역학방정식을 어떻게 상태방정식으로 바꾸고, 다시 어떻게 시스템행렬인 A,B를 구해서 어떻게 MATLAB으로 LQR제어기를 구할 것인지를 간략히 소개하고 있습니다. 물론 앞부분에 LQR의 개념을 이야기합니다만, 그건 그냥 넘어가셔도 됩니다. 그런데, 이런 글을 참조하시라는 저의 답글에 "라그랑지 방정식에 대입해서 풀라는 건가요??"라고 다시 질문하신다면, 답변한 제가 약간 당황하게 될것은.. 이해하시겠죠???

      ddot_x = F

      에서... http://pinkwink.kr/361 를 참조하셔서... 상태를 X 라고 할때, X = [x, dot_x]'가 될겁니다. 그럴때 상태방정식

      dot_X = A*X + B*U

      로 만드시고, 이때, U는 질문하신 경우엔 F가 됩니다.
      그리고, A와 B를 잡으셔야 합니다. 이때, A 행렬은 2*2의 크기를 가지게 되며, B행렬은 아마도 2*1의 크기를 가질 것입니다.

      너무 긴답변을 하게 되었습니다만... 또한 너무 기분나쁘게 받아들이지 마시고, 다시한번 주어진 미션을 천천히 검토하시길 바랍니다.

    • 전기과공돌이 2010/12/12 21:17

      에구.. 저야말로 죄송합니다^^
      제어 공부할려고 원서하나 보다가 위와같은 문제가있는데 좀 이해가 안되서 질문 드렸네요..

      오히려 제가 기분나쁘게 해드린거 같네요 .

      원래전공이 이쪽이 아닌데 공부하는거라 넓은 아량으로 이해부탁드립니다^^
      그래서 질문이 좀 이상했네요.
      아무튼 주신 미션대로 차분히 훑어 보겠습니다^^

    • PinkWink 2010/12/12 22:17

      아닙니다. 제가 너무 격하게 표현한듯 합니다. 아주 죄송합니다. 꼭 좋은 성과가 있으시길 바랍니다.

    • 전기과공돌이 2010/12/12 23:44

      핑크님이 조언하신대로 F는 입력이되어 F=u가 되는건 이해가 되었는데 A행렬 2x2와 B행령 1X2을 어떻게 정해주어야 할지 당최 모르겟네요 ㅋ
      예체처럼 모터같은걸 응용햇으면 쉽게 할텐데요 ㅋ

    • PinkWink 2010/12/13 03:17

      상태를 뭘로 잡으신건가요?? 상태를 어떻게 선정하는가에 따라 A,B행렬은 바뀝니다. 만약 상태를 X라하고 X는 열벡터로 X = [x dot_x]' 로 잡으셨다면

      dot_X = AX + BF 에서

      이제 A행렬과 B행렬을 유추해보시면 됩니다. 제 생각에는

      A = [0 1; 0 0], B=[0 1]'라고 생각이 드는데요.
      B행렬의 뒤의 ' 표시는 MATLAB에서 Transpose를 의미합니다. 텍스트형 댓글에서 열벡터를 표현할 방법이 없으니까요.

  • 2011/05/26 05:05

    비밀댓글입니다

  • 재오리 2011/06/01 13:23

    안녕하세요 ㅋ 질문이 있습니다.

    토크 식에서 모터의 회적각소도인 theta_dot의 경우에 단위는 radian으로 측정하나요 아니면 rpm단위로 측정을 해야하는 건지요?

    • PinkWink 2011/06/01 18:38

      오랜만입니다.^^... radian과 rpm은 서로 다른데 말이죠.. ㅎㅎ
      하나는 각도이고 하나는 각속도의 단위^^
      하여간... 모든 단위는 radian으로 맞춰져있습니다. 각도는 radian, 각속도는 radian/second 입니다.^^

  • 재오리 2011/06/12 12:18

    안녕하세요 또 왔습니다ㅋ

    모터의 전압 토크식에서 입력전압을 pwm으로 구현할 때 말인데요

    dc모터 드라이버를 h-bridge로 사용하고 공급전압은 24볼트를 입력한다고 가정했을때

    pwm듀티가 50%이면 DC모터에 공급되는 전압은 24V*50% = 12V로 보면 되는건가요?

    그렇게 가정하고 토크식에 대입해서 토크를 계산해보면 모터스펙에 나오는 토크값과는 자꾸 틀린 결과가 나와서요

    좀 더 고려해야하는 사항이 있는건가요?

    • PinkWink 2011/06/13 20:51

      아니요.. 말씀하신 대로입니다. 그런데.. 토크를 어떻게 확인하셨나요??? 토크를 측정하는 센서가 있으신지.. ^^
      전 보통 RPM정도로 확인을 하거든요... (토크를 측정할 방법이...ㅠㅠ)

  • 야동이좋아 2011/10/07 14:30

    안녕하세요~
    이쪽으로 공부를 하게되어서 블로그 잘 읽고 있는데요...
    궁금한게 생겨서 질문드립니다.
    전류와 전압 관계식에서
    L*i_dot + R*i = v +K_b * theta_dot 의 공식에서
    (dot할때 윗첨자를 써야되는데 맞는지는 잘 모르겠네요ㅎㅎ;;)

    밑에서 다시 정리할 때에는

    L*i_dot + R*i = v - K_b*theta_dot 이라고 표현하셨는데 밑의 식이 정확한 것이지요?? 위식은 단순히 부호를 잘 못쓰신거죠??
    확인좀 해주세요 ^^

    • PinkWink 2011/10/07 15:49

      네.. 그렇네요. 부호의 오기가 있네요
      L*i_dot + R*i = v +K_b * theta_dot
      가 개념상 맞습니다.
      좋은 지적 감사합니다.^^

  • LimDJ 2011/10/11 22:37

    위에 야동이좋아=LimDJ입니다...
    다름이 아니라 공식을 찾아보니 마이너스 부호가 맞던데요... 자꾸 혼동이되네요 마이너스 부호인
    L*i_dong + R*i = v - K_b * theta_dot 이게 맞는 건가요??

    • PinkWink 2011/10/12 09:24

      저런... 제가 답변을 드릴때 실수가 있었나요?ㅠㅠ
      이런... 죄송합니다.
      v = k*dot_i + Rm*i + Kb*dot_theta
      로 잡아야합니다. 자세한 사항은
      http://www.ahnbk.com/wp/?p=864
      에 좀 좋은 설명이 있습니다.
      그나저나.. 야동이좋아라는 닉네임을 사용하시다니..
      무쟈게 솔직하신분이신가봅니다.^^

  • dodoheeya 2012/03/31 19:59

    안녕하세요~ 매번 눈팅으로만 하다가 궁금한게 생겨서 첫 인사겸 질문 드려요^^
    위의 글은 평범한 진자 형태에 DC모터를 적용하는 것인데요,
    http://pinkwink.kr/342 여기 글의 맨 아래 있는 리액션휠 팬듈럼의 역진자 형태에 적용하려면
    어떨까요? 위의 DC모터 적용 식의 Theta가 해당 글에서는 Theta2가 될텐데..
    Theta1과 Theta2..어떻게 하면 DC모터를 구동할 수 있는 식을 만들 수 있을까요?

    • PinkWink 2012/04/01 14:44

      힘(F)에 모터의 특방(F=~)을 대입하시면 됩니다.
      그러면 제어입력이 전압 V로 변경되게 되는데, 그것이 바로 모터를 구동하게 되는 것입니다.
      저의 다른 강좌에 보시면 간단한 동역학 모델에 DC모터를 적용하는 것을 확인하실 수 있습니다.

    • dodoheeya 2012/04/02 23:29

      답변감사합니다^^

    • PinkWink 2012/04/03 09:07

      네.. 좋은 결과가 있기를 바래요

  • dodoheeya 2012/04/08 16:49

    추가 질문이 잇어서요 ㅎ

    그림에 보면 theta 방향이 반시계 방향인데요, 포스팅하신 리엑션휠에선 시계방향으로 되어있더라구요.

    그러면 dot_theta의 부호가 틀려지지 않을까요?

    시뮬링크로 돌리는데 부호를 마이너스로 할때랑 플러스로 할때랑은 천지차이네요..

    반대로 생각하고 부호를 바꾸면 관찰이 되는데, 반대로 안하고 하면 안나오네요..ㅎ

    • PinkWink 2012/04/08 20:40

      개념상 방향설정대로 수식이 전개되어야만 될 겁니다. 결과식에 방향만 반대로 넣으면 결과가 이상할거구요. 당시 저도 일관성있게 반시계 방향으로 모든 포스팅을 진행했어야하는데 그렇게 못했네요. 수식의 과정은 모두 나와있으니, 부호를 다시 설정하셔서 유도과정을 따라가 보시면 간편할겁니다.

    • dodoheeya 2012/04/08 23:27

      답변 감사합니다^^ㅎㅎ

    • PinkWink 2012/04/09 07:53

      네.. 좋은 성과 있으시길 바랍니다.

  • 정병진 2014/05/19 02:52

    안녕하세요! 졸업작품을 준비하고 있는 기계과대학생입니다.
    구글에서 많이 찾아봤는데 잘 모르겠어서 질문드립니다..
    밸런싱로봇을 만들때 BLDC모터를 사용해도 위에 식을 사용할수 있는건가요??
    다른식이 있다면 어떤식을 사용해야하는지 알고싶습니다..

    • PinkWink 2014/05/19 16:47

      네 구조는 다를지 몰라도 BLDC도 DC 모터와 같은 특성이라 제어기 구성은 같습니다. 드라이버가 좀 다르구요.
      또 좀 더 아주 좁은 부분에서 핸들링을 위하는 분들은 좀 다른 제어방식을 또 쓰시더라구요^^

    • 정병진 2014/05/20 01:49

      답변해주셔서 감사합니다!!

    • PinkWink 2014/05/20 13:01

      네.. 미리 감사하다고 하시는 건가요???^^
      아무튼 답변을 달았습니다.^^