Управление шаговым двигателем на микроконтроллере – Управление шаговым двигателем с использованием микроконтроллера ATmega16 и LabVIEW

РадиоКот :: Пропорциональное управление шаговым двигателем

РадиоКот >Схемы >Цифровые устройства >Автоматика >

Пропорциональное управление шаговым двигателем

Описываемое ниже устройство позволяет управлять униполярным шаговым двигателем типа СДХ 1,8/40 и аналогичным. Схема электрическая принципиальная блока управления изображена на рис.1. Он выполнен на базе микроконтроллера ATmega 8 работающего от встроенного тактового генератора на частоте 2 МГц. В качестве ключей, коммутирующих обмотки шагового двигателя М1, использованы логические элементы микросхем DD2, DD3 типа SN75452 (русский аналог — К155ЛА18). Это микросхемы – повышенной мощности с открытым коллекторным выходом.


          Блок поддерживает пропорциональное и дискретное управление мотором. В режиме пропорционального управления — угол поворота ротора двигателя, задается переменный резистором R1. В режиме дискретного управления — вращение двигателя «влево», «вправо», «стоп» осуществляется кнопками S1 и S2. Кроме этого, в схеме можно выбирать шаговый или полушаговый режим работы, а также скорость вращения двигателя.
          Установкой перемычки X4 выбирается пропорциональное управление, а при ее отсутствии – дискретное управление. Перемычкой X5 определяется шаговый и полушаговый режим работы двигателя. Все эти режимы работы инициализируются только в момент включения схемы или сброса микроконтроллера. Поэтому нужные перемычки необходимо установить перед включением питания. В микроконтроллере задействованы два канала АЦП. На вход одного из них – ADC5 (28 ножка) подключен подстроечный резистор R3. С его помощью регулируется скорость вращения двигателя при любом режиме работы схемы.

          В режиме пропорционального управления задействуется еще один канал АЦП – ADC4 (27 ножка). На его вход через интегрирующую цепь R2, C1 подключен переменный резистор R1, который задает угол поворота ротора мотора. Скорость работы АЦП в данной управляющей программе осуществляет преобразования с 8 — битной точностью. Поэтому положение ручки переменного резистора R1 программа контроллера условно разбивает на 255 шагов. После включения питания, программа выполняет калибровку положения ротора шагового двигателя. Для этого, перед началом работы, автоматически выполняется команда «вращение двигателя влево» до тех пор, пока флажок, закрепленный на роторе мотора, не «доедет» до концевого датчика (оптопары) VT1, HL1. При поступлении сигнала с датчика VT1, программа обнуляет регистр-счетчик количества шагов двигателя, измеряет напряжение на выходе переменного резистора R1, преобразует его в цифровой код в диапазоне от 0 до 255, записывает его в старший байт регистра результата преобразования АЦП (это количество шагов переменного резистора R1), а затем сравнивает его содержимым регистра-счетчика количества шагов двигателя. Если число шагов резистора R1 больше чем шагов двигателя М1, то выдается команда: «вращение двигателя вправо». При этом с каждым шагом ротора происходит инкремент счетчика шагов двигателя и его сравнение с числом в регистре АЦП (шаги резистора R1). Когда число шагов двигателя станет равно числу в регистре АЦП, выполняется команда: «стоп». Поворачивая ручку резистора R1 «влево», уменьшается уровень постоянного напряжения на входе АЦП. При этом число в регистре результата преобразования АЦП станет меньше чем текущее значение регистра — счетчика шагов. В этом случае выдается команда: «вращение двигателя влево». С каждым шагом двигателя происходит декремент регистра-счетчика шагов двигателя до тех пор, пока числа в обоих регистрах не станут равны. Таким образом, вращая ручку переменного резистора R1, ротор двигателя поворачивается в том же направлении и на такое же количество шагов.
         Отмечу, что предлагаемый двигатель совершает один оборот на 360° за 200 шагов (т.е. один шаг – 1,8 град.). Следовательно, в данной схеме, за 255 условных шагов от переменного резистора R1, ротор мотора сделает более одного оборота и повернется на угол 459°. Поэтому для ограничения угла поворота двигателя используется концевой датчик (оптопара) для крайнего правого положения ротора. Он выполнен на элементах VT2, HL2. Для более точного копирования угла поворота ручки переменного резистора ротором двигателя необходимо установить в разрыв вывода сопротивления R1, подключенного к «+5 В», ограничительный резистор Rогр.. Его номинал следует тщательно подобрать (в пределах от 1 до 3 кОм).
         В управляющей программе предусмотрена функция повторной калибровки положения ротора двигателя в процессе работы устройства. Например, в случае проскальзывания шагов ротора, по какой либо причине (двигатель перегружен, зацепился за что-то и т.д.), можно повернуть ручку переменного резистора R1 в крайнее левое положение и подождать 2 — 3 секунды. При этом происходит проверка положения флажка ротора с помощью оптического датчика крайнего левого положения VT1. Если флажок не зашел в зону срабатывания датчика, значит в процессе работы произошло смещение шагов ротора мотора М1 относительно шагов резистора R1. В этом случае запускается программа повторной калибровки системы, и работа устройства восстанавливается.
         Для работы схемы в режиме пропорционального управления оптический датчик крайнего левого положения и калибровки VT1 — обязателен. Датчик крайнего правого положения VT2 можно не ставить, если нет необходимости в ограничении положения ротора при вращении вправо. Но, тогда, необходимо 14 вывод микроконтроллера подключить к +5 В.
