3.15. Керування двигуном постійного струму¶
Щітковий двигун постійного струму — це котушка дроту на валу всередині магнітного поля. Пропустіть струм через котушку, і поле чинить на неї силу; сила перетворюється на крутний момент на валу. Щітки всередині двигуна перемикають напрямок струму в котушці при обертанні валу, тому крутний момент завжди штовхає вал в одному напрямку. Прикладіть постійну напругу до двох виводів двигуна — вал обертається; поміняйте полярність — він обертається в інший бік.
Двигуни, як правило, потребують сотень міліампер до декількох ампер при напрузі живлення, що перевищує логічний рівень 3,3 В камери. Вивід GPIO може забезпечити приблизно 25 мА і не може змінити полярність – він може керувати лише двома рівнями. Каскад керування між камерою та двигуном повинен витримувати струм двигуна, підключати окреме джерело живлення з вищою напругою і дозволяти камері змінювати полярність за командою. Стандартним рішенням є чотиритранзисторний H-міст.
3.15.1. H-міст¶
H-міст — це чотири перемикачі, розташовані у формі H навколо двигуна:
H-міст: чотири перемикачі (S1 – S4) підключають двигун M між Vmotor і землею.¶
Замикання різних пар перемикачів визначає, що двигун отримує на своїх виводах:
S1 + S4 замкнені, S2 + S3 розімкнені. Струм тече від Vmotor через
S1, доA, через двигун доBі черезS4до землі. Двигун обертається в один бік.S2 + S3 замкнені, S1 + S4 розімкнені. Струм тече через двигун в іншому напрямку. Двигун обертається в інший бік.
Усі чотири розімкнені. Обидва виводи двигуна вільні; двигун вибігає.
S3 + S4 замкнені (або S1 + S2 замкнені). Обидва виводи двигуна підключені до однієї шини; власна кінетична енергія двигуна рухає струм, який замкнена пара відводить у тепло. Двигун гальмує.
Неприпустима комбінація — це замикання обох перемикачів в одному стовпці – S1 + S3 або S2 + S4 – що утворює коротке замикання від Vmotor прямо до землі. Це наскрізний струм, і код камери не повинен цього допускати.
На практиці чотири перемикачі — це МОН-транзистори (представлені на сторінці Узгодження рівнів) всередині інтегральної мікросхеми драйвера. Мікросхема надає два або три виводи з логічними рівнями, які внутрішньо відображаються на чотири перемикачі, і містить логіку блокування, що запобігає наскрізному струму, тому код камери не повинен керувати цим безпосередньо.
3.15.2. ШІМ та індуктивність двигуна¶
Для керування швидкістю двигуна недостатньо лише повного увімкнення та вимкнення. Прийом той самий, що використовується для світлодіодів у Регулювання яскравості світлодіода за допомогою ШІМ: імпульсне керування на високій частоті з усередненням результату навантаженням. Для світлодіода усереднювачем було людське око; для двигуна — сама котушка.
Котушка двигуна має значну індуктивність. Струм через індуктор не може змінюватися миттєво; він змінюється зі швидкістю, пропорційною напрузі на ньому. Імпульсне включення та вимкнення мосту на частоті 20 кГц збільшує струм котушки під час кожної фази увімкнення, а під час фази вимкнення струм повинен продовжувати текти – котушка змінює напругу на собі, щоб підтримати його.
Без шляху для відводу цей струм міг би підняти напругу на щойно розімкненому перемикачі вгору і пошкодити транзистор. Зворотні діоди на кожному перемикачі – часто лише власні тілесні діоди МОН-транзисторів всередині мікросхеми драйвера – забезпечують необхідний шлях для струму. Він тече через діод і назад через один із ще замкнених перемикачів, утворюючи контур зворотного ходу, в якому струм поступово спадає через малі опори мосту та самого двигуна. Діод також обмежує напругу на розімкненому перемикачі в межах падіння напруги на діоді відносно тієї шини, до якої повертається контур, добре в межах безпечної робочої зони МОН-транзистора.
Середнє значення струму за кожен період ШІМ визначає крутний момент, і це середнє лінійно слідкує за робочим циклом – подвоєння робочого циклу приблизно подвоює крутний момент, а при постійному навантаженні приблизно подвоює швидкість. На відміну від регулювання яскравості світлодіодів, де нелінійна реакція ока вимагає застосування кривої, лінійне змінення duty_u16 вже відповідає лінійному змінення зусилля двигуна.
Частота ШІМ повинна перевищувати лише два порогових значення:
Вище ~20 кГц несна частота виходить за межі діапазону чутності людини. Нижче цієї частоти магнітна сила на котушці зростає та спадає з кожним імпульсом ШІМ, а обмотки та пластини фізично вібрують на несній частоті – двигун фактично стає маленьким гучномовцем, що видає тон на частоті ШІМ.
Значно вище ~50 кГц МОН-транзистори та їх драйвери затворів починають втрачати ефективність через втрати на перемикання. Під час кожного переходу увімкнення/вимкнення МОН-транзистор короткочасно несе як значну напругу, так і значний струм, розсіюючи невеликий сплеск потужності у вигляді тепла; ємність затвора МОН-транзисторів також має заряджатися та розряджатися в кожному циклі, що коштує мікросхемі драйвера. Обидві витрати масштабуються з частотою ШІМ, тому на високих частотах тепло від перемикання може зрівнятися з теплом від провідності струму двигуна.
20 кГц — зручне значення за замовчуванням для двигунів для хобі.
3.15.3. Керування H-мостом¶
Мікросхема драйвера H-мосту з двома входами відображає IN1 та IN2 на чотири перемикачі приблизно так:
IN1 = 0, IN2 = 0– вибіг (усі чотири перемикачі розімкнені).IN1 = 1, IN2 = 0– рух в одному напрямку.IN1 = 0, IN2 = 1– рух в іншому напрямку.IN1 = 1, IN2 = 1– гальмування.
Керування двома входами як виходами ШІМ дозволяє камері встановлювати напрямок, вибираючи який із двох виводів несе робочий цикл, а швидкість — самим значенням робочого циклу:
import time
from machine import PWM, Pin
in1 = PWM(Pin("P7"), freq=20_000, duty_u16=0)
in2 = PWM(Pin("P8"), freq=20_000, duty_u16=0)
def drive_a(speed): # speed: 0..65535
in1.duty_u16(speed)
in2.duty_u16(0)
def drive_b(speed):
in1.duty_u16(0)
in2.duty_u16(speed)
def coast():
in1.duty_u16(0)
in2.duty_u16(0)
def brake():
in1.duty_u16(65535)
in2.duty_u16(65535)
drive_a(32768) # half speed in direction A
time.sleep(2)
drive_b(16384) # quarter speed in direction B
time.sleep(2)
coast()
Наростання від вимкненого до повного і назад забезпечує плавний пуск і зупинку:
for d in range(0, 65535, 256):
in1.duty_u16(d)
time.sleep_ms(10)
for d in range(65535, 0, -256):
in1.duty_u16(d)
time.sleep_ms(10)
3.15.4. Драйвери з керуванням напрямком і швидкістю¶
Друге сімейство мікросхем H-моста надає більш зручний інтерфейс: один цифровий вхід напрямку (часто позначається DIR або PH для «фази») плюс один вхід швидкості (часто PWM або EN для «дозволу»). Вивід напрямку визначає, в якому напрямку рухає міст; робочий цикл на виводі швидкості встановлює середній струм.
Це простіше керувати програмно, ніж схема з двома входами ШІМ. Два сигнали відповідають тому, як зазвичай формулюється задача – «рухатись так, з такою швидкістю» – тому код може говорити set_direction(forward); set_speed(50) замість розгалуження між in1 та in2. Потрібен лише один канал ШІМ, що звільняє інший канал на тому самому таймері для непов’язаного завдання. Вивід напрямку може залишатися незмінним між змінами без повторного спрацьовування мосту, тому зміна швидкості при фіксованому напрямку зачіпає лише один регістр.
import time
from machine import PWM, Pin
dir_pin = Pin("P8", Pin.OUT)
speed = PWM(Pin("P7"), freq=20_000, duty_u16=0)
def drive(direction, speed_u16):
dir_pin.value(direction) # 0 or 1
speed.duty_u16(speed_u16) # 0..65535
drive(0, 32768) # direction A at half speed
time.sleep(2)
drive(1, 16384) # direction B at quarter speed
time.sleep(2)
speed.duty_u16(0) # stop
Що насправді робить «стоп» на такому типі драйвера – вибіг або гальмування – залежить від мікросхеми. З двовходовим драйвером код камери вибирає (обидва входи низькі для вибігу, обидва високі для гальмування); з драйвером з керуванням напрямком і швидкістю мікросхема вирішує сама, тому перед покладанням на будь-яку поведінку варто звернутися до технічних умов.