데이터계측분석/전기전자 기술자료

아두이노로 서보모터 PWM제어

에이티에스 2023. 9. 16. 08:14
728x90

서보 모터의 기초

서보 모터란?

서보 모터는 위치 피드백을 사용하여 모션과 최종 위치를 제어하는 폐쇄 루프 시스템입니다. 서보 모터에는 여러 유형이 있으며 주요 기능은 샤프트의 위치를 정밀하게 제어하는 기능입니다.

 

 

산업용 서보 모터에서 위치 피드백 센서는 일반적으로 고정밀 엔코더인 반면, 소형 RC 또는 취미 서보에서 위치 센서는 일반적으로 간단한 전위차계입니다. 이러한 장치에 의해 캡처된 실제 위치는 오류 감지기로 피드백되어 대상 위치와 비교됩니다. 그런 다음 오류에 따라 컨트롤러는 모터의 실제 위치를 목표 위치와 일치하도록 수정합니다.

 

 

반응형

서보 모터 동작방식

서보 내부에는 DC 모터, 기어박스, 전위차계 및 제어 회로의 네 가지 주요 구성 요소가 있습니다. DC 모터는 고속 및 저토크이지만 기어박스는 속도를 약 60RPM으로 낮추는 동시에 토크를 증가시킵니다.

 

전위차계는 최종 기어 또는 출력 샤프트에 부착되므로 모터가 회전하면 전위차계도 회전하여 출력 샤프트의 절대 각도와 관련된 전압을 생성합니다. 제어 회로에서 이 전위차계 전압은 신호 라인에서 나오는 전압과 비교됩니다. 필요한 경우 컨트롤러는 두 신호의 차이가 0에 도달할 때까지 모터가 어느 방향으로든 회전할 수 있도록 하는 통합 H-브리지를 활성화합니다.

서보 모터는 신호 라인을 통해 일련의 펄스를 전송하여 제어됩니다. 제어 신호의 주파수는 50Hz이거나 20ms마다 펄스가 발생해야 합니다. 펄스의 폭은 서보의 각도 위치를 결정하며 이러한 유형의 서보는 일반적으로 180도 회전할 수 있습니다(물리적 이동 제한이 있음).

 

서보 모터는 전기 기계 장치입니다. PWM(Pulse Width Modulation) 신호를 수신하고 온타임 펄스 폭을 측정하는 전자 보드가 있습니다. 서보 모터에는 샤프트 위치를 추적하는 데 도움이 되는 전위차계도 있습니다.

임베디드 보드는 샤프트 위치의 의도하지 않은 이동을 지속적으로 감지하고 수정합니다. 목표 위치는 샤프트 위치와 사용자 입력 사이의 지속적인 오류 수정에 의해 유지됩니다.

 

 

반응형

 

PWM 제어를 위해서는 세개의 핀이 사용됩니다. 

신호명 색상 설명
PWM 황색 모터에 대한 입력 제어 신호
V+ 빨강 양극 공급 단자
Ground 갈색 접지 단자

 

서보모터를 제어하기 위해서 주파수가 50Hz인 PWM 신호를 보내면 주파수는 40Hz에서 400Hz 사이가 될 수 있습니다.

PWM 신호의 주파수를 증가시키면 서보가 새 위치에 도달하는 시간이 줄어듭니다. 400Hz는 2.5ms 대 25ms 지연(40Hz)의 지연을 의미합니다. 이는 정밀도 향상(40Hz)과 작동 속도 향상(400Hz) 사이의 균형입니다.

 

 

PWM 펄스 폭을 1ms에서 2ms로 변경하여 서보 모터 샤프트를 0°에서 180°로 회전시킬 수 있습니다.

 

일반적인 서보 모터 응용 분야 - 로봇 팔 제어

 

 

반응형

 

일반적으로 지속 시간이 1ms인 펄스는 0도 위치, 1.5ms 지속 시간이 90도, 2ms에서 180도에 해당합니다. 펄스의 최소 및 최대 지속 시간은 때때로 브랜드에 따라 다를 수 있으며 0도의 경우 5.0ms, 2도 위치의 경우 5.180ms가 될 수 있습니다.

 

아두이노 서보 모터 제어

Arduino를 사용하여 10kg-cm의 스톨 토크를 가진 금속 기어를 특징으로 하는 고토크 서보인 MG996R를 제어합닏. 서보의 스톨 전류인 2.5A이며 구동 전류는 500mA에서 900mA이고 동작 전압은 4.8에서 7.2V입니다.

 

반응형

 

이 구성의  회로도는 다음과 같습니다. 

서보의 제어 핀을 Arduino 보드의 디지털 핀에 연결하고 접지와 양극 와이어를 외부 5V 전원 공급 장치에 연결하고 Arduino 접지를 서보 접지에 연결하기만 하면 됩니다.

S90 Micro Servo를 사용하는 경우 5V Arduino 핀에서 직접 전원을 공급할 수 있습니다.

 

S90 마이크로 서보는 약 100-200mA 무부하 작동 전류로 전류 소비가 낮지만 스톨 전류는 약 500-700mA입니다. 반면에 Arduino 5V 핀은 USB를 통해 전원이 공급되는 경우 약 500mA만 출력할 수 있고 배럴 커넥터를 통해 전원이 공급되는 경우 최대 1A까지 출력할 수 있습니다.

 

반응형

서보 모터 제어 Arduino 코드

이제 서보 모터를 제어하기 위한 Arduino 코드를 살펴보겠습니다.  서보가 연결되는 핀을 정의하고, 해당 핀을 출력으로 정의하고, 루프 섹션에서 앞서 설명한 대로 특정 지속 시간과 주파수로 펄스를 생성하기만 하면 됩니다.

 

/*
     Servo Motor Control - 50Hz Pulse Train Generator
           by Dejan, https://howtomechatronics.com
*/

#define servoPin 9

void setup() {
  pinMode(servoPin, OUTPUT);
}

void loop() {
   // A pulse each 20ms
    digitalWrite(servoPin, HIGH);
    delayMicroseconds(1450); // Duration of the pusle in microseconds
    digitalWrite(servoPin, LOW);
    delayMicroseconds(18550); // 20ms - duration of the pusle
    // Pulses duration: 600 - 0deg; 1450 - 90deg; 2300 - 180deg
}

 

펄스 지속 시간이 0.6ms인 펄스는 0도 위치, 1.45ms에서 90도 및 2.3ms에서 180도에 해당합니다.

 

추가적으로  Arduino를 사용하여 서보를 제어하는 보다 편리한 방법을 살펴보겠습니다. 그것은 Arduino 서보 라이브러리를 사용하고 있습니다.

 

/*
     Servo Motor Control using the Arduino Servo Library
           by Dejan, https://howtomechatronics.com
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

void setup() {
  myservo.attach(9,600,2300);  // (pin, min, max)
}

void loop() {
  myservo.write(0);  // tell servo to go to a particular angle
  delay(1000);
  
  myservo.write(90);              
  delay(500); 
  
  myservo.write(135);              
  delay(500);
  
  myservo.write(180);              
  delay(1500);                     
}

 

여기서는 라이브러리를 포함하고, 서보 객체를 정의하고, attach() 함수를 사용하여 서보가 연결된 핀을 정의하고 펄스 지속 시간의 최소값과 최대값을 정의하기만 하면 됩니다. 그런 다음 write() 함수를 사용하여 서보의 위치를 0도에서 180도까지 설정하기만 하면 됩니다.

 

728x90
반응형
그리드형