2015년 5월 7일 목요일

L9110S 소형모터 드라이버

 던전워즈
L9110S 소형모터 드라이버

생긴것은 위와 같습니다.
크기는 대략 2.3cm * 2.9cm정도로 작은 편입니다.

평균 0.9A정도를 소모하는 소형 dc모터를 제어하는데 사용될 수 있습니다.

다른 모터 드라이버와 다르게 로직제어와 모터제어를 위한 전원 공급을 하나로 하고 있습니다.
여러제조사에서 비슷한 모델을 많이 만들기 때문에 핀의 배치나 pcb색상등에 약간씩 차이는 있습니다.

일단 위의 모터 드라이버를 기준으로
VCC에는 모터를 제어할 전원의 +를 연결합니다. 2.5V ~ 12V까지의 DC전원을 사용할 수 있습니다.
GND는 전원의 -를 연결합니다.

A-1A와 A-1B는 모터A를 제어합니다.

B-1A와 B-1B는 모터B를 제어합니다.

다른 모터 드라이버들과 다르게 PWM 제어를 위한 핀이 따로 없습니다.
하지만 PWM 제어가 가능합니다.

일단 모터의 정역 제어를 위한 로직은 L298N의 경우와 같습니다.
1A, 1B핀에 각기 HIGH, LOW 또는 LOW, HIGH를 가해서 정역 제어를 하면됩니다.
정지 시키기 위해서는 LOW, LOW또는 HIGH, HIGH를 가하면 됩니다.

아두이노로 PWM제어를 위한 대표적인 방법2가지가 있는데
----------------------------------------------------------
첫째는 하나의 pwm핀과 일반핀을 사용해서 하나의 채널을 제어하는 방법입니다.

예를 들면 아두이노 우노 기준으로

A-1A에는 PWM 출력이 가능한 3번핀을 연결합니다.
A-1B에는 일반핀 4번을 연결합니다.

정회전 PWM제어를 위해서
4번핀에는 LOW를 출력하고
3번핀에는 pwm출력을 내보냅니다.

역회전 pwm제어를 위해서
4번핀에 HIGH를 출력하고
3번핀에pwm출력을 내보냅니다.

----------------------------------------------------------
다른 방법은 두개의 pwm핀을 사용해서 하나의 채널을 제어하는 방법입니다.

A-1A와 A-1B모두 pwm출력이 가능한 아두이노 핀을 연결합니다.

예를들어
A-1A에는 우노의 5번핀을
A-1B에는 우노의 6번핀을 연결합니다.

정회전 제어시
5번핀에는 pwm출력을 내보내고
6핀핀에는 LOW를 출력합니다.

역회전 제어시

5번핀에 LOW를 출력하고
6번핀에는 pwm출력을 냅니다.
----------------------------------------------------------

아래는 첫번째 방법의 예입니다. 모터 1개만 제어하는 것으로 하겠습니다.


//모터 A핀, 3번 pwm핀과 4번일반핀을 연결함
#define MOTORA_PIN1 3
#define MOTORA_PIN2 4

//정회전 제어
void CW(int speed)
{
  analogWrite(MOTORA_PIN1, speed);
  digitalWrite(MOTORA_PIN2, LOW);
}

//역회전 제어
//아래 코드를 보면 255 - speed를 한부분이 있는데
//analogWrite에서 두번째 인자는 pwm출력에서 high의 비율을 의미합니다.
//0 ~ 255범위인데, 0일경우 항상 low가 출력되고 255일경우 항상 high가 출력됩니다.(이론상으로, 실제로는 아두이노 보드에 오류가 있습니다.)
//역회전 제어시에는 LOW, HIGH를 가해야 하기 때문에
//PWM  HIGH비율의 역을 해주면 LOW비율이 나오게 될겁니다.
void CCW(int speed)
{
  analogWrite(MOTORA_PIN1, 255 - speed);
  digitalWrite(MOTORA_PIN2, HIGH);
}

void setup()
{
pinMode(MOTORA_PIN1, OUTPUT); //analogWrite시 구지 핀모드를 출력으로 설정할필요 없지만, 확실히 하기 위해서 출력으로 설정했습니다.
pinMode(MOTORA_PIN2, OUTPUT);
}

void loop()
{
     //1초간 정회전, 1초간 역회전을 반복
CW(255);
delay(1000);
CCW(255);
delay(1000);
}

----------------------------------------------------------

아래는 두번째 방법의 예입니다. 모터 1개만 제어하는 것으로 하겠습니다.

//모터 A핀, 5번핀과 6번핀을 연결함, 둘다 pwm출력이 가능한 핀이어야 합니다.
#define MOTORA_PIN1 5
#define MOTORA_PIN2 6

//정회전 제어
void CW(int speed)
{
  analogWrite(MOTORA_PIN1, speed);
  digitalWrite(MOTORA_PIN2, LOW);
}

//역회전 제어
void CCW(int speed)
{
  digitalWrite(MOTORA_PIN1, LOW);
  analogWrite(MOTORA_PIN2, speed);
  
}

void setup()
{
pinMode(MOTORA_PIN1, OUTPUT); //analogWrite시 구지 핀모드를 출력으로 설정할필요 없지만, 확실히 하기 위해서 출력으로 설정했습니다.
pinMode(MOTORA_PIN2, OUTPUT);
}

void loop()
{
     //1초간 정회전, 1초간 역회전을 반복
CW(255);
delay(1000);
CCW(255);
delay(1000);
}

댓글 없음:

댓글 쓰기