Управление биполярным шаговым двигателем на транзисторах. Что такое драйвер шагового двигателя? Достоинства коллекторных двигателей

Управление биполярным шаговым двигателем на транзисторах. Что такое драйвер шагового двигателя? Достоинства коллекторных двигателей

07-05-2009

Инструменты:

  • Клеевой пистолет
  • Кусачки
  • Ножницы
  • Принадлежности для пайки
  • Краска

Для контроллера:

  • 1 разъем DB-25 - провод
  • 1 цилиндрическое гнездо для питания постоянного тока Для испытательного стенда
  • 1 стержень с резьбой
  • 1 подходящая под стержень гайка - разные шайбы и шурупы - куски древесины

Для управляющего компьютера:

  • 1 старый компьютер (или ноутбук)
  • 1 копия TurboCNC (отсюда)

Шаг 2.

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

Шаг 3.

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

Шаг 4.

Пайка Теперь нам нужно припаять микросхему на макетную плату. Припаяйте к плате все выводы микросхемы. На показанной здесь макетной плате имеется две шины электропитания, поэтому положительный вывод ULN2003 (смотрите схему и на рисунке ниже) припаивается к одной из них, а отрицательный - к другой. Теперь, нужно соединить вывод 2 коннектора параллельного порта с выводом 1 ULN2003. Вывод 3 коннектора параллельного порта соединяется с выводом 2 ULN2003, вывод 4 - с выводом 3 ULN2003 и вывод 5 - с выводом 4 ULN2003. Теперь вывод 25 параллельного порта припаивается к отрицательной шине питания. Далее к управляющему устройству припаивается мотор. Делать это придется путем проб и ошибок. Можно просто припаять провода так, чтобы потом цеплять на них крокодилы. Еще можно использовать клеммы с винтовым креплением или что-нибудь подобное. Просто припаяйте провода к выводам 16, 15, 14 и 13 микросхемы ULN2003. Теперь припаяйте провод (желательно черный) к положительной шине питания. Управляющее устройство почти готово. Наконец, подсоедините к шинам электропитания на макетной плате цилиндрическое гнездо для питания постоянного тока. Чтобы провода не могли отломаться, их закрепляют клеем из пистолета.

Шаг 5.

Установка программного обеспечения Теперь о программном обеспечении. Единственная вещь, которая точно будет работать с вашим новым устройством - это Turbo CNC. Скачайте его . Распакуйте архив и запишите на CD. Теперь, на компьютере, который вы собираетесь использовать для управления, перейдите на диск C:// и создайте в корне папку "tcnc". Затем, скопируйте файлы с CD в новую папку. Закройте все окна. Вы только что установили Turbo CNC.

Шаг 6.

Настройка программного обеспечения Перезагрузите компьютер чтобы перейти к работе в MS-DOS. В командной строке наберите "C: cncTURBOCNC". Иногда лучше использовать загрузочный диск, тогда копия TURBOCNC помещается на него и нужно набирать, соответственно "A: cncTURBOCNC". Возникнет экран, похожий на изображенный на рис. 3. Нажмите пробел. Теперь вы находитесь в главном меню программы. Нажмите F1, и при помощи клавиш со стрелками выберите меню "Configure". При помощи клавиш со стрелками выберите "number of axis". Нажмите Enter. Введите количество осей, которые будут использоваться. Поскольку у нас только один мотор, выбираем "1". Нажмите Enter чтобы продолжить. Снова нажмите F1 и в меню "Configure" выберите пункт "Configure axes", затем дважды нажмите Enter.

Появится следующий экран. Нажимайте Tab пока не перейдете к ячейке "Drive Type". При помощи стрелки вниз выберите пункт "Phase". Снова при помощи Tab выберите ячейку "Scale". Чтобы использовать калькулятор, нам нужно найти число шагов, которые двигатель делает за один оборот. Зная номер модели двигателя, можно установить на сколько градусов он поворачивается за один шаг. Чтобы найти число шагов, которые двигатель делает за один оборот, теперь нужно поделить 360 на число градусов за один шаг. Например, если мотор поворачивается за один шаг на 7,5 градусов, 360 поделить на 7,5 получится 48. Число, которое получится у вас, забейте в калькулятор шкалы (scale calculator).

Остальные настройки оставьте как есть. Нажмите OK, и скопируйте число в ячейке Scale в такую же ячейку на другом компьютере. В ячейке Acceleration установите значение 20, поскольку установленных по умолчанию 2000 слишком много для нашей системы. Начальную скорость установите равной 20, а максимальную - 175. Нажимайте Tab пока не дойдете до пункта "Last Phase". Установите в нем значение 4. Нажимайте Tab пока не дойдете до первого ряда иксов.

Скопируйте следующее в четыре первых ячейки:

1000XXXXXXXX
0100XXXXXXXX
0010XXXXXXXX
0001XXXXXXXX

Остальные ячейки оставьте без изменений. Выберите OK. Теперь вы настроили программное обеспечение.

Шаг 7.

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

Чтобы закрепить двигатель, имевшийся в наличии, использовали два отрезка стержня с резьбой 1/8. Брусок с прикрепленным двигателем надевается на свободный конец стальных прутов. Снова закрепите их шурупами. Сквозь третье отверстие на первом бруске проденьте стержень с резьбой. Заверните на стержне гайку. Проденьте стержень сквозь отверстие во втором бруске. Поворачивайте стержень до тех пор, пока он не пройдет сквозь все отверстия и не дойдет до вала двигателя. Соедините вал двигателя и стержень при помощи шланга и зажимов из проволоки. На втором бруске гайка удерживается при помощи дополнительных гаек и винтов. В завершение, отрежьте брусок дерева для подставки. Привинтите ее шурупами ко второму бруску. Проверьте, установлена ли подставка ровно на поверхности. Регулировать положение подставки на поверхности можно при помощи дополнительных винтов и гаек. Так делается вал для тестовой системы.

Шаг 8.

