Датчик оборотов шагового двигателя

Управление шаговым двигателем с помощью датчика вращения

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

Контакты 8-11 управляют шаговым двигателем и контакты 2-4 получают информацию от датчика движения.

Подключили питание 5V и GND от UNO к датчику движения и шаговый двигатель подключили от отдельного блока питания так как шаговый двигатель потребляе больше тока чем возможно взять из питания UNO.

В проекте используется библиотека “Stepper” которая включена в софт Arduino.

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

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

  • Sketch code

Sketch code

#include «Stepper.h»
#define STEPS 32 // Количество шагов для одного оборота внутреннего вала
// 2048 шагов для одного оборота внешнего вала

volatile boolean TurnDetected; // need volatile for Interrupts
volatile boolean rotationdirection; // CW or CCW rotation

const int PinCLK=2; // Генерация прерываний с использованием сигнала CLK
const int PinDT=3; // Чтение сигнала DT
const int PinSW=4; // Чтение переключения кннопки

int RotaryPosition=0; // Начальное положение шагового двигателя

int PrevPosition; // Предыдущее положение поворота Значение для проверки точности
int StepsToTake; // Проверка остановки шагового двигателя

// Правильное подключение шагового двигателя
// In1, In2, In3, In4 in the sequence 1-3-2-4
Stepper small_stepper(STEPS, 8, 10, 9, 11);

// Процедура прерывания выполняется, если CLK переходит из HIGH в LOW
void isr () <
delay(4); // задердка для Debouncing
if (digitalRead(PinCLK))
rotationdirection= digitalRead(PinDT);
else
rotationdirection= !digitalRead(PinDT);
TurnDetected = true;
>

pinMode(PinCLK,INPUT);
pinMode(PinDT,INPUT);
pinMode(PinSW,INPUT);
digitalWrite(PinSW, HIGH); // Pull-Up resistor for switch
attachInterrupt (0,isr,FALLING); // Прерывание 0 всегда связано с контактом 2 на Arduino UNO
>

void loop () <
small_stepper.setSpeed(600); //Max seems to be 700
if (!(digitalRead(PinSW))) < // Проверка, нажата ли кнопка
if (RotaryPosition == 0) < // Проверка, была ли нажата кнопка
> else <
small_stepper.step(-(RotaryPosition*50));
RotaryPosition=0; // Сброс в позицию ZERO
>
>

// Выполняется, если обнаружено вращение
if (TurnDetected) <
PrevPosition = RotaryPosition; // Сохранить предыдущую позицию в переменной
if (rotationdirection) <
RotaryPosition=RotaryPosition-1;> // decrase Position by 1
else <
RotaryPosition=RotaryPosition+1;> // increase Position by 1

TurnDetected = false; // НЕ повторяйте цикл IF до тех пор, пока не будет обнаружено новое вращение

Управляем шаговым двигателем с помощью Arduino и контроллера Easy Driver

Существует куча двигателей. И порой возникает вопрос, какой именно выбрать для вашего проекта на Arduino.

В этой статье мы детально обсудим один из типов двигателей — шаговый двигатель. Разберемся, в каких случаях уместно его использование. Рассмотрим пример подключения с использованием драйвера Easy Driver.

Необходимые элементы

  • Драйвер для шагового двигателя EasyDriver;
  • Небольшой шаговый двигатель;
  • Макетная плата;
  • Провода мама-мама;
  • Коннекторы;
  • Arduino Uno или подобный микроконтроллер;
  • Паяльник;
  • Источник питания на 12 В (или регулируемый источник питания)

Принцип работы шагового двигателя

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

Читать еще:  Ваз 2110 как помыть двигатель не снимая его

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

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

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

Сборка драйвера

Самый простой метод использования драйвера EasyDriver — установить на нем коннекторы для последующей установки на макетной плате. Теоретически, можно закрепить коннекторы и на макетной плате.

Первый шаг — монтаж коннекторов на плату EasyDriver. В данном примере будут использованы не все выходы на драйвере, но все равно рекомендую распаять все отверстия. Как минимум, это обеспечит более надежную установку драйвера на макетной плате. Да и в дальнейшем все выходы могут пригодиться. Отломайте необходимое количество коннекторов и установите их на макетку. После этого сверху поставьте драйвер запаяйте все коннекторы.

Схема подключения

После распайки пришло время подключить драйвер к Arduino. Схема подключения несложная и приведена на рисунке ниже.

Примечание. Маленький шаговый двигатель выглядит не так, как он изображен на схеме подключения. У него должен быть коннектор с четырьмя разъемами на конце. Этот коннектор можно напрямую подключить к разъему с четырьмя коннекторами на драйвере (см. Рисунок после распайки выше). Только обратите внимание на даташит вашего двигателя. Бывает такое, что разводка кабелей не соответсвует пинам на драйвере.

