Управління біполярним кроковим двигуном без використання драйвера
Якось раз мені захотілося поекспериментувати з кроковими двигунами. З уніполярним двигуном все дуже просто, достатньо півмосту на дуже бюджетній мікросхемі ULN2003 або ULN2803. А от з біполярним двигуном все набагато складніше. Він має мінімум дві обмотки, на кожному кінці яких полярність живлення повинна змінюватися на протилежну. Хтось скаже "навіщо винаходити велосипед? Купи драйвер на L239 і радій життю", може бути це і правильно, але ми ж не шукаємо легких шляхів, та й що-небудь спаяти руки чешуться (а драйвери були куплені, просто вони ще їхали з Китаю). Трохи покопавшись в інтернеті, я зацікавився такою штукою, як H-мост.
Дана схема може подавати на кожен кінець обмотки і плюс, і мінус, в залежності від того, на затвор верхнього або нижнього транзистора плеча моста подати управляюче напруження.
Оскільки у біполярного двигуна дві обмотки, то нам знадобиться два H-мости. Тоді для управління двома мостами у нас виходить вісім управляючих проводів (на затвори кожного транзистора). Це дуже незручно, тому що, по-перше, потрібно багато проводів підключати до управляючого мікроконтролера, а по-друге, якщо подати управляючий сигнал одночасно на верхній і на нижній транзистори одного плеча моста, то ми отримаємо коротке замикання і просто зожжем два транзистора. Тому я вирішив зробити одну хитрість: затвори нижніх транзисторів кожного плеча (вони у нас комутують мінус до обмотки мотора) необхідно підключити через інвертор (в даному випадку логічний елемент "не"), а затвори верхніх транзисторів - на вхід того ж інвертора. Таким чином ми отримуємо вже чотири управляючі сигнали (A, B, C, D).
В результаті, якщо ми подаємо на будь-яку лінію управління логічну одиницю (TTL), то у нас відкриється верхній транзистор плеча, а на затвор нижнього піде логічний нуль, і він буде закритий. А якщо подати на ту ж лінію логічний нуль, то верхній транзистор буде закритий, а на затвор нижнього буде подана логічна одиниця (з виходу інвертора), і кінець обмотки буде підключений до мінуса. З теорією покінчено.
Тепер підключаємо нашу схему до arduino (або просто мікроконтролера): лінії A, B, C, D - до будь-якого вільного піну, так само підключаємо мінус і плюс 5 вольт від плати контролера. Самі мости живимо від окремого блоку живлення (у мене був нестабілізований на 15 вольт).
Залишилося написати програму управління
Будемо управляти двигуном у півкроковому режимі (8 кроків). У моїй програмі написані три функції: forward - буде крутити двигун в одну сторону, backward - в зворотну, stope - зупинка. Функції запускаються за допомогою термінала шляхом відправки символів (f, b і s відповідно). Змінна dl служить для управління швидкістю обертання двигуна. Оскільки програма виконується по колу, то двигун обертається постійно. За аналогією можна додати підпрограми для одного кроку або потрібної кількості кроків.
Зовнішній вигляд готового пристрою:
Як видно з фотографії, мости зібрані з різних транзисторів (в верхніх плечах пари ceb703al і 76129s випаяні з старих материнок, в нижніх плечах irf640 і irf610), так як вісім однакових у мене просто не було. Тим не менш, схема цілком працездатна. Так само на фото помітна пара "сопель" - перемичок - як завжди помилки при малюванні плати.
І на кінець статті - демонстраційне відео роботи пристрою.
Список радіоелементів
Обозначення | Тип | Номінал | Кількість | Примітка |
---|---|---|---|---|
IC1 | Мікросхема | к1533лн1 | 1 | 74als04 |
R1-R8 | Резистор |
100Ом-1кОм
|
1 | будь-якої потужності |
T1-T8 | Транзистор | IRF740 | 1 | IRF610, IRF630, IRF640, IRF730, |
Прикріплені файли:
- H-мост.lay6 (70 Кб)
- Stepper.ino (3 Кб)