DC 모터는 가장 널리 사용되는 모터입니다. 이 모터는 소규모 프로젝트에서 고급 로봇 공학에 이르기까지 거의 모든 곳에서 찾을 수 있습니다. 우리는 이전에 DC Motor를 Arduino, Raspberry pi와 같은 다른 많은 마이크로 컨트롤러와 인터페이스하여 많은 로봇 프로젝트에 사용했습니다. 오늘 우리 는 AVR 마이크로 컨트롤러 Atmega16으로 DC 모터 를 제어 하는 방법을 배웁니다. 그러나 계속 진행하기 전에 DC 모터에 대해 자세히 알아 보겠습니다.
DC 모터는 무엇입니까?
DC 모터는 전기 에너지를 기계 에너지로 변환하는 장치입니다. 특히 DC 모터는 DC 전류를 사용하여 전기 에너지를 기계 에너지로 변환합니다. 모터의 기본 원리는 모터가 회전하는 데 도움이되는 힘을 모터 내에서 생성하기 위해 자기장과 전류 간의 상호 작용입니다. 따라서 전류가 자기장의 코일을 통과하면 자기력이 발생하여 토크를 생성하여 모터가 움직입니다. 모터의 방향은 전류를 반전시켜 제어됩니다. 또한 공급되는 전압에 따라 속도가 달라질 수 있습니다. 마이크로 컨트롤러에는 PWM 핀이 있으므로 모터의 속도를 제어하는 데 사용할 수 있습니다.
이 자습서에서는 Atmega16을 사용 하여 DC 모터 작동을 시연 합니다. L293D 모터 드라이버는 전류의 방향을 바꾸어 이동 방향을 바꾸는 데 사용됩니다. L293D 모터 드라이버는 필요한 전류를 모터에 출력하는 H-Bridge 회로 구성을 사용합니다. 두 개의 푸시 버튼은 모터의 방향을 선택하는 데 사용됩니다. 푸시 버튼 중 하나는 시계 방향 회전을 선택하는 데 사용되고 다른 하나는 DC 모터의 시계 반대 작동을 선택하는 데 사용됩니다.
필요한 구성 요소
- DC 모터 (5V)
- L293D 모터 드라이버
- Atmega16 마이크로 컨트롤러 IC
- 16Mhz 수정 발진기
- 2 개의 100nF 커패시터
- 2 개의 22pF 커패시터
- 누름 단추
- 점퍼 와이어
- 브레드 보드
- USBASP v2.0
- Led (모든 색상)
회로도
DC 모터 제어를위한 Atmega16 프로그래밍
여기서 Atmega16은 USBASP 및 Atmel Studio7.0을 사용하여 프로그래밍됩니다. USBASP를 사용하여 Atmega16을 프로그래밍하는 방법을 모르는 경우 링크를 방문하십시오. 전체 프로그램은 프로젝트가 끝날 때 제공되며 Atmega16에 프로그램을 업로드하고 두 개의 푸시 버튼을 사용하여 DC 모터를 시계 방향과 시계 반대 방향으로 회전합니다.DC 모터는 L293D 모터 드라이버를 사용하여 인터페이스됩니다. 각 푸시 버튼을 누르면 DC 모터가 두 방향으로 회전합니다. 하나의 푸시 버튼은 DC 모터를 시계 방향으로 회전하는 데 사용되고 다른 푸시 버튼은 DC 모터를 반 시계 방향으로 회전하는 데 사용됩니다. 먼저 마이크로 컨트롤러의 CPU 주파수를 정의하고 필요한 모든 라이브러리를 포함합니다.
#define F_CPU 16000000UL #include #include
그런 다음 하나의 변수를 사용 하여 누름 버튼 누름 상태를 추적합니다. 이 변수는 모터의 방향을 정의하는 데 사용됩니다.
int i;
데이터 방향 레지스터를 사용하여 GPIO의 입 / 출력 모드를 선택합니다. 처음에는 누름 버튼을 누르지 않고 모터가 시동되지 않도록 모터 핀의 출력을 낮게 설정하십시오.
DDRA = 03; PORTA & = ~ (1 << 1); PORTA & = ~ (1 << 0);
Atmega16의 PORTA4에 연결된 1 차 누름 버튼이 눌 렸는지 확인하고 누름 버튼의 상태를 변수에 저장합니다.
if (! bit_is_clear (PINA, 4)) { i = 1; PORTA & = ~ (1 << 1); _delay_ms (1000); }
마찬가지로 Atmega16의 PORTA5에 연결된 두 번째 누름 버튼이 눌 렸는지 확인하고 누름 버튼의 상태를 변수에 저장합니다.
그렇지 않으면 (! bit_is_clear (PINA, 5)) { i = 2; PORTA & = ~ (1 << 0); _delay_ms (1000); }
첫 번째 버튼의 상태 가 참이면 DC 모터를 시계 방향으로 돌리고 두 번째 누름 버튼의 상태가 참이면 DC 모터를 반 시계 방향으로 돌립니다.
if (i == 1) { PORTA-= (1 << 0); PORTA & = ~ (1 << 1); } else if (i == 2) { PORTA-= (1 << 1); PORTA & = ~ (1 << 0); }
사용되는 GPIO에 따라 모든 GPIO 핀에 모터 핀을 연결할 수 있습니다. 또한 마이크로 컨트롤러가 DC 모터를 실행하는 데 필요한 전류를 제공 할 수 없기 때문에 모터 드라이버 IC를 사용하여 마이크로 컨트롤러의 부하를 줄이는 것이 중요합니다. DC 모터를 기반으로 한 자세한 내용 및 기타 프로젝트는 주어진 링크를 방문하십시오.
완전한 코드와 데모 비디오 는 다음과 같습니다.