При пропорциональном управлении двигателем в полушаговом режиме ротор совершает поворот в пределах от 0° до 230°. Мощность мотора уменьшается, зато увеличивается плавность хода. Это необходимо учитывать при выборе этого режима работы.
         В режиме дискретного управления вращение «вправо» осуществляется кнопкой S1, вращение «влево» — кнопкой S2. Если кнопки не нажаты, выполняется команда «стоп». Программа калибровки двигателя и переменный резистор R1 в этом режиме не используются. Оптические датчики VT1, HL1 и VT2, HL2 работают как ограничители крайних положений ротора двигателя М1. Если ограничение вращения не требуется, то эти оптопары можно не ставить. Но при этом необходимо выводы 14, 15 микроконтроллера припаять к +5В.
        В случае необходимости контроля над работой шагового двигателя другими (внешними) устройствами, в схеме предусмотрены специальные выходы на старших пинах порта D микроконтроллера. На выводе PD7 «step» формируется кратковременный импульс прямоугольной формы при каждом шаге двигателя (может пригодиться для внешнего счетчика шагов). Вывод PD6 «rewers» – сигнал реверса двигателя (лог. 0 — вращение вправо, лог. 1 – вращение влево). При обнулении (сбросе) программного счетчика — регистра количества шагов, на выводе PD5 формируется кратковременный импульс «reset». Эти выходы работают и в режиме пропорционального управления.
Управляющая программа для микроконтроллера написана на языке Ассемблер. Файл прошивки прилагается. Кроме этого, необходимо запрограммировать фьюзы: CKSEL0=0, CKSEL1=1, CKSEL2=0, CKSEL3=0, SUT0=0, SUT1=1, SKOPT=1.


         Печатная плата блока управления изображена на рис. 2. Она изготовлена из одностороннего фольгированного стеклотекстолита размерами 42 × 58 мм. В прикрепленном файле с расширением .lay прилагается рисунок для «лазерно-утюжной» технологии изготовления платы. Расположение элементов схемы на печатной плате приведено на рисунке 3.

После установки микросхемы – стабилизатора DA1, к ней, необходимо прикрутить радиатор площадью не менее 4 см². Собранная конструкция представлена на фото. 1 и фото. 2.


Как уже отмечалось, логические микросхемы SN75452 можно заменить русским аналогом — К155ЛА18. Раньше они использовались в старых пятидюймовых флоппи дисководах вместе с предлагаемым шаговым двигателем.


         Предлагаемый блок может быть использован в различных устройствах с электромеханическим приводом. Например, у меня два таких модуля с шаговыми двигателями пропорционально управляют видеокамерой наблюдения с удаленным доступом по двум осям координат. Один мотор поворачивает камеру по оси Х, другой – по оси Y (фото. 3).

Видеоролик о работе девайса:

Файлы:
Печатная плата под ЛУТ
Рис. 1. Принципиальная схема
Файл прошивки

Все вопросы в Форум.


Как вам эта статья?

Заработало ли это устройство у вас?

Управление шаговым двигателем с помощью микроконтроллера. » Хабстаб

Всё началось с того, что в одном из устройств надо было поворачивать вал электродвигателя на определённое количество оборотов, большая точность не требовалась плюс-минус четверть оборота, поэтому было принято решение реализовать это с помощью электродвигателя постоянного тока. В качестве управляющего элемента был выбран микроконтроллер — Atmega16, но так как выходное напряжение выводов Atmega16 всего 5 вольт, а максимальный ток не должен превышать 20mA, а для управления двигателем необходим ток около десятка ампер и напряжение в несколько десятков вольт, управлять напрямую двигателем не получится. Нужен какой-то посредник, который получал бы на вход то, что может отдать микроконтроллер, а отдавал бы то, что хочет получить двигатель, такого посредника легко найти среди полевых транзисторов серии IRL, управляемых логическим уровнем .
Управление шаговым двигателем с помощью микроконтроллера.
После первого запуска стало понятно, что хотели получить одно, а получили другое, после того как транзистор закрывался, двигатель продолжал вращаться ещё не один оборот, оно и понятно, для того чтобы вал остановился, энергия, которую он накопил пока вращался, должна быть израсходована.