Важно! Шаговые двигатели потребляют больше тока, чем может предоставить Arduino. В связи с этим мы будем питать Arduino от 12 В. При этом вход для питания (М+) на EasyDriver подключен к пину Vin на Arduino. Благодаря этому, можно запитывать Arduino и двигатель от одного источника.

Программа Arduino для вращения шагового двигателя

После подключения, можно заливать программу в Arduino. Ниже приведен исходник простенького скетча для первого запуска. В интернете куча готовых кусков кода, которые вы спокойно можете использовать в своих целях. Кроме того, в Arduino IDE есть полноценная встроенная библиотека Stepper library, которая значительно упрощает процесс вашего общения с шаговыми двигателями.

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

Шаговые двигатели Autonics

Шаговые управляемые приводы с 5-ю фазами. Приводы Autonics.

Комплектный 2-х фазный шаговый привод INNOSTEP

Характеристики:

  • Питание блока управления 20–35 В.
  • Четыре диапазона установки скорости.
  • Возможность задания рампы скорости.
  • Возможность регулирования скорости от встроенного или внешнего потенциометра 0 – 10 кОм.
  • Двигатели с моментами 2,6 кГс*см; 7,2 кГс*см; 13,5 кГс*см; 26 кГс*см
  • Диаметры выходных валов 4,5мм; 6мм; 9,5мм.
Читать еще:  Volkswagen tiguan какой двигатель лучше

Применения:

  • Малогабаритные, маломощные конвейеры
  • Дозаторы
  • Рекламные вращающиеся стойки
  • Упаковочное оборудование
  • Укупорочные автоматы
  • Этикетировочные автоматы

Тип: INNOSTEP CSD-2-26-1
Двигатель с моментом 26 кГс*смК этому комплекту можно приобрести блок питания SPA 100-24
Спецификация шагового двигателя (pdf)
Тип: INNOSTEP CSD-2-13.5-1
Двигатель с моментом 13,5 кГс*смК этому комплекту можно приобрести блок питания SPA 100-24 Спецификация шагового двигателя (pdf)
Тип: INNOSTEP CSD-2-7.2-1
Двигатель с моментом 7,2 кГс*смК этому комплекту можно приобрести блок питания SPA 50-24
Спецификация шагового двигателя (pdf)
Тип: INNOSTEP CSD-1.2-2.6-1
Двигатель с моментом 2,6 кГс*смК этому комплекту можно приобрести блок питания SPA 50-24
Спецификация шагового двигателя (pdf)

