Wanneer je een toepassing met een microcontroller bouwt, zul je op een bepaald moment iets willen besturen. Dit kan een LED zijn dat een minimale stroom vraagt, of een gelijkstroommotor die veel meer stroom nodig heeft. De meeste beginners leren al snel dat apparaten, zoals een Arduino of Raspberry Pi, zware belastingen niet rechtstreeks kunnen aansturen. In zulke gevallen is een 'driver' nodig, een schakeling die het stuursignaal van de microcontroller kan aannemen maar genoeg vermogen heeft om de gewenste belasting aan te drijven. MOSFET's zijn in veel gevallen perfect, ze accepteren een eenvoudige spanning aan hun ingang (gate) waarmee een grotere stroom kan worden geregeld via hun drain-source aansluitingen. Er zijn echter momenten waarop de MOSFET zelf ook een driver nodig heeft. Laten we eerst de rol van MOSFET's als schakelaars bekijken voordat we onderzoeken hoe MOSFET-stuurprogramma's werken.
 
Met een MOSFET kunnen boards, zoals een Arduino, grote belastingen aansturen, zoals een gelijkstroommotor.

Low-side n-kanaal MOSFET's als schakelaar

MOSFET's, met name enhancement-mode MOSFET's, zijn er in twee soorten: n-kanaal en p-kanaal. N-kanaal MOSFET's hebben een hogere spanning op hun gate nodig dan de spanning op de source om aan te schakelen. De spanning waarbij dit gebeurt is de drempelspanning Vth. Pak een datasheet van een n-kanaals MOSFET erbij en je vindt deze waarde snel. De Toshiba SSM3K56FS bijvoorbeeld, een kleine en snelle schakel MOSFET, heeft een Vth tussen 0,4 V en 1,0 V bij een drain-source spanning (VDS) van 3,0 V en een drainstroom (ID) van 1 mA.

Dergelijke MOSFET's kunnen worden gebruikt als low-side schakelaars, wat betekent dat ze tussen de belasting en de circuitaarde worden geplaatst in een eenvoudige laagspannings-gelijkstroomtoepassing. Zo kunnen we een 5 V Arduino uitgangspen gebruiken die verbonden is met de gate van een SSM3K56FS, de source verbinden met de massa en een motor bevestigen tussen een 15 V voeding en de drain van de MOSFET. Een weerstand (1 MΩ) tussen de gate en de massa zorgt ervoor dat de MOSFET uit blijft als het stuursignaal van de Arduino wegvalt.

Om dit te demonstreren is het circuit gesimuleerd in LTspice. V2 emuleert de 5 V uitgang van een Arduino I/O-pin, terwijl R2 wordt gebruikt als belasting in plaats van een motor (we zullen het verschil tussen een resistieve en inductieve belasting buiten beschouwing laten). V1 is de 15 V voeding.
 
Een MOSFET gebruiken als low-side schakelaar - een LTspice simulatie.

De signalen laten zien dat de stroom door de MOSFET ongeveer 720 mA is wanneer 5 V op de gate wordt gezet, onder het toegestane maximum van 800 mA.
 
Met een Arduino die 5 V aan de MOSFET-gate levert, wordt de schakelaar ingeschakeld, en levert stroom aan de belasting.

Er is nog een punt om rekening mee te houden bij het lezen van het datasheet. Als we weer naar de SSM3K56FS kijken, zien we dat de waarde van de on-resistance, RDS(ON), afhankelijk is van de VGS. Bijvoorbeeld, bij een VGS van 1,5 V is RDS(ON) 840 mΩ, terwijl het bij 4,5 V slechts 235 mΩ is. Weliswaar is dit een klein verschil. Bij het aansturen van een motor is het onwaarschijnlijk dat je veel verschil merkt tussen een Arduino die de gate aanstuurt met 5 V en een Raspberry Pi die hem aanstuurt met 3,3 V.

Echter, als je de MOSFET hebt gekozen op basis van zijn superieure lage on-resistance, is het belangrijk om te onthouden dat dit alleen wordt bereikt bij de gegeven hogere gate voltage. Volgens het datasheet is de maximaal toegestane gate-source spanning, GGSS, ±8 V, dus er is voldoende marge aanwezig. Dit is belangrijk omdat er vermogen verloren gaat in de MOSFET, en de resulterende warmte die de MOSFET moet afvoeren zal hoger zijn als RDS(ON) groter is.

