Ovládání stejnosměrného motoru ESP32 pomocí MOSFET

24.09.2024 Arduino #esp32 #mosfet #motor

Cílem tohoto článku je ukázat, jak lez ovládat stejnosměrný motor pomocí desky ESP32, ale bez použití ovladače IC motoru.


Základní funkce stejnosměrného motoru

Následující obrázek ukazuje konstrukci stejnosměrného motoru.

Každý stejnosměrný motor se skládá ze dvou klíčových součástí, které jsou důležité pro funkčnost:

  1. Stator je stacionární část motoru, která zajišťuje rotující magnetické pole pro kotvu.
  2. Kotva je část stejnosměrného motoru, která se otáčí a kde jsou připojeny externí komponenty, jako je kolo.

Magnety ve statoru (póly) a cívka drátů (vinutí pole), kterým prochází proud, vytvářejí elektromagnetické pole. Vinutí izolovaného drátu na vnější straně kotvy (vinutí kotvy) je omotané kolem kotvy, aby se soustředilo magnetické pole statoru.

Vinutí kotvy je připojeno ke komutátoru, v podstatě otočnému elektrickému spínači, který dodává elektrický proud do vinutí. Elektrický proud nabíjí každou cívku kotvy a vytváří stálé rotující magnetické pole.

Pokud se cívky kotvy zapínají a vypínají postupně, rotující magnetické pole interaguje s magnetickým polem statoru a vytváří točivý moment, který způsobuje otáčení kotvy. Proto stejnosměrný motor přeměňuje elektrickou energii na mechanickou energii.

Zapojení motoru s MOSFET a ESP32

Následující obrázek ukazuje obvod, který používáme ke spuštění a ovládání stejnosměrného motoru bez jakéhokoli budiče IC motoru. Toto schéma zapojení poskytuje nejlepší přehled o všech součástkách a jejich vzájemném propojení s ESP32.

V následující tabulce vidíte všechny elektronické součástky, které se používají v tomto projektu.

Komponenta Součástka
Mikrokontrolér deska ESP32
Stejnosměrný motor DC 3V-6V DC hnací motor
Tranzistor nebo MOSFET MOSFET IRLZ44 NPN
Dioda 1N4001
Rezistory 220Ω, 47kΩ

Napájení stejnosměrného motoru zajišťuje mikrokontrolér ESP32. K ovládání stejnosměrného motoru používáme IRLZ44 NPN MOSFET jako nízkofrekvenční spínač.

Proč používat tranzistor a nespouštět stejnosměrný motor přímo z digitálních I/O pinů mikrokontroléru?

Můžeme si položit otázku, zda by bylo možné připojit stejnosměrný motor přímo k digitálnímu I/O pinu mikrokontroléru a ovládat motor přes digitální pin pro zapínání a vypínání motoru. Problém s tímto obvodem by byl v tom, že také malé stejnosměrné motory pravděpodobně odebírají více energie, než jsou schopny poskytnout digitální I/O piny Arduina, ESP8266 nebo ESP32. Stejnosměrný motor, který používáme v tomto příkladu, odebírá průměrně 100 mA. Pokud stejnosměrný motor odebírá více proudu, než je maximální proud digitálního I/O pinu, může dojít k poškození mikrokontroléru.

Následující tabulka ukazuje maximální proud digitálních vstupně/výstupních pinů nejpoužívanějších desek mikrokontrolérů, který je mnohem nižší než 100 mA, které potřebujeme k pohonu stejnosměrného motoru.

Mikrokontrolér Desky Max Current Digital I/O Pin
ATmega328P Arduino Nano, Arduino Uno, Arduino Pro Mini 40 mA
ATmega2560 Arduino Mega 20 mA
ESP8266 ESP-01, NodeMCU, WeMos D1 Mini 12 mA
ESP32 DevKitC, Adafruit HUZZAH32, Sparkfun ESP32 Thing Plus, FireBeetle ESP32 20 mA

Nyní víme, že digitální I/O piny nelze použít jako napájení stejnosměrného motoru. A co 5V kolík nebo 3,3V pin mikrokontroléru? Dobrá volba, protože tyto piny jsou připojeny k obecnému napájení desky mikrokontroléru, která používala připojení USB s maximálním proudem 250 mA. Pokud chcete podrobně vědět, zda je pin 5V nebo 3,3V připojen k regulátoru napětí nebo přímo k rozhraní USB, doporučuji eBook Microcontroller Datasheet. 5V pin stejně jako 3,3V pin jsou perfektním zdrojem napájení pro stejnosměrný motor, který spotřebuje méně než 200 mA (protože náš mikrokontrolér také potřebuje nějaké napájení). Na druhou stranu nemůžeme ovládat 5V nebo 3,3V pin pro zapnutí, vypnutí nebo změnu rychlosti stejnosměrného motoru.