Замкнутая Система Управления с Шаговым Двигателем

  • Модель с драйвером двигателя и встроенным контроллером
  • Данная система с замкнутым контуром обладает более высоким быстродействием и повышенной надежностью, а также экономически более выгодна в сравнении с серводвигателями
  • При внезапном отключении электрического питания двигатель блокируется с помощью встроенного тормоза. Такая система обеспечивает безопасное управление вертикальными нагрузками (модель с встроенным тормозом)
  • Возможность управления 31 осью посредством коммуникационного интерфейса RS485
  • 14 команд управления и 256 (макс.) программных шагов управления
  • 4 режима управления: толчковый режим, непрерывный режим, шаговый режим, программный режим
  • Благодаря использованию 50-контактного интерфейса ввода/вывода обеспечивается широкий выбор вариантов подключения
  • Доступна библиотека языка «C» (32-битная и 64-битная системы)
  • Доступно программное обеспечение для управления движением на базе ОС Windows (atMotion)
  • Низкий уровень вибрации в режиме низкой скорости и высокий крутящий момент в режиме высокой скорости
  • Не требуется наладка (коэффициенты регулятора легко настраиваются с помощью потенциометра)
  • Благодаря функции удержания момента и отсутствию вибрации (колебаний) в режиме стабилизации положения эта система является оптимальным решением для точных станков, в том числе для оптических устройств контроля
  • 10-уровневая настройка разрешающей способности
  • Различные выходы для аварийных сигналов: превышение тока, превышение скорости, перегрев, ошибка подключения двигателя, ошибка подключения энкодера и др. (17 аварийных сигналов)
  • Типоразмеры: 20 мм, 28 мм, 35 мм, 42 мм, 56 мм, 60 мм
  • Модель с драйвером двигателя и встроенным контроллером
  • Данная система с замкнутым контуром обладает более высоким быстродействием и повышенной надежностью, а также экономически более выгодна в сравнении с серводвигателями
  • При внезапном отключении электрического питания двигатель блокируется с помощью встроенного тормоза. Такая система обеспечивает безопасное управление вертикальными нагрузками (модель с встроенным тормозом)
  • Возможность управления 31 осью посредством коммуникационного интерфейса RS485
  • 14 команд управления и 256 (макс.) программных шагов управления
  • 4 режима управления: толчковый режим, непрерывный режим, шаговый режим, программный режим
  • Благодаря использованию 50-контактного интерфейса ввода/вывода обеспечивается широкий выбор вариантов подключения
  • Доступна библиотека языка «C» (32-битная и 64-битная системы)
  • Доступно программное обеспечение для управления движением на базе ОС Windows (atMotion)
  • Низкий уровень вибрации в режиме низкой скорости и высокий крутящий момент в режиме высокой скорости
  • Не требуется наладка (коэффициенты регулятора легко настраиваются с помощью потенциометра)
  • Благодаря функции удержания момента и отсутствию вибрации (колебаний) в режиме стабилизации положения эта система является оптимальным решением для точных станков, в том числе для оптических устройств контроля
  • 10-уровневая настройка разрешающей способности
  • Различные выходы для аварийных сигналов: превышение тока, превышение скорости, перегрев, ошибка подключения двигателя, ошибка подключения энкодера и др. (17 аварийных сигналов)
  • Типоразмеры: 20 мм, 28 мм, 35 мм, 42 мм, 56 мм, 60 мм
  • В сравнении с серводвигателями данная система с обратной связью отличается невысокой стоимостью, высоким быстродействием и повышенной надежностью
  • Низкий уровень вибрации в режиме низкой скорости и высокий крутящий момент в режиме высокой скорости
  • Не требуется наладка (коэффициенты регулятора легко настраиваются с помощью потенциометра)
  • Благодаря функции удержания момента и отсутствию вибрации (колебаний) в режиме стабилизации положения эта система является оптимальным решением для точных станков, в том числе для оптических устройств контроля
  • Широкий диапазон разрешающей способности энкодера
  • Широкий диапазон выходов для аварийных сигналов: превышение тока, превышение скорости, перегрев, ошибка подключения двигателя, ошибка подключения энкодера и т. д. (12 аварийных сигналов)
  • Типоразмеры: 20 мм, 28 мм, 35 мм, 42 мм, 56 мм, 60 мм
Читать еще:  Что нужно сделать чтобы не троило двигатель

Аналоговый спидометр на основе Arduino и инфракрасного датчика

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

В рассматриваемом проекте мы будем показывать скорость как в аналоговой, так и в цифровой форме. Также в данной статье мы можем улучшить свои познания в области шаговых двигателей и использования прерываний и таймеров в Arduino. В результате реализации данного проекта мы сможем измерять скорость любого вращающегося объекта, отображать ее в цифровой форме на экране ЖК дисплея 16×2 и в аналоговой форме на соответствующем указателе.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Биполярный (двухполюсный) шаговый двигатель (4 провода) (bipolar stepper motor).
  3. Драйвер шагового двигателя L298n (Stepper motor driver) (купить на AliExpress).
  4. Модуль инфракрасного датчика (IR sensor module) (купить на AliExpress).
  5. ЖК дисплей 16х2 (16*2 LCD display) (купить на AliExpress).
  6. Резистор 2,2 кОм (купить на AliExpress).
  7. Соединительные провода.
  8. Макетная плата.
  9. Источник питания.
  10. Напечатанная на принтере картинка спидометра.

Расчет скорости и ее отображение на аналоговом спидометре

Инфракрасный (ИК) датчик представляет собой устройство которое может обнаруживать присутствие объекта перед собой. Для тестирования работы проекта мы использовали двухлопастной вентилятор, который поместили перед инфракрасным датчиком, поэтому всегда когда лопасть вентилятора будет проходить над датчиком ИК датчик будет обнаруживать это. Для расчета времени одного оборота вентилятора мы задействуем таймеры и прерывания платы Arduino. В определенной степени данная часть проекта похожа на тахометр на основе платы Arduino, ранее рассматривавшийся на нашем сайте.

В этом проекте мы будем использовать прерывание самого высокого приоритета для определения числа оборотов вентилятора в минуту (rpm — revolutions per minute). Мы будем применять это прерывание в нарастающем режиме. То есть всегда когда выход датчика будет изменять свое состояние с LOW на High будет вызываться на выполнение функция RPMCount(). А поскольку в проекте мы использовали двухлопастной вентилятор это значит что данная функция будет вызываться 4 раза за один оборот.

Когда мы определим время одного оборота мы можем рассчитать по ниже приведенной формуле число оборотов в минуту (RPM). В этой формуле 1000/time позволит определить нам число оборотов в секунду (RPS — revolution per second), а умножив полученное значение на 60 мы получим число оборотов в минуту.

Ссылка на основную публикацию
Adblock
detector