3.15. Upravljanje istosmjernim motorom

Istosmjerni motor s četkicama je zavojnica žice na osovini unutar magnetskog polja. Propustite struju kroz zavojnicu i polje na nju djeluje silom; sila postaje zakretni moment na osovini. Četkice unutar motora mijenjaju smjer struje u zavojnici kako se osovina okreće, pa zakretni moment uvijek gura osovinu u istom smjeru. Dovedite istosmjerni napon na dva priključka motora i osovina se vrti; zamijenite polaritet i vrti se na drugu stranu.

Motori obično traže od nekoliko stotina miliampera do nekoliko ampera, pri naponima napajanja iznad 3,3 V logičke razine kamere. GPIO pin može isporučiti reda veličine 25 mA i ne može obrnuti polaritet – može samo dovoditi svoje dvije razine. Pogonski stupanj između kamere i motora mora nositi struju motora, voditi zasebno napajanje motora višeg napona i omogućiti kameri da na naredbu obrne polaritet. Standardno rješenje je H-most s četiri tranzistora.

3.15.1. H-most

H-most su četiri sklopke raspoređene u obliku slova H oko motora:

Shema H-mosta. Vmotor na vrhu povezuje se kroz sklopku S1 prema dolje na čvor A na lijevoj strani, te kroz sklopku S2 prema dolje na čvor B na desnoj strani. Motor M leži vodoravno između A i B. Od A još jedna sklopka S3 ide prema dolje na uzemljenje; od B još jedna sklopka S4 ide prema dolje na uzemljenje.

H-most: četiri sklopke (S1S4) povezuju motor M između Vmotor i uzemljenja.

Zatvaranjem različitih parova sklopki bira se što motor vidi na svojim priključcima:

  • S1 + S4 zatvorene, S2 + S3 otvorene. Struja teče od Vmotor kroz S1, u A, preko motora do B te kroz S4 do uzemljenja. Motor se okreće u jednom smjeru.

  • S2 + S3 zatvorene, S1 + S4 otvorene. Struja teče kroz motor u suprotnom smjeru. Motor se okreće u drugom smjeru.

  • Sve četiri otvorene. Oba priključka motora plutaju; motor se kreće slobodnim hodom.

  • S3 + S4 zatvorene (ili S1 + S2 zatvorene). Oba priključka motora vezana su na istu razinu; vlastita kinetička energija motora pokreće struju koju zatvoreni par kratko spaja u toplinu. Motor koči.

Nedopuštena kombinacija je zatvaranje obje sklopke u istom stupcu – S1 + S3 ili S2 + S4 – čime nastaje kratki spoj od Vmotor izravno do uzemljenja. To je probojna struja (shoot-through) i kod kamere je ne smije dopustiti.

U praksi su četiri sklopke MOSFET-i (predstavljeni na stranici Pomak naponske razine) unutar integriranog upravljačkog sklopa. Čip izlaže dva ili tri ulazna pina logičke razine koji se interno preslikavaju na četiri sklopke i uključuje blokirajuću logiku koja sprječava probojnu struju, pa kod kamere njome ne mora izravno upravljati.

3.15.2. PWM i induktivitet motora

Postavljanje brzine motora zahtijeva više od potpunog uključenja i potpunog isključenja. Trik je isti onaj korišten za LED diode u Zatamnjivanje LED diode pomoću PWM-a: pulsirajte pogon visokom frekvencijom i pustite da trošilo usrednji rezultat. Za LED diodu usrednjivač je bilo oko; za motor je to sama zavojnica.

Zavojnica motora ima znatan induktivitet. Struja kroz zavojnicu ne može se promijeniti trenutačno; mijenja se brzinom razmjernom naponu na njoj. Pulsiranje mosta uključeno i isključeno na 20 kHz podiže struju zavojnice tijekom svake uključene faze, a tijekom isključene faze struja mora nastaviti teći – zavojnica obrće napon na samoj sebi kako bi je održala.

