Простой контроллер шагового двигателя на PIC12F629

Контроллер шагового двигателя

В статье приводятся принципиальные схемы вариантов простого, недорогого контроллера шагового двигателя и резидентное программное обеспечение (прошивка) для него.

 

Общее описание.

Контроллер шагового двигателя разработан на PIC контроллере PIC12F629. Это 8 выводной микроконтроллер стоимостью всего 0,5 $. Несмотря на простую схему и низкую стоимость комплектующих, контроллер обеспечивает довольно высокие характеристики и широкие функциональные возможности.

  • Контроллер имеет варианты схем для управления как униполярным, так и биполярным шаговым двигателем.
  • Обеспечивает регулировку скорости вращения двигателя в широких пределах.
  • Имеет два режима управления шаговым двигателем:
    • полношаговый;
    • полушаговый.
  • Обеспечивает вращение в прямом и реверсивном направлениях.
  • Задание режимов, параметров, управление контроллером осуществляется двумя кнопками и сигналом ВКЛ (включение).
  • При выключении питания все режимы и параметры сохраняются в энергонезависимой памяти контроллера и не требуют переустановки при включении.

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

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

Схема контроллера униполярного шагового двигателя с драйвером на биполярных транзисторах.

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

Объяснять в схеме особенно нечего. К PIC контроллеру подключены:

  • кнопки "+" и "–" (через аналоговый вход компаратора);
  • сигнал ВКЛ (включение двигателя);
  • драйвер ( транзисторы VT1-Vt4 , защитные диоды VD2-VD9).

PIC использует внутренний генератор тактирования. Режимы и параметры хранятся во внутреннем EEPROM.

Схема драйвера на биполярных транзисторах КТ972 обеспечивает ток коммутации до 2 А, напряжение обмоток до 24 В.

Я спаял контроллер на макетной плате размерами 45 x 20 мм.

Внешний вид контроллера

Если ток коммутации не превышает 0,5 А, можно использовать транзисторы серии BC817 в корпусах SOT-23. Устройство получится совсем миниатюрным.

 

Программное обеспечение и управление контроллером.

Резидентное программное обеспечение написано на ассемблере с циклической переустановкой всех регистров. Программа зависнуть в принципе не может. Загрузить программное обеспечение (прошивку) для PIC12F629 можно здесь.

Управление контроллером достаточно простое.

  • При активном сигнале "ВКЛ" (замкнут на землю) двигатель крутится, при неактивном (оторван от земли) – остановлен.
  • При работающем двигателе ( сигнал ВКЛ активен) кнопки "+" и "–" меняют скорость вращения.
    • Каждое нажатие на кнопку "+" увеличивает скорость на минимальную дискретность.
    • Нажатие кнопки "–" - уменьшает скорость.
    • При удержании кнопок "+" или "–" скорость вращения плавно увеличивается или уменьшается, на 15 значений дискретности в сек.
  • При остановленном двигателе ( сигнал ВКЛ не активен).
    • Нажатие кнопки "+" задает режим вращения в прямом направлении.
    • Нажатие кнопки "–" переводит контроллер в режим реверсивного вращения.
  • Для выбора режима – полношаговый или полушаговый необходимо при подаче питания на контроллер удерживать кнопку "–" в нажатом состоянии. Режим управления двигателем будет изменен на другой (проинвертирован). Достаточно выдержать кнопку – нажатой в течение 0,5 сек.

Схема контроллера униполярного шагового двигателя с драйвером на MOSFET транзисторах.

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

Низкопороговые MOSFET транзисторы позволяют создать драйвер с более высоким параметрами. Применение в драйвере MOSFET транзисторов, например, IRF7341 дает следующие преимущества.

  • Сопротивление транзисторов в открытом состоянии не более 0,05 Ом. Значит малое падение напряжения (0,1 В при токе 2 А), транзисторы не греются, не требуют радиаторов охлаждения.
  • Ток транзисторов до 4 А.
  • Напряжение до 55 В.
  • В одном 8 выводном корпусе SOIC-8 размещены 2 транзистора. Т.е. на реализацию драйвера потребуется 2 миниатюрных корпуса.

Таких параметров невозможно достичь на биполярных транзисторах. При токе коммутации свыше 1 А настоятельно рекомендую вариант утройства на MOSFET транзисторах.

 

Подключение к контроллеру униполярных шаговых двигателей.

В униполярном режиме могут работать двигатели с конфигурациями обмоток 5, 6 и 8 проводов.

Схема подключения униполярного шагового двигателя с 5 и 6 проводами (выводами).

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