Подсоединяем и тестируем двигатель Теперь нужно соединить двигатель с контроллером. Во-первых, соедините общий провод (смотрите документацию к двигателю) с проводом, который был припаян к положительной шине питания. Другие четыре провода соединяются путем проб и ошибок. Соедините их все, и затем меняйте порядок соединения, если ваш двигатель делает два шага вперед и один назад или что-либо подобное. Для проведения тестирования подключите 12 В 350 мА источник питания постоянного тока в цилиндрическое гнездо. Затем соедините разъем DB25 c компьютером. В TurboCNC проверьте как соединен двигатель. В результате тестирования и проверки правильного подсоединения двигателя у вас должен получиться полностью работоспособный вал. Чтобы проверить масштабирование вашего устройства, прикрепите к нему маркер и запустите тестовую программу. Измерьте получившуюся линию. Если длина линии составляет порядка 2-3 см, устройство работает правильно. В противном случае, проверьте вычисления в шаге 6. Если у вас все получилось, поздравляем, самое трудное уже позади.


Шаг 9.

Изготовление корпуса

Часть 1

Изготовление корпуса - это завершительный этап. Присоединимся к защитникам природы и сделаем его из вторсырья. Тем более, что контроллер у нас тоже не с магазинных полок. У представленного вашему вниманию образца плата имеет размер 5 на 7,5 см, поэтому корпус будет размером 7,5 на 10 на 5 см, чтобы оставить достаточно места для проводов. Из картонной коробки вырезаем стенки. Вырезаем 2 прямоугольника размером 7,5 на 10 см, еще 2 размером 5 на 10 см и еще 2 размером 7,5 на 5 см (см. рисунки). В них нужно вырезать отверстия для разъемов. Обведите контуры разъема параллельного порта на одной из 5 х 10 стенок. На этой же стенке обведите контуры цилиндрического гнезда для питания постоянного тока. Вырежьте по контурам оба отверстия. То, что вы будете делать дальше, зависит от того, припаивали ли вы к проводам двигателя разъемы. Если да, то закрепите их снаружи второй пока пустой стенки размером 5 х 10. Если нет, проткните в стенке 5 отверстий для проводов. При помощи клеевого пистолета соедините все стенки вместе (кроме верхней, см. рисунки). Корпус можно покрасить.

Шаг 10.

Изготовление корпуса

Часть 2

Теперь нужно приклеить все компоненты внутрь корпуса. Убедитесь, что на разъемы попало достаточно много клея, потому что они будут подвергаться большим нагрузкам. Чтобы коробка оставалась закрытой, нужно сделать защелки. Из пенопласта вырежьте пару ушек. Затем вырежьте пару полос и четыре небольших квадратика. Приклейте по два квадратика к каждой из полос как показано на рисунке. Приклейте ушки по обеим сторонам корпуса. Сверху коробки приклейте полосы. Этим завершается изготовление корпуса.

Шаг 11.

Возможные применения и заключение Этот контроллер можно применять как: - ЧПУ устройство - плоттер - или любую другую вещь, которой нужно точное управление движением. - добавление- Здесь приведены схема и инструкции по изготовлению контроллера с тремя осями. Чтобы настроить программное обеспечение, следуйте вышеуказанным шагам, но в поле "number of axis" введите 3.

Для настройки первой оси делайте все как было сказано выше, для второй оси тоже, но в строках первых четырех фаз введите следующее:

"XXXX1000XXXX
XXXX0100XXXX
XXXX0010XXXX
XXXX0001XXXX"

Для третьей оси в строках первых четырех фаз введите:

"XXXXXXXX1000
XXXXXXXX0100
XXXXXXXX0010
XXXXXXXX0001"

Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться .

Итак, задумывая драйвер на полевиках для биполярников, я и не думал что тема вызовет такой интерес и придется писать маленькую статью по сборке и настройке. Здесь будет рассматриваться драйвер как отдельный блок. Т.к. я использую блочную конструкцию. Т.е. три драйвера, интерфейсная плата, блок питания. Во первых при выходе из строя одного драйвера, просто меняется драйвер на запасной, а во вторых (и главное) планируется модернизация, мне проще снять один драйвер, и поставить модернизируемый вариант для обкатки. «Одноплатник» это уже развитие темы, и на вопросы по настройке ИБП я думаю с удовольствием ответит Dj _ smart , а также дополнит и поправит мой труд. А теперь к делу…

Пункт первый (набившим плату можно не читать J ). После травления, лужения, и сверловки, внимательно осмотрите всю плату на предмет косяков. Сопли, протравленные дорожки, и т.д. могут серьезно обломать весь кайф. Далее набиваем плату, сначала все перемычки, затем сопротивления, диоды, панели, емкости и биполярные транзисторы. Хочу обратить особое внимание на Ваше внимание, извините за… Не ленитесь перед впайкой проверить деталь на исправность. Прозвонка иногда спасает от дыма… Я зная цветовую кодировку резисторов на ура, подкалывался несколько раз, причем со спец. эффектами. Когда используешь резисторы из загашников которые годами выпаивались из всего что под руку попадет, забываешь, что при нагреве красный может стать оранжевым, а оранжевый - желтым… Впаиваем провода питания +5В, степ, GND , и провода контроля Vref . Примерно вот так это выглядит:

Пункт второй (настраиваем режимы работы и удержания). 555 я лично впаиваю в плату, кто поставил панель, значит втыкаем, блок индикации должен быть отключен. Подстроечники на середину. Вывод степ замыкаем на общий (раб. режим). Прозваниваем цепь +5В и если нет короткого, включаем питание. Тестер подключен к контрольным точкам Vref (молодец Dj _ smart , предусмотрел на плате), если номиналы подстроечников и сопротивления между ними соответствуют схеме, то подстроечником раб. режима можно регулировать напряжение около 0 - 1В т.е. ток 0 - 5А. Настроим на 1А. Тут все просто. R изм. у нас 0,2 Ом. Нам нужен 1А. 0,2х1=0,2В. Т.е. если мы установим Vref - 0,2В, ток в обмотке будет 1А. Если нам нужен ток в обмотке скажем 2,5А, то Vref =0,2х2,5=0,5В.

Короче мы выставили 0,2В.

Теперь размыкаем степ и общ. Если все элементы в норме и по схеме, то после размыкания примерно через полсекунды Vref снизится вдвое (если второй подстроечник посередине) Настраиваем им Vref удержания. У меня 50 проц. от рабочего:

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