Вот мы и подошли к одному из основных преимуществ шагового двигателя — возможность точного позиционирования.

Шаговые двигатели бывают трёх основных типов:

  • двигатели с переменным магнитным сопротивлением
  • двигатели с постоянными магнитами
  • гибридные двигатели

В двигателях с переменным магнитным сопротивлением, ротор изготовлен из магнитомягкого материала, то есть материала, который способен быстро намагничиваться и быстро терять магнитные свойства при снятии магнитного поля. Вращающий момент создаётся магнитными потоками статора, причём ротор всегда становится так, чтобы магнитный поток создаваемый статором замкнулся. Для того чтобы ротор повернулся надо, выключить ток в одной обмотке и включить в другой обмотке.
Управление шаговым двигателем с помощью микроконтроллера.

В двигателе с постоянными магнитами, ротор разделён на полюса. При подаче тока в одну из обмоток ротор займёт положение, в котором разноимённые полюса ротора и статора будут находиться напротив друг друга.
Управление шаговым двигателем с помощью микроконтроллера.
Гибридные двигатели обладают преимуществами вышеописанных двигателей и лучшими характеристиками: меньшей величиной шага, большим моментом, большей скоростью и как следствие стоят дороже.

Перейдём к практике, для эксперимента возьмём шаговый двигатель MITSUMI M42SP-5 с шагом 7.5°, изображённый на картинке.

Управление шаговым двигателем с помощью микроконтроллера.

Скачиваем на него даташит и находим таблицу.
Управление шаговым двигателем с помощью микроконтроллера.
Из таблицы понятно, что такие двигатели бывают двух типов:
  • 12 вольтовые с сопротивлением обмотки 50 Ом
  • 24 вольтовые с сопротивлением обмотки 120 Ом

Схема двигателя изображена на картинке ниже.

Управление шаговым двигателем с помощью микроконтроллера.
Из двигателя выходит 5 проводов: 4 фазы и один общий. Общий провод можно найти с помощью мультиметра, сопротивление между ним и оставшимися 4 проводами равно сопротивлению фазы, в нашем случае 50 Ом.

Как писалось выше, необходим посредник, который примет от микроконтроллера 20mA и отдаст двигателю 259mA. Можно как раньше взять полевой транзистор, но есть одно, но фаз здесь целых четыре штуки и для этого случая есть более простое решение — это использовать микросхему ULN2003.

Управление шаговым двигателем с помощью микроконтроллера.
ULN2003 состоит из 7 транзисторов Дарлингтона, каждый из которых может пропустить через себя до 500mA, а рабочее напряжение не должно превышать 50V, чего нам вполне достаточно. На самом деле каждая ячейка ULN2003 состоит не только из транзистора Дарлингтона, а также включает в себя весь необходимый обвес, её структуру можно посмотреть в даташите.
Управление шаговым двигателем с помощью микроконтроллера.
Транзистор Дарлингтона или пара Дарлингтона, представляет собой два соединённых транзистора, его отличительной особенностью является высокий коэффициент усиления, который равен произведению коэффициентов усиления каждого из транзисторов(βс = β1 ∙ β2).

Вращать двигатель можно, подавая питание по очереди на обмотки, при этом в любой момент времени включена лишь одна обмотка, в этом случае двигатель будет работать в режиме шага, то есть при одном переключении обмоток будет поворачиваться на 7.5°.

Управление шаговым двигателем с помощью микроконтроллера.
Аналогичным образом можно включать две соседние обмотки, этот способ позволяет увеличить момент удержания, при этом двигатель будет работать в режиме шага.
Управление шаговым двигателем с помощью микроконтроллера.
Также можно включить двигатель в режиме полушага, то есть при одном переключении обмоток ротор будет поворачиваться на 3.75°.
Управление шаговым двигателем с помощью микроконтроллера.
Для удобства управления можно создать массив в котором номер элемента массива будет обозначать номер шага, а значение элемента массива — какие обмотки должны быть включены.

uint8_t step[8] = {0x01, 0x03 ,0x02, 0x06,0x04, 0x0c,0x08,0x09};

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

Управление шаговым двигателем | Электроника для всех

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

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

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

Типы шаговых двигателей
Если не углубляться во внутреннюю конструкцию, число шагов и прочие тонкости, то с пользовательской точки зрения существует три типа:

  • Биполярный — имеет четыре выхода, содержит в себе две обмотки.
  • Униполярный — имеет шесть выходов. Содержит в себе две обмотки, но каждая обмотка имеет отвод из середины.
  • Четырехобмоточный — имеет четыре независимые обмотки. По сути дела представляет собой тот же униполярник, только обмотки его разделены. Вживую не встречал, только в книжках.