Er is ook een klein nadeel bij low-side schakelen. Omdat de inschakelweerstand van de MOSFET aan de low-side tussen de belasting en massa zit, zweeft de belasting (en de drainpen van de MOSFET) iets boven massa. In ons voorbeeld staat de drain op 0,126 V.
 
Vanwege de low-side MOSFET is de belasting niet rechtstreeks aangesloten op de massa van de toepassing.
Om de analyse af te ronden, moeten we opmerken dat het gedissipeerde vermogen in de MOSFET ongeveer 90 mW is (715 mA bij 0,126 V). Dit is ruim binnen de 150 mW die in het datasheet wordt genoemd. Voor een motor is deze verhoging van de massa van weinig belang. Als je echter de stroom door de motor wilt meten met behulp van een kleine weerstand, dan heb je een differentiële meting nodig in plaats van meten ten opzichte van massa.

Als de belasting een apparaat is zoals een Arduino, is er een extra probleem omdat de massa van de Arduino niet langer hetzelfde is als de massa van de rest van de toepassing. In feite zal deze variëren als de belasting verandert. Als gevolg daarvan is er een risico op storingen doordat de massa van de Arduino en de massa van andere circuits verschillend zijn.

Bovendien, omdat de belasting permanent is aangesloten op de voeding, kunnen elektronen hun weg vinden via andere paden, zoals I/O-pinnen, door de microcontroller naar massa, zelfs wanneer de MOSFET is uitgeschakeld. De Arduino kan dus nog steeds genoeg stroom hebben om te werken. In het ergste geval kan hij in een ongedefinieerde brown-out toestand allerlei vreemde acties uitvoeren.

In zulke gevallen moet een high-side schakeling worden overwogen.

High-side p-kanaal MOSFET's als schakelaar

Als we de n-kanaals MOSFET vervangen door een p-kanaals exemplaar, kunnen we de belasting tussen de MOSFET en massa plaatsen. De source van de MOSFET is verbonden met de voeding van de belasting en de belasting is verbonden met de drain. De complementaire variant van de eerder genoemde n-kanaals MOSFET is de Toshiba SSM3J56MFV. We stuiten echter meteen op een probleem.
 
Een p-kanaals MOSFET kan worden gebruikt aan de high-side.
Dit vereist echter dat de gate van de voedingsspanning naar beneden moet worden getrokken,
iets dat de grenzen van een de limieten van een Arduino I/O-pin.

Als we naar het datasheet kijken, zien we dat Vth is opgegeven van -0,3 V tot -1,0 V ( bij VDS -3,0 V en ID -1 mA). Dit betekent dat de gate ongeveer 1,0 V lager moet zijn dan de source om in te schakelen. Als we bij ons vorige voorbeeld blijven en een 15 V voeding voor de motor gebruiken, moet de gate 14 V bereiken om de MOSFET aan te schakelen. Dit is natuurlijk een probleem voor een Arduino of Raspberry Pi met hun 5 V en 3,3 V I/O-pinnen, wat betekent dat er een extra MOSFET of transistor nodig is om de gate naar massa te trekken.

Er is nog een ander probleem. Volgens de verstrekte gegevens is de on-resistance bij deze gate-spanning ongeveer 4000 mΩ. Om de on-resistance naar het laagste niveau van 390 mΩ te krijgen, moet de gatespanning -4,5 V zijn. Toch is dit nog steeds 155 mΩ meer dan de complementaire n-kanaals MOSFET die we eerder zagen en het benadrukt een ander probleem met p-kanaals MOSFET's - ze hebben een hogere (in vergelijking) RDS(ON).

Ervan uitgaande dat de Arduino de gatespanning met -5 V kan verschuiven, zou de p-kanaals high-side schakelaar als volgt reageren:
 
Door de gate naar 5V onder de voedingsspanning te trekken, wordt de schakelaar ingeschakeld en wordt de belasting ingeschakeld.
De vraag is hoe we dit kunnen verbinden met een Arduino of Raspberry Pi.

Als we de grafiek in detail bekijken, zien we dat de sourcespanning 14,79 V bereikt als deze aan is, ongeveer 0,21 V onder de 15 V voeding. Nogmaals, met een stroom van ongeveer 715 mA betekent dit dat de MOSFET 150 mW dissipeert, precies op de limiet van het onderdeel.

Hoewel p-kanaals MOSFET's dus gemakkelijker te maken zijn, bieden n-kanaals MOSFET's een lagere on-resistance bij dezelfde afmetingen. Het is duidelijk dat we, indien mogelijk, beter een high-side n-kanaals versie moeten gebruiken.