Для двигателей FL20STH, FL28STH, FL35ST, FL39ST, FL42STH, FL57ST, FL57STH с конфигурацией обмоток 6 проводов выводы промаркированы следующим цветами.

 Обозначение вывода на схеме  Цвет провода
 A  черный
 0  желтый
 C  зеленый
 B  красный
 0*  белый
 D  синий

Контроллер

Конфигурация с 5 проводами это вариант, в котором общие провода обмоток соединены внутри двигателя. Такие двигатели бывают. Например, PM35S-048.

Контроллер с PM35S-048

Документацию по шаговому двигателю PM35S-048 в PDF формате можно загрузить здесь.

Схема подключения униполярного шагового двигателя с 8 проводами (выводами).

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

То же самое как и для предыдущего варианта, только все соединения обмоток происходят вне двигателя.

Как выбирать напряжение для шагового двигателя.

По закону Ома через сопротивление обмотки и допустимый ток фазы.

U = Iфазы * Rобмотки

Сопротивление обмотки постоянному току можно измерить, а ток надо искать в справочных данных.

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

 

Как определить обмотки шаговых двигателей, если нет справочных данных.

В униполярных двигателях с 5 и 6 выводами, средний вывод можно определить, измерив, сопротивление обмоток. Между фазами сопротивление будет в два раза больше, чем между средним выводом и фазой. Средние выводы подключаются к плюсу источника питания.

Дальше любой из фазных выводов можно назначить фазой A. Останется 8 вариантов коммутаций выводов. Можно их перебрать. Если учесть, что обмотка фазы B имеет другой средний провод, то вариантов становится еще меньше. Попутка обмоток фаз не ведет к выходу из строя драйвера или двигателя. Двигатель дребезжит и не крутится.

Только надо помнить, что к такому же эффекту приводит слишком высокая скорость вращения (выход из синхронизации). Т.е. надо скорость вращения установить заведомо низкую.

Схема контроллера биполярного шагового двигателя с интегральным драйвером L298N.

Биполярный режим дает два преимущества:

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

Создавать схему биполярного драйвера на дискретных элементах – дело неблагодарное. Проще использовать интегральный драйвер L298N. Описание на русском языке есть здесь.

Схема контроллера с биполярным драйвером L298N выглядит так.

Схема контроллера биполярного шагового двигателя

Драйвер L298N включен по стандартной схеме. Такой вариант контроллера обеспечивает фазные токи до 2 А, напряжение до 30 В.

Подключение к контроллеру биполярных шаговых двигателей.

В этом режиме может быть подключен двигатель с любой конфигурацией обмоток 4, 6, 8 проводов.

Схема подключения биполярного шагового двигателя с 4 проводами (выводами).

Схема 4 вывода

Для двигателей FL20STH, FL28STH, FL35ST, FL39ST, FL42STH, FL57ST, FL57STH с конфигурацией обмоток 4 провода выводы промаркированы следующим цветами.

 Обозначение вывода на схеме  Цвет провода
 A  черный
 C  зеленый
 B  красный
 D  синий

Схема подключения биполярного шагового двигателя с 6 проводами (выводами).

Схема 6 выводов

Для двигателей FL20STH, FL28STH, FL35ST, FL39ST, FL42STH, FL57ST, FL57STH с такой конфигурацией обмоток выводы промаркированы следующим цветами.

 Обозначение вывода на схеме  Цвет провода
 A  черный
 C  зеленый
 B  красный
 D  синий

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

Схема подключения биполярного шагового двигателя с 8 проводами (выводами).

Может быть два варианта:

  • с последовательным включением
  • с параллельным включением.

Схема последовательного включения обмоток.

Схема 8 выводов

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

Схема параллельного включения обмоток.

Схема 8 выводов

Схема с параллельным включением обмоток увеличивает в 2 раза фазные токи. К достоинствам этой схемы можно отнести, низкую индуктивность фазных обмоток. Это важно на больших скоростях вращения.

 

Т.е. выбор между последовательным и параллельным включением биполярного шагового двигателя с 8 выводами определяется критериями:

  • максимальный ток драйвера;
  • максимальное напряжение драйвера;
  • скорость вращения двигателя.

Программное обеспечение (прошивка) для PIC12F629 можно загрузить здесь.

