Friday, January 20, 2012

Новый рубеж механики - шаговый двигатель

О виновнике торжества
В прошлой статье я уже писал о том, что из разобранного принтера был добыт шаговый двигатель. После небольшого экскурса в теорию вопроса он был классифицирован как биполярный шаговый двигатель с шагом 7,5 градуса. Модель - M42SP-6TE. Конкретно спецификации для этого мотора я не нашел, но мне кажется что он что-то похожее на M42SP-6NK (его спецификацию google ищет в миг). Главное - это то, что у него 7,5 градусов шаг, а это значит, что он полный оборот делает за 48 шагов - этот параметр нам еще пригодиться.
Помимо названия модели на наклейке двигателя еще виднеется надпись 10Ω. Если я правильно понял теорию - то это сопротивление обмотки двигателя. Зная его не сложно сосчитать и ток потребляемый двигателем. Он будет зависеть от подаваемого напряжения.

О первой микросхеме, которую я вообще узнал
Мне много раз приходилось нарываться в интернете на надписи при сборке проектов "эта микросхема у меня завалялась". Я не понимал, как это микросхема может просто заваляться? Но, вот собственно и сам оказался в такой ситуации.
Микросхема используемая в проекте маркируется как L293D. Если вы уже искали что-то про создание роботов - то, скорее всего, слышали о ней и не раз. Практически каждый сайт подобной тематики упоминает её как наиболее дешевый вариант драйвера двигателей. Я не был исключением и первого робота пытался собрать всего на одной этой микросхеме - с этого начинались мои изучения робототехники. Сейчас я собственно не особо далеко ушел, но знаю уже чуть больше.

Я планировал её использовать для управления двигателей в моем роботе - вполне возможно, что она еще найдет в нем свое место, у меня и платка расчерчена под нее. Но об этом как-нибудь в другой раз.

Зачем здесь микросхема
Дело в том, что ножки микроконтроллера не могут выдать достаточно высокого тока не сгорев. Светодиод какой-нибудь разжечь - пожалуйста, но больше - он просто сгорят и возможно потянут за собой еще и весь микроконтроллер, а в случае с питанием от USB - еще и USB порт. В общем, не стоит к ним подключать что-то напрямую - это правило.
Для того, чтобы подключить что-то "мощное" к ножке микроконтроллера понадобится как минимум транзистор. Но собирать схему на транзисторах - было бы слишком уж нудным делом, да и времени бы заняло уйму.
Так вот, драйвер нужен для того чтобы относительно маленьким током от контроллера управлять достаточно большими токами способными раскрутить наш двигатель. Надеюсь, достаточно понятно объяснил зачем тут микросхема.
На самом деле L293D это сдвоенный драйвер и он позволит нам управлять всеми четырьмя выходами шагового двигателя.

Еще чуть-чуть теории
У биполярного шагового двигателя есть четыре провода. Для того, чтобы заставить двигатель повернуться на один шаг (в нашем случае 7,5 градусов) необходимо в определенной последовательности выставлять логические нули (нулевой потенциал, земля в электрической цепи) и логические единицы (плюс питания, положительный потенциал) на каждом из них. Я долго пытался вникнуть в диаграммы, что за чем генерировать там нужно, но в итоге глаза мне раскрыло ковыряние стандартной библиотеки Arduino - Stepper. Там написано следующее:
  Step C0 C1 C2 C3
     1  1  0  1  0
     2  0  1  1  0
     3  0  1  0  1
     4  1  0  0  1
А потом - все повторяется снова и снова, то количество раз, которое надо, чтобы повернуть вал на нужное количество шагов. Мне показалось это объяснение наиболее понятным. Ну, если вам этого не достаточно, чтобы быть спокойными - тогда сюда, отличная статья.

Приступим к сборке
Попытаемся собрать следующую схему (сразу говорю - лучше следовать схеме, так как на фото будет уже не особенно понятно, что с чем соединять):
Немного о самой схеме. Использование драйвера позволяет нам разделить питание arduino и мотора. Лично я запитал схему от компьютерного блока питания, тогда как Arduino получала питание от порта USB. Это очень важная особенность, так как используя L293D можно быстро поменять источник питания на более мощный не переделывая схемы. Да и честно - я никогда не пробовал использовать два разных источника питания и мне было просто интересно.
Немного фотографий процесса сборки (иногда я очень увлекаюсь и забываю обо всем, в том числе фоткать, спать и есть, так что немного отрывисто).
Запихиваем микросхему в макетную плату.
Так как коннектор от моего шагового двигателя слишком мелкий, чтобы быть непосредственно закрепленным на саму плату, как к примеру это было с коннектором сервопривода, то было принято решение просто удлинить его обычными проводками.
 Далее уже эти проводки попали в макетку.
Вот собственно тот пробел, о котором я говорил - тут уже все собрано. На схеме ниже можно увидеть как подается питание от блока питания - два проводка ведут к его коннектору. В схеме я использовал только 5 вольт, т.к. моей целью не было получить от мотора какую бы там ни было мощность - мне было интересно просто его заставить крутиться, и все.
 Фото с несколько другого ракурса.


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

#include <Stepper.h>
#define STEPS 48
Stepper stepper(STEPS, 2, 3, 4, 5);
void setup(){
stepper.setSpeed(30);
}
void loop()
{
  stepper.step(1*STEPS);
  delay(1000);
  stepper.step(-1*STEPS);
  delay(1000);
}

Вот такой вот простой кусочек кода. Все что он делает - поочередно поворачивает моторчик по и против часовой стрелки на 360 градусов. Все это очень просто и в то же время достаточно наглядно описывает возможности.

Запуск и старт
Не знаю как у вас, а у меня все программы, которые заставляют двигаться что-то в реальном мире, вызывают какой-то трепетный восторг. Я очень люблю экспериментировать с такими программами. В этот раз получилось практически так же как и всегда. Правда в этот раз я "нарвался" на кучу вопросов по работе L293D, которая оказывается работает и при подключенных к плюсу питания только контактов ENA1 и ENA2.
Google'ние ничего не дало. Зато электронщики сразу отозвались на форумах. Оказалось такое действительно может быть, т.к. просто "излишек" тока на ENA1 и ENA2 "стравливается" на шину питания и схема начинает работать все равно, и моторчик крутиться. Не советую повторять этот эксперимент дома - можно запросто что-нибудь спалить.
Ну, да собственно, чего ждать - видео:

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