'모터쉴드'에 해당되는 글 2건

  1. 2015.07.07 비글본블랙 + 아두이노 모터쉴드
  2. 2015.05.28 아두이노 모터 쉴드 R3 소개 및 기능

 비글본블랙(이하 BBB)를 아두이노 모터쉴드(이하 모터쉴드)와 연결해서 모터제어 실험하면서 알게 된 시행착오를 본 포스트에 기록하고자 한다.

 아두이노 모터쉴드는 L298P 칩을 사용하는데 전원이 디지털 블록에 공급되는 핀 (Vss) 와 모터 제어용 전원 핀 (Vs) 두 개가 있다. 쉴드의 5V 헤더가 바로 이 Vss 핀에 연결되어 있으므로 5V핀에 5V 전원을 반드시 연결해야 L298P가 정상동작한다. Vin 헤더핀은 Vs에 연결되어 있으므로 이 핀에는 모터제어용 전원 (datasheet 상으로는 50V 까지 가능) 을 인가하면 된다. 나는 Vin에 적당한 전원을 연결하면 Vss에는 변압되어 들어가는 줄 알았는데 회로도를 보니 그게 아니었다.

<아두이노 모터쉴드 rev C 회로도>

따라서 모터쉴드의 5V 헤더에는 BBB의 5V핀과 연결하여 L298P 의 로직부에 전원을 인가해야 정상동작한다. 문제는 BBB는 3.3V 로 동작한다는 것인데 다행히 L298N이 2.3V 이상이면 HIGH로 간주하므로 문제가 없다.  (실제로 모터쉴드와 3.3V로 동작하는 아두이노Due 와의 연결법도 소개되어 잇다.)

 

 그런데 datasheet상에는 Vss의 최소전압은 4.5V인데 혹시나해서 3.3V를 연결했는데도 정상적으로 동작했다. 하지만 이 방법은 바람직하지는 않은 것 같다.  그리고 모터쉴드의 IOREF 핀은 별다른 역할을 하지 않는다. 여기에 BBB의 동작전압인 3,3V를 연결하면 이것이  L298에 인가되는 것이 아니니 주의해야 한다.

 아래 간략한 회로도를 첨부하였다.

아래는 pyBBIO 모듈을 이용한 파이썬 제어프로그램 예이다. 1초마다 회전 방향을 바꿔준다.


from bbio import *
import time
bbio_init()

pwm = GPIO1_16
brk = GPIO0_5
dir = GPIO0_13

pinMode(pwm, OUTPUT)
pinMode(brk, OUTPUT)
pinMode(dir, OUTPUT)

digitalWrite(pwm, HIGH)
digitalWrite(brk, LOW)
digitalWrite(dir, LOW)

while True:
   digitalWrite(dir, HIGH)
   print(str('dir 1')
   time.sleep(1)
   digitalWrite(dir, LOW)
   print('dir2')
   time.sleep(1)

bbio_cleanup()







Posted by 살레시오

댓글을 달아 주세요

 아두이노 모터 쉴드 (R3) 사용법을 정리해 보았다. 이것을 이용하면 DC모터를 아두이노로 쉽게 제어할 수 있다.


   Arduino Motor Shield R3 page



일단 기본적인 특성은 다음과 같다.


  • 동작전압 : 5V to 12V

  • 모터제어IC: L298P (두 개의 DC모터 혹은 1개의 스테핑모터 제어 가능)

  • 최대 전류 :채널당 2A 혹은 4A(두 채널을 병렬로 연결시)

  • 전류 센싱 : 1.65V/A

  • 강제 정지(brake) 기능


 모터의 전원은 반드시 별도로 연결해 주어야 하는데 아두이노의 2.1파이 DC잭에 연결해도 되고 쉴드의 스크류단자에 전선으로 연결해도 된다. 그런데 사용 설명에는 모터 전압이 9V 이상이면 아두이노와 쉴드의 전원(Vin)을 분리하는 것이 바람직하며 '쉴드 뒷면의 "Vin Connect" 점퍼를 절단하면 된다'고 설명되어 있다. 이 경우 쉴드에 직접 인가할 수 있는 전압의 최대값은 18V이다.


 사용되는 핀은 다음과 같다.


[표 1] 모터쉴드 R3의 핀 배열

기능

채널A

채널B

기능

방향

D12

D13

회전 방향 제어

PWM

D3

D11

속도 제어

브레이크

D9

D8

HIGH일 때 강제 정지

전류 감지

A0

A1

전류 감지


[그림 1] 모터 쉴드 R3의 핀 기능


모터 회전 시에 PWM을 0 으로 인가하면 전압이 0으로 떨어지고 모터 축은 관성에 따라 천천히 멈추게 되지만 이에 반해서 Brake는 강제 정지를 할 때 사용되는 핀으로 HIGH가 되는 순간 모터가 곧바로 멈추게 된다.


 이것을 아두이노Due 와 연결해서 동작시킬때 Due의 동작 전압이 3.3V이므로 맞지 않을 것이라고 짐작했으나 다음 페이지에 설명된 대로 직접 연결해도 아무런 문제가 없다.


   Arduino Due + Motor Shiled : DC motor


단 모터 전원이 9V이상일 때는 Vin은 분리하는 것이 좋을 것 같다.


 이 쉴드에 대해서 한 가지 아쉬운 점은 PWM(A) 핀으로 3번 핀을 사용하고 있어서 인터럽트 하나를 쓰지 못하게 한다는 것이다.



Posted by 살레시오

댓글을 달아 주세요