48 комментариев на «Простой контроллер шагового двигателя на PIC12F629»

    • Я не разрабатывал печатную плату. Спаял на макетной плате. Схема простая и мне нужно было только одно такое устройство.

  1. Нужен полушаговый режим для биполярного ШД, в связи с этим вопрос: надо ли менять программу для 12F629 или прошивка подойдёт как к униполярному, так и к биполярному ШД?

    • Для униполярного и биполярного двигателей программа не меняется. Логика переключения фаз одинаковая.

  2. Обыскал весь интернет, не нашёл того что надо мне. Можете сделать например на одном из этих МК: 12F675, 16F676, 16F628A, 16F873-876, 18F252, 18F2520 что бы отдельной конпкой двигатель крутился в одну сторону, другой кнопкой в другую. При отпущеных кнопках запоминание последнего кода до отпускания кнопки, при этом на всех выходах лог. 0., то есть не запись в епром, а отпущеные кнопки как режим временной остановки, что бы при нажатии кнопки в очередной раз перебор кода начался с места остановки. И подстройка оборотов подстроречником в диапазоне 4…400Гц?
    Нужно для отрезного станка по текстолиту.

    • На PIC с 8 выводами такое не сделать, выводов не хватает. А на PIC18F2520, конечно, можно. Не знаю, что у меня со временем. Напишите полностью задачу на mypractic@mail.ru. Какой ток двигателя и все остальное. Может что-то готовое удастся подкорректировать.

      Кстати, посмотрите в рубрике Фасовочное оборудование Дозатор для розлива жидкостей во флаконы ПАРС. Там короткий фильм.

  3. Забыл, переключатель, можно на MCLR или на любой свободный порт: лог 1 — полушаг, лог 0 — полный шаг.

  4. Регулировка частоты оборотов может быть не на подстроечнике, а на 2х кнопках, больше и меньше с запоминанием в епроме.

  5. Дело в том, что нет свободных портов. Даже две кнопки к одному порту пришлось подключить.
    А выбор режима —
    •Для выбора режима – полношаговый или полушаговый необходимо при подаче питания на контроллер удерживать кнопку «–» в нажатом состоянии. Режим управления двигателем будет изменен на другой (проинвертирован). Достаточно выдержать кнопку – нажатой в течение 0,5 сек.

    Режим запомнится в EEPROM и не изменится при выключении питания.

  6. Ток двигателя который будет в конечном изделии ещё не знаю, выбор МК любой из выше перечисленных, их у меня хватает в избытке. Думаю прикрутить потом схему управления с МК к китайскому модулю на L298N, они сейчас по 1,5 бакса. Движок планирую из серии 775, двигатель постоянного тока 12 В — 18 В 11500 об./мин. — 18000 об./мин.
    При 12В — 1,8А при 18В — 2,2А
    Будет 2 алмазных диска, один сверху второй снизу. Что то на подобии скрайбинга. Прототип уже работает, только без электроники. Добавить ещё придётся сигнал на включение насоса для оттяжки текстолитовой пыли. Но это уже мелочь.

  7. Здравствуйте!
    А если биполярный шаговый двигатель потребляет ток в 10 А на каждую обмотку, достаточно только поставить более мощные MOSFET?

    • Здравствуйте! Для биполярного двигателя в статье вариант на L298 с током до 2 А. К тому же у двигателя должно быть сопротивление обмоток соответствующее напряжению питания. Посмотрите в уроке 33 (уроки Ардуино). Там описана эта проблема.
      Может лучше для такого мощного двигателя STEP/DIR драйвер использовать (урок 34).

    • Посмотрите урок 33. Там написано как подключать шаговые двигатели к простым драйверам-ключам.

  8. Странно, когда я программирую микроконтроллер вашей прошивкой, но когда ее считываю программа показывает что микроконтроллер пустой, этот же микроконтроллер без проблем записывает в себя другую прошивку и потом ее можно из него считать. Может что-то делаю не то, при попытке скачать прошивку с сайта у меня у меня идет не скачивание а переход на страницу с содержимом прошивки, ее код прошивки я выделяю или сразу сохраняю или копирую, При сохранении у меня получается файл с расшерением txt, при создании файла и копировании туда кода прошивки с сохранением расширения HEX. Вообщем потом этой файл грузиться в микроконтроллер, так показывается программа, но по каким та причинам при попытке проверить как записалось, микроконтроллер оказывается пустой, и такое только с этой прошивкой. ЧТО Я ДЕЛАЮ НЕ ТАК ?

    • В программе я по привычке указал конфигурацию с защитой от чтения. Т.е. после того как программа загружается в микроконтроллер ее считать нельзя. Ну а правильно работает?

        • Что то у меня с первого раза не заработала схема для униполярного монторчика. На кнопку включения не реагирует. Чуть позже проверю может что нет так спаял.

  9. Здравствуйте Эдуард,Можно ли использовать Вашу схему,как секундомер для бассейна? Моторчик FL42STH47-0406A,Родной был на PIC16F628A и ULN2064B, похоже слетела прошивка у PICa,нет импульсов на управление ULN?

    • Здравствуйте!
      Нет. Я думаю это невозможно. PIC контроллер в этой схеме тактируется от внутреннего RC генератора. А он обладает невысокой точностью и стабильностью частоты. Вам надо контроллер с кварцевым генератором. Попробуйте контроллер на Ардуино, например, программу из урока 29.

  10. Здравствуйте Эдуард.Может ли этот контроллер вращать двигатель со скоростью 1 оборот в минуту?Двигатель FL42STH47-0406A шаг 1,8 град,12в. 0,4а.

    • Александр, нет. Минимальная скорость примерно 1 оборот за 10 секунд. Но главное — как можно делать секундомер, который черте-что показывает.
      Я вам советую:
      — Взять плату Arduino Nano. Она стоит 220 руб. Можете купить по моей партнерской ссылке: https://goo.gl/0yKO0r
      — Добавить к ней схему и программу из урока 29. Схема драйвера такая же, как из этой статьи. Может быть у вас есть готовый драйвер.
      — В программе установить нужную скорость вращения. Точно подогнать скорость, меняя время прерывания.

      У вас получится точный секундомер. Можете к нему еще светодиодные индикаторы добавить.

  11. Спасибо Вам за разъяснение.Могли бы Вы посодействовать по приобретению этой платы,по Вашей ссылке Arduino nano нет в наличии.

    • Как я посодействую, если нет в наличии. Наверное, это временно. Я там недавно покупал Arduino Nano.
      Если размеры некритичны, то купите Arduino UNO R3 за 320 руб. Можно Arduino Prp Mini 5 В. Только для ее программирования еще нужен преобразователь USB — UART PL2303HX (с кабелем).

      Есть много мест, где еще можно купить, но там дороже.

  12. Зачем в схеме драйвера на биполярных транзисторах нужны диоды VD3,5,7,9? КТ972 ведь с диодом.

    • Защищают транзисторы от выбросов в проводах к двигателю, от взаимных индуктивностей обмоток и т.п.

  13. А диод на кристалле транзистора чем плох? Получается два диода в параллель. Или я чето не так понимаю?

    • У КТ972 нет защитного диода. Такие диоды бывают в MOSFET транзисторах. И в этом случае используется только один дополнительный диод.

    • Еще раз посмотрел документацию Минского завода ИНТЕГРАЛ. Никаких диодов, и в параметрах диоды не упоминаются. Но, может быть, я ошибаюсь. Если есть диод с достаточными предельно-допустимыми параметрами, то можно второй диод не ставить.

  14. Не знаю как на новых,но на старых(советских времен)транзисторах и кт972,и кт973 коллектор с эмиттером звонятся как диод(есть с десяток).

  15. Здравствуйте Эдуард. Пришел с китая NANO V3. хочу собрать драйвер на КТ829А. На сколько критично сопотивление в базе?(у вас 820)

    • Александр. А может откроете тему на форуме сайта. Я подробно отвечу. В комментариях не совсем удобно много писать. Если не, то повторите вопрос в комментариях, я отвечу.

      • Сделать простенький скетч для вращения с точной частотой? Откройте тему на форуме по секундомеру для бассейна. Я помогу.

  16. Вы мне ничего не обещали.В программировании я дуб.Если сожете,написать программу(за определенную сумму) я буду рад.

    • Просто, чтобы двигатель вращался один оборот в минуту? И все?
      Откройте тему на форуме в разделе шаговые двигатели. Назовите как-нибудь часы для бассейна на шаговом двигателе. Напишите какой у вас двигатель, униполярный или биполярный, сколько шагов на оборот, или тип двигателя. Какие еще у вас вопросы. Я напишу простенький скетч. Он за 10 минут создается. Вы проверите, если что-то не так подкорректирую. Я не думаю, что за 10 минут работы надо брать деньги. Задайте вопрос и про КТ829.
      Если на форуме писать не хотите, напишите в комментариях, я отвечу. На форуме просто удобнее писать.

  17. Доброй ночи, прошу помощи, контроллер PIC 16f676 задача было заставить вертеться шаговый двигатель в разные стороны и с помощью потенциометра регулировать скорость, кое как заставил двигатель вращаться а вот с програмированием потенциометра проблема, не могли бы вы помочь?

    • Здравствуйте! Боюсь, программирование PIC контроллеров достаточно сложная задача. Гораздо проще и дешевле это сделать на плате Ардуино. Программировать на языке высокого уровня для Ардуино достаточно просто. Посмотрите мои уроки Ардуино, посвященные шаговым двигателям. Там много практических примеров. Если будет непонятно, я помогу.

      • Было бы чудесно если бы был выбор) Просто работа курсовая, а навыков не хватает для решения задачи)

  18. Доброй ночи. Можете дать прошивку в HEX или TXT файле на мою почту ? Желательно с выключенной защитой от чтения. Просто я собрал это устройство, но оно не работает. Вот и думаю что что то с прошивкой.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *