본문 바로가기

카테고리 없음

(아두이노) L9110s/HG7881 2 channel motor driver

https://smartstore.naver.com/misoparts/products/9379411059

 

아두이노 L9110s 듀얼 모터 드라이버 모듈 : 알파마이크로

[알파마이크로] 빠른배송 전자부품전문몰. 아두이노, 라즈베리파이, 모듈, 키트 등 전자부품 최저가 판매

smartstore.naver.com

 

370원짜리 모터 드라이버인데 그 진가를 몰랐다. 모터 드라이버는 보통 L298N이나 L293D를 찾기 마련인데, 이 녀석 L9110s 혹은 HG7881이라고 불리는 이 쪼그만 녀석으로 L298N처럼 모터 2개를 돌릴 수 있다. 물론 약간의 단점은 있다. 아래 기사 참고.

 

https://blog.naver.com/roboholic84/221067084440

 

아두이노 L9110 모터드라이버로 DC모터 제어하기

아두이노와  L9110 모터드라이버로 모터 제어하기   모터는 전기에너지를 직선 혹은 회전...

blog.naver.com

 

기판의 6개 핀 중 A-1A  A-1B  B-1A  B-1B 핀들을 아두이노의 PWM 핀에 연결하면 방향 및 속도 조절을 할 수 있다. pwm 핀에 연결하면 analogwrite 기능을 사용할 수 있는데 digitalWrite와의 대응 관계는 이렇다.

 

digitalWrite(AA, HIGH); --> analogWrite(AA, 255);

digitalWrite(AB, LOW); --> analogWrite(AB, 0);

 

왜냐하면 HIGH(1)를 digitalWrite로 써 준 것은 5V를 출력하는 것과 같다. 0을 digitalWrite하는 것은 0V를 보내주는 것과 같다. digitalWrite는 0V와 5V를 전달해줄 수 있을 뿐인데, pwm핀을 사용하면 dutycycle 개념을 통해, 0~5V 사이의 전압 출력 효과를 0~255로 세분하여 PWM 출력함으로써 거둘 수 있다는 것이다. 

 

먼저 간단한 예제. 정회전 역회전을 최대 속도로 반복하는 코드다.

int AA = 5;               //반드시 PWM 핀에 연결할 것
int AB = 6;               //상동 
 
void setup() 
{
  pinMode(AA, OUTPUT);
  pinMode(AB, OUTPUT); 
}
 
void loop() 
{
  digitalWrite(AA, HIGH);          //모터A를 정회전
  digitalWrite(AB, LOW);
  delay(1000);                     
 
  digitalWrite(AA, LOW);           //모터A를 정지
  digitalWrite(AB, LOW);
  delay(250);
  
  digitalWrite(AA, LOW);           //모터A를 역회전     
  digitalWrite(AB, HIGH);
  delay(1000);
}

 

다음은 감속, 가속, 방향 전환을 하는 코드다.

// for 2channel motor driver 
// should connect to pwm pins

int AA = 5;
int AB = 6;
int BA = 9;
int BB = 10;


void setup() {
  pinMode(AA, OUTPUT);
  pinMode(AB, OUTPUT);
  pinMode(BA, OUTPUT);
  pinMode(BB, OUTPUT);
}

void loop() {

  // 정회전 속도 가속 
  for (int speed = 0; speed < 256; speed++) {
    analogWrite(AA, speed);
    analogWrite(AB, 0);
    delay(50);
  }

  delay(1000);

  // 정회전 속도 감속 
  for (int speed = 255; speed >= 0; speed--) {
    analogWrite(AA, speed);
    analogWrite(AB, 0);
    delay(50);
  }
  delay(1000);

  // 역회전 속도 가속 
  for (int speed = 0; speed < 256; speed++) {
    analogWrite(AA, 0);
    analogWrite(AB, speed);
    delay(50);
  }

  delay(1000);
  // 역회전 속도 감속 
  for (int speed = 255; speed >= 0; speed--) {
    analogWrite(AA, 0);
    analogWrite(AB, speed);
    delay(50);
  }
  delay(1000);
}

 

외부 전원 5V 1A 혹은 2A 아답터로 제공해줬다. 일단 한 개 모터만 테스트했다. 앞으로 작은 모터를 돌릴 때는 이 녀석을 써야겠다. ㅎㅎ