-
아두이노 | DC모터 드라이버 L293DTechnology/Arduino 2024. 1. 5. 17:00
1. H-브리지
DC모터의 회전 속력뿐만 아니라 회전 방향까지 제어하기 위해서는 여러 개의 트랜지스터를 조합해 특별한 회로를 구성해야 한다. 트랜지스터 4개를 사용해 위 그림과 같이 H 모양의 회로를 구성할 수 있는데, 이를 H-브리지(H-bridge) 회로라 한다. 회로를 구성하는 트랜지스터들을 적절하게 제어하면 DC모터에 흐르는 전류의 방향을 바꿔 모터의 회전 방향을 제어할 수 있다. 위와 같은 H-브리지 회로에서 트랜지스터 S1과 S3만 동작시키면 DC모터의 구동축이 한 방향으로 회전한다. 반대로 트랜지스터 S2와 S4만 동작시키면 DC모터에 흐르는 전류의 방향이 바뀌어 구동축이 반대 방향으로 회전한다.
2. DC모터 드라이버 L293D
L293D는 H-브리지 회로가 내장된 전자 소자이다. DC모터를 한 방향으로만 제어할 경우 최대 4개까지 제어할 수 있으며, 양방향으로 제어할 경우 최대 2개까지 제어할 수 있다. DC모터를 양방향으로 제어하려는 경우에는 DC모터의 두 단자를 출력 신호 1번 단자와 2번 단자, 혹은 출력신호 3번 단자와 4번 단자에 연결하고 입력 신호 단자에 제어 신호를 입력하면 된다. DC모터를 출력 신호 1번 단자와 2번 단자에 연결한 경우, 입출력 활성화 단자에 디지털 신호를 입력한 상태에서 입력 신호 1번 단자에만 제어 신호를 입력하면 DC모터가 한 방향으로 회전하고, 입력 신호 2번 단자에만 제어 신호를 입력하면 다른 방향으로 회전한다. 트랜지스터를 이용해 DC모터를 제어했던 것과 마찬가지로, 입력 신호 단자에 PWM 제어 신호를 입력하면 DC모터의 회전 속력을 제어할 수 있다. L293D는 아래 링크로 접속하면 구매할 수 있다.
3. 확인사항
사용하고자 하는 DC모터를 결정했다면 DC모터의 부하를 견딜 수 있는 DC모터 드라이버를 선택해야 한다. DC모터 드라이버를 선택할 때 대표적으로 살펴볼 것은 최대 허용 공급전압과 최대 허용 전류인데, 제조사에서 제공하는 L293D의 데이터시트에 의하면 L293D의 최대 허용 공급전압과 최대 허용 전류는 아래 표와 같다. 만약 사용하고자 하는 DC모터의 부하가 이보다 크다면 L293D보다 더 큰 부하를 견딜 수 있는 DC모터 드라이버를 찾아야 한다. 반대로 DC모터 드라이버로 L293D를 사용하고자 한다면, L293D가 견딜 수 있는 부하보다 적은 부하를 필요로 하는 DC모터를 찾아야 한다.
모델명 L293D 최대 허용 공급전압 36 V 최대 허용 전류 0.6 A 허용 전력 5 W 4. 예제
4.1. 회로 구성
4.2. 프로그램 작성
int En12 = 12; // 정수형 변수 선언 후 디지털 핀 번호 12로 초기화 int In3 = 11; // 정수형 변수 선언 후 디지털 핀 번호 11로 초기화 int In4 = 10; // 정수형 변수 선언 후 디지털 핀 번호 10으로 초기화 void setup() { pinMode(En12, OUTPUT); // 디지털 12번 핀을 출력(OUTPUT) 모드로 설정 pinMode(In3, OUTPUT); // 디지털 11번 핀을 출력(OUTPUT) 모드로 설정 pinMode(In4, OUTPUT); // 디지털 10번 핀을 출력(OUTPUT) 모드로 설정 } void loop() { // DC모터 활성화 digitalWrite(En12, HIGH); // 디지털 12번 핀에 디지털 신호 HIGH 출력 analogWrite(In3, 255); // 디지털 11번 핀에 PWM 아날로그 신호 5V 출력 analogWrite(In4, 0); // 디지털 10번 핀에 PWM 아날로그 신호 0V 출력 delay(1000); // 1000 ms 대기 analogWrite(In3, 255); analogWrite(In4, 255); // 디지털 10번 핀에 PWM 아날로그 신호 5V 출력 delay(1000); analogWrite(In3, 0); // 디지털 11번 핀에 PWM 아날로그 신호 0V 출력 analogWrite(In4, 255); delay(1000); analogWrite(In3, 0); analogWrite(In4, 0); delay(1000); // DC모터 회전 가속 analogWrite(In4, 0); for (int i = 1; i <= 255; i++) // 10 ms 간격으로 점점 빠르게 회전 { analogWrite(In3, i); // 디지털 11번 핀에 PWM 아날로그 신호 i 출력 delay(10); // 10 ms 대기 } delay(1000); // DC모터 회전 감속 for (int i = 254; i >= 0; i--) // 10 ms 간격으로 점점 느리게 회전 { analogWrite(In3, i); delay(10); } delay(1000); // DC모터 역회전 가속 analogWrite(In3, 0); for (int i = 1; i <= 255; i++) { analogWrite(In4, i); // 디지털 10번 핀에 PWM 아날로그 신호 i 출력 delay(10); } delay(1000); // DC모터 역회전 감속 for (int i = 254; i >= 0; i--) { analogWrite(In4, i); delay(10); } delay(1000); // DC모터 비활성화 digitalWrite(En12, LOW); // 디지털 12번 핀에 디지털 신호 LOW 출력 delay(1000); }
[함께 읽으면 좋은 페이지]
참고문헌
- 최훈. (2022). 팅커캐드 & 아두이노. 길벗캠퍼스.
- Texas Instruments. (2002). L293, L293D Quadruple Half-H Drivers. SparkFun. https://www.sparkfun.com/datasheets/Components/l293.pdf. 2023.10.26.
반응형'Technology > Arduino' 카테고리의 다른 글
아두이노 | DC모터 드라이버 L298N 모듈 (0) 2024.01.12 아두이노 | DC모터 드라이버 L293D 모듈 (1) 2024.01.05 아두이노 | DC모터 PWM 제어 (0) 2023.12.29 아두이노 | MOSFET IRF520 모듈 (0) 2023.12.22 아두이노 | 릴레이 DC 5V 모듈 (0) 2023.12.15