Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/MotorKnob

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

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


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

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

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

В этом примере потенциометр (или другой прибор) подключен к 0-ому входному аналоговому контакту на Arduino – это и библиотека Stepper позволит управлять движением шагового мотора. Сам шаговый мотор подключен к цифровым контактам 8, 9, 10 и 11 (и для полярных, и двухполярных).

Кроме того, к Arduino нужно подключить транзистор Дарлингтона U2004 (если используете однополярный мотор) или H-мост SN754410NE (если двухполярный).

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

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

  • Плата Arduino;
  • Потенциометр;
  • Шаговый мотор;
  • Транзистор Дарлингтона U2004 (если используете однополярный шаговый мотор);
  • H-мост SN754410ne (если используете двухполярный шаговый мотор);
  • Питание, достаточное для работы вашего шагового мотора;
  • Макетная плата Breadboard;
  • Провода-перемычки;

Цепь и схема

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

Также в обоих случаях к цепи нужно подключить потенциометр на 10 кОм: боковые контакты – к питанию и «земле», а центральный – к 0-ому аналоговому контакту.

Примечание: Ниже показаны схемы только для 4-контактного соединения. Код выстроен таким образом, что с 2-контактным соединением он работать не будет.

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

UnipolarKnob bbsm.png

UnipolarKnob schms.png

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

BipolarKnob bbsm.png

BipolarKnob schms.png

Код

Подходит и для однополярного, и для двухполярного шагового мотора.

  1. /* Управление шаговым мотором
  2.  
  3. Вал шагового мотора будет поворачиваться вслед за поворотом ручки
  4. потенциометра (или в соответствии с изменением данных от другого
  5. датчика, стоящего вместо потенциометра), подключенного к 0-ому
  6. входному аналоговому контакту.
  7.  
  8. http://www.arduino.cc/en/Reference/Stepper
  9.  
  10. Этот код не защищен авторским правом.
  11. */
  12.  
  13. #include <Stepper.h>
  14.  
  15. // Поменяйте это число на количество «шагов» вашего мотора:
  16. #define STEPS 100
  17.  
  18. // Создаем экземпляр класса Stepper, указываем количество шагов
  19. // и контакты, к которым подсоединен шаговый мотор:
  20. Stepper stepper(STEPS, 8, 9, 10, 11);
  21.  
  22. // Результат предыдущего считывания с входного аналогового контакта:
  23. int previous = 0;
  24.  
  25. void setup()
  26. {
  27.   // Задаем скорость вращения мотора на 30 оборотов в минуту:
  28.   stepper.setSpeed(30);
  29. }
  30.  
  31. void loop()
  32. {
  33.   // Получаем данные от датчика:
  34.   int val = analogRead(0);
  35.  
  36.   // Двигаемся на количество шагов согласно данным от датчика:
  37.   stepper.step(val - previous);
  38.  
  39.   // Запоминаем предыдущий результат от датчика:
  40.   previous = val;
  41. }

См.также

  1. Stepper myStepper = Stepper(steps, pin1, pin2, pin3, pin4)
  2. stepper.setSpeed()
  3. stepper.step()
  4. Stepper library reference
  5. Sweep - sweep the shaft of a servo motor back and forth.
  6. Knob - control the position of a servo with a potentiometer.

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

  1. Arduino - Stepper Motor Knob