Шаговый двигатель в BASCOM-AVR

Описан еще один способ «полушагового» управления 2-тактным униполярным шаговым двигателем на Бейсике в BASCOM-AVR микроконтроллером ATtiny2313.

Как правило, у каждого радиолюбителя есть выкрученные из старой радиоаппаратуры 2-тактные униполярные ШД с 6-ю или 5-ю проводами. В современных устройствах они практически не используются, но из них можно много чего сделать. Данный метод не претендует на истину и носит лишь информативный характер. Предполагается, что если вы зашли на эту страничку, значит, Вы знаете, что такое шаговый двигатель. В данной статье не рассматривается применение специализированных микросхем. Цель данной статьи — наработка материала для создания более сложного устройства в будущем на основе одного микроконтроллера.

Симулятор ШД

Итак, рассмотрим схему управления ШД микроконтроллером на примере устройства для проверки шаговых двигателей. Основа устройства МК ATtiny2313, выбран лишь потому, что у него есть необходимое количество ног для развития устройства в будущем. ШД подключен к микроконтроллеру через ULN2003. Это не лучшее решение для постоянной эксплуатации мощного ШД, но для проверки и оценки возможностей вполне достаточно. Как правило ШД выкрученные из старых принтеров и «флоппиков» не выделяются особой мощностью и годятся в основном лишь только «прищепки поворачивать», поэтому максимального тока ULN-ки 500мА вполне хватает. Кнопки управляют направлением вращения двигателя, при нажатии и удержании одной двигатель крутится в одну сторону, при нажатии другой — в другую. Светодиод подтверждает нажатие кнопок.

Плата3д

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

1

Потом устанавливаем все выводы порта B как «выход». Выводы 6 и 7 микроконтроллера устанавливаем как «вход», для подключения кнопок. Светодиод подключен к выводу 9 поэтому PORTD.5 «выход» и присваиваем ему имя Led. Для компенсации дребезга контактов устанавливаем продолжительность опроса кнопок оператором Debounce равной 50. Объявляем переменную S и делаем ее равной 1. В зависимости от значения этой переменной программа будет включать и выключать соответствующие выводы порта B.

2

Здесь запущен основной цикл программы. Т.к. ни одна из кнопок пока еще не нажата, то гасим светодиод и выключаем все выводы порта B, что бы на обмотках двигателя не было напряжения во время ожидания нажатия кнопок. Оператор Debounce бесконечно следит за нажатием кнопок и срабатывает сразу, когда на выводе 6 или 7 появляется низкий уровень, отсылая выполнение программы в соответствующую подпрограмму.

3

Теперь главное. Нажата кнопка «ВЛЕВО». Включаем светодиод и увеличиваем переменную S на 1. Так как мы управляем двигателем «полушагом», то для упрощения программы выбрано всего 8 вариантов состояния выходов порта B. Поэтому следим за значением переменной S и если оно больше 8, то снова делаем его равным 1. Теперь выбираем одно из состояний выводов порта B соответственно значению переменной S. Ждем несколько микросекунд и проверяем, нажата ли еще кнопка. Если кнопка нажата, то возвращаемся в начало подпрограммы, увеличиваем и проверяем переменную S, переключаем выводы в следующее состояние. Так до тех пор, пока нажата кнопка. Когда отпускаем кнопку, нас после проверки последнего условия автоматом возвращает в основной цикл программы, где программа снова ждет нажатия кнопки.

4

При нажатии кнопки «ВПРАВО» все происходит точно также, только теперь переменную S уменьшаем и следим, что бы она не становилась равной 0.

5

Отдельно нужно сказать об операторе задержки Waitms. Этот оператор регулирует скорость вращения вала двигателя, чем он его значение меньше, тем быстрее крутится вал. Дело в том, что для управления реальным ШД должен применяться оператор Waitus со значением от 1000 до 5000, но Proteus 7.10 отказывается симулировать схему на такой скорости. Поэтому для симуляции ставим в программу Waitms 50 и двигатель в Proteus-е весело крутится. А для реального ШД ставим Waitus 1000 иначе он будет просто дергаться при нажатии кнопки. Также, возможно, придется подобрать это значение под конкретный двигатель. Бывает так, что один мотор прекрасно и бесшумно крутится с значением Waitus 1000, а другой мычит на месте. Изменишь значение на 2000 и все, поехал.

Если после сборки и подключения двигатель не крутится, мычит или дергается в разные стороны проверяем сначала правильность подключения его обмоток. Можно просто методом «научного тыка» перебрать все возможные варианты. Так же внимательно программируем «фьюзы». Если мотор медленно, но верно «тикает» или пытается двинуться в нужном направлении можно попробовать изменить значение оператора Waitus.

Фьюзы

Материалы к статье