Pro ovládání obvodu stejnosměrného motoru proto používáme tranzistor mezi 5V / 3,3V a zemí. Hradlo tranzistoru je připojeno k digitálnímu pinu mikrokontroléru přes napěťový dělič dvou rezistorů.

Stejnosměrný motor můžeme zapínat a vypínat přepnutím digitálního pinu HIGH a LOW. Pomocí pulzně šířkové modulace na digitálním kolíku můžeme také ovládat otáčky motoru, viz kapitola: Jak ovládat otáčky stejnosměrného motoru

Použití externího zdroje napájení pro stejnosměrný motor

Pokud chcete použít větší stejnosměrné motory, které odebírají více než 200mA jako 1A, nemůžete použít ani napájecí napětí mikrokontroléru. V tomto případě potřebujete externí zdroj napájení pro stejnosměrný motor, jako je laboratorní napájecí zdroj, baterie nebo nástěnný adaptér.

Mikrokontrolér můžete napájet přes regulátor napětí také z tohoto externího zdroje napájení. Pokud si nejste jisti, jaké možnosti má váš mikrokontrolér pro napájení, nebo zda nějaký interní regulátor napětí omezuje proud pro stejnosměrný motor, podívejte se na můj eBook s datovým listem mikrokontroléru , kde všechny tyto informace najdete.

Jak vybrat správný MOSFET pro ovládání stejnosměrného motoru?

Pro náš obvod volíme MOSFET IRLZ44. Rozhodnutí jaký MOSFET použít je založeno na mikrokontroléru a elektrických specifikacích stejnosměrného motoru. Následující kroky ukazují postup, jak najít správný tranzistor pro váš obvod:

  1. Prahové napětí brány (V_GS) je nižší než provozní napětí mikrokontroléru . IRLZ44 má prahové napětí gate-source mezi 1V a 2V. Naše Arduino s provozním napětím 5V a ESP32 a ESP8266 s provozním napětím 3,3V mají vyšší napětí než prahové napětí gate-source IRLZ44.
  2. Není překročeno průrazné napětí zdroje kolektoru . Protože používáme mikrokontrolér jako zdroj napájení stejnosměrného motoru, naše napětí zdroje kolektoru nepřekročí 5V. Průrazné napětí kolektoru-zdroje IRLZ44 je mnohem vyšší s 55V.
  3. Trvalý odtokový proud není překročen . Stejnosměrný motor, který používáme v tomto příkladu, odebírá v průměru 100 mA a absolutní maximální jmenovitý proud pro nepřetržitý odběrový proud IRLZ44 je 35 A.

Proto je IRLZ44 MOSFET dobrou volbou pro náš obvod.

Proč potřebujeme diodu paralelně ke stejnosměrnému motoru?

V první části tohoto článku jsme se dozvěděli, že stejnosměrný motor má uvnitř cívky, které vytvářejí magnetické pole. Když je stejnosměrný motor vypnutý, proud ve statoru je 0A a rotor se otáčí naprázdno v důsledku momentu setrvačnosti. Tato rotace způsobuje samoindukci v cívkách motoru a tím i napěťové špičky. Následující obrázek ukazuje chování napětí při vypínání.

Z obrázku vidíte, že napětí kolektoru – zdroje překmitne v důsledku vypnutí MOSFETu a indukčnosti motoru vrhajícího svůj proud zpět do kolektoru MOSFETu.

Dioda, nazývaná také flyback dioda, kterou nastavíme paralelně ke stejnosměrnému motoru, poskytuje bezpečnou cestu pro indukční proud tak, aby napětí kolektor-zdroj nestoupalo a potenciálně nepoškodilo obvod.

Proč potřebujeme rezistor v sérii k bráně tranzistoru a jak vypočítat jeho velikost?

Rezistor R1 slouží k omezení proudu pro mikrokontrolér, protože brána MOSFETu je malý kondenzátor, který se začne nabíjet, pokud je na bránu přivedeno napětí. Počáteční odběr proudu může být příliš vysoký pro digitální I/O pin mikrokontroléru, jak je znázorněno na následujícím obrázku.

