Принцип Работы
Микроконтроллер (MCU) выдает сигнал на серводвигатель. Двигатель имеет встроенную схему справки, которая выдает справочный сигнал с циклом 20 мс и шириной 1, 5 мс. Двигатель сравнивает полученное постоянное напряжение с напряжением потенциометра и выдает разницу напряжений. Микросхема на плате управления определяет направление вращения и управляет бесщеточным мотором. Шестерни передают силу на вал. Датчик определяет, достиг ли он командной позиции по обратной связи.
Серводвигатели используются в системах управления, требующих поддержания различных углов. Когда скорость мотора определена, шестерни заставляют потенциометр вращаться. Когда разница напряжений уменьшается до нуля, мотор останавливается. Обычно диапазон угла вращения составляет от 0 до 180 градусов.
Сервоприводы выпускаются в различных спецификациях. Но все они имеют три провода подключения, отличающиеся по цвету - коричневый, красный, оранжевый (цвета могут отличаться в зависимости от бренда).
Коричневый - для GND, красный - для положительной мощности, оранжевый - для сигнальной линии.
Угол поворота сервомотора контролируется путем регулирования скважности сигнала ШИМ (Широтно -Импульсная Модуляция). Стандартный цикл сигнала ШИМ составляет 20 мс (50 Гц). Теоретически, ширина распределена от 1 мс до 2 мс. Ширина соответствует углу поворота от 0° до 90°. Но обратите внимание, что для разных брендов один и тот же сигнал может давать разные углы вращения.
С некоторыми базовыми знаниями давайте научимся управлять серводвигателем. В этом эксперименте вам понадобится только серводвигатель и несколько перемычек.
Необходимое Оборудование
Плата Arduino UNO * 1
9G Сервомотор * 1
Перемычки * 3
USB - кабель * 1
Подключение и Пример Кода
Существует два способа управления серводвигателем с Arduino.
Один из них - использовать обычный цифровой сенсорный порт Arduino для производства прямоугольных волн с разной скважностью для имитации сигнала ШИМ и использовать этот сигнал для управления положением двигателя.
Другой способ - использовать функцию Servo Arduino для управления двигателем. Этот способ проще в программировании, но может управлять только двухконтактными двигателями из -за функции серво, используемой только на цифровых пинах 9 и 10.
Возможности привода Arduino ограничены. Поэтому, если вам нужно управлять более чем одним двигателем, вам понадобится внешнее питание.
Метод 1
Подключите двигатель к цифровому пину 9. Скомпилируйте программу для управления двигателем, чтобы он вращался под командным углом и отображал угол на экране.
Пример Кода A
//////////////////////////////////////////////////////////
//Серво
int servopin = 9; // выбор цифрового пина 9 для сигнальной линии сервомотора
int myangle; // инициализация переменной угла
int pulsewidth; // инициализация переменной ширины импульса
int val;
void servopulse(int servopin, int myangle) // определение функции импульса серво
{
pulsewidth = (myangle * 11) + 500; // преобразование угла в ширину импульса 500-2480
digitalWrite(servopin, HIGH); // установка уровня серво пина как "высокий"
delayMicroseconds(pulsewidth); // задержка в микросекундах ширины импульса
digitalWrite(servopin, LOW); // установка уровня серво пина как "низкий"
delay(20 - pulsewidth / 1000);
}
void setup()
{
pinMode(servopin, OUTPUT); // установка серво пина как "выход"
Serial.begin(9600); // подключение к серийному порту, установка скорости передачи данных "9600"
Serial.println("servo=o_seral_simple ready");
}
void loop() // преобразование чисел от 0 до 9 в соответствующие углы от 0 до 180 градусов, LED мигает соответствующее количество раз
{
val = Serial.read(); // чтение значения серийного порта
if (val >= '0' && val <= '9')
{
val = val - '0'; // преобразование символьной величины в числовую переменную
val = val * (180 / 9); // преобразование числа в угол
Serial.print("moving servo to ");
Serial.print(val, DEC);
Serial.println();
for (int i = 0; i <= 50; i++) // даем серво время для вращения в заданное положение
{
servopulse(servopin, val); // использование функции импульса
}
}
}
//////////////////////////////////////////////////////////
Метод 2
Давайте сначала рассмотрим встроенную в Arduino функцию сервопривода и некоторые общие команды.
attach (интерфейс) — выбор пина для серво, можно использовать только пин 9 или 10.
write (угол) — используется для управления углом вращения серво, можно установить угол от 0 до 180 градусов.
read () — используется для чтения угла серво, считайте это функцией для чтения значения в функции write().
attached () — определение, отправлен ли параметр серво на пин серво.
detach () — отключение серво от пина, и пин (цифровой пин 9 или 10) может использоваться для порта ШИМ.
Обратите внимание, что форма написания вышеуказанных команд - "имя переменной серво. конкретная команда ()", например, myservo.attach(9).
Снова подключите серво к пину 9.
Пример Кода B
//////////////////////////////////////////////////////////
//Серво
#include <Servo.h> // подключение библиотеки Servo
Servo myservo; // определение переменной серво
void setup(){
myservo.attach(9); // выбор пина серво (9 или 10)
}
void loop(){
myservo.write(90); // установка угла вращения мотора
}
//////////////////////////////////////////////////////////
Выше представлены два метода управления сервоприводом. Вы можете выбрать любой из них в зависимости от ваших предпочтений или фактических потребностей.