본문 바로가기
PLC 자동제어 학습/아두이노 보드 수업

아두이노 보드를 이용해서 스탭모터의 회전을 본격적으로 제어하는 실습

by 인터넷떠돌이 2018. 2. 24.
반응형

안녕하세요?


드디어 본격적으로 스탭모터를 아두이노 보드로 제어하는 과정에 들어갔습니다. 사실 수업에서 했는 과제의 내용은 많이 없기는 합니다만, 하나하나 하는데 그렇게 간단하게 해결할 수 있는 것은 아니라는 생각이 듭니다. 아무튼 그래도 모터 하나에 끝나기는 하지만, 그래도 이렇게 할 수 있다는 것이 어디인지 모르겠습니다.



먼저 첫번째로 위 그림처럼 결선도에 보이는 것처럼 스탭모터와 스위치 2개 그리고 발광 다이오드 1개를 설치 해야 합니다. 일단 이번 실습에 사용이 된 것은 2상 스탭모터라고 하는데, PLC에서는 24V가 나오는데, 아두이노 보드는 5V가 나온다는 차이점이 있어서 듣자니 스탭모터의 드라이버를 운용하기 위해서는 이렇게 5V에 반응할 수 있도록 맞추어 줘야 한다고 합니다.



위 코드는 다른 것 없이 1번 스위치-2번 핀에 연결된 스위치에서 신호가 들어오면, 정방향으로 4회전을 100Hz로 한 다음에, LED가 2초간 켜졌다가 꺼지도록 하고, 2번 스위치-3번 아두이노 우노핀에 연결된 스위치에 신호가 들어오면 50Hz로 역회전을 2번 한 다음에 LED가 계속 켜져 있도록 C언어로 코드를 작성한 것입니다.



그리고 이렇게 실질적으로 결선을 하고서, 이제 제대로 작동이 되는지를 확인할 차례가 왔다는 생각이 듭니다.



실제로 제 의도대로 제대로 작동이 되는 것을 보여주고 있습니다. 이처럼 작동까지는 제대로 되었으니, 이제 과제에 들어갈 차례인데, 과제의 내용은 간단합니다. 회로는 그대로 유지한 채로, 버튼 1개를 눌렀을 때, 위에 나온 1번 스위치의 작동을 1번 작동, 2번 스위치의 작동을 2번 작동 이라고 해서, 1번 작동과 2번 작동이 번갈아 가면서 나오도록 코딩을 해야 합니다.




일단 코딩을 하면서 채터링 방지를 하는 것은 좋았는데, 위에서 나왔는 오렌지색 코드가 없어서 많이 헤메이기는 했습니다. 아무튼 사소한 에러로 인해서 이런 일이 발생을 하였는데, 이걸 이대로 코딩을 하고서 제대로 작동 하는 지를 알아봐야 합니다.



단지 버튼을 하나만 눌렀을 뿐인데, 제대로 작동하는 것을 동영상을 보시면 확인할 수 있습니다.



그리고 2상 여자운전을 자세히 보면, 일일히 코딩을 복잡하게 할 것도 없이 이렇게 배열과 For문을 써서 간단하게 처리할 수 있는 것을 짐직할 수 있습니다. 실제로 먼저 위 스크린샷과 같이 코딩으로 배열을 만듭니다.



그리고 간단하게 빨간색 박스안에서 처럼 정회전 운전을 만들 수 있고, 이제 특이하게도 녹색 박스안 처럼 역회전 운전을 만들 수 있는데, 문제는 배열을 하나 더 만들지 않고도 가능 하다는 것입니다. 실제로 배령은 아래와 같이 되어 있음을 알 수 있습니다.



int step_table[j][i]

      A  B A' B'    *A', B'는 not A, not B  

j=0 { 1, 0, 0, 1}

j=1 { 1, 1, 0, 0}

j=2 { 0, 1, 1, 0}

j=3 { 0, 0, 1, 1}