Bez mjesta kamo bi otišla, ta bi struja podigla napon na upravo otvorenoj sklopki te bi mogla oštetiti tranzistor. Slobodne diode (freewheeling diode) preko svake sklopke – često samo vlastite tjelesne diode MOSFET-a unutar upravljačkog čipa – daju struji potreban put. Ona teče kroz diodu i natrag kroz jednu od još zatvorenih sklopki, dovršavajući petlju slobodnog hoda (freewheel loop) u kojoj struja postupno opada kroz male otpore mosta i samog motora. Dioda također pričvršćuje napon na otvorenoj sklopki unutar pada napona na diodi od one razine na koju se petlja vraća, dobrano unutar sigurnog radnog područja MOSFET-a.

Prosjek struje tijekom svakog PWM razdoblja je ono što proizvodi zakretni moment, a taj prosjek linearno prati radni ciklus – udvostručenje radnog ciklusa otprilike udvostručuje zakretni moment, a pri stalnom opterećenju otprilike udvostručuje brzinu. Za razliku od zatamnjivanja LED dioda, gdje nelinearni odziv oka zahtijeva krivulju, linearno pomicanje vrijednosti duty_u16 već odgovara linearnom pomicanju napora motora.

PWM frekvencija mora samo prijeći dva praga:

  • Iznad ~20 kHz nosivi signal je izvan ljudskog čujnog područja. Ispod toga, magnetska sila na zavojnicu raste i pada sa svakim PWM impulsom te namoti i limovi fizički vibriraju na frekvenciji nosivog signala – motor zapravo postaje mali zvučnik koji emitira ton visine PWM frekvencije.

  • Daleko iznad ~50 kHz MOSFET-i i njihovi upravljači vrata počinju gubiti učinkovitost zbog gubitaka pri preklapanju. Tijekom svakog prijelaza uključeno-isključeno MOSFET kratko nosi i znatan napon i znatnu struju, rasipajući mali nalet snage u toplinu; kapacitet vrata MOSFET-a također se mora puniti i prazniti u svakom ciklusu, što plaća upravljački čip. Oba troška rastu s PWM frekvencijom, pa pri visokim brzinama toplina od preklapanja može biti usporediva s toplinom od vođenja struje motora.

20 kHz je ugodna zadana vrijednost za motore hobi veličine.

3.15.3. Pogon H-mosta

Upravljački čip H-mosta s dva ulaza preslikava IN1 i IN2 na četiri sklopke otprilike ovako:

  • IN1 = 0, IN2 = 0 – slobodni hod (sve četiri sklopke otvorene).

  • IN1 = 1, IN2 = 0 – pogon u jednom smjeru.

  • IN1 = 0, IN2 = 1 – pogon u drugom smjeru.

  • IN1 = 1, IN2 = 1 – kočenje.

Pogon dvaju ulaza kao PWM izlaza omogućuje kameri da postavi smjer odabirom kojeg od dvaju pinova nosi radni ciklus, a brzinu samom vrijednošću radnog ciklusa:

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()

Rampa od isključenog do punog i natrag daje gladak start i zaustavljanje:

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. Upravljači sa smjerom i brzinom

Druga obitelj čipova H-mosta izlaže praktičnije sučelje: jedan digitalni ulaz smjera (često označen DIR ili PH za „phase”) uz jedan ulaz brzine (često PWM ili EN za „enable”). Pin smjera bira u kojem smjeru most pogoni; radni ciklus na pinu brzine postavlja prosječnu struju.

Ovo je lakše pokretati iz softvera nego shemu s dva PWM ulaza. Dva signala odgovaraju načinu na koji se problem obično formulira – „okreni se ovako, ovom brzinom” – pa kod može reći set_direction(forward); set_speed(50) umjesto grananja između in1 i in2. Potreban je samo jedan PWM kanal, što oslobađa drugi kanal istog mjerača vremena za nepovezan posao. A pin smjera može ostati parkiran između promjena bez ponovnog okidanja mosta, pa promjena brzine pri fiksnom smjeru dodiruje samo jedan registar.

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

Što „zaustavljanje” zapravo radi na ovoj vrsti upravljača – slobodni hod ili kočenje – ovisi o čipu. Kod upravljača s dva ulaza bira kod kamere (oba ulaza niska za slobodni hod, oba visoka za kočenje); kod upravljača sa smjerom i brzinom odlučuje čip, pa se isplati pogledati podatkovni list prije oslanjanja na bilo koje ponašanje.