반응형

이전 글 http://deneb21.tistory.com/277 에서 L298N에 DC모터 2개와 아두이노를 연결하여 각각의 모터를 정회전, 역회전 컨트롤 하는 방법을 알아보았다. 이번 글에서는 연결된 모터의 속도를 제어하는 방법을 알아보겠다. 만약 글의 내용이 잘 이해가 가지 않는다면 1편을 참고하면 된다. 모터의 속도 제어는 L298N의 ENA(모터A 제어), ENB(모터B 제어) 단자에 PWM 신호를 주어 이루어진다. 여기에서는 DC모터를 1개 사용하여 ENA 단자를 통하여 속도를 제어해 보겠다. 모터 2개를 제어할 경우에도 마찬가지 방법으로 ENB 단자를 추가로 이용하면 된다.



위의 그림에서 ENA 부분에 꼽혀 있는 점퍼를 뽑고 여기에 아두이노의 PWM 핀을 연결하면 된다. 당연히 모터 B의 제어를 위해서는 ENB의 점퍼를 뽑고 연결하면 된다.


아두이노 및 외부전원과 모터의 연결은 다음과 같다.



■ fritzing 파일

L298N_DC_Motor_with_Speed_Control.fzz


모터의 속도 제어를 위한 PWM 신호는 0~255 까지이다. 0은 정지상태이고 숫자가 높아질 수록 모터의 회전수가 빨라지게 된다. 위의 그림에서 아두이노에 연결된 핀인 6번핀에 analogWrite 를 이용하여 PWM 신호를 L298N에 보내어 모터의 회전수를 조절하게 된다.


소스

loop 안을 보면 50% 출력으로 모터를 회전, 역회전하고 최대속도로 회전, 역회전 하는 것을 볼 수 있다. 또한 맨 마지막을 보면 모터는 정회전을 하도록 했지만 analogWrite 값을 0을 주어 모터는 정지상태가 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
void setup() {
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
}
 
void loop() 
{
        //최대속도의 50%로 정회전
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        analogWrite(6127);
        delay(3000);
 
        //최대속도의 50% 역회전
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
        analogWrite(6127);
        delay(3000);
 
        //최대속도로 정회전
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        analogWrite(6255);
        delay(3000);
 
        //최대속도로 역회전
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
        analogWrite(6255);
        delay(3000);
 
        //정지 (7번핀에 HIGH를 주어도 PWM 핀에 값을 0을 주었기 때문에 정지함)
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        analogWrite(60);
        delay(3000);
}
cs




이상으로 L298N을 이용하여 모터의 속도를 제어하는 방법을 알아보았다.

반응형

+ Recent posts