Пункт третий (настраиваем блок индикации). Печатка разведена под 315-361, как и у Dj _ smarta тоже мешок, надо куда то паять… Но в принципе туда можно паять любую пару, из наших я испытывал 502 - 503, 3102 - 3107, все пашет, только будьте внимательны с цоколевкой! Если все правильно впаяно и рабочее, то работает без проблем. Индикация вносит небольшую корректировку в Vref , так что после подключения индикации, окончательно отрегулируйте ток под свой ШД (лучше для начала 70% от номинального). Фотки как горят светодиоды делать не стал J .

Пункт четвертый, важный (297) Выключив питание втыкаем 297 на свое место. Еще раз проверяем монтаж, и элементы обвязки, если все ОК (при любом сомнении проверяем дважды) врубаем питание. Проверяем осциллографом сигнал на первой ноге, он такой:

Либо на 16 ноге, он такой:

Это означает что шим запустился, счастливчики имеющие частотомер могут померить частоту, она очень приблизительно должна соответствовать 20кГц.

ВНИМАНИЕ!!! Это важно!!! Даже если шим не запустится, логическая часть 297 будет работать, т.е. при подключении нагрузки все сигналы пойдут… Но прикиньте 24В без шима на ШД 2Ом. Так что важно убедиться в запуске генератора микросхемы.

Пункт пятый. Опять выключаем питание и вставляем IR , впаиваем полевики. При использовании ШД с током обмотки более 2,5А, необходимо полевики вынести на радиатор. Обратите внимание при впайке диодов, они могут различаться по меткам. Мне правда не встречалось (у меня в перемешку 522 и 1 N 4148 (аналог) у них цоколевка совпадает) Но учитывая что людям IR

Простой контроллер Шагового Двигателя из компьютерного барахла стоимостью ~150 рублей.

Началось мое станкостроение со случайной ссылки на немецкий станок за 2000DM, который на мой взгляд выглядел по детски, однако мог выполнять довольно много занятных функций. В тот момент, меня заинтересовала возможность рисовать платы (это было еще до появления в моей жизни ЛУТ).

В результате протяженных поисков в сети было найдено несколько сайтов посвященных этой проблеме, однако русскоязычных среди них не было ни одного (это было примерно 3 года назад). В общем, в конце концов, я нашел два принтера CM6337 (кстати их выпускал Орловский завод УВМ), откуда и выдрал униполярные шаговые двигатели (Dynasyn 4SHG-023F 39S, аналог ДШИ200-1-1). Параллельно с доставанием принтеров заказал и микросхемы ULN2803A(с буквой А – DIP корпус). Все собрал, запустил. Что получил, а получил дико греющиеся микросхемы ключей, и с трудом вращающийся двигатель. Так как по схеме из Голландии для увеличения тока ключи соединены попарно, то максимальный отдаваемый ток не превышал 1А, в то время как двигателю надо было 2А (кто ж знал что я найду такие прожорливые, как мне тогда показалось, двигатели J). Кроме того, данные ключи построены по биполярной технологии, для тех кто не в курсе, падение напряжения может быть до 2В (если питание от 5, то фактически половина падает на сопротивлении перехода).

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

Решил собрать свою собственную схему из дискретных элементов, благо в одном из принтеров оказалась нетронутой электроника, и я взял оттуда транзисторы КТ829 (Ток до 8А, напряжение до 100В)… Была собрана такая схема…

Рис.1 – Схема драйвера для 4х фазного униполярного двигателя.

Сейчас объясню принцип. При подаче логической “1” на один из выводов (на остальных “0”), например на D0, транзистор открывается и ток течет через одну из катушек двигателя, при этом двигатель отрабатывает один шаг. Далее единица подается на следующий вывод D1, а на D0 единица сбрасывается в ноль. Двигатель отрабатывает сладующий шаг. Если подавать ток сразу в две соседние катушки то реализуется режим полушагов (для моих двигателей с углом поворота 1,8’ получается 400 шагов на оборот).

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

Поняв принцип, несложно написать программу управляющую двигателем через LPT порт. Зачем в этой схеме диоды, а за тем, что нагрузка у нас индуктивная, при возникновении ЭДС самоиндукции она разряжается через диод, при этом исключается пробой транзистора, а следовательно и вывод его из строя. Еще одна деталь схемы – регистр RG (я использовал 555ИР33), используется как шинный формирователь, поскольку ток отдаваемый, например LPT портом мал – можно его элементарно спалить, а следовательно, есть возможность спалить весь компьютер.

Схема примитивна, и собрать такое можно минут за 15-20, если есть все детали. Однако у такого принципа управления есть недостаток – так как формирование задержек при задании скорости вращения задается программой относительно внутренних часов компьютера то работать в многозадачной системе (Win) это все не будет! Будут просто теряться шаги (может быть в Windows и есть таймер, но я не в курсе). Второй недостаток – это нестабилизированный ток обмоток, максимальную мощность из двигателя не выжать. Однако по простоте и надежности этот способ меня устраивает, тем более что для того, что бы не рисковать своим Атлоном 2ГГц, я собрал из барахла 486 тарантас, и кроме ДОСа там, в принципе мало, что можно поставить нормальное.

