Простая реализация схемы шагового двигателя на мк

И так, данный пост нацелен на новичков в электронике а так же на новичков в программировании и освоении мк и разработке радиоэлектронных устройств.
Данная разработка представляет простейшее включение МК такого как PIC16F84A для управления шаговым двигателем. Для сборки такого устройства нам потребуется:
  • Контроллер — PIC16F84A
  • Шаговый двигатель
  • Паяльник
  • Рассыпуха
  • Свободное время
  • Желание сделать что либо
  • Немного мозга
Наша схема питается от стабилизированного источника питания +5 вольт. Однако силовая часть, может питаться от напряжения > напряжения МК < напряжения, что держат ваши транзисторы.

В качестве силовых странзисторов мы возьмем КТ815. В данном случае они идиально подходят для нашей задачи.

И так, собираем наш девайс по схеме(з.ы. если не видите схемы — значит сервер лежит. и скоро все наладится):



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

list p=16F84A
#include <p16F84A.inc>
; _CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;***базовые значения
del EQU 0xFF ;константа длительности задержки
count EQU 0x0C ;переменная подпрограммы задержки
ORG 0x00
;***начальная инициализация
clrf PORTA ;очистить порт А
clrf PORTB ;и порт В
bsf STATUS,RP0 ;включили банк 1
movlw INIT_A
movwf PORTA ;настроили порт А
movlw INIT_B
movwf PORTB ;настроили порт В
bcf OPTION_REG,7 ;включили встроенную нагрузку
bcf STATUS,RP0 ;включили банк 0
clrw
movwf PORTB
main
movlw b'01010000
movwf PORTB
call delay
;-------Вставляем сюда задержек, столько - сколько надо, или модифицируем подпрограмму на более длинную задержку
call delay
movlw b'01100000
movwf PORTB
call delay
;-------Вставляем сюда задержек, столько - сколько надо, или модифицируем подпрограмму на более длинную задержку
call delay
movlw b'10100000
movwf PORTB
call delay
;-------Вставляем сюда задержек, столько - сколько надо, или модифицируем подпрограмму на более длинную задержку
call delay
movlw b'10010000
movwf PORTB
call delay
;-------Вставляем сюда задержек, столько - сколько надо, или модифицируем подпрограмму на более длинную задержку
goto main
;***подпрограмма формирования задержки между шагами
delay movlw del
movwf count
loop decfsz count,f
goto loop
return
END


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

Компилируем в HEX файл этот код в программе MPLAB IDE. и шьем программатором или отладчиком(который по совместительству программатор).

UPD: Спрограмматор в данном случае использовался такой: клон оригинального ICD2 от фирмы Olimex. Стоит порядка 2.5к Включает в себя функции программатора и отладчика(афигительная вещь).
Отлично работает в связке MPLAB+ICD2 а так же PikLab+ICD2 под Linux

UPD2:
После сборки всего этого, и включения питания, ваш ротор двигателя должен начать вращаться в какую либо сторону.

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

Самый левый бит — самый старший, самый правый — самый младший. Так заведено и это закон. :)
Эти значения регистра, определяют каким образом будут подано напряжение на карушки двигателя.

movlw b'01010000 ;1й шаг
movlw b'01100000 ;2й шаг
movlw b'10100000 ;3й шаг
movlw b'10010000 ;4й шаг


Если Вы напутаете с подключением двигателя, то он у вас может «дергаться туда-сюда» и поэтому надо смотреть именно в эту сторону прошивки, или менять контакты подключения.

— Если у вас вообще не работает — значит нужно проверить напряжение сброса контроллера. оно должно равляться +5 вольтам.
— Если там есть напряжение сброса, то нужно проверить питание процессора.
— Еще одной частой неполадкой может являться то что контроллер просто не отконфигурировали! не забывайте — это важно.
— Если у вас по прежнему схема не работает, то надо убедиться что кварцевый резонатор дает импульсы при включенном напряжении. Проверить можно с помощью осцилографа а так же мультиметра. Контакты OSC

Двигатель для этой схемы дыл взят из 5" дисковода, от старых компьтеров. этот движок там передвигал головку для считывания информации с магнитного диска. Имеет 5 контактов.

Вот собственно и все. :)
+53
1 февраля 2009, 20:44
33
ICD2 29,0

комментарии (79)

+11
mrShadow #
Не ожидал увидеть на Хабре топик по программированию МК.
+11
Sannis #
%username%, помни, Хабр — не только для web-программистов.
НЛО прилетело и опубликовало эту надпись здесь
+1
miolini #
Изначально это ХабраХабр. И этим всё сказано. Откуда у вас информация, что только для веб-людей?
+1
wpm1 #
я рад увидеть такие посты
0
BuriK666 #
а что это такое?
+1
ICD2 #
Это схемка включения двигателей, шаговых, как уже говорилось выше. типа тех которые стоят в CDROM'ах, только те более сложные.
п.с. я думаю все мои заметки будут про программирование мк и различные девайсы
+6
mapcoxog #
Пишите еще, интересная тема.
+1
Carry #
в CD-ROMах не совсем шаговые. Точнее даже не шаговые) Вращение диска — многофазный, а в дешевых даже просто коллекторный. Перемещение головок практически всегда коллекторный.

