Управление двигателями и сервоприводами с помощью Ардуино

Из этой статьи вы узнаете:

  • Что такое двигатель постоянного тока,

  • Как управлять скоростью вращения двигателя постоянного тока,

  • Как подключить двигатель к Arduino,

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

  • Как управлять сервоприводом.

В простых конструкциях систем автоматизации часто возникает необходимость не только считывать показания датчиков, но и приводить в движение механизмы. Для этого используются разнообразные электродвигатели.

Самый простой и популярный вариант — это двигатель постоянного тока . Он завоевал любовь любителей своей доступностью, простотой регулировки оборотов. Если стоит задача перемещать какой-либо механизм на заданный угол или расстояние удобно использовать сервопривод или шаговый двигатель.

В этой статье мы рассмотрим сервоприводы и небольшие двигатели постоянного тока, их подключение к плате Arduino и регулировку ДПТ.

Управление двигателями и сервоприводами с помощью Ардуино

Двигатель постоянного тока

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

Двигатель постоянного тока

Ток в обмотку подается через щеточный узел. Щетки сделаны из графита, иногда встречаются медные скользящие контакты. Щетки скользят по ламелям расположенным на одном из концов ротора. Если не вдаваться в подробности, то от тока обмотки якоря зависит его скорость вращения.

Якорь коллекторного электродвигателя

На крупных двигателях постоянного тока, на статоре, расположена обмотка возбуждения, соединенная с обмоткой ротора (через щеточный узел) определенным образом (последовательное, параллельное или смешанное возбуждение). Таким образом, достигается нужный крутящий момент и количество оборотов.

Управление скоростью вращения

Электричсекий двигатель постоянного тока

При подключении к питающей сети двигатель постоянного тока начинает вращаться с номинальной скоростью. Чтобы понизить частоту вращения нужно ограничить ток. Для этого вводят балластные сопротивления, но это снижает КПД установки в целом и появляется лишний источник тепла. Для более эффективного регулирования напряжения и тока используют другой метод — ШИМ-регулирование .

ШИМ-регулирование

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

То есть период делится на две части:

1. Время импульса.

2. Время паузы.

Отношение времени импульса к общему времени периода называют коэффициентом заполнения:

Кз=tи/tпер

обратная величина называется «скважность»:

D=1/Kз=tпер/tи

Для описания режима работы ШИМ-контроллера используют оба понятия: и коэффициент заполнения, и скважность.

Ток потребления двигателя зависит от его мощности. Число оборотов, как было сказано, зависит от тока. Ток можно регулировать, изменяя величину приложенного к обмоткам напряжения. Фактически при питании от напряжения, которое превышает номинальное по паспорту двигателя, его обороты также превысят номинальные. Однако такие режимы работы опасны для двигателя, поскольку в обмотках протекает больший ток, что вызывает их повышенный нагрев.

Если от кратковременных импульсов или повторно-кратковременных режимов работы вред для двигателя будет минимальным, то при продолжительной работе на повышенном напряжении и оборотах он сгорит или его подшипники нагреются и заклинят, а потом сгорят и обмотки, если не отключить питание.

При слишком низком входном напряжении маленькому двигателю может просто не хватить силы, чтобы сдвинуться с места. Поэтому нужно экспериментальным путем выяснить нормальные обороты и напряжения для конкретного двигателя не превышающие номинальные.

Подключаем к ардуино

У меня лежал маленький моторчик, кажется от кассетного плеера, значит, его номинальное напряжение будет ниже 5 вольт, тогда выходного питания ардуины будет достаточно. Я запитаю его от пина «5V», т.е. от выхода линейного стабилизатора расположенного на плате. По схеме, которую вы видите ниже.

Я не знаю ток этого двигателя, поэтому я его подключил к питания, а между двигателем и пином питания установил полевой транзистор, на затвор которого был подан сигнал с ШИМ-выхода, можно использовать любой из доступных.

Схема подключения к ардуино двигателя постоянного тока

Для регулировки оборотов я добавил переменный резистор в схему, подключив его к аналоговому входу А0. Для быстрого соединения я использовал беспаечную макетную плату, как её еще называют «breadboard».