Униполярный отличается от биполярного только тем, что ему нужна куда более простая схема управления, а еще у него значительно слабее момент. Так как работает он только половинами обмоток. НО! Если оторвать нафиг средний вывод униполярника, то мы получим обычный биполярный. Определить какой из выводов средний не сложно, достаточно прозвонить сопротивление тестером. От среднего до крайних сопротивление будет равно ровно половине сопротивления между крайних выводов. Так что если тебе достался униполярник, а схема подключения для биполярного, то не парься и отрывай средний провод.

Где взять шаговый двигатель.
Вообще шаговики встречаются много где. Самое хлебное место — пятидюймовые дисководы и старые матричные принтеры. Еще ими можно поживиться в древних винчестерах на 40Мб, если, конечно, рука поднимется покалечить такой антиквариат.
А вот в трехдюймовых флопарях нас ждет облом — дело в том, что там шаговик весьма ущербной конструкции — у него только один задний подшипник, а передним концом вал упирается в подшипник закрепленный на раме дисковода. Так что юзать его можно только в родном креплении. Либо городить высокоточную крепежную конструкцию. Впрочем, тебе может повезет и ты найдешь нетипичный флопарь с полноценным движком.

Схема управления шаговым двигателем
Я разжился контроллерами шаговиков L297 и мощным сдвоенным мостом L298N.

Лирическое отступление, при желании можно его пропустить

Именно на нем был сделан мой первый силовой блок робота. Кроме него там еще два источника питания на 5 и на 3.3 вольта, а также контроллер двух движков на L293 (такой же как и во второй реализации силового блока). В качестве контроллера тогда был выбран АТ89С2051. Это антикварный контроллер архитектуры MSC-51 в котором из периферии только два таймера, порты да UART, но я его люблю нежно и трепетно, так как первая любовь не проходит никогда =). К сожалению исходники его мега прошивки канули в Лету вместе с убившимся винтом, так что я не могу поделиться теми извращенскими алгоритмами, которые были туда засунуты. А там был и двухканальный ШИМ, и I2C Slave протокол, и контроль за положением шаговика с точным учетом его перемещения. Короче, знатный был проект. Ныне валяется трупом, т.к. все лень запустить Keil uVision и написать новую прошивку. Да и ассемблер С51 я стал уже забывать.


Схема включения L298N+L297 до смешного проста — надо тупо соединить их вместе. Они настолько созданы друг для друга, что в даташите на L298N идет прямой отсыл к L297, а в доке на L297 на L298N.

Осталось только подключить микроконтроллер.
  • На вход CW/CCW подаем направление вращения — 0 в одну сторону, 1 — в другую.
  • на вход CLOCK — импульсы. Один импульс — один шаг.
  • вход HALF/FULL задает режим работы — полный шаг/полушаг
  • RESET сбрасывает драйвер в дефолтное состояние ABCD=0101.
  • CONTROL определяет каким образом задается ШИМ, если он в нуле, то ШИМ образуется посредством выходов разрешения INh2 и INh3, а если 1 то через выходы на драйвер ABCD. Это может пригодится, если вместо L298 у которой есть куда подключать входы разрешения INh2/INh3 будет либо самодельный мост на транзисторах, либо какая-либо другая микросхема.
  • На вход Vref надо подать напряжение с потенциометра, которое будет определять максимальную перегрузочную способность. Подашь 5 вольт — будер работать на пределе, а в случае перегрузки сгорит L298, подашь меньше — при предельном токе просто заглохнет. Я вначале тупо загнал туда питание, но потом передумал и поставил подстроечный резистор — защита все же полезная вещь, плохо будет если драйвер L298 сгорит.
    Если же на защиту пофигу, то можешь заодно и резисторы, висящие на выходе sense выкинуть нафиг. Это токовые шунты, с них L297 узнает какой ток течет через драйвер L298 и решает сдохнет он и пора отрубать или еще протянет. Там нужны резисторы помощней, учитывая что ток через драйвер может достигать 4А, то при рекомендуемом сопротивлении в 0.5 Ом, будет падение напряжения порядка 2 вольт, а значит выделяемая моща будет около 4*2=8 Вт — для резистора огого! Я поставил двухваттные, но у меня и шаговик был мелкий, не способный схавать 4 ампера.

Правда на будущее, когда я буду делать роботу шаговый привод, я возьму не связку L297+L293, а микруху L6208 которая может и чуть слабей по току, но зато два в одном! Сразу подключай двигатель и работай. Если же их покупать, то на L6208 получается даже чуть дешевле.

Документация по микросхемам:

Контроллер шагового двигателя схема | kavmaster

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

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

Шаговые двигатели достаточно распространены в устройствах, в которых необходимо добиться точного перемещения механизмов. Существует очень много типов шаговых двигателей, но самыми простыми в плане управления являются 2-х фазные униполярные двигатели. Этот тип двигателей имеет две независимые обмотки с выводами от середины (см. Рис.1). Их устанавливают в такие аппараты, как принтер, копир, дисковод и т.д.

 

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