Maar, zoals we hebben gezien, om een n-kanaals MOSFET aan te schakelen, moeten we de gatespanning boven die van de source krijgen. Als we de n-kanaals MOSFET in de high side plaatsen, hebben de source en drain bijna dezelfde spanning als hij wordt aangeschakeld, dus de gate moet tot enkele volts boven het niveau van de voeding van de toepassing worden gebracht.

Gebruik van drivers voor high-side n-kanaals MOSFET's als schakelaars

Dit is het moment waar MOSFET-drivers om de hoek komen kijken. Deze slimme toepassing accepteerd een stuursignaal met een lage spanning op de ingang en zet dit om in de spanning die nodig is om de gate boven het niveau van de sourcepin van de MOSFET te krijgen. De hogere spanning wordt gegenereerd met behulp van een 'bootstrap'-circuit dat een chargepump gebruikt om de gatespanning hoger te krijgen dan de source-spanning die in de toepassing wordt gebruikt. Hoewel dit extra kosten en complexiteit toevoegt aan een schakeling, profiteren ontwerpers van het aanzienlijk uitgebreidere aanbod aan n-kanaal vermogens-MOSFET's met lage on-resistance en de mogelijkheid van een hoge stroomsterkte.

Een uitstekend voorbeeld van een MOSFET driver voor deze toepassing is de LTC7004 van Analog Devices (voorheen Linear Technology). Dit tienpolige component, waarvan slechts negen pinnen worden gebruikt, heeft alleen een condensator nodig naast de gekozen MOSFET om als schakelaar te functioneren. De ingangspen, INP, accepteert CMOS niveau ingangssignalen tot 15 V. Een voeding tussen 3,5 V en 15 V is ook nodig op de VCC pen. Met een condensator van 0,1µF tussen de bootstrap-pen BST en de bovenste (high-side) source-pen TS kan de LTC7004 een MOSFET-source spanning tot 60 V volgen. Het onderdeel genereert een gatespanning van 12 V boven de source spanning. Het bevat ook overspannings- en onderspanningsbeveiligingen om een correcte werking te garanderen.
 
Met de LTC7004 kan een microcontroller een n-kanaals MOSFET besturen die gebruikt wordt als
high-side schakelaar door de stuurspanning te genereren die nodig is voor de gate.
Als je de 5 V I/O-pin van een Arduino gebruikt om het circuit te besturen, kun je zien hoe de MOSFET-driver de gate snel van 0 V naar 24 V stuurt, 12 V boven de voeding van de belasting.
 
Een 5V I/O-signaal van een Arduino leidt ertoe dat de MOSFET-gate
naar 12 V boven de voedingsspanning van de belasting wordt gestuurd.
Dit zorgt voor een snelle en nette inschakeling van de belasting.
Om de verliezen in de MOSFET tijdens het schakelen te minimaliseren, is het meestal beter om zo snel mogelijk te schakelen. Dit is gewoonlijk minder een probleem in toepassingen die slechts af en toe worden in- en uitgeschakeld, maar veel belangrijker in toepassingen die op hoge snelheid schakelen, zoals vermogensomzetters (bijvoorbeeld een buck converter). De LTC7004 biedt een minimale stijg-/daaltijd van 13 ns en maxima van 90 ns (stijgtijd) en 40 ns (daaltijd).

Een ander aandachtspunt is de stroom die vereist is door de gate van MOSFET's die ontworpen zijn voor vermogenstoepassingen. De capaciteit aan de gate (bekend als Ciss) voor de Infineon IPB039N10N3 die in dit voorbeeld wordt gebruikt, kan meer dan 8400 pF bedragen. Als we inzoomen op het inschakelpunt, zien we dat de gate-stroom een piek bereikt van ongeveer 3,2 A. Dit is niet ongebruikelijk voor vermogens-MOSFET's die snel schakelen en nog een reden waarom een microcontroller ongeschikt is om ze te schakelen, zelfs in low-side toepassingen.
 
Het is niet ongebruikelijk dat power MOSFET's meerdere ampères nodig hebben op de gate tijdens het schakelen op hoge snelheid.
Het verdient de voorkeur om de MOSFET zo hard en snel mogelijk in te schakelen om snel van de uit-toestand naar de aan-toestand met de laagste on-resistance te gaan, maar in sommige toepassingen kan dit ook problemen veroorzaken. Als de MOSFET bijvoorbeeld een grote capacitieve belasting voedt, kan de inschakelstroom aanzienlijk zijn. MOSFET-drivers zoals de LTC7400 bieden twee pinnen om de gate te besturen, een voor inschakeling (TGUP) en een voor uitschakeling (TGDN). Hierdoor kunnen de inschakel- en uitschakelsnelheden afzonderlijk worden gedefinieerd. Door een klein RC-netwerk (100 kΩ/47 nF) toe te voegen aan de TGUP-uitgang kan de inschakelsnelheid worden vertraagd en de inschakelstroom worden beperkt. Een extra weerstand van 10 Ω helpt eventuele oscillaties te beperken. Als de uitschakelsnelheid moet worden aangepast, kan een weerstand worden toegevoegd aan het TGDN-pad.
 
