AVR로 DC모터 제어
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를 켜도록 해놓았습니다.
- #include <avr/io.h>
- #include <util/delay.h>
- int main(void)
- {
- DDRB = 0xFF;
- PORTB = 0x00;
- DDRC = 0x00;
- DDRD = 0xFF;
- while(1)
- {
- if ( PINC == 0x01 )
- {
- PORTD=0xFF;
- PORTB = 0b00101011;
- _delay_ms(50);
- }
- else
- {
- PORTD = 0x00;
- PORTB = 0b00010111;
- _delay_ms(50);
- }
- }
- return 0;
- }
참고..
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-/