В обвязку транзистора я установил токоограничивающий резистор (для снижения тока заряда затворной ёмкости, это убережет порт от сгорания и питание микроконтроллера от просадок и его зависания) на 240 Ом, и притянул его к земле резистором на 12 кОм, это нужно делать, чтобы он стабильнее работал и быстрее разряжалась затворная ёмкость.

Подробно о полевых транзисторах описано в статье на нашем сайте . Я использовал мощный, распространённый и не слишком дорогой mosfet с n-каналом и встроенным обратным диодом IRF840.

Исполнительная и задающая часть схемы

Вот так выглядит мой лабораторный стенд в сборе:

Двигатель постоянного тока и ардуино

Функция ШИМ-регулирования вызывается при записи в соответствующий выход (3, 5, 6, 9, 10, 11) значения от 0 до 255 командой AnalogWrite(pin, значение). Логика её работы изображена на графиках ниже.

Функция ШИМ-регулирования

Такой сигнал подаётся на затвор транзистора:

Такой сигнал подаётся на затвор транзистора

Программный код до безобразия краток и прост, подробно все эти функции были описаны в предыдущих статьях об ардуино .

int sensorPin = A0;   // вход с потенциометра

int motorPin = 3;      // выход ШИМ на затвор тр-ра

void setup() {

pinMode(motorPin, OUTPUT);

}

void loop() {

analogWrite(motorPin, map (analogRead(sensorPin), 0, 1023, 0, 256));

}

В функции analogWrite я присваиваю значение на ШИМ-выход, через команду map, её использование позволяет убрать несколько строчек кода и одну переменную.

Это рабочая схема и она отлично подходит для наблюдения процессов при регулировании мощности нагрузки, яркости светодиодов, скорости вращения двигателей, стоит только подключить вместо двигателя желаемую нагрузку. При этом вместо 5В на нагрузку можно подавать любое напряжение, например 12В, не забудьте соединить минус питания с контактом, например 12В, не забудьте соединить минус питания с контактом GND на плате микроконтроллера.

В ардуино частота ШИМ, при вызове через функцию analogWrite всего лишь 400 Гц, при минимальных значениях напряжения был слышен гул соответствующей частоты от обмоток двигателя.

Ардуино и сервопривод

Сервоприводы

Двигатель который может находиться в заданном положении, а при воздействии внешних факторов, например, принудительном отклонении вала, удерживает его положение неизменным – называется сервоприводом. Вообще определение звучит несколько иначе:

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

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

Сервоприводы крепятся винтами к корпусу, а само соединение, например, с колесом, осуществляется путем надевания его на вал. Двигатель управляется аналоговым или цифровым электрическим сигналом, который определяет величину движения, которая, в свою очередь, представляет собой окончательное установленное положение.

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

Обычно с сервопривода для Arduino (сервомашинки) выходит три провода:

  • Плюс питания.

  • Минус питания.

  • Управляющий сигнал.

Сервопривод состоит из:

  • Электродвигателя постоянного тока (или бесколлекторного двигателя);

  • Платы управления;

  • Датчика положения (энкодера у сервоприводов с углом поворота 360° или потенциометра у серв с углом поворота 180°);

  • Понижающего редуктора (понижает скорость вращения двигателя, и повышает момент на валу привода).

Блок управления сравнивает сигнал на встроенном датчике положения и сигнал, пришедший по управляющему проводу, если они различаются, то происходит поворот на угол, при котором разница между сигнала нивелируется.

Принцип работы сервопривода

Основные характеристики сервоприводов:

  • Скорость поворота (время, за которое вал поворачивается на угол 60°);

  • Крутящий момент (кг/см, т.е. сколько килограмм может выдерживать двигатель на рычаге в 1 см от вала);

  • Напряжение питания;

  • Потребляемый ток;

  • По способу управления (аналоговый или цифровой, существенной разницы нет, но цифровой более быстродействующий и стабильный).

Обычно период сигнала равен 20 мс, а длительность управляющего импульса:

  • 544 мкс – соответствует 0°;

  • 2400 мкс – соответствует углу 180°.

В редких случаях длина импульсов может отличаться, например 760 и 1520 мкс соответственно, эту информацию можно уточнить в технической документации на привод. Одним из популярнейших сервоприводов для хобби является Tower Pro SG90 и подобные модели. Стоит недорого – порядка 4 долларов.

Севропривод для ардуино

