AVR/Atmega128 강좌

AVR로 DC모터 제어

webnautes 2015. 11. 3. 18:09
반응형

 

 

L293D를 이용하여 DC 모터의 방향 제어하기

DC 모터의 방향제어는 간단하다. 단지 극성을 반대로 하기만 하면 된다. 모든 DC 모터는 2개의 터미널로 전원을 공급받기 때문이다.

+와 –를 모터에 연결하면 한쪽 방향으로 모터가 돈다. 그런데 극성을 반대로 연결하게 되면 DC모터는 반대로 돌게 된다.



http://www.electroons.com/electroons/dc_motor_control.html

 

마이크로컨트롤러에서 5V와 0V 값을 변경함으로써 모터의 극성을 바꾸는 것도 가능할거 같지만 마이크로컨트롤러는 모터가 요구하는 5V보다 큰 전원을 입력하면 고장날 염려가 있다. 그래서 필요한 것이 H Bridge이다.

 

H Bridge 회로에는 4개의 스위치가 존재한다. 이 스위치를 이용하여 모터의 방향을 제어하는 게 가능하다. High side left와 Low Side right 스위치를 켜게되면 모터는 정방향으로 회전하게 된다.

반대편 쌍의 스위치들을 켜게되면 모터는 역방향으로 회전하게 된다.

 

 

L293D에선 2개의 터미널을 사용하여 아래와 같이 해주면 모터를 조정할 수 있다.

 

Input1

Input2

모터 상태

0

1

정방향 회전

1

0

역방향 회전

0

0

모터 정지

1

1

모터 정지

 

 

 

L239D에서 0V라고 적힌 부분들은(4개) 모두 그라운드에 연결해주어야 합니다.

 

 

태스트삼아.. 포트C의 0번핀에 연결된 버튼을 누르면 모터의 회전방향이 바뀌고 포트D에 연결된 LED를 켜도록 해놓았습니다.

  1. #include <avr/io.h>  
  2. #include <util/delay.h>  
  3.     
  4.     
  5. int main(void)  
  6. {  
  7.     DDRB = 0xFF;  
  8.     PORTB = 0x00;  
  9.     
  10.     DDRC = 0x00;  
  11.     DDRD = 0xFF; 
  12.     
  13.     while(1)  
  14.     {  
  15.         if ( PINC == 0x01 )  
  16.         {  
  17.             PORTD=0xFF;  
  18.             PORTB = 0b00101011;  
  19.             _delay_ms(50);  
  20.         }  
  21.         else  
  22.         {  
  23.             PORTD = 0x00;  
  24.             PORTB = 0b00010111;  
  25.             _delay_ms(50);  
  26.         }  
  27.     }  
  28.     
  29.     return 0;  
  30. }  

 

 

참고..

http://www.embedds.com/interfacing-dc-motor-to-atmega32/

http://www.electroons.com/electroons/dc_motor_control.html

http://www.instructables.com/id/GOduino-II-Arduino-L293D-Variable-Speed-Motor-/

반응형