Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Полное руководство по управлению сервоприводами с Arduino

Что такое сервопривод?

Сервопривод — это замкнутая система с обратной связью по положению, обеспечивающая точный контроль угла поворота вала. В промышленных сервоприводах используется энкодер, в хоббийных (RC) — потенциометр.

Полное руководство по управлению сервоприводами с Arduino

Потенциометр на выходном валу выдаёт напряжение, пропорциональное углу. Контроллер сравнивает его с целевым значением (задаваемым импульсом) и через H-мост вращает мотор до совпадения.

Полное руководство по управлению сервоприводами с Arduino

Как работают хоббийные сервоприводы

Внутри: DC-мотор, редуктор, потенциометр, управляющая плата. Редуктор снижает скорость (~60 об/мин) и увеличивает крутящий момент. Потенциометр на выходном валу даёт обратную связь.

Полное руководство по управлению сервоприводами с Arduino

Управление — последовательность импульсов 50 Гц (период 20 мс). Ширина импульса задаёт угол:

Полное руководство по управлению сервоприводами с Arduino

Точные минимум/максимум зависят от модели (проверяйте даташит).

Популярные модели для Arduino

ПараметрSG90 Micro ServoMG996R
Удержанный момент1.2 кг·см @4.8V, 1.6 кг·см @6V11 кг·см @4.8V, 13 кг·см @6V
Напряжение питания3.5–6 V4.8–7.2 V
Ток холостого хода100 мА220–250 мА
Пусковой ток650 мА2.5 А (оригинал), ~0.6 А (клон)
Скорость (60°)0.12 с0.20 с
Вес9 г55 г
Полное руководство по управлению сервоприводами с Arduino

Подключение к Arduino

Схема

Полное руководство по управлению сервоприводами с Arduino
Полное руководство по управлению сервоприводами с Arduino

Компоненты

Программное управление

Ручная генерация импульсов (без библиотеки)

#define servoPin 9

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

void loop() {
  // Импульс каждые 20 мс
  digitalWrite(servoPin, HIGH);
  delayMicroseconds(1450); // 1.45 мс = 90°
  digitalWrite(servoPin, LOW);
  delayMicroseconds(18550); // остаток до 20 мс
  // 600 мкс = 0°, 1450 = 90°, 2300 = 180° (подстройте под свою серву)
}

Использование библиотеки Servo.h (рекомендуется)

#include <Servo.h>
Servo myservo;

void setup() {
  myservo.attach(9, 600, 2300); // пин, мин. импульс (мкс), макс. импульс
}

void loop() {
  myservo.write(0);   delay(1000);
  myservo.write(90);  delay(500);
  myservo.write(135); delay(500);
  myservo.write(180); delay(1500);
}

attach(pin, min, max) позволяет откалибровать крайние положения под конкретную серву.

Управление множеством сервоприводов

Библиотека Servo.h поддерживает до 12 серв на обычных платах и 48 на Arduino Mega. Создаём объект для каждой сервы:

#include <Servo.h>
Servo servo1, servo2, servo3, servo4, servo5;

void setup() {
  servo1.attach(8); servo2.attach(9); servo3.attach(10);
  servo4.attach(11); servo5.attach(12);
}

void loop() {
  servo1.write(0); servo2.write(0); servo3.write(0); servo4.write(0); servo5.write(0);
  delay(2000);
  servo1.write(90); servo2.write(90); servo3.write(90); servo4.write(90); servo5.write(90);
  delay(2000);
  servo1.write(180); servo2.write(180); servo3.write(180); servo4.write(180); servo5.write(180);
  delay(2000);
}

Драйвер PCA9685 — 16 и более серв по I2C

PCA9685 — 16-канальный 12-битный PWM-драйвер с I2C. Можно каскадировать до 62 модулей (992 сервы) на двух проводах.

Полное руководство по управлению сервоприводами с Arduino

Адреса задаются перемычками A0–A5. Необходимо отдельное питание для серв.

Полное руководство по управлению сервоприводами с Arduino

Код для PCA9685 (библиотека NachtRaveVL/PCA9685-Arduino)

#include <Wire.h>
#include "PCA9685.h"

PCA9685 driver;
PCA9685_ServoEvaluator pwmServo(102, 470); // 0.5мс=102, 2.5мс=512 (12 бит = 4096 шагов)

void setup() {
  Wire.begin();
  Wire.setClock(400000);
  driver.resetDevices();
  driver.init(B000000); // Адрес I2C
  driver.setPWMFrequency(50); // 50 Гц
}

void loop() {
  driver.setChannelPWM(0, pwmServo.pwmForAngle(-90)); delay(1000);
  driver.setChannelPWM(0, pwmServo.pwmForAngle(0));   delay(1000);
  driver.setChannelPWM(0, pwmServo.pwmForAngle(90));  delay(1000);
}

Для каждой сервы можно создать свой ServoEvaluator с индивидуальными min/max/center.

Несколько драйверов PCA9685

Создаём отдельный объект PCA9685 для каждого модуля, настраиваем адреса, частоту 50 Гц. Управление — теми же setChannelPWM() и pwmForAngle().

Распространённые проблемы и решения

Серва дергается и перезагружает Arduino

Причина: пусковой ток сервы проседает питание Arduino. Решение: конденсатор 470–1000 мкФ между GND и 5V (развязывающий), и **обязательно внешний БП** для серв.

Серва не поворачивает на полный диапазон 0–180°

Причина: реальные мин/макс импульсы отличаются от стандартных. Решение: откалибруйте в attach(pin, min_us, max_us). Дефолт: 544 и 2400 мкс. Пример: myservo.attach(9, 600, 2300);.

Габариты и 3D-модели

3D-модели SG90 и MG996R доступны для скачивания на Thangs (ссылки в исходнике). Размеры на схемах ниже.

Полное руководство по управлению сервоприводами с Arduino
Полное руководство по управлению сервоприводами с Arduino

Часто задаваемые вопросы (FAQ)

Как подключить сервопривод к Arduino?
3 провода: GND, VCC (5V) — к питанию, сигнальный — к цифровому пину Arduino. Общий GND обязателен.
Может ли Arduino запитать сервопривод?
Только малые (SG90) и только при питании Arduino от БП (не USB). Лучше всегда использовать отдельный 5V источник ≥2A.
Сколько серв может управлять Arduino?
До 12 (Uno/Nano) или 48 (Mega) через библиотеку Servo.h. С PCA9685 — сотни.

Заключение

Мы разобрали принцип работы, подключение, программирование (ручное и через библиотеки), управление множеством серв и расширение через PCA9685. Ключевые моменты: всегда используйте внешнее питание для серв, калибруйте мин/макс импульсы, добавляйте конденсатор для стабильности. Выбирайте серву под требуемый момент и скорость.

Производственный процесс

  1. Умная копилка: управление монетоприёмником на Arduino Nano
  2. Робот-ускользатор на сервоприводе: сборка на Arduino и HC-SR04
  3. Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
  4. Управление двумя шаговыми двигателями через джойстик на Arduino Nano — простой урок (Visuino)
  5. Точное управление сервоприводом через MPU6050 (Arduino, SG90, MG996R)
  6. ThimbleKrox: управление мышью с пальца на Arduino Micro и MPU-6050
  7. Генерация музыкальных тонов на Arduino: полный спектр 88 клавиш пианино
  8. Подключение Arduino к NMEA-0183: пошаговое руководство
  9. Мастерство пайки алюминия: экспертные техники и практические советы
  10. Механика муфт: полное промышленное руководство