Шаговые стоят во флоппи-дисководах на перемещение головок, в принтерах на подаче бумаги и т.д. где нужно точное дискретное перемещение.
+2
Carry #
Достоинства шаговых двигателей:
— позволяют обеспечить большую точность дискретов, и соответственно скорости;
— обеспечивают достаточно большой момент врашения, т.е. мощные;
— не требуют обратной связи для обеспечения точности;
— долговечные.

Недостатки:
— медленные;
— шумные;
— включение сложнее чем у коллекторных :)

Что-то вроде того.
0
ICD2 #
Идея включения почти такая же только + опрос датчиков поля
0
Carry #
Да, включение такое же, но дискретные шаги он делать не может. Зато частота вращения может быть в очень широких пределах.
0
no_smoking #
На скоко я знаю в CD-ROMах стоят без коллекторные движки
+2
mrShadow #
По-моему, стОит даже отдельный тематический блог создать по программированию МК.
0
waterhouse #
Причем шаговым двигателям, как достаточно распространенной перифирии, да и просто забавной, стоит уделить несколько статей отдельных. Даже для общего развития почитать бывает интересно.
Жалко, но в универе прощелкал курс нашей кафедральной иконы, когда он про шаговики повествовал.
0
VDG #
> Это схемка включения двигателей
причем неправильная
0
ICD2 #
Подскажите где тут ошибка
+1
VDG #
Шунтирующие диоды надо ставить не на коммутирующие транзисторы, а на обмотки. Смысл диода — замкнуть обратную ЭДС при разрыве тока в цепи. Т.е. когда «выключаете» транзистор, то на обмотке в его коллекторной цепи возникает противо-ЭДС. Она складывается с напряжением питания и суммарно может превысить допустимое для данного транзистора.

Так же, шунтируя обмотку диодом, уменьшается выброс коммутационных помех, которые для контроллера самое зло.
А сейчас диоды параллельно коллекторно-эмиттерному переходу транзистора не несут никакой функции. Походу, автор схемы, у которого Вы её срисовали, делал наспех и нарисовал диоды ниже чем положено.

Поднимите диоды «вверх»: катодом на питание, анодом на коллектор, и всё встанет на свои места.
0
ICD2 #
Спасибо за замечание, просто схемка то простая, ее и срисовывать то неоткуда. Моя ошибка признаю :)
0
VDG #
Если шаговик запитывать будете от отдельного источника питания (например на 12В), то можно и не ставить шунтирующие диоды. Всё равно транзисторы мощные и высоковольтные — выдержат.

Кстати, лучше, как тут сказали, поставить высоковольтные мощные полевики, например IRF840. Я этот «пятидюймовый» шаговик ими крутил. И в них встроен шунтирующий диод, что у Вас сейчас стоит на схеме (коллектор-эмитер).

Отличие полевика от n-p-n транзистора в том, что у первого очень низкое сопротивление в открытом состоянии, т.е. большое КПД системы и они не греются.
0
ICD2 #
Да, весьма полезный совет. Спасибо за критику/замечания. Я когда подключал коллекторные двигатели от CDROM'ов то там восновном полевеки использовал, т.к. они быстро открываются и я этим достигал больших скоростей вращения
0
DIHALT #
IRF не покатит, у него слишком высокое напряжение открытия, выше логического уровня. Надо IRL серию.
0
VDG #
IRF — это общее название серий. 840-й полностью открывается при 10В. Но при 5В на затворе считайте что он уже почти полностью открыт — проходное сопротивление при этом составляет где-то десяток милли-Ом. Можете в его даташите по таблице уточнить конкретное значение.

Для этого шаговика идеально подойдут логические ключи IRF7303, или аналогичные из этой серии. Они сдвоенные и в корпусе SOIC-8. Предназначены для управления с выходов микроконтроллеров или цифровой логики.
0
DIHALT #
Для IRF840 на 5 вольтах сопротивление будет 2-3ома, не слишком много, но если ток хотя бы 1А (малый ток для шаговика, обычно больше) то это 2-3Вт мощности в теплоту. Зачем греть воздух? Тем более IRL серия по цене один в один как IRF.

Кстати, для шаговика зачастую лучше заюзать что либо специфичное, вроде L293+L298
0
VDG #
Да нет, там собственное сопротивление 1 Ом из таблицы получается
files.ddrservice.info/Components/Transistors/irf/irf840.pdf
страница 4, низ, справа.
5V/5A = 1 Ом

