Добавить в корзинуПозвонить
Найти в Дзене
Радиотехника

Сервопривод SG90 (Arduino)

Сервопривод — механический привод с автоматической коррекцией состояния через внутреннюю отрицательную обратную связь, в соответствии с параметрами, заданными извне. Принцип работы сервопривода достаточно прост, он заключается в подаче управляющего напряжения (сигнала) на контроллер (блок управления) сервопривода, который непосредственно управляет работой электродвигателя. Электродвигатель через редуктор передает крутящий момент на исполнительное уст-во. Так-же к контроллеру подключен датчик обратной связи (потенциометр), который отслеживает угол поворота редуктора и как только будет достигнуто установленное положение, контроллер прекратит работу электродвигателя. Движение сервопривода прекратится до появления новых сигналов управления. Для примера рассмотрим работу сервопривода SG90. Сервопривод SG90 используется в основном для управления небольшими легкими механизмами, угол поворота которых ограничен диапазоном от 0° до 180°. Технические характеристики сервопривода SG90: Для управлен

Сервопривод — механический привод с автоматической коррекцией состояния через внутреннюю отрицательную обратную связь, в соответствии с параметрами, заданными извне.

.
.

Принцип работы сервопривода достаточно прост, он заключается в подаче управляющего напряжения (сигнала) на контроллер (блок управления) сервопривода, который непосредственно управляет работой электродвигателя. Электродвигатель через редуктор передает крутящий момент на исполнительное уст-во. Так-же к контроллеру подключен датчик обратной связи (потенциометр), который отслеживает угол поворота редуктора и как только будет достигнуто установленное положение, контроллер прекратит работу электродвигателя. Движение сервопривода прекратится до появления новых сигналов управления.

Для примера рассмотрим работу сервопривода SG90. Сервопривод SG90 используется в основном для управления небольшими легкими механизмами, угол поворота которых ограничен диапазоном от 0° до 180°.

Технические характеристики сервопривода SG90:

  • Диапазон вращения: 180°.
  • Рабочее напряжение: 4,8 … 6 В.
  • Скорость вращения: 60° за 0,12 сек при 4,8 В.
  • Размеры: 22,2 × 11,8 × 31 мм.
  • Крутящий момент: 1,8 кгc·см при 4,8 В.
  • Масса: 9 г.
  • Температура использования: от -30°C до +60°C.

Для управления сервоприводом с удержанием угла необходимо подавать сигнал PDM (Pulse Duration Modulation) — импульсы постоянной частоты и переменной ширины. Для SG90 период следования импульсов составляет 20 мс, а ширина импульсов может меняться от 544 мкс для поворота в 0 ° и до 2400 мкс для поворота в 180 °.

-2

При работе сервопривода SG90 от платы Arduino могут наблюдаться значительные просадки питающего напряжения 5 В, особенно при быстром изменении угла поворота. Поэтому рекомендуется использовать внешнее питание сервопривода или подключить к цепи питания 5 В электролитический конденсатор 470-1000 мкФ.

-3

Для управления сервоприводом на платформе Arduino можно использовать библиотеку Servo, которая значительно облегчает работу с различными сервоприводами, а так же  упрощает программный код. Но так же можно управлять сервоприводом без использования библиотек.

Ниже будут показаны два примера, первый пример для медленного  поворота угла сервопривода, с использованием библиотеки и без нее, второй пример для быстрого изменения угла поворота сервопривода.

Для всех примеров для управления сервоприводом используется цифровой выход платы Arduino Nano D9.

Медленное изменения угла поворота сервопривода:

#include <Servo.h>
Servo myservo;

int pos = 0;   

void setup() {  myservo.attach(9);  
}
void loop() {  for (pos = 0; pos <= 180; pos += 1) {
   // in steps of 1 degree    myservo.write(pos);              
   delay(30);                       
 }  for (pos = 180; pos >= 0; pos -= 1) {
   myservo.write(pos);              
   delay(30);                       
 } }

Тоже самое но без библиотеки:

int servoPin = 9;

void setup(){  pinMode(servoPin, OUTPUT); }
void loop(){  for(int i=0;i<=180;i++){      servoPulse(servoPin, i);      delay(30);  }  
 delay(100);

 for(int i=180;i>=0;i--){      servoPulse(servoPin, i);      delay(30);  }     
}
void servoPulse(int pin, int angle){  int timess;  timess = map(angle, 0,180,  544, 2400);
 digitalWrite(pin, HIGH);
 delayMicroseconds(timess);
 digitalWrite(pin, LOW);
 delay(20 - timess / 1000); }

Быстрое изменения угла поворота сервопривода:

#include <Servo.h>
Servo myservo;

void setup() {  myservo.attach(9);
}
void loop() {    myservo.write(0);    
   delay(1000);  
   myservo.write(90);    
   delay(1000);
   myservo.write(180);    
   delay(1000);  
   myservo.write(90);    
   delay(1000);     
}

Тоже самое но без библиотеки:

int servoPin = 9;
int val;
void setup(){  pinMode(servoPin, OUTPUT); }
void loop(){      val = 0;      for (int i = 0; i <= 50; i++){servoPulse(servoPin, val);}      delay(1000);      val = 90;      for (int i = 0; i <= 50; i++){servoPulse(servoPin, val);}      delay(1000);      val = 180;      for (int i = 0; i <= 50; i++){servoPulse(servoPin, val);}      delay(1000);      val = 90;      for (int i = 0; i <= 50; i++){servoPulse(servoPin, val);}      delay(1000); }

void servoPulse(int pin, int angle){  int pulseWidth = map(angle, 0, 180 , 544, 2480);
 Serial.println(pulseWidth);  digitalWrite(pin, HIGH);
 delayMicroseconds(pulseWidth);
 digitalWrite(pin, LOW);
 delayMicroseconds(20000 - pulseWidth); }

Сервопривод SG90 (Arduino) — rcl-radio.ru