이런 식으로 배열이 되어 있는데, 단지 step_table[3-j][i]를 두는 것만으로 실질적으로 배열이 역으로 오게 만들 수 있습니다. 물론 for문에서 반대로 감소하는 것을 만들어도 될 것 같기도 합니다만, 일단 이런 방법도 있다는 것을 여기 포스팅에서 올립니다.



그리고 이제 새로이 결션을 해야 하는데, 이번에는 좀 까다롭기는 했습니다. 일단 7~13번 핀은 FND에 연결이 되어서, 각각 7번핀이 a부터 시작을 해서 13번 핀이 g의 역할을 하도록 결선을 하였습니다. 그리고 아래에 있는 2~5번 핀은 스탭모터를 제어하기 위한 L293에 연결이 되었는데, 각각 A,B,notA,notB의 역할을 하도록 되었습니다.


그리고 A0는 녹색 LED에 연결이 되도록 하였고, A1는 적색 LED에 연결이 되도록 결선을 하였습니다. 그리고 과제는 간단하면서도, 이게 구현하기 어렵게, 버튼을 1회 누르면 녹색 LED가 켜지고, 100Hz로 정회전을 6회 하는데, 한 바퀴를 돌 때 마다 FND에 회전을 하는 횟수가 표시가 되도록 하는 것입니다.


2회째 버튼을 누르면 녹색 LED는 꺼지고 적색 LED에 불이 들어오면서 역회전으로 50Hz로 4회 하는데 역시 FND에 한바퀴를 돌때 마다 바퀴수가 표시가 되도록 하는 것입니다. 



먼저 위 스크린샷처럼 스탭모터를 돌리기 위한 2상 여자 운전을 위한 배열을 하나 만들고, FND에 숫자를 표시하기 위한 코드도 하나 만들어 주도록 합니다. 일단 이 과정부터 조금은 손이 가기 시작합니다.



이제 다음으로는 각각의 pinMode를 설정해 주도록 합니다.



이제 여기가 중요한데, 먼저 지난번 아두이노 보드 수업시간에 2상 여자 운전에서 50세트가 되면 한바퀴가 돈다고 합니다. 그래서 k값이 50의 배수가 될때마다-k%50==0이라는 조건을 만족할 때 마다 카운트가 올라가도록 했습니다. 그리고 이 카운트가 위 스크린샷을 보시면 정회전, 역회전을 하는 사용자 정의 함수 바로 안에 들어가 있습니다.




왜 이렇게 했느냐 하면, 저 for문이 실행되는 동안 다른 행동을 아두이노 보드는 전혀 실행을 할 수 없습니다. 그래서 하는 수 없이 2상 여자 운전의 한 세트가 끝날 때 마다 저렇게 fnd를 표시하게 해서 나오도록 해야 했습니다. 역회전도 다를 것이 없기는 합니다.



다음으로는 fnd라고 사용자 정의 함수로 fnd에서 숫자가 표시될 수 있도록 미리 사용자 정의 함수를 만들고, 이제 loop에 들오여면 채터링 방지까지 해 놓은 것을 볼 수 있습니다. 그리고 정회전이든 역회전이든 시작하기 바로 직전에 count2의 값을 0으로 만들어 놓도록 해서, 회전 횟수가 누적이 안 되도록 했습니다. 이렇게 코드를 작성을 하였고.....



실제로 이렇게 결선이 복잡하기는 했지만, 일단 하는 데는 성공했습니다. 이제 실제로 제대로 되는지를 동영상을 통해서 소개하고자 합니다.



제대로 제 의도대로 작동을 하는 것을 볼 수 있었습니다. 이제 이것으로 지난주 수요일에 있었던 수업내용을 다 포스팅 하는 데 성공을 하기는 했습니다. 다만 이 작업들이 이 포스팅에서 읽기는 간단해 보일 수 있을 지는 몰라도, 이걸 실제로 하는 것은 다소 시간이 걸리기는 했습니다.

반응형