На рисунке 2 представлена схема управления шаговым двигателем.


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

  1. Можно определить количество шагов.
  2. Определить один из двух алгоритмов работы двигателя.
  3. Опробовать работу двигателя в полушаговом режиме.
  4. Можно опробовать работу в полношаговом режиме.
    Еще раз повторюсь, что разновидностей шаговых двигателей много и данный контроллер подойдет не для всех.

Программы управления шаговыми двигателями

Программа управления состоит из пяти подпрограмм, которые переключаются кнопкой BS3 – «Выбор программ». Номер выбранной подпрограммы отображается тремя светодиодами в двоичной системе счисления. При первом включении должен загореться светодиод HL1, индицирующий о том, что включена первая подпрограмма работы шагового двигателя в полушаговом режиме. Запуск двигателя осуществляется кнопками «Право» и «Лево». Право – двигатель должен крутиться по часовой стрелке, лево – против часовой, но направление вращения зависит еще и от того, как вы скоммутируете обмотки двигателя.

Возможно, придется экспериментировать. На скриншоте 1 (передняя панель виртуального осциллографа программы Proteus) можно наблюдать импульсную последовательность и коды полушагов работы двигателя. Некоторые из шаговиков по этому алгоритму у меня не работали.

Полношаговый алгоритм работы шагового двигателя

Подпрограмма №2 – светится второй светодиод. В этой подпрограмме двигатель будет работать по полно шаговому алгоритму, показанному на скрине 2.

Подпрограмма №3 – светятся первый и второй светодиоды. В этой подпрограмме двигатель будет работать по полношаговому алгоритму, показанному на скрине 3.

Количество шагов шагового двигателя

Подпрограмма №4 – светится третий светодиод. Данная подпрограмма обеспечивает один шаг двигателя при каждом нажатии на кнопку «Право». Кнопка «Лево» в данном случае не задействована. Короче говоря, нажимая каждый раз на кнопку, можно сосчитать количество шагов за один оборот проверяемого двигателя. Алгоритм работы двигателя в данной подпрограмме соответствует алгоритму на скрине 2.

Подпрограмма №5 – светятся первый и третий светодиоды. В этой подпрограмме творится тоже самое, только алгоритм работы двигателя в данной подпрограмме соответствует алгоритму на скрине 3.

Общий вид платы — на фото.

Файл прошивки, схему и рисунок печатной платы можно скачать по ссылке ниже. 

Купить USB программатор PIC K150 ICSP

Источник: http://www.kondratev-v.ru

РадиоКот :: Пропорциональное управление шаговым двигателем

РадиоКот >Схемы >Цифровые устройства >Автоматика >

