11
2016-Jan
[아두이노] L293D 모터드라이버를 이용한 DC모터 제어
작성자: Blonix
IP ADRESS: *.148.87.98 조회 수: 1931
L293D Datasheet :: http://www.datasheets360.com/pdf/624709677179081801
경고 : 모터 큼지막한 것 혹은 작은 모터 두 개 이상을 외부전원 없이 바로 보드에 연결할 경우 보드의 생사를 보장하지 못함
아래 이미지 출처 :: http://blog.danggun.net/2648
1. 테스트 구성
펌웨어는 올리지 말고 바로 아두이노를 연결하여 모터가 돌아가는지 확인합니다.
이제 보라색선을 GND로 옮겨 모터를 멈추게 합시다.
각 선은 다음과 같습니다.
보라색선 : Enable
노란색선 : In1
주황색선 : In2
입니다.
'Enable'은 모터의 동작 여부를 결정합니다.
전원이 인가되면 '참(True)'가 되어 모터가 동작할 수 있는 상황이 됩니다.
GND가 인가되면 '거짓(False)'가 되어 모터가 동작하지 않습니다.
그리고 'Enable'을 통해 DC모터의 속도를 조절할 수 있습니다.
'In1', 'In2'는 한쪽은 '참(True)', 한쪽은 '거짓(False)'일 때만 모터가 동작합니다.
단지 둘 다 '참(True)'이거나 '거짓(False)'이라면 동작하지 않습니다.
그리고 'In1'이 '참(True)'이라면 정방향 'In2'가 '참(True)'이라면 역방향으로 모터가 동작합니다.
표로 보자면 다음과 같습니다.
Enable(보라색) | In1(노란색) | In2(주황색) | 결과 |
True | True | True | 멈춤 |
True | True | False | 정방향 |
True | False | True | 역방향 |
True | False | False | 멈춤 |
'Enable'가 'False'일때는 모터가 동작 하지 않습니다.
2. 양방향 제어
이제 'Enable', 'In1', 'In2'를 각각 11번, 10번, 9번에 연결하고 아두이노로 제어해봅시다.
이제 'Enable'은 항상 'True'로 두고 'In1'과 'In2'는 시리얼 모니터에서 보낸 데이터에 따라서 동작하도록 작성해 봅시다.
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 38 39 40 41 42 43 44 45 46 47 | int enablePin = 11; int in1Pin = 10; int in2Pin = 9; int nSwitch = 0; boolean bReverse = false ; int nSpeed = 70; String sMeg = "Switch : " ; void setup() { Serial.begin(9600); pinMode(enablePin, OUTPUT); pinMode(in1Pin, OUTPUT); pinMode(in2Pin, OUTPUT); } void loop() { if (Serial.available()) { nSwitch = Serial.read(); } if ( nSwitch == '1' ) { bReverse = true ; } else { bReverse = false ; } setMotor(nSpeed, bReverse); Serial.println(sMeg + int (nSwitch) + ", Speed : " + int (nSpeed)); delay(1000); } void setMotor( int nSpeed, boolean bReverse) { analogWrite(enablePin, nSpeed); digitalWrite(in1Pin, ! bReverse); digitalWrite(in2Pin, bReverse); } |
업로드가 끝나면 모터가 돌기 시작합니다.
시리얼 모니터를 열고 '1'나 '0'을 입력하여 모터의 동작 방향을 바꿔봅시다.
3. 외부 전원 사용하기
속도를 제어하려면 Enable 핀에 pwm 을 주면 된다.
아두이노라면 일반적으로 그냥 analogwirte 쓰면 되고 AVR 이라면 490 Hz (아두이노 analgwrite 의 주파수) pwm을 만들어 쓰면 된다.