Он удерживает на валу 1.8 кг/см, и в комплекте с ним идут крепежные винты и рычаги со шлицами под вал. На деле этот малыш довольно сильный, и в движении одним пальцем его остановить весьма проблематично – начинает выпадать из пальцев сам привод – такая его сила.

Управление сервоприводом и Ардуино

Как уже было сказано, управление осуществляется изменением длительности импульса, но не стоит путать этот метод с ШИМ(PWM), его правильное назвать PDM (Pulse Duration Modulation). Незначительные отклонения по частоте сигнала (20 мс – длительность, частота 50 Гц) особой роли не играют. Но не стоит отклоняться от частоты более чем на 10 Гц, двигатель может работать рывками или сгореть.

Управление сервоприводом и Ардуино

Схема подключение к ардуино довольно проста, можно и запитать привод от 5v –пина, но не желательно. Дело в том, что при старте происходит небольшой скачок тока, это может вызвать просадку по питанию и ложные состояния выходов микроконтроллера . Хотя 1 маленький привод (типа SG90) можно, но не более.

Для управления такими сервоприводами с ардуино в вашем распоряжении есть встроенная в IDE библиотека Servo, у неё небольшой набор команд:

  • attach() — добавить переменную к пину. Пример: названиеПривода.attach(9) – к 9 пину подключаем сервопривод. Если вашему приводу нужны нестандартные длины управляющих импульсов (544 и 2400 мкс), то их можно задать через запятую после номера пина, например: servo.attach(pin, min угол (мкс), max угол в МКС));

  • write() — задает угол поворота вала в градусах;

  • writeMicroseconds() — задает угол, через длину импульса в микросекундах;

  • read() — определяет текущее положение вала;

  • attached() — Проверяет, задан ли пин с подключенным сервоприводом;

  • detach() — отмена команды attach.

Эта библиотека позволяет управлять 12-ю сервоприводами с плат UNO, Nano и подобных (mega368 и 168) при этом исчезает возможность использовать ШИМ на 9 и 10 пине. Если у вас MEGA – вы можете управлять 48-ю сервами, но на пинах 11 и 12 исчезнет ШИМ, если вы используете до 12 серв, то функционирование ШИМ остается полноценным на всех контактах.

Если вы подключили эту библиотеку – вы не сможете работать с 433 МГц приёмниками/передатчиками. Для этого есть библиотека Servo2, которая в остальном идентична.

Библиотека Servo2

Вот пример кода, который я использовал для экспериментов с сервоприводом, он есть в стандартном наборе примеров:

#include <Servo.h> // подключаем библиотеку

Servo myservo;  // объявили имя переменной для сервопривода myservo

int potpin = 0;  // пин для подключения задающего потенциометра

int val;    // переменная для сохранения результатов чтения сигнала с потенциометра

void setup() {

myservo.attach(9);  // устанавливаем 9 пин, как управляющий выход для сервы

}

void loop() {

val = analogRead(potpin);            // результаты чтения потенциометра сохр в пер. val, они будут в диапазоне от 0 до 1023

val = map(val, 0, 1023, 0, 180);     // переводим диапазон измерений с аналогового входа 0-1023

// в диапазон заданий для сервы 0-180 градусов

myservo.write(val);                  // передаем преобр. сигнал с пот-ра на упр. вход сервы

delay(15);                           // задержка нужна для стабильной работы системы

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

Заключение

Использование простейших электродвигателей в паре с ардуино довольно простое занятие, при этом освоение этого материала расширяет ваши возможности в сфере автоматизации и робототехнике. Простейшие роботы или радиоуправляемые модели авто состоят из таких моторчиков, а сервоприводы используют для управления поворотом колес.

В рассмотренных примерах использовался потенциометр для задания угла поворота или скорости вращения, вместо него может использоваться любой другой источник сигнала, например поворот или изменение скорости может происходить в результате полученной с датчиков информации.

Пример использования сервоприводов в альтернативной энергетике: отслеживание угла падения солнечных лучей и корректирование положения солнечных панелей в электростанциях.

Чтобы реализовать такой алгоритм можно использовать несколько фоторезисторов или других оптоэлектронных приборов для измерения количество падающего света и в зависимости от их показаний устанавливать угол поворота солнечной панели.

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

EnglishRussianUkrainian