Arduino:Примеры/Stepper Speed Control

Материал из Онлайн справочника
Версия от 09:29, 14 декабря 2016; Myagkij (обсуждение | вклад) (Замена текста — «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">» на «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

{{#setlogo:ArduinoCommunityLogo.png}}

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Управление шаговым мотором – регулировка скорости[1]

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

Начиная работу, очень важно знать, с каким именно шаговым мотором вам предстоит иметь дело. Эти устройства бывают двух типов – униполярные и биполярные – и цепь для них строится по-разному. Впрочем, данный скетч-пример поддерживает оба типа шаговых моторов. О том, как построить цепь, смотрите здесь (для униполярных моторов) или здесь (для биполярных моторов).

Данный пример показывает, как регулировать скорость вращения шагового мотора. Это делается при помощи потенциометра (или другого устройства для ввода данных), подключенного к 0-ому контакту Arduino, и библиотеки Stepper. И униполярные, и биполярные моторы управляются цифровыми контактами 8, 9, 10 и 11.

При использовании униполярного мотора к Arduino/Genuino нужно подключить транзистор Дарлингтона U2004, а при использовании биполярного – Н-мост SN754410NE.

Более подробно о разнице между типами шаговых моторов читайте в этой статье Тома Иго.

Необходимое оборудование

  • Плата Arduino или Genuino
  • Потенциометр на 10кОм
  • Шаговый мотор
  • Массив Дарлингтона U2004 (если используете униполярный мотор)
  • Н-мост SN754410NE (если используете биполярный мотор)
  • Источник питания, соответствующий используемому мотору
  • Провода-перемычки
  • Макетная плата

Цепи и схемы

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

Примечание: Обе цепи используют 4-проводное подключение (2-проводное подключение данным скетчем не поддерживается).

Цепь и схема для униполярного мотора

Цепь и схема для биполярного мотора

Код

/*
 Управление шаговым мотором – регулировка скорости

 Этот скетч управляет униполярным/биполярным шаговым мотором.
 Мотор подключается к 8, 9, 10 и 11 контактам на Arduino.
 Потенциометр – к 0-ому входному аналоговому контакту на Arduino.

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

 Создан 30 ноября 2009 года, 
 модифицирован 28 октября 2010 года Томом Иго (Tom Igoe).

 */

#include <Stepper.h>

const int stepsPerRevolution = 200;   // «200» - это количество шагов, за которые вал выполняет 
// полный оборот; у вашего мотора это число может быть другим


// инициализируем библиотеку Stepper на контактах 8, 9, 10 и 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

int stepCount = 0;  // количество шагов, которые сделал мотор

void setup() {
  // в блоке setup() ничего не делаем
}

void loop() {
  // считываем значение потенциометра:
  int sensorReading = analogRead(A0);
  // подгоняем считанное значение под диапазон от «0» до «100»:
  int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
  // задаем скорость мотора:
  if (motorSpeed > 0) {
    myStepper.setSpeed(motorSpeed);
    // шагаем на 1/100 от полного оборота:
    myStepper.step(stepsPerRevolution / 100);
  }
}

См.также

  1. Stepper myStepper = Stepper(steps, pin1, pin2, pin3, pin4)
  2. stepper.setSpeed()
  3. stepper.step()
  4. Stepper library reference
  5. MotorKnob - Moves the shaft according to the position of the knob of a potentiometer.
  6. StepperOneRevolution - Turn the shaft one revolution clockwise and one counterclockwise.
  7. StepperOneStepAtATime - Single stepping to check the proper wiring of the motor.

Внешние ссылки