Když proud překročí maximální proud mikrokontroléru, který jsme viděli v tabulce předchozí kapitoly, může dojít k poškození mikrokontroléru. K ochraně digitálního pinu a zploštění nabíjecí křivky hradla MOSFET proto používáme rezistor R1. Dokud nepotřebujeme vysokou spínací frekvenci nad 100 kHz, můžeme použít rezistor R1 220Ω.

Proč potřebujeme rezistor mezi hradlem tranzistoru a zemí?

Pokud je digitální I/O pin mikrokontroléru Arduino, ESP8266 nebo ESP32 nastaven na LOW, ale napájecí napětí stejnosměrného motoru na emitoru je stále aktivní, existuje možnost, že došlo k chybnému přepnutí tranzistoru. To se také může stát při startu programu, kdy digitální pin mikrokontroléru ještě není definován jako výstup. Rezistorem R2 nastavíme předdefinovaný stav v tomto případě přitáhneme bránu k zemi.

Velikost tohoto rezistoru R2 mezi hradlem a zemí vytváří dělič napětí s rezistorem R1. Výstupem děliče napětí je hradlové napětí MOSFETu. Cílem je, aby napětí hradla nebylo příliš sníženo odporem R2. Jinak by se mohlo stát, že nebude překročeno prahové napětí pro sepnutí MOSFETu.

 

Arduino: R2=10k Maximální napětí je 1,512V
Arduino: R2=22k Maximální napětí je 1,814V
Arduino: R2=47k Maximální napětí je 2,695V
Arduino bez R2
Maximální napětí je 4,767V
ESP8266: R2=10k
Maximální napětí je 3,23V  
ESP8266: R2=22k
Maximální napětí je 3,23V
ESP8266: R2=47k
Maximální napětí je 3,23V
ESP8266 bez R2
Maximální napětí je 3,287V

Z obrázků osciloskopu vidíte, že čím vyšší je odpor R2, tím vyšší je napětí hradla. Proto by měl být rezistor R2 mnohem větší než rezistor R1. Běžnou praxí jsou hodnoty mezi 47kΩ a 100kΩ. V našem obvodu používáme rezistor 47kΩ pro obvody Arduino, ESP8266 a ESP32.

Programový skript pro obvod stejnosměrného motoru

Programový skript, který řídí stejnosměrný motor bez jakéhokoli ovladače IC motoru, pouze s mikrokontrolérem Arduino, ESP8266 nebo ESP32 a MOSFET, je uveden v následující části. Pro ovládání stejnosměrného motoru stačí otočit hradlem MOSFETu HIGH tak, aby se stejnosměrný motor otáčel, nebo nastavit digitální pin mikrokontroléru LOW pro vypnutí stejnosměrného motoru.

int motorPin = 23; // pro mikrokontrolér ESP32

void  setup () {
   pinMode (motorPin, OUTPUT );
}

void  loop () {
   for ( int speed = 0 ; speed<= 1023 ; speed=speed+ 10 ) {
     analogWrite (motorPin, speed);
     zpoždění ( 100 );
    }
}

Na začátku skriptu Arduino definujeme digitální I/O pin, který spojuje mikrokontrolér s bránou MOSFET. Funkce nastavení zůstane prázdná a nepoužívá se. Ve funkci loop nastavíme digitální pin HIGH a LOW. Mezi každým stavem čekáme 2 sekundy.

Následující obrázek ukazuje napětí drain – source a gate – source.

Pokud napětí hradla – zdroje překročí prahové napětí MOSFET, napětí zdroje kolektoru se porouchá, protože se zapne stejnosměrný motor, což má za následek velký pokles napětí na stejnosměrném motoru.

Jak ovládat rychlost stejnosměrného motoru

Rychlost stejnosměrného motoru je úměrná průtoku proudu kolektorem. Podíváme-li se na charakteristiku tranzistoru, vidíme, že kolektorový proud můžeme řídit proudem zapojení báze.

Stejný princip platí také pro MOSFETy. Pro zvýšení nebo snížení hradlového proudu použijeme pulzně šířkovou modulaci (PWM) na připojeném digitálním I/O pinu mikrokontroléru.

Literatura

Control a DC Motor with Arduino, ESP8266 or ESP32 without IC. Online. Diyi0t. 4.52021. Dostupné z: https://diyi0t.com/control-dc-motor-without-ic-motor-driver/. [cit. 2024-09-24].