서보 모터는 로봇, 자동화 기계, 로봇 암 등과 같이 정밀한 제어가 필요한 곳에 널리 사용됩니다. 그러나 서보 모터의 범위는 이것에 제한되지 않고 많은 응용 분야에서 사용될 수 있습니다. 서보 모터의 기본, 이론 및 작동 원리에 대한 자세한 내용은 링크를 따르십시오.
이전에 서보 모터를 여러 마이크로 컨트롤러와 인터페이스했습니다.
- ARM7-LPC2148과 서보 모터 인터페이스
- 서보 모터와 MSP430G2 인터페이스
- 서보 모터와 STM32F103C8 인터페이스
- MPLAB 및 XC8을 사용하여 서보 모터와 PIC 마이크로 컨트롤러의 인터페이스
- Arduino Uno와 서보 모터 인터페이스
- 8051 마이크로 컨트롤러와 인터페이싱하는 서보 모터
이 튜토리얼에서는 Atmel Studio 7.0을 사용하여 Micro Servo Motor와 Atmega16 AVR Microcontroller 를 연결합니다. 서보 모터는 4.8-6V에서 작동하도록 평가됩니다. 펄스열 또는 PWM 신호를 적용하여 회전 각도와 방향을 제어 할 수 있습니다. 서보 모터는 완전한 360도 회전을 위해 움직일 수 없으므로 연속 회전이 필요하지 않은 곳에 사용됩니다. 회전 각도는 0-180도 또는 (-90) – (+90) 도입니다.
필요한 구성 요소
- SG90 Tower Pro 마이크로 서보 모터
- Atmega16 마이크로 컨트롤러 IC
- 16Mhz 수정 발진기
- 2 개의 100nF 커패시터
- 2 개의 22pF 커패시터
- 누름 단추
- 점퍼 와이어
- 브레드 보드
- USBASP v2.0
- Led (모든 색상)
서보 모터의 핀 설명
- 빨간색 = 양극 전원 공급 장치 (4.8V ~ 6V)
- 갈색 = 접지
- 주황색 = 제어 신호 (PWM 핀)
회로도
AVR 마이크로 컨트롤러를 사용하여 서보 모터 를 회전하려면 아래 그림과 같이 모든 구성 요소를 연결하십시오. 4 개의 PWM 핀이 있으며 Atmega16의 모든 PWM 핀을 사용할 수 있습니다. 이 튜토리얼에서는 PWM 생성을 위해 핀 PD5 (OC1A)를 사용합니다. PD5는 입력 신호 핀인 서보 모터의 주황색 선에 직접 연결됩니다. 전원 표시기에 대한 LED 색상을 연결하십시오. 또한 필요할 때마다 Atmega16을 재설정하기 위해 재설정 핀에 하나의 푸시 버튼을 연결하십시오. Atmega16을 적절한 수정 발진기 회로와 연결합니다. 모든 시스템은 5V 전원으로 전원이 공급됩니다.
전체 설정은 다음과 같습니다.
AVR ATmega16으로 서보 모터 제어
스테퍼 모터와 마찬가지로 서보 모터는 ULN2003 또는 L293D 모터 드라이버와 같은 외부 드라이버가 필요하지 않습니다. PWM만으로도 서보 모터를 구동하기에 충분하며 마이크로 컨트롤러에서 PWM을 생성하는 것은 매우 쉽습니다. 이 서보 모터의 토크는 2.5kg / cm이므로 더 큰 토크가 필요한 경우이 서보는 적합하지 않습니다.
우리가 알고 있듯이 서보 모터는 20ms마다 펄스를 찾고 포지티브 펄스의 길이는 서보 모터의 회전 각도를 결정합니다.
20ms 펄스를 얻는 데 필요한 주파수는 50Hz (f = 1 / T)입니다. 따라서이 서보 모터의 경우 사양에 따르면 0도에는 0.388ms, 90도에는 1.264ms, 180도에는 2.14ms 펄스가 필요합니다.
지정된 펄스를 생성하기 위해 Atmega16의 Timer1을 사용합니다. CPU 주파수는 16Mz이지만 마이크로 컨트롤러에 연결된 주변 장치가 많지 않고 마이크로 컨트롤러에 많은 부하가 없기 때문에 1Mhz 만 사용할 것입니다. 프리스케일러는 1로 설정되어 있습니다. 따라서 클럭은 1Mhz / 1 = 1Mhz (1uS)로 나누어 져 있습니다. Timer1 은 고속 PWM 모드, 즉 모드 14로 사용됩니다. 다양한 타이머 모드를 사용하여 원하는 펄스 트레인을 생성 할 수 있습니다. 참조는 아래에 제공되며 Atmega16 공식 데이터 시트에서 자세한 설명을 찾을 수 있습니다.
Timer1을 고속 PWM 모드 로 사용 하려면 ICR1 (Input Capture Register1)의 TOP 값이 필요합니다. TOP 값을 찾으려면 아래 주어진 공식을 사용하십시오.
f pwm = f cpu / nx (1 + TOP)
이것은 다음과 같이 단순화 될 수 있습니다.
TOP = ( f cpu / ( f pwm xn)) – 1
여기서 N = 프리스케일러 세트 값
f cpu = CPU 주파수
f pwm = 50Hz 인 서보 모터 펄스 폭
이제 필요한 모든 값이 있으므로 ICR1 값을 계산합니다.
N = 1, f cpu = 1MHz, f pwm = 50Hz
위의 공식에 값을 입력하면
ICR1 = 1999
즉, 180 0 ICR1은 1999 여야합니다.
16MHz 크리스탈과 프리스케일러가 16으로 설정된 경우
ICR1 = 4999
이제 스케치에 대해 논의하겠습니다.
USBasp를 사용하여 Atmega16 프로그래밍
서보 모터 제어를위한 완전한 AVR 코드 는 다음과 같습니다. 코드는 간단하고 쉽게 이해할 수 있습니다.
여기에서 우리는 0에서 서보 모터 회전 할 ATMEGA16를 코딩 한 0 180 0 180에서 다시 돌아 오는 0 0 0. 이 전환은 9 단계 (0 – 45 – 90 – 135 – 180 – 135 – 90 – 45 – 0)로 완료됩니다. 지연을 위해 Atmel Studio의 내부 라이브러리를 사용합니다.
USBASP v2.0을 연결하고이 링크의 지침에 따라 USBASP 및 Atmel Studio 7.0을 사용하여 Atmega16 AVR 마이크로 컨트롤러 를 프로그래밍 합니다. 스케치를 작성하고 외부 도구 모음을 사용하여 업로드하십시오.
데모 비디오가 포함 된 완전한 코드는 다음과 같습니다. 또한 로봇 공학에서의 중요성을 알고 서보 모터에 대해 자세히 알아보십시오.