Fogeaters, Light The World.

11

2016-Jan

[아두이노] L293D 모터드라이버를 이용한 DC모터 제어

작성자: title: MoonBlonix IP ADRESS: *.148.87.98 조회 수: 1931

L293D Datasheet :: http://www.datasheets360.com/pdf/624709677179081801



경고 : 모터 큼지막한 것 혹은 작은 모터 두 개 이상을 외부전원 없이 바로 보드에 연결할 경우 보드의 생사를 보장하지 못함



아래 이미지 출처 :: http://blog.danggun.net/2648



1. 테스트 구성


DCMotor_002_003.png


펌웨어는 올리지 말고 바로 아두이노를 연결하여 모터가 돌아가는지 확인합니다.


이제 보라색선을 GND로 옮겨 모터를 멈추게 합시다.

 

각 선은 다음과 같습니다.

보라색선 : Enable

노란색선 : In1

주황색선 : In2

입니다.

 

'Enable'은 모터의 동작 여부를 결정합니다.

전원이 인가되면 '참(True)'가 되어 모터가 동작할 수 있는 상황이 됩니다.

GND가 인가되면 '거짓(False)'가 되어 모터가 동작하지 않습니다.

그리고 'Enable'을 통해 DC모터의 속도를 조절할 수 있습니다.

 

'In1', 'In2'는 한쪽은 '참(True)', 한쪽은 '거짓(False)'일 때만 모터가 동작합니다.

단지 둘 다 '참(True)'이거나 '거짓(False)'이라면 동작하지 않습니다.

그리고 'In1'이 '참(True)'이라면 정방향 'In2'가 '참(True)'이라면 역방향으로 모터가 동작합니다.

표로 보자면 다음과 같습니다.

 

Enable(보라색)In1(노란색)In2(주황색)결과
TrueTrueTrue멈춤
TrueTrueFalse정방향
TrueFalseTrue역방향
TrueFalseFalse멈춤

 

'Enable'가 'False'일때는 모터가 동작 하지 않습니다.



2. 양방향 제어


이제 'Enable', 'In1', 'In2'를 각각 11번, 10번, 9번에 연결하고 아두이노로 제어해봅시다.


DCMotor_002_004.png



이제 '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. 외부 전원 사용하기


DCMotor_002_006.png

profile

title: MoonBlonix

2016.01.13 11:39
*.148.87.98

속도를 제어하려면 Enable 핀에 pwm 을 주면 된다.

아두이노라면 일반적으로 그냥 analogwirte 쓰면 되고 AVR 이라면 490 Hz (아두이노 analgwrite 의 주파수) pwm을 만들어 쓰면 된다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 [Web] 클라우드 IDE + 2 title: MoonBlonix 2017-06-25 15126
12 AVR 타이머/카운터 인터럽트 레지스터 file + 2 title: MoonBlonix 2016-01-12 2048
» [아두이노] L293D 모터드라이버를 이용한 DC모터 제어 file + 1 title: MoonBlonix 2016-01-11 1931
10 리눅스 보안 기초 + 1 title: MoonBlonix 2016-01-11 1704
9 라즈베리파이 각종 강좌(외부링크) title: MoonBlonix 2016-01-10 1687
8 라즈베리파이 기초작업 (절전모드, 시간, 한글, 계정변경, 관리자권한 등) title: MoonBlonix 2016-01-10 1910
7 한번에 끝내는 Ubuntu 웹서버세팅 + 1 title: MoonBlonix 2016-01-09 1905
6 AVR 128 기동하기 title: MoonBlonix 2016-01-09 2041
5 라즈베리파이 무선랜 설정 (고정IP) file title: MoonBlonix 2016-01-09 1852
4 라즈베리파이 무선랜 설정 (유동IP) title: MoonBlonix 2016-01-09 1664
3 네임서버, DDOS 공격차단, 트래픽 감소 -> CloudFlare title: MoonBlonix 2016-01-08 1995
2 도메인 네임 서버와 DNS - Domain Name System에 대해 title: MoonBlonix 2016-01-08 1642
1 cURL 이용한 웹프로그래밍 title: MoonBlonix 2015-12-13 1814