Описанная выше схема работала и в принципе неплоха, но я решил, что можно несколько переделать схему. Применить MOSFETJ). транзисторы (полевые), выигрыш в том, что можно коммутировать огромные токи (до 75 – 100А), при солидных для шаговых двигателей напряжениях (до 30В), и при этом детали схемы практически не греются, ну если не считать предельных значений (хотел бы я видеть тот который съест ток 100А

Как всегда в России возник вопрос, где взять детали. У меня возникла идея – извлечь транзисторы из горелых материнских плат, благо, например Атлоны кушают порядочно и транзисторы там стоят огого. Дал объявление в ФИДО, и получил предложение забрать 3 мат. платы за 100 рублей. Прикинув что в магазине за эти деньги можно от силы купить 3 транзистора, забрал, расковырял и о чудо, хотя они все и были дохлыми, ни один транзистор в цепи питания процессора не пострадал. Так я получил пару десятков полевых транзисторов за сто рублей. Схема, которая получилась в результате, представлена ниже.

Рис. 2 – Тоже на полевых транзисторах

Отличий в этой схеме немного, в частности была применена микросхема нормального буфера 75LS245 (выпаяна над газовой плитой из 286 материнской платы J). Диоды можно поставить любые, главное, что бы их максимальное напряжение не было меньше максимального напряжения питания, а предельный ток не меньше тока питания одной фазы. Я поставил диоды КД213A, это 10А и 200В. Возможно это излишне для моих 2х амперных двигателей, однако покупать детали не было смысла, да и запас по току думается лишним не будет. Резисторы служат для ограничения тока перезарядки емкости затворов.

Ниже приводится печатная плата контроллера построенного по такой схеме.

Рис. 3 – Печатная плата.

Печатная плата разведена для поверхностного монтажа на одностороннем текстолите (лень мне что то дырочки сверлить сталоJ). Микросхемы в DIP корпусах паяются с подогнутыми ножками, резисторы SMD с тех же материнок. Файл с разводкой в Sprint-Layout 4.0 прилагается. Можно было бы запаять на плату и разъемы, но лень как говорится — двигатель прогресса, да и при отладке железа удобнее было запаять провода подлиннее.

Еще необходимо отметить, что схема снабжена тремя концевиками, на плате справа снизу шесть контактов вертикально, радом с ними посадочные места под три резистора, каждый соединяет один вывод выключателей с +5В. Схема концевиков:

Рис. 4 – Схема концевиков.

Вот так это выглядело у меня в процессе наладки системы:

В результате на представленный контроллер я потратил не более 150 рублей: 100 рублей за материнские платы (при желании можно вообще бесплатно достать) + кусок текстолита, припой и банка хлорного железа в сумме тянут на ~50 рублей, причем хлорного железа останется потом еще много. Думаю считать провода и разъемы смысла не имеет. (Кстати разъем питания отпилен от старого винчестера.)

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

Если бы на Орловских заводах проточить отдельные детали не стоило бы так дорого, то мне бы конечно проще было бы вычертить все детали в CAD’е, со всеми квалитетами и шероховатостями и отдать на съедение рабочим. Однако знакомых токарей нет… Да и руками как то знаете ли интереснее…

P.S. Хочу высказать свое мнение по поводу негативного отношения автора сайта к советским и Российским двигателям. Советские двигатели ДШИ, вполне себе даже ничего, даже маломощный ДШИ200-1-1. Так что если вам удалось откопать за “пиво” такое добро не спешите выкидывать их, они еще поработают… проверено… Но если же покупать, и разность в стоимости не велика, лучше все таки брать иностранные, поскольку точность у них конечно будет выше.

P.P.S. Е: Если что то я написал не правильно пишите, исправим, но … РАБОТАЕТ…

Рассмотрим драйвер электродвигателей на транзисторах и микросхеме L298, разберемся с принципом работы H-моста. Узнаем особенности подключения драйверов на L298 к разным двигателям и источникам питания, проведем простые эксперименты с шаговыми движками и двигателями постоянного напряжения. Подключение к Raspberry Pi и простейшие программы для теста управления драйвером.

Что такое H-мост

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

Почему такое название? - потому что схема включения двигателя и переключателей для коммутации напоминает латинскую букву H. Принципы работы H-моста показан нарисунке ниже.

Рис. 1. Как работает H-мост, принцип коммутации двигателя для вращения в разные стороны.

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

Важно заметить что НЕЛЬЗЯ допускать замыкания двух ключей на одной стороне H-моста, поскольку получится короткое замыкание, при проектировании схемы моста нужно заложить это правило в логику и таким образом реализовать защиту.

Схема простого H-моста на кремниевых транзисторах

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

Рис. 2. Принципиальная схема простого драйвера электродвигателя на кремниевых транзисторах.

Такой драйвер позволяет управлять электродвигателем постоянного тока с питающим напряжением до 25В (для КТ817А, КТ816А) и до 45В (для КТ817Б-Г, КТ816Б-Г) с током не более 3А. При большом рабочем и нагрузочном токе двигателя выходные транзисторы КТ817 и КТ816 должны быть установлены на радиаторы достаточного размера.

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

Собрав две такие схемки (2х6 транзисторов) можно также управлять шаговым двигателем или же двумя двигателями постоянного тока.

Для того чтобы не городить огород из 12 транзисторов можно применить специализированные микросхемы, ниже мы рассмотрим пример с микросхемой L298 и готовым блоком на ее основе.

Микросхема L298, характеристики и возможности

Интегральная микросхема L298 - это мощный универсальный мостовой драйвер для управления двигателями постоянного тока, шаговыми движками, электромагнитными реле и электромагнитами (соленоидами). В микросхеме содержится два H-моста, выполненных на мощных транзисторах, а также логика совместимая с TTL.

Рис. 3. Микросхема L298 в корпусах Multiwatt15 PowerSO20.

Основные технические характеристики:

  • Рабочее напряжение - до 46В;
  • Максимальный постоянный ток - 4А (с радиатором);
  • Низкое напряжение насыщения;
  • Защита от перегрева;
  • Логический "0" = напряжение до 1,5В.

Где можно применить драйвер на микросхеме L298? - несколько идей:

  • Управление шаговым двигателем;
  • Управление двумя двигателями постоянного тока (DC motors);
  • Коммутация катушек мощных реле;
  • Управление соленоидами (электромагнитами).

Если посмотреть на структурную схему микросхему L298 то мы можем увидеть что-то на подобии схемы на рисунке 2, только с дополнительными логическими элементами.

Рис. 4. Внутренняя схема микросхемы L298N - мощный двойной H-мост.

Для каждого H-моста мы имеем по 3 входа: In1 - для подачи напряжения в одном направлении, In2 - в противоположном, и еще один вход En для подачи питания на выходные транзисторы моста.

Таким образом мы можем установить направление прохождения тока и управлять его подачей (включено или выключено, а также ШИМ).

Схема драйвера на микросхеме L298

Ниже представлена простая схема для драйвера двигателей на микросхеме L298N. Управление осуществляется по четырем проводам (вместо шести у L298) благодаря использованию дополнительных инверторов в микросхеме CD4011.

Рис. 5. Принципиальная схема драйвера электродвигателей на микросхеме L298N.

Для питания логики обеих микросхем нужно стабилизированное напряжение +5В (P2), можно использовать интегральный стабилизатор, например L7805 или же питать логику от имеющейся линии питания +5В. Для подачи питающего напряжения на двигатели используется отдельная линия питания P1.

Выводы P4, P5 используются для установки полярности каждого из каналов, а выводы P6, P7 - разрешают подачу питания на каскады (ключи) внутреннего H-моста для каждого канала.

Микросхему CD4011 можно заменить на отечественную К176ЛА7. Диоды Шоттки можно поставить другого номинала, на 35В/4А и более. Если не планируется ограничивать ток обмоток двигателя(двигателей) то низкоомные ограничивающие резисторы R9-R10 можно исключить из схемы, заменив их на перемычки.

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

Рис. 6. Готовые модули на L298.

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

Для подключения данной платки важно четко уяснить одну особенность:

  • Если для питания двигателей используется напряжение более чем 12В то перемычку нужно убрать и подавать отдельно 5В на выделенный для этого коннектор
  • Если питание двигателей будет осуществляться от напряжения 5-12В то перемычку нужно утсановить и дополнительное питание 5В не понадобится.

Если же подать на двигатели, например 20В и оставить перемычку установленной, то на модуле выгорит микросхемка-стабилизатор на 5В. Почему разработчики не установили интегральный стабилизатор с более широким диапазоном входных напряжений - не понятно.

Для того чтобы сэкономить два входа при подключении такого блока к Arduino или Raspberry Pi можно добавить часть схемы на CD4001, как на рисунке 5.

L298 + DC двигатели + Raspberry Pi

Для данного эксперимента к модулю на L298 были подключены два двигателя постоянного тока. Питание всего модуля осуществляется от одного аккумулятора на 6В. Поскольку это напряжение меньше 12В (смотрим выше описание) то перемычку внутреннего стабилизатора оставляем установленной и дополнительное питание +5В для логики не потребуется.

Перемычки "ENA" и "ENB", которые разрешают подачу питания на выходные мосты, оставлены установленными. Таким образом, для управления каждым из двигателей используем оставшиеся четыре входа: IN1, IN2, IN3, IN4.

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

Где взять +5В? - в данном случае это напряжение присутствует на разъеме питания, справа возле GND. Для теста можно воспользоваться кусочком проволоки - перемычкой.

Теперь подключим наш модуль к Raspberry Pi и напишем простую тестовую программу на Python. Для подключения модуля я использовал выводы GPIO вот в таком соответствии:

Рис. 7. L298 + Raspberry Pi + электродвигатели постоянного тока.

Мини-компьютер у меня питается через понижающий импульсный стабилизатор от второго аккумулятора на 6В. Перейдем к написанию программы для нашего эксперимента, наша цель - управлять вращением вала каждого из двигателей при помощи клавиатуры, которая подключена к Raspberry Pi или же удаленно по SSH, VNC.

Теперь испробуем простую программу, написанную на Python, которая поможет понять принцип управления электродвигателем постоянного тока.

Загружаем малинку, открываем Терминал или же подключаемся к ней удаленно при помощи SSH. Создаем новый файл и открываем его для редактирования при помощи команды:

Nano /home/pi/l298_dc_motors_test.py

Вставляем в редактор код скрипта на Python, который приведен ниже:

#!/usr/bin/env python # -*- coding: utf-8 -*- import time import RPi.GPIO as GPIO # Подготавливаем пины GPIO. GPIO.cleanup() GPIO.setmode(GPIO.BCM) GPIO.setup(4, GPIO.OUT) GPIO.output(4, GPIO.LOW) GPIO.setup(17, GPIO.OUT) GPIO.output(17, GPIO.LOW) # Включаем вращение двигателя 1 в одну сторону. GPIO.output(4, GPIO.HIGH) # ждем 5 секунд. time.sleep(5) # Выключаем двигатель 1. GPIO.output(4, GPIO.LOW) # ждем 10 секунд. time.sleep(10) # Включаем вращение двигателя 1 в другую сторону. GPIO.output(17, GPIO.HIGH) # ждем 5 секунд. time.sleep(5) # Выключаем двигатель 1. GPIO.output(17, GPIO.LOW)

Выходим из редактора и сохраняем файл. Делаем скрипт исполняемым и запускаем его:

Chmod +x /home/pi/l298_dc_motors_test.py /home/pi/l298_dc_motors_test.py

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

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

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

#!/usr/bin/env python # -*- coding: utf-8 -*- import os import sys import curses import time import RPi.GPIO as GPIO # Установим номера пинов GPIO, с которыми будем работать M1_RIGHT = 4 M1_LEFT = 17 M2_RIGHT = 27 M2_LEFT = 22 # Функция для подготовки пинов GPIO def setup(*ports): GPIO.cleanup() # Режим именования пинов по названию, а не по номеру на плате GPIO.setmode(GPIO.BCM) for port in ports: # Установка пина на вывод + низкий уровень "0" GPIO.setup(port, GPIO.OUT) GPIO.output(port, GPIO.LOW) # Функция для установки низкого уровня на всех пинах (выключение) def stop_all(): GPIO.output(M1_LEFT, GPIO.LOW) GPIO.output(M1_RIGHT, GPIO.LOW) GPIO.output(M2_LEFT, GPIO.LOW) GPIO.output(M2_RIGHT, GPIO.LOW) # Функция для управления вращением движков def rotate(motor=1, mode="s"): # Выключаем все пины stop_all() # Для мотора 1 if motor == 1: if mode == "r": # Устанавливаем высокий уровень на пине M1_RIGHT (4) GPIO.output(M1_RIGHT, GPIO.HIGH) elif mode == "l": # Устанавливаем высокий уровень на пине M1_LEFT (17) GPIO.output(M1_LEFT, GPIO.HIGH) # Для мотора 2 elif motor == 2: if mode == "r": GPIO.output(M2_RIGHT, GPIO.HIGH) elif mode == "l": GPIO.output(M2_LEFT, GPIO.HIGH) # Выполним инициализацию пинов GPIO setup(M1_RIGHT, M1_LEFT, M2_RIGHT, M2_LEFT) # Инициализация экрана (модуль curses) stdscr = curses.initscr() # Реагировать на нажатие клавиш без подтверждения при помощи ENTER curses.cbreak() # Разрешить использование стрелочек на клавиатуре stdscr.keypad(1) # Не блокировать программу по времени при опросе событий stdscr.nodelay(1) # Отобразим на экране данные по умолчанию stdscr.addstr(0, 10, "Hit "q" to quit") stdscr.addstr(2, 10, "A - M1 Left, D - M1 Right") stdscr.addstr(3, 10, "< - M2 Left, > - M2 Right") stdscr.addstr(4, 10, "S - stop") stdscr.refresh() # Главный цикл while True: # Получаем код нажатия клавиши и проверяем его key = stdscr.getch() if key != -1: # Если клавиша "стрелка влево" то вращаем движок 2 влево if key == curses.KEY_LEFT: # Выводим на экран строку "M2 <---" в позиции 6, 10 stdscr.addstr(6, 10, "M2 <---") rotate(2, "l") # Если клавиша "стрелка вправо" то вращаем движок 2 вправо elif key == curses.KEY_RIGHT: stdscr.addstr(6, 10, "M2 --->") rotate(2, "r") # Если клавиша "а" то вращаем движок 1 влево elif key == ord("a"): stdscr.addstr(6, 10, "M1 <---") rotate(1, "l") # Если клавиша "d" то вращаем движок 1 вправо elif key == ord("d"): stdscr.addstr(6, 10, "M1 --->") rotate(1, "r") # Если клавиша "s" то останов всех движков elif key == ord("s"): stdscr.addstr(6, 10, "STOP 12") stop_all() # Если клавиша "s" то выходим из программы elif key == ord("q"): # Восстановление прежних настроек терминала stdscr.keypad(0) curses.echo() curses.endwin() # Очистка и выход os.system("clear") sys.exit() # Обновляем текст на экране и делаем небольшую задержку stdscr.refresh() time.sleep(0.01)

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

Рис. 8. Программа на Python для управления двигателями при помощи драйвера L298 (терминал Konsole, KDE).

Краткая видео-демонстрация работы данного эксперимента приведена ниже:

Что такое шаговый двигатель, типы шаговиков

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

Шаговые двигатели надежны, стойки к износу и позволяют контролировать вращение на определенный угол, применяются в автоматизации процессов, на производстве, в электронно-вычислительной аппаратуре(CD-DVD приводы, принтеры, копиры) и т.п.

Такие двигатели бывают следующих видов:

  • Биполярный - 2 обмотки, по одной на каждую фазу, для управления можно использовать схему на 2 H-моста или один полу-мост с двуполярным питанием;
  • Униполярный - 2 обмотки, каждая с отводом от середины, удобно переключать фазы сменой половинок каждой из обмоток, упрощает схему драйвера (4 ключа), а также использовать как быполярный без использования отводов от обмоток;
  • С четирьмя обмотками - универсальный, подключив обмотки соответствующим образом можно использовать как быполярный или униполярный движок.

Рис. 9. Типы шаговых двигателей: биполярный, униполярный, с четырьмя обмотками.

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

L298 + шаговый двигатель + Raspberry Pi

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

Для подключения одного биполярного двигателя потребуется два выхода драйвера на L298 (два H-моста). Для данного эксперимента модуль L298 нужно подключить к Raspberry Pi так же, как и в варианте с .

Прежде можете поэкспериментировать без малинки - подавать поочередно на входы модуля L298 напряжение 5В и посмотреть как вал двигателя будет выполнять шаги.

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

Рис. 10. Подключение биполярного шагового двигателя к модулю L298 для управления через Raspberry Pi.

Если все уже подключено, то переходим к экспериментам с простой тестовой программой на Python, которая поможет понять как работать с шаговыми двигателем используя L298 + Raspberry Pi.

Создадим файл для скрипта и откроем его для редактирования:

Nano /home/pi/l298_stepper_motor_test.py

Вставляем в редактор следующий код скрипта на Python:

#!/usr/bin/env python # -*- coding: utf-8 -*- import time import RPi.GPIO as GPIO # Подготавливаем пины GPIO. GPIO.cleanup() GPIO.setmode(GPIO.BCM) GPIO.setup(4, GPIO.OUT) GPIO.output(4, GPIO.LOW) GPIO.setup(17, GPIO.OUT) GPIO.output(17, GPIO.LOW) GPIO.setup(27, GPIO.OUT) GPIO.output(27, GPIO.LOW) GPIO.setup(22, GPIO.OUT) GPIO.output(22, GPIO.LOW) # Временная задержка между шагами, сек. step_timeout = 0.0105 # Длительность импульса, сек. impulse_timeout = 0.008 # Шаг 1. GPIO.output(4, GPIO.HIGH) time.sleep(impulse_timeout) GPIO.output(4, GPIO.LOW) time.sleep(step_timeout) # Шаг 2. GPIO.output(17, GPIO.HIGH) time.sleep(impulse_timeout) GPIO.output(17, GPIO.LOW) time.sleep(step_timeout) # Шаг 3. GPIO.output(27, GPIO.HIGH) time.sleep(impulse_timeout) GPIO.output(27, GPIO.LOW) time.sleep(step_timeout) # Шаг 4. GPIO.output(22, GPIO.HIGH) time.sleep(impulse_timeout) GPIO.output(22, GPIO.LOW) time.sleep(step_timeout) # Ждем 10 секунд. time.sleep(10) # 20 раз по 4 шага в цикле. for i in range(0,20): GPIO.output(4, GPIO.HIGH) time.sleep(impulse_timeout) GPIO.output(4, GPIO.LOW) time.sleep(step_timeout) GPIO.output(17, GPIO.HIGH) time.sleep(impulse_timeout) GPIO.output(17, GPIO.LOW) time.sleep(step_timeout) GPIO.output(27, GPIO.HIGH) time.sleep(impulse_timeout) GPIO.output(27, GPIO.LOW) time.sleep(step_timeout) GPIO.output(22, GPIO.HIGH) time.sleep(impulse_timeout) GPIO.output(22, GPIO.LOW) time.sleep(step_timeout)

Делаем файл со скриптом исполняемым и запускаем его на исполнение:

Chmod +x /home/pi/l298_stepper_motor_test.py /home/pi/l298_stepper_motor_test.py

осле запуска скрипта, шаговый двигатель должен совершить 4 шага (вращение в одну сторону), потом подождав 10 секунд он снова начнет свое вращение и сделает уже 20*4 шагов.

А теперь рассмотрим пример интерактивной программы, которая позволяет управлять направлением и скоростью вращения (последовательные шаги) шагового двигателя с использованием клавиатуры.

#!/usr/bin/env python # -*- coding: utf-8 -*- import os import sys import curses import time import RPi.GPIO as GPIO # Функция для подготовки пинов GPIO def setup(*ports): GPIO.cleanup() # Режим именования пинов по названию, а не по номеру на плате GPIO.setmode(GPIO.BCM) for port in ports: # Установка пина на вывод + низкий уровень "0" GPIO.setup(port, GPIO.OUT) GPIO.output(port, GPIO.LOW) # Функция для подачи импульса на пин с некоторой задержкой (1 шаг) def impulse(port=0): GPIO.output(port, GPIO.HIGH) # Set the timeout value to be anough for one step time.sleep(0.008) GPIO.output(port, GPIO.LOW) time.sleep(timeout) # Выполняем установку нужных нам пинов GPIO setup(4, 17, 27, 22) # Задержка между шагами (по умолчанию) timeout = 0.0105 # Направление вращения (по умолчанию) direction = "r" # Инициализация экрана (модуль curses) stdscr = curses.initscr() # Реагировать на нажатие клавиш без подтверждения при помощи ENTER curses.cbreak() # Разрешить использование стрелочек на клавиатуре stdscr.keypad(1) # Не блокировать программу по времени при опросе событий stdscr.nodelay(1) # Отобразим на экране данные по умолчанию stdscr.addstr(0, 10, "Hit "q" to quit") stdscr.addstr(2, 10, "--->") stdscr.addstr(3, 10, "Timeout: " + str(timeout)) stdscr.refresh() # Главный цикл while True: # Набор импульсов для вращения вала мотора вправо if direction == "r": impulse(4) impulse(17) impulse(27) impulse(22) # Набор импульсов для вращения вала мотора влево elif direction == "l": impulse(22) impulse(27) impulse(17) impulse(4) # Считываем код нажатия клавиши и проверяем его key = stdscr.getch() if key != -1: # Клавиша "влево" меняет направление вращения: ВЛЕВО if key == curses.KEY_LEFT: # отображаем текст "<---" в позиции экрана 2, 10 stdscr.addstr(2, 10, "<---") # Изменим значение переменной с направлением вращения direction = "l" # Клавиша "вправо" меняет направление вращения: ВПРАВО elif key == curses.KEY_RIGHT: stdscr.addstr(2, 10, "--->") direction = "r" # Клавиша "вверх" ускоряет вращение elif key == curses.KEY_UP: # Уменьшаем задержку между шагами timeout = timeout - 0.0005 # Клавиша "вниз" замедляет вращение elif key == curses.KEY_DOWN: # Увеличиваем задержку между шагами timeout = timeout + 0.0005 # Клавиша "q" выполняет выход из программы elif key == ord("q"): stdscr.keypad(0) curses.echo() curses.endwin() os.system("clear") sys.exit() # Смотрим чтобы время задержки не перешло границу 0 if timeout <= 0: timeout = 0.0005 # Обновляем текст на экране stdscr.addstr(3, 10, "Timeout: " + str(timeout)) stdscr.refresh() time.sleep(0.01)

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

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

Рис. 11. Программа управления биполярным шаговым двигателем, L298, Raspberry Pi.

Видео-демонстрация работы шагового двигателя:

Заключение

Надеюсь вы получили ответ на вопрос "что такое H-мост и как он работает", из экспериментов должно быть понятно как применять драйвер на микросхеме L298 и подключать к нему разные движки.

Важно заметить что в интернете можно найти готовые библиотеки и скрипты на Python для удобного управления двигателями при помощи H-моста на L298 с использованием Raspberry Pi.

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

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

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

А на этой картинке показана таблица истинности и диаграмма работы шаговика в полношаговом режиме. Существуют еще и другие режимы работы шаговых двигателей (полушаговый, микрошаговый и др.)

Получается если повторять эту последовательность сигналов ABCD можно вращать ротор электромотора в одну сторону.
А как вращать ротор в другую сторону? Да очень просто, нужно изменить последовательность сигналов с ABCD на DCBA.
А как поворачивать ротор на конкретный заданный угол, например 30 градусов? У каждой модели шагового электромотора есть такой параметр как число шагов. У шаговиков которые я вытащил из матричных принтеров этот параметр 200 и 52, т.е. чтобы совершить полный оборот 360 градусов одним двигателям нужно пройти 200 шагов а другим 52. Получается чтобы повернуть ротор на угол 30 градусов, нужно пройти:
-в первом случае 30:(360:200)=16,666... (шагов) можно округлить до 17 шагов;
-во втором случае 30:(360:52)=4,33... (шага), можно округлить до 4 шагов.
Как видите есть достаточно большая погрешность, можно сделать вывод что чем больше шагов у мотора тем меньше погрешность. Погрешность можно уменьшать если использовать полушаговый или микрошаговый режим работы или механическим способом - использовать понижающий редуктор в этом случае страдает скорость движения.
Как управлять скоростью вращения ротора? Достаточно изменить длительность импульсов подаваемых на входы ABCD, чем длиннее импульсы по оси времени, тем меньше скорость вращения ротора.
Полагаю этой информации будет достаточно чтобы иметь теоретическое представление о работе шаговых электромоторов, все остальные знания можно будет получить экспериментируя.
И так перейдем к схемотехнике. Как работать с шаговым двигателем мы разобрались, осталось подключить его к Arduino и написать управляющую программу. К сожалению напрямую подключить обмотки мотора к выходам нашего микроконтроллера невозможно по одной простой причине - нехватка мощности. Любой электромотор пропускает через свои обмотки достаточно большой ток, а к микроконтроллеру можно подключить нагрузку не более 40 mA (параметры ArduinoMega 2560) . Что же делать если есть необходимость управлять нагрузкой например 10A да еще и напряжением 220В? Эту проблему можно решить если между микроконтроллером и шаговым двигателем интегрировать силовую электрическую схему, тогда можно будет управлять хоть трехфазным электромотором который открывает многотонный люк в ракетную шахту:-). В нашем случае люк в ракетную шахту открывать не нужно, нам нужно всего лишь заставить работать шаговый мотор и в этом нам поможет драйвер шагового двигателя. Можно конечно купить готовые решения, на рынке их очень много, но я буду делать свой собственный драйвер. Для этого мне понадобятся силовые ключевые полевые транзисторы Mosfet, как я уже говорил эти транзисторы идеально подходят для сопряжения Arduino с любыми нагрузками.
На рисунке ниже представлена электрическая принципиальная схема контроллера шагового двигателя.