Но один Ом это действительно много. Да, Вы правы, лучше другой транзистор.

На L293+L298 для биполярных шаговиков, у автора униполярный. ЧПУ на этой связке делал. Греются правда, так там силовые транзисторы не полевые, а обычные биполярные с высоким проходным сопротивлением.
0
DIHALT #
Так оторвать у него средние выводы и подрубать как четырех выводный. Я так у себя делал. Зато никих головняков с Dead time, никаких проблем сперегрузкой по току, с микрошагом и прочими прелестями. Как грицо все включено. А есть еще L6208 вроде бы, тот же комплект 297+298, только в одном корпусе.
0
volgaart #
А еще лучше использовать что-то типа Allegro 3977. Пообще песня. И микрошаг тебе и драйвера внутри и практически не греется. На входе только DIR(направление) и STEP(шаг)
+1
KuLiBiN #
А возможно ли подключить какой-нибудь не особо мощный ШД к катушечным выводам пропеллера кулера? Там же по идее то же самое и контроллер готовый…
+1
ICD2 #
Да, это вполне осуществимо, если вы знаете с какой частотой идет смена положения ротора(это нужно для того чтобы узнать будет ли успевать вращаться ваш ротор), а так же в каком порядке. И еще мне кажется придется спаять свою силовую часть, т.к. там катушечки то маленькие, ну это конечно в том случае, если вы собираетесь подключать достаточно мощный движок.
0
DIHALT #
В кулере там не контроллер шаговика. Там безколлекторный двигатель на базе датчика Холла. Т.е. схема чувствует поворот крыльчатки и переключает обмотки.
+2
Dimalex #
Неплохо было бы дополнить ссылками на схему программатора, тип двигателя
0
no_smoking #
Двигатели хорошие стоят в 5ти дюймовых дисководах :) на 200 шагов а микрошаговом режиме будет 2х200
+1
7hr33pw1r3 #
easyelectronics.ru
Хороший сайт по электронике и МК.
+3
7hr33pw1r3 #
Блин, сначала запостил, а потом на админа посмотрел :)
0
DIHALT #
Эм… А чо админ? =)
0
roller #
и тут ты! никуда от тебя деться, интернет-зарабатыватель-денег-на-рекламе )
0
DIHALT #
Эмм… ну ясен пень. Я же вижу откуда мне народ на сайт идет. Решил глянуть чо за тема.
+3
Dreadatour #
Жесть какая. Разве PIC16F84A ещё не умер?
В мои годы (лет пять назад) он уже начал уступать Atmel'ам…
0
no_smoking #
Atmel вроде как продалась по частям так что AVR не будет.
0
abdula123 #
не продалась.
www.atmel.com/dyn/corporate/press_room.asp?SEC_NAME=Corporate

Atmel Board of Directors Rejects Unsolicited Proposal from MicrochipTechnology and ON Semiconductor.
0
DIHALT #
Продавалась, но пока акционеры решили иначе.
0
DIHALT #
PIC18 щас очень и очень крут. А dsPIC это уже ваще что то с чем то. Ну и обьемы производства у PIC больше чем у Атмела. Хотя мне AVR больше нравится. У них архитектура более продуманная.
0
puzzo #
Классный топик.

Видео нехватает для наглядности.
0
savant #
Тип двигателя действительно не помешал бы. И ссылочка на схему PIC программатора
0
Vooon #
Что-то мне говорит, что с таким алгоритмом движок будет зверски пищать.
Да и в статье не сказано, что эта схема для Униполярных ШД.
Ключи также лучше заменить на полевые транзисторы.
0
fleshy #
Тема действительно интересная. Быть может, когда будет время, напишу про то как делал анализатор спектра на AVR ATmega16
0
ICD2 #
Будет интересно увидеть ваш пост в блоге про контроллеры :)
+2
iDemy #
Обязательно расскажи. Очень было бы интересно, если на хабре появилось побольше топиков на тематику электроники.
0
iDemy #
Спасибо за статью. Поддерживаю саму идею открыть подобный блог на хабре! Буду обязательно читать следующие посты.
+3
tshaoni #
> Однако силовая часть, может писаться от напряжения

Такие неожиданные урологические свойства силовой части…
0
ICD2 #
ой-ой) спасибо, поправил
+1
gigimon #
Если кому-то хочется посмотреть как это работает (првоерить) без пайки, советую программую эмуляции электроники Proteus, очень мощная и простая вещь
+1
MadCat #
А может пост-обзор Протеуса с примерами? ;) Было бы интересно, думаю не только мне.
0
DIHALT #
0
MadCat #
Круто, спасибо, добавил в очередь на прочтение :)
+1
makke #
спасибо за статью. судовольствием почитаю следующие материалы и постараюсь тоже что нить оформить )) паяльник-друг человека
0
Ensase #
2 одинаковых поста на главной странице хабра
сделайте что-нибудь — очень запутывает при просмотре
0
youmee #
Автор, скажите полажуйста, для новичков в этом деле, можете написать статью, с чего начать? Полностью. Какие навыки вообще нужны для этого, какой материал. Желательно разложить всё step-by-step, как любят американцы. Нам это тоже удобно.