Dankzij aparte inschakel- en uitschakelpinnen kan de schakelsnelheid van de
opgaande en neergaande flanken ingesteld worden.
De piekstroom in de capacitieve belasting is nu gereduceerd tot ongeveer 180 mA en de spanning op de belasting loopt op met ongeveer 2 V/ms.
 
De spanning op de capacitieve belasting stijgt nu met ongeveer 2 V/ms,
waardoor de inschakelstroom wordt beperkt tot ongeveer 180 mA.

MOSFET-drivers vereenvoudigen de constructie van high-side schakelaars

Power MOSFET's zijn ideaal voor het aansturen van grote belastingen, zoals motoren, vanaf microcontroller-gebaseerde platforms zoals Arduino en Raspberry Pi. Vanwege hun betere algemene prestaties en lagere RDS(ON) is de keuze aan n-kanaals MOSFET's echter veel uitgebreider dan het aanbod van p-kanaals MOSFET's.

Als je de schakelaar aan de high-side van je stuurcircuit wilt plaatsen, moet de spanning op de n-kanaals MOSFET-gate hoger zijn dan de spanning aan de source. Bovendien hebben power MOSFET's een aanzienlijke stroom aan de gate nodig om snel van uit naar aan te schakelen met de laagste on-resistance, wat nodig is om de vermogensdissipatie in de MOSFET te minimaliseren. MOSFET-drivers, zoals de LTC7004, lossen dit probleem op door de gatespanning en -stroom te genereren die nodig zijn om een nette, snelle inschakeling te leveren in reactie op het stuursignaal dat wordt geleverd door de door u gekozen microcontroller-ontwikkelprintplaat.

Om zelf te experimenteren: LTspice code


NMOS switch example:
V1 N001 0 15V
R2 N001 drain 20.8R
XU1 drain gate 0 NMOS_SSM3K56FS
V2 gate 0 PULSE(0 5 100u 10n 10n 250u 500u 1)
R1 gate 0 1Meg
.tran 500us
.meas TRAN Vd-on MIN V(drain)
.lib Contrib/Toshiba/nmos/SSM3K56FS.lib
.backanno
.end

PMOS switch example:
V1 N001 0 15V
V2 N001 gate PULSE(0 5 100u 10n 10n 250u 500u 1)
R2 drain 0 20.8R
XU1 drain gate N001 PMOS_SSM3J56MFV
R1 N001 gate 1Meg
.tran 500us
.meas TRAN Vd-on MAX V(drain)
.lib Contrib/Toshiba/pmos/SSM3J56MFV.lib
.backanno
.end

LTC7004 basic switch example:
V1 N001 0 12
V2 inp 0 PULSE(0 5 100m 10n 10n 200m 1000m)
M1 supply gate source source IPB039N10N3
C1 source 0 100u Rser=7m
V3 supply 0 12V
C2 N002 source .1u
XU1 N001 0 0 inp 0 gate gate source N002 LTC7004
R1 source 0 2.5R
.model NMOS NMOS
.model PMOS PMOS
.lib C:\Users\<USER>\Documents\LTspiceXVII\lib\cmp\standard.mos
.tran 500m startup
.lib LTC7004.sub
.backanno
.end

LTC7004 rise-time controlled example:
V1 N002 0 12
V2 inp 0 PULSE(0 5 100m 10n 10n 200m 1000m)
M1 supply gate source source IPB039N10N3
C1 source 0 100u Rser=7m
V3 supply 0 12V
C2 N001 source .1u
XU1 N002 0 0 inp 0 gate N003 source N001 LTC7004
R1 source 0 2.5R
R2 gate N004 10R
C3 N004 0 47n
R3 gate N003 100k
.model NMOS NMOS
.model PMOS PMOS
.lib C:\Users\<USER>\Documents\LTspiceXVII\lib\cmp\standard.mos
.tran 500m startup
.lib LTC7004.sub
.backanno
.end


Vertaling: Hans Adams