В качестве силовых ключей я применил транзисторы IRF634B максимальное напряжение исток-сток 250В, ток стока 8,1А, этого более чем достаточно для моего случая. Со схемой более менее разобрались будем рисовать печатную плату. Рисовал в встроенном в Windows редакторе Paint, скажу это не самая лучшая затея, в следующий раз буду использовать какой-нибудь специализированный и простой редактор печатных плат. Ниже представлен рисунок готовой печатной платы.

Далее это изображение в зеркальном отражении распечатываем на бумаге при помощи лазерного принтера. Яркость печати лучше всего сделать максимальной, а бумагу нужно использовать не обычную офисную а глянцевую, подойдут обычные глянцевые журналы. Берем лист и печатаем поверх имеющегося изображения. Далее получившуюся картинку прикладываем к заранее подготовленному куску фольгированного стеклотекстолита и хорошенько проглаживаем утюгом в течении 20 минут. Утюг нужно нагреть до максимальной температуры.
Как подготовить текстолит? Во первых его нужно отрезать по размеру изображения печатной платы (при помощи ножниц по металлу или ножовкой по металлу), во вторых зашкурить края мелкой наждачной бумагой, чтобы не осталось заусенцев. Также необходимо пройтись наждачкой по поверхности фольги, снять окислы, фольга приобретет ровный красноватый оттенок. Далее поверхность обработанную наждачной бумагой нужно протереть ваткой смоченной в растворитель (используйте 646 растворитель он меньше воняет).
После прогрева утюгом, тонер с бумаги запекается на поверхность фольгированного стеклотекстолита в виде изображения контактных дорожек. После этой операции плату с бумагой необходимо остудить до комнатной температуры и положить в ванночку с водой примерно на 30 минут. За это время бумага раскиснет и ее нужно аккуратно скатать подушечками пальцев с поверхности текстолита. На поверхности останутся ровные черные следы в виде контактных дорожек. Если у вас не получилось перенести изображение с бумаги и у вас есть огрехи, тогда следует смыть тонер с поверхности текстолита растворителем и повторить все заново. У меня все получилось с первого раза.
После получения качественного изображения дорожек, необходимо вытравить лишнюю медь, для этого нам понадобится травильный раствор который мы приготовим сами. Раньше для травления печатных плат я использовал медный купорос и обычную поваренную соль в соотношении на 0,5 литра горячей воды по 2 столовые ложки с горкой медного купороса и поваренной соли. Все это тщательно размешивалось в воде и раствор готов. Но в этот раз попробовал иной рецепт, очень дешевый и доступный.
Рекомендуемый способ приготовления травильного раствора:
В 100 мл аптечной 3% перекиси водорода растворяется 30 г лимонной кислоты и 2 чайные ложки поваренной соли. Этого раствора должно хватить для травления площади 100 см2. Соль при подготовке раствора можно не жалеть. Так как она играет роль катализатора и в процессе травления практически не расходуется.
После приготовления раствора, печатную плату необходимо опустить в емкость с раствором и наблюдать за процессом травления, тут главное не передержать. Раствор съест непокрытую тонером поверхность меди, как только это произойдет плату необходимо достать и промыть холодной водой, далее ее нужно просушить и снять с поверхности дорожек тонер при помощи ватки и растворителя. Если в вашей плате предусмотрены отверстия для крепления радиодеталей или крепежа, самое время просверлить их. Я опустил эту операцию по причине того что это всего лишь макетный драйвер шагового двигателя, предназначенный для освоения новых для меня технологий.
Приступаем к лужению дорожек. Это необходимо сделать чтобы облегчить себе работу при пайке. Раньше я лудил при помощи припоя и канифоли, но скажу это "грязный" способ. От канифоли много дыма и шлака на плате который нужно будет смывать растворителем. Я применил другой способ, лужение глицерином. Глицерин продается в аптеках и стоит копейки. Поверхность платы необходимо протереть ваткой смоченной в глицерине и наносить припой паяльником точными мазками. Поверхность дорожек покрывается тонким слоем припоя и остается чистой, лишний глицерин можно удалить ваткой или промыть плату в воде с мылом. К сожалению у меня нет фотографии полученного результата, после лужения, но получившееся качество впечатляет.
Далее необходимо припаять все радиодетали на плату, для пайки SMD компонентов я использовал пинцет. В качестве флюса использовал глицерин. Получилось очень даже аккуратно.
Результат налицо. Конечно после изготовления плата выглядела лучше, на фото она уже после многочисленных экспериментов (для этого она и создавалась).



Итак наш драйвер шагового двигателя готов! Теперь переходим к самому интересному к практическим экспериментам. Припаиваем все провода подключаем источник питания и пишем управляющую программу для Arduino.
Среда разработки Arduino богата на различные библиотеки, для работы с шаговым двигателем предусмотрена специальная библиотека Stepper.h, ее мы и будем использовать. Как пользоваться средой разработки Arduino и описывать синтаксис языка программирования я не стану, эту информацию вы можете посмотреть на сайте http://www.arduino.cc/ , там же описание всех библиотек с примерами в том числе и описание Stepper.h.


Листинг программы:
/*
* Тестовая программа для шаговика
*/
#include
#define STEPS 200

Stepper stepper(STEPS, 31, 33, 35, 37);

void setup()
{
stepper.setSpeed(50);
}

void loop()
{
stepper.step(200);
delay(1000);
}

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

просмотров