Лекция 52 Ардуино и шаговые двигатели 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Лекция 52 Ардуино и шаговые двигатели



Цели лекции:

1. Изучение основ управления шаговым двигателем.

2. Знакомство с функцией Stepper() Arduino-библиотеки Stepper.

3. Знакомство с функцией SetSpeed(rpm) Arduino-библиотеки Stepper.

4. Знакомство с функцией Step (steps) Arduino-библиотеки Stepper.

5. Знакомство с Arduino-библиотекой AccelStepper.

 

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

Шаговый двигатель (ШД) является бесколлекторным двигателем постоянного тока. Как и другие бесколлекторные двигатели, ШД высоконадежен и при надлежащей эксплуатации имеет длительный срок службы. ШД нашли широкое применение в области, где требуется высокая точность перемещений или скорости. Наглядными примерами устройств с ШД могут служить принтеры, факсы и копировальные ма­шины, а также более сложные устройства: станки с ЧПУ (числовым программным управлением), фрезерные, гравировальные машины и т. д.

Достоинствами шаговых двигателей по сравнению с простыми являются:

- угол поворота ротора ШД зависит от числа поданных на двигатель пусковых импульсов;

- максимальный момент на валу ШД развивается в режиме останова (в случае, если обмотки двигателя запитаны);

- высокая точность позиционирования и повторяемости — качественные ШД имеют точность не хуже 2,5 % от величины шага, при этом данная ошибка не накапливается при последующих шагах;

- ШД может быстро стартовать, останавливаться и выполнять реверс;

- высокая надежность двигателя обусловлена отсутствием щеток, при этом срок службы двигателя ограничивается только лишь сроком службы подшипников;

- четкая взаимосвязь угла поворота ротора от количества входных импульсов (в штатных режимах работы) позволяет выполнять позиционирование без при­менения обратной связи;

- ШД обеспечивает получение сверхнизких скоростей вращения вала для на­грузки, подведенной непосредственно к валу двигателя, без использования ре­дуктора;

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

Недостатки шаговых двигателей:

- ШД обладает явлением резонанса;

- возможен вариант выпадения двигателя из синхронизации с последующей поте­рей информации о положении при работе цепи обратной связи;

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

- сложность управления при работе на высоких скоростях (на самом деле эффек­тивная работа шагового двигателя на высоких скоростях возможна);

- низкая удельная мощность шагового привода;

- для обеспечения эффективного управления шаговым двигателем требуется очень сложная схема управления.

 


Управление шаговым двигателем

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


 

 

Рисунок 52.1 - Схема управления шагового двигателя

 

На блок управления ШД (драйвер) подаются сигналы "сделать шаг" и "задать на­правление". Сигналы представляют собой импульсы 5 В. Такие импульсы можно получить от микроконтроллера Arduino. Для шагового двигателя необходимо от­дельное питание — выводы шагового двигателя напрямую к выводам Arduino под­ключать нельзя. Подключение ШД осуществляется через Motor Shild либо с по­мощью микросхемы драйвера двигателей — например, L293. Схема подключения представлена на рис. 22.1.

 

Arduino-библиотека Stepper

Для управления шаговым двигателем в Arduino имеется стандартная библиотека Stepper. Набор функций у нее следующий:

 Stepper();

 setSpeed();

 step().

 

Функция Stepper()

Функция Stepper () создает новый объект класса Stepper, привязанный к одному шаговому двигателю, подключенному к контроллеру Arduino. Конструктор следует использовать при объявлении переменной класса Stepper, обычно в самом нача­ле — вне setup () и loop (). Количество параметров зависит от способа подключе­ния — 2 или 4 выхода используются для управления двигателем.

Синтаксис:

Stepper(steps, pinl, pin2)

Stepper(steps, pinl, pin2, pin3, pin4)

Параметры:

- steps — количество шагов в полном обороте используемого двигателя. Если в документации к двигателю указан угол одного шага, то следует разделить 360° на этот угол, что даст нам искомое количество шагов;

- pinl, pin2, pin3, pin4 — выходы Arduino для подключения шагового двигателя. Возвращаемое значение: новый экземпляр объекта класса Stepper.

 

Функция setSpeed(rpm)

Функция setSpeed (rpm) устанавливает скорость вращения в оборотах в минуту. Эта функция не заставляет двигатель вращаться, а лишь устанавливает скорость враще­ния, которая будет использована при вызове функции step ().

Синтаксис:

Stepper.setSpeed(rpm)

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

Возвращаемого значения нет.

Функция step(steps)

Функция step (steps) вращает шаговый двигатель на определенное количество ша­гов на скорости, заданной функцией setSpeed(). Эта функция блокирующая, т. е. она ожидает окончания вращения двигателя, прежде чем передать управление в следующую строку кода. Во избежание длительной блокировки выполнения кода скетча, управление необходимо организовывать так, чтобы скорость была высокая, а за один вызов step () делалось всего несколько шагов.

Синтаксис:

Stepper.step(steps)

Параметр: steps — количество шагов:

 положительное число — вызывает вращение в одну сторону;

 отрицательное — в противоположную.

Возвращаемого значения нет.

 

Пример использования библиотеки Stepper

Поворот шагового двигателя при нажатии кнопок "влево" и "вправо" на определенный угол, что можно представить как программную заготовку для поворота панорамной ка­меры в одной плоскости. В примере использованы шаговый двигатель и аналоговая клавиатура

Электрическая схема устройства представлена на рисунке 52.2.

Пример кода:

#include <Stepper.h>

const int stepsPerRevolution=200; // количество шагов в полном обороте двигателя

Stepper myStepper(stepsPerRevolution,8,9,10,11);

int minangle=15; // угол поворота на 1 нажатие (шаг камеры) struct KEYS // структура для хранения статусов клавиш {

int button; // нажатая кнопка long millisbutton[7]; // millis для button };

void setup () {;}

void loop() {

int valbutton;

// опрос клавиатуры valbutton=analogRead(A0); if(valbutton<1000)

{buttonClick2(buttonClick1(valbutton));}

}

// обработка нажатия кнопки int buttonClick1(int val)

{

if(val>650) {KEYS1.button=1;return 1;

if(val>600) {KEYS1.button=2;return 2;

if(val>530) {KEYS1.button=3;return 3;

if(val>450) {KEYS1.button=4;return 4;

if(val>300) {KEYS1.button=5;return 5;

if(val>200) {KEYS1.button=6;return 6;

return 0;        

}

void buttonClick2(int val)

{

if(millis()-KEYS1.millisbutton[val]<100) // проверка на дребезг return;

KEYS1.millisbutton[val]=millis();

KEYS1.button=val; switch(val) { case 1: // left

myStepper.step(stepsPerRevolution*minangle/360*(-1)); break; case 2: // up

break; case 3: // down

break; case 4: // right

myStepper.step(stepsPerRevolution*minangle/360); break; case 5: // white

break; case 6: // red

// код на нажатие кнопки камеры break; default: break;

}

}

 

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

 



Поделиться:


Последнее изменение этой страницы: 2021-02-07; просмотров: 421; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.223.21.5 (0.011 с.)