Просто у меня возникла мысль, реально ли сделать «умный дом» самому?

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

Большое спасибо за статью, очень интересная.
0
ICD2 #
Да, напишу как помигать светодиодиками думаю, с этого все начинают :)
0
DIHALT #
easyelectronics.ru/category/nachinayushhim

Тоже МК, но другое семейство — AVR.
0
g0ff #
movlw b'01010000
movlw b'01100000
+2
g0ff #
Ой, случайно отправил.
Мне кажется, что определяющими тут являются команды:
movlw b'01010000
movlw b'01100000
movlw b'10100000
movlw b'10010000
, и задержки между ними.
Позиционируя статью, как «для новичков», именно на этом стоило заострить внимание, и пояснить, что происходит на выходах микроконтроллера, и какое влияние это оказывает на подключенную аналоговую схему. Получается, что статья описывает как сделать, не объясняя, почему это работает. А ведь именно глубокое понимание залог успеха.
А вообще, я рад видеть на хабре блог по микроконтроллерам, хотя эта тематика действительно не типичная для хабра. Ну что же, все течет, все меняется.
Знаком с PIC-ушками, хотя предпочитаю Atmel. Со своей стороны постараюсь вас поддержать в данном начинании, а может и сам чего напишу.
Ну а пока только критика. Я все же убежден, что понимание важнее результата.
Пусть уж лучше не работает, зато ты понимаешь, почему оно не работает, нежели оно будет работать, но ты не понимаешь почему.
0
wpm1 #
пожалуйста напишите как подбирать двигатель к микросхеме. я купил LM239D и теперь хочу к ней купить движок. но какие параметры нужны до конца не изучил.
0
no_smoking #
Было бы правельней купить(подобрать) сначало двигатель а уж потом подбирать к нему микросхемы. А так смотриш на какое напряжение рассчитан двигатель и какой ток он потребляет и по этим параметрам выберешь соответствующие ключи.
0
TITOFF #
ЕЩЕ!
+1
Alexlexandr #
Довольно много толковой информации по подключению ШД по адресу: www.purelogic.ru/download.html
Там же можно приобрести уже готовые драйверы, источники питания, шариковинтовые пары, сами ШД любой мощности, и все это по хорошим ценам.
Там же небольшой форум по теме.
Рекомендую, фирма небольшая, пара ребят молодых работают и все тянут.
Пару раз обращался к ним, был доволен.
0
VasVF #
Спасибо за ностальгию по второму курсу универа :)

Тоже что ли выложить парочку своих курсовых для истории…
0
kulakowka #
хм… а нет ли чего по проще?
типа «как стать робототехником за 24 часа»?
или «Hello world» в робототехнике???

в детстве мечтал делать роботов!
0
ICD2 #
Есть готовые силовые драйверы, т.е. книжки почитать придется всеравно =)
0
7hr33pw1r3 #
Есть сайт robosavvy.com который продает готовые робот киты (сервоприводы, контроллер, батарея, датчики etc). Там же есть софт — редактор движений и поведения.
0
makke #
datagor.ru/microcontrollers/
на этом сайте есть немного про микроконтроллеры, в том числе и умный дом, и для начинающих
0
kex #
Автор, скажите, а сложно ли сделать что нибудь подключаемое к компьютеру? Например управляемый выключатель для освещением в доме?
0
VDG #
без знаний в куче разнородных областей невозможно. но можно заказать www.visual-devices.ru/p/contact
0
DIHALT #
Не очень.

Связь с компом по ком порту (либо по его USB эмуляции). Обработка на уровне программы в МК.
Включать освещение либо симистором либо через оптореле.

0
ICD2 #
pcports.ru там вся тематика направлена на подключение устройств к ПК, как через ком так и через блютус юсб… Вобщем много информации и к тому же с примерами
0
grib #
Наконец-то по моей специализации на Хабре что-то стало появляться.

С почином!
0
roller #
честно говоря, первое что хочется увидеть — графики токов/напряжений которые нужны для пуска/работы двигла. Все такие схемотехника в институте даром не прошла…
0
sandroid #
Кстати, а почему программа для новичков на асме? ведь гораздо проще и нагляднее какой-нить С-компилятор, CCS например. да и асм для пиков — тот еще фрукт (с)
0
ICD2 #
Не знаю, начинал сам с ASM, вот теперь так и передаю :) а CCS нафиг, Используйте HITECH-PICC

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