Пропорциональное управление шаговым двигателем

     Описываемое ниже устройство позволяет управлять униполярным шаговым двигателем типа СДХ 1,8/40 и аналогичным. Схема электрическая принципиальная блока управления изображена на рис.1. Он выполнен на базе микроконтроллера ATmega 8 работающего от встроенного тактового генератора на частоте 2 МГц. В качестве ключей, коммутирующих обмотки шагового двигателя М1, использованы логические элементы микросхем DD2, DD3 типа SN75452 (русский аналог — К155ЛА18). Это микросхемы – повышенной мощности с открытым коллекторным выходом.

     Блок поддерживает пропорциональное и дискретное управление мотором. В режиме пропорционального управления — угол поворота ротора двигателя, задается переменный резистором R1. В режиме дискретного управления — вращение двигателя «влево», «вправо», «стоп» осуществляется кнопками S1 и S2. Кроме этого, в схеме можно выбирать шаговый или полушаговый режим работы, а также скорость вращения двигателя.

 

 

     Установкой перемычки X4 выбирается пропорциональное управление, а при ее отсутствии – дискретное управление. Перемычкой X5 определяется шаговый и полушаговый режим работы двигателя. Все эти режимы работы инициализируются только в момент включения схемы или сброса микроконтроллера. Поэтому нужные перемычки необходимо установить перед включением питания. В микроконтроллере задействованы два канала АЦП. На вход одного из них – ADC5 (28 ножка) подключен подстроечный резистор R3. С его помощью регулируется скорость вращения двигателя при любом режиме работы схемы.

    В режиме пропорционального управления задействуется еще один канал АЦП – ADC4 (27 ножка). На его вход через интегрирующую цепь R2, C1 подключен переменный резистор R1, который задает угол поворота ротора мотора. Скорость работы АЦП в данной управляющей программе осуществляет преобразования с 8 — битной точностью. Поэтому положение ручки переменного резистора R1 программа контроллера условно разбивает на 255 шагов. После включения питания, программа выполняет калибровку положения ротора шагового двигателя. Для этого, перед началом работы, автоматически выполняется команда «вращение двигателя влево» до тех пор, пока флажок, закрепленный на роторе мотора, не «доедет» до концевого датчика (оптопары) VT1, HL1. При поступлении сигнала с датчика VT1, программа обнуляет регистр-счетчик количества шагов двигателя, измеряет напряжение на выходе переменного резистора R1, преобразует его в цифровой код в диапазоне от 0 до 255, записывает его в старший байт регистра результата преобразования АЦП (это количество шагов переменного резистора R1), а затем сравнивает его содержимым регистра-счетчика количества шагов двигателя. Если число шагов резистора R1 больше чем шагов двигателя М1, то выдается команда: «вращение двигателя вправо». При этом с каждым шагом ротора происходит инкремент счетчика шагов двигателя и его сравнение с числом в регистре АЦП (шаги резистора R1). Когда число шагов двигателя станет равно числу в регистре АЦП, выполняется команда: «стоп». Поворачивая ручку резистора R1 «влево», уменьшается уровень постоянного напряжения на входе АЦП. При этом число в регистре результата преобразования АЦП станет меньше чем текущее значение регистра — счетчика шагов. В этом случае выдается команда: «вращение двигателя влево». С каждым шагом двигателя происходит декремент регистра-счетчика шагов двигателя до тех пор, пока числа в обоих регистрах не станут равны. Таким образом, вращая ручку переменного резистора R1, ротор двигателя поворачивается в том же направлении и на такое же количество шагов.

     Отмечу, что предлагаемый двигатель совершает один оборот на 360° за 200 шагов (т.е. один шаг – 1,8 град.). Следовательно, в данной схеме, за 255 условных шагов от переменного резистора R1, ротор мотора сделает более одного оборота и повернется на угол 459°. Поэтому для ограничения угла поворота двигателя используется концевой датчик (оптопара) для крайнего правого положения ротора. Он выполнен на элементах VT2, HL2. Для более точного копирования угла поворота ручки переменного резистора ротором двигателя необходимо установить в разрыв вывода сопротивления R1, подключенного к «+5 В», ограничительный резистор Rогр.. Его номинал следует тщательно подобрать (в пределах от 1 до 3 кОм).

     В управляющей программе предусмотрена функция повторной калибровки положения ротора двигателя в процессе работы устройства. Например, в случае проскальзывания шагов ротора, по какой либо причине (двигатель перегружен, зацепился за что-то и т.д.), можно повернуть ручку переменного резистора R1 в крайнее левое положение и подождать 2 — 3 секунды. При этом происходит проверка положения флажка ротора с помощью оптического датчика крайнего левого положения VT1. Если флажок не зашел в зону срабатывания датчика, значит в процессе работы произошло смещение шагов ротора мотора М1 относительно шагов резистора R1. В этом случае запускается программа повторной калибровки системы, и работа устройства восстанавливается.

    Для работы схемы в режиме пропорционального управления оптический датчик крайнего левого положения и калибровки VT1 — обязателен. Датчик крайнего правого положения VT2 можно не ставить, если нет необходимости в ограничении положения ротора при вращении вправо. Но, тогда, необходимо 14 вывод микроконтроллера подключить к +5 В.

    При пропорциональном управлении двигателем в полушаговом режиме ротор совершает поворот в пределах от 0° до 230°. Мощность мотора уменьшается, зато увеличивается плавность хода. Это необходимо учитывать при выборе этого режима работы.

     В режиме дискретного управления вращение «вправо» осуществляется кнопкой S1, вращение «влево» — кнопкой S2. Если кнопки не нажаты, выполняется команда «стоп». Программа калибровки двигателя и переменный резистор R1 в этом режиме не используются. Оптические датчики VT1, HL1 и VT2, HL2 работают как ограничители крайних положений ротора двигателя М1. Если ограничение вращения не требуется, то эти оптопары можно не ставить. Но при этом необходимо выводы 14, 15 микроконтроллера припаять к +5В.

      В случае необходимости контроля над работой шагового двигателя другими (внешними) устройствами, в схеме предусмотрены специальные выходы на старших пинах порта D микроконтроллера. На выводе PD7 «step» формируется кратковременный импульс прямоугольной формы при каждом шаге двигателя (может пригодиться для внешнего счетчика шагов). Вывод PD6 «rewers» – сигнал реверса двигателя (лог. 0 — вращение вправо, лог. 1 – вращение влево). При обнулении (сбросе) программного счетчика — регистра количества шагов, на выводе PD5 формируется кратковременный импульс «reset». Эти выходы работают и в режиме пропорционального управления.

      Управляющая программа для микроконтроллера написана на языке Ассемблер. Файл прошивки прилагается. Кроме этого, необходимо запрограммировать фьюзы: CKSEL0=0, CKSEL1=1, CKSEL2=0, CKSEL3=0, SUT0=0, SUT1=1, SKOPT=1.

 

 

 

 

 

      Печатная плата блока управления изображена на рис. 2. Она изготовлена из одностороннего фольгированного стеклотекстолита размерами 42 × 58 мм. В прикрепленном файле с расширением .lay прилагается рисунок для «лазерно-утюжной» технологии изготовления платы. Расположение элементов схемы на печатной плате приведено на рисунке 3.

 

 

     

 

      После установки микросхемы – стабилизатора DA1, к ней, необходимо прикрутить радиатор площадью не менее 4 см². Собранная конструкция представлена на фото. 1 и фото. 2.

 

 

 

 

 

      Как уже отмечалось, логические микросхемы SN75452 можно заменить русским аналогом — К155ЛА18. Раньше они использовались в старых пятидюймовых флоппи дисководах вместе с предлагаемым шаговым двигателем.

     Предлагаемый блок может быть использован в различных устройствах с электромеханическим приводом. Например, у меня два таких модуля с шаговыми двигателями пропорционально управляют видеокамерой наблюдения с удаленным доступом по двум осям координат. Один мотор поворачивает камеру по оси Х, другой – по оси Y (фото. 3).

 

 

 

 

 

Видеоролик о работе девайса можно посмотреть на: https://www.youtube.com/watch?v=Iz-2bfWMlHs

 

 

Файлы:
Плата для ЛУТ

Архив RAR

Все вопросы в Форум.


Как вам эта статья?

Заработало ли это устройство у вас?

Драйвер шагового двигателя. Тестируем микросхему L9110 / Habr

Откуда «ножки» растут


В настоящее время стали доступны и приобрели популярность различные станки с программным управлением. Это лазерные и фрезерные резчики и гравёры. А так же 3D принтеры. Все эти станки имеют один общий узел — шаговый двигатель.

И этому двигателю нужен драйвер.

Принцип работы двигателя не является предметом этой статьи. Мы рассмотрим только драйвер. Всё, что нам нужно знать в данном контексте — это какие управляющие сигналы нам нужно формировать для управления шаговым двигателем. Оказывается, это самые обычные прямоугольные импульсы.

Существует некоторое количество решений драйверов от различных компаний. В нашей статье мы рассмотрим самое доступное решение драйвера L9110 и его аналог HG7881 Это решение часто используется в Arduino

Теория и практика


Я решил применить микросхему L9110 в своём проекте.

Довольно легко нагуглил datasheet. Прочитал. Всё предельно понятно. Характеристики, распиновка, таблица истинности… По всем параметрам драйвер, вроде бы подходит. Напряжение коммутации — 12 вольт, выходной ток 800 ма. — всего хватает.

А что на деле?



Не откладывая в «долгий ящик» я сделал плату, написал и запустил тестовую программу…
Первое, на что я обратил внимание в своём устройстве — то, что микросхема драйвера сильно греется. Внимание! НА ХОЛОСТОМ ХОДУ. Без нагрузки. Это что за чудеса схемотехники?
Может у меня микросхема бракованная?

Пришла в голову идея рассмотреть сей девайс поподробнее. И не один, а кучу.
Сказано — сделано.
Хорошо, что у меня была припасена панелька SO-8 и плата для моделирования.
Ну, и контроллер на базе STM32.

Собран стенд и произведены измерения.

Да, кстати, кроме непосредственно, силового узла в микросхеме заложена логика исключающее ИЛИ. В даташите это описано.

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

В результате измерений получилась табличка:

Рассмотрим строчки 2 и 3. Что мы здесь видим?

  1. Падение напряжения на выходных транзисторах, при наличии нагрузки, около полутора вольт, что при токе 0,33 ампера даёт 0,5 ватт на канал.
  2. На холостом ходу микросхема потребляет 0,05 А, что при напряжении 12 В даёт 0,6 ватт на канал.

Другими словами, независимо от нагрузки она потребляет около 0,5 Вт на канал. Теперь понятно, почему я об неё обжигал пальцы.

Сильный нагрев — это, конечно недостаток. Но может свою функцию микросхема выполняет хорошо? Тут пригодился недавно подаренный себе 4-х лучевой осциллограф приставка. Не ожидал, что мне так скоро потребуются все 4 луча. Для тестирования написал простенькую программку на stm32, который давно использую в различных проектах. Программа, просто, генерирует 2 прямоугольных сигналы с трёхкратной разницей частот.

Поскольку один раз увидеть лучше чем много раз прочитать — прикладываю развёртку сигналов управления.

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

Верхняя часть экрана — входные сигналы — нижняя — выходные.

Сразу бросается в глаза, что при различающихся значениях сигналов на входах, значения на выходах вполне чёткие Устанавливаются без задержек и с резкими фронтами.

Если же сигналы на входах совпадают — то фронт пологий. похож на разряд конденсатора.
Просмотрев документацию я не увидел ничего такого, что предвещало бы такое поведение.
Может я задал слишком высокую частоту входных сигналов? В даташите лимит не указан.
Уже зная, что у этого драйвера есть почти стопроцентный аналог HG7881 я обратился к его документации.

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

Значит два нуля на входе должны «подвешивать» выходы. Тогда, поведение разряжающегося конденсатора вполне предсказуемо. Однако две единицы на входах — должны быть надёжным нулём на выходе. А фактически это не так.

Я мог бы списать этот дефект на «китайского производителя». Однако, я тестировал микросхему по честному выпаянную из ардуиновской платы. При чём — не одну микросхему. Из нескольких плат. То есть, вероятность брака сильно снижена.

Вывод


Область применения микросхем L9110 уже, чем задекларирована, да и КПД низковат.
Рассеяние 0,5-0,6 ватта на одном ключе — это многовато. Не случайно это решение самое дешёвое.(10 центов за микросхему. на алиэкспрессе).

В следующих статьях будут рассмотрены альтернативные драйвера шаговых двигателей.

AVR Урок 18. Подключаем шаговый двигатель. Часть 1 |

&nbsp

&nbsp

&nbsp

 

Урок 18

Часть 1

 

 

 

Сегодня мы попробуем к микроконтроллеру Atmega8a подключить шаговый двигатель.

Шаговые двигатели — это такие двигатели, которые посредством подачи напряжения на определённую обмотку переводят свой ротор в определённое место, тем самым достигается более точное управление угловой скоростью. Можно также, в принципе, управлять и положением ротора, но это уже как-то больше сервоприводы, с которыми, мы, возможно, тоже, когда-то столкнёмся.

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

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

Мне в руки попался именно вот такой вот шаговый двигатель 28-BJ48 компании Kiatronics

 

 

Питается данный двигатель от 5 вольт, питание подается попеременно на различные обмотки, которых 4, и если питание снимается с одной обмотки и подается на другую, то ротор. соответственно. устраемляется к ней.

Данные обмотки своими сердечниками в статоре находятся не в 4 местах, а намного чаще, а именно каждая повторяется 2048 раз, поэтому когда мы подаем напряжение на соседнюю обмотку, ротор поворачивается на очень малый угол. А если напряжение подавать ещё и на 2 соседние обмотки, то ротор можно расположить между ними, и количество положений при этом вообще удваивается. А есть вообще микрошаговый режим, когда мы на одну обмотку подаём меньшее напряжение, а на другую большее, то и вообще можно потеряться в количестве шагов и вообще крутить данный шаговый двигатель очень плавно.

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

 

 

Данный модуль представляем собой микросхему ULN2003. Можно использовать ее не только для двигателей. Но мы будем использовать здесь 4 входа и 4 выхода, так как у нашего двигателя 4 провода. каждый из которых подключен к определённой обмотке, а пятый провод является общим. Подключенный таким образом мотор уже не влияет на ножки портов, у которых ограничен максимальный ток и можно уже ничего не бояться на этот счёт. При подключении к ножкам контроллера мы используем входы модуля IN1, IN2, IN3 и IN4, а разъём двигателя просто соединим с разъёмом модуля.

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

 

 

Здесь мы видим 4 катушки, одним выводом которые соединены к общему проводу, а на другие выводы каждой катушки мы будем подавать логические уровни, например на рисунке поданы 1000.

Данные обмотки потом по кругу так циклически и повторяются.

 

 

Теперь рассмотрим возможные режимы управления с помощью логических уровней.

1 режим — этот простейший режим, при котором мы по очереди подаём логические единицы или высокие логические уровни на каждую обмотку. Называется он также полношаговый режим или One Phase Step Mode.

Схематично данный режим можно изобразить таким образом

 

 

Существует также ещё один интересный режим — это режим когда ротор будет шагать между обмотками, то есть мы единички будем подавать на 2 соседние обмотки

 

 

Вот так.

А также есть ещё и третий решим — это полушаговый режим, когда мы уже чередуем комбинации, сначала ротор будет находиться у обмотки, потом наполовину переместится к соседней обмотке, потом совсем к соседней обмотке и т.д. Это полушаговый режим или one and two-phase-on

 

 

Вот таких вот три режима существуют. мы остановимся на 3 режиме, так как он будет самый плавный и самый интересный.

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

 

Предыдущий урок Программирование МК AVR Следующая часть

 

Техническая документация на шаговый двигатель

 

Программатор и шаговый двигатель 28YBJ-48 с драйвером ULN2003 можно приобрести здесь:

Программатор (продавец надёжный) USBASP USBISP 2.0

Шаговый двигатель 28YBJ-48 с драйвером ULN2003

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

Post Views: 8 196

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

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