Raspberry Pi - MOSFET-module

Deze tutorial legt uit hoe u met een Raspberry Pi een 12V DC-belasting, zoals een ledstrip of een ventilator, aanstuurt met een MOSFET-module. Een GPIO-pin van de Raspberry Pi werkt op 3,3V en geeft maar een heel kleine stroom. De MOSFET-module neemt dat zwakke signaal en gebruikt het om een veel grotere belasting van een aparte voeding te regelen. We leren hier:

Wij raden aan:

Hardware Benodigd

1×Raspberry Pi 5
1×MOSFET Module (AOD4184, LR7843 or FR120N)
1×12V LED-Strip
1×(Alternatief) 12V DC Koelventilator
1×12V Voeding
1×DC-Stroomaansluiting
1×Verbindingsdraden
1×(Aanbevolen) Schroefklem Block Shield voor Raspberry Pi
1×(Aanbevolen) Raspberry Pi Prototyping Basisplaat & Breadboard Kit

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over de MOSFET-module

Zie de MOSFET-module als een elektronische schakelaar in de negatieve draad van uw DC-belasting. De Raspberry Pi geeft aan wanneer de module moet geleiden, en de module laat de 12V stroom dan door de belasting lopen of blokkeert die. Er beweegt niets in de module, dus er is geen klik en er slijt niets. De module reageert ook snel genoeg om een PWM-signaal te volgen. Met PWM kan de Raspberry Pi een ledstrip zwakker of feller laten branden, of een ventilator of motor langzamer of sneller laten draaien.

Deze pagina behandelt drie borden: AOD4184 (u ziet het soms ook als D4184), LR7843 en FR120N. De printplaat, de pinnen, de bedrading en het Python-script zijn voor alle drie gelijk. Alleen de MOSFET-chip op het bord is anders.

AOD4184 LR7843 FR120N
MOSFET-chip AOD4184A (N-kanaal) IRLR7843 (N-kanaal) IRFR120N (N-kanaal)
Max. belastingspanning (MOSFET-waarde) 40V DC 30V DC 100V DC
Max. stroom (MOSFET-waarde) 50A 161A 9,4A
Aan-weerstand RDS(on) ongeveer 7 mΩ ongeveer 3,3 mΩ ongeveer 210 mΩ
Praktische stroom zonder koellichaam ongeveer 10–15A ongeveer 15A ongeveer 2A
Stuursignaal 3,3V / 5V logica, actief HOOG 3,3V / 5V logica, actief HOOG 3,3V / 5V logica, actief HOOG
Isolatie PC817 optocoupler PC817 optocoupler PC817 optocoupler
PWM ja, houd het op ongeveer 1 kHz of lager ja, houd het op ongeveer 1 kHz of lager ja, houd het op ongeveer 1 kHz of lager
Type belasting alleen DC alleen DC alleen DC

Hoe de module van binnen werkt

Het GPIO-signaal bereikt de MOSFET nooit direct. Het gaat door deze onderdelen, in deze volgorde: de PWM-pin van de module, een kleine weerstand, de LED in een PC817 optocoupler, dan (als licht) de fototransistor in dezelfde PC817, en tenslotte de gate van een N-kanaal MOSFET. De MOSFET zit tussen de LOAD-klem en de −klem, dus hij schakelt de negatieve draad van de belasting (een low-side schakelaar). De belasting zelf zit tussen + en LOAD.

De logica is actief HOOG. Hieronder ziet u wat er in de module gebeurt bij elk signaal dat GPIO16 kan sturen.

Als GPIO16 3,3V uitgeeft (HIGH)

Een GPIO-pin van de Raspberry Pi geeft maar 3,3V, nooit 5V. Dat is genoeg voor de module:

  • De LED van de optocoupler heeft maar een paar milliampère nodig, dus de 3,3V-pin kan hem direct aansturen. Er loopt een kleine stroom en de LED licht op in de chip (u ziet dit niet).
  • Het licht zet de fototransistor aan. De MOSFET-gate krijgt nu ongeveer de helft van de belastingsvoeding, dat is ongeveer 6V bij een 12V adapter.
  • De MOSFET gaat volledig AAN en wordt een gesloten schakelaar. De weerstand is heel laag: enkele mΩ voor de AOD4184 en de LR7843, en ongeveer 0,2Ω voor de FR120N.
  • De stroom moet deze lus volgen: adapter + → +klem → belasting → LOAD-klem → MOSFET → −klem → adapter −.
  • De belasting krijgt bijna de volledige voedingsspanning (ongeveer 12V) en draait op vol vermogen.

In Python is dit GPIO.output(MOSFET_PIN, GPIO.HIGH), of een duty cycle (inschakelduur) van 100% met pwm.ChangeDutyCycle(100).

Als GPIO16 0V uitgeeft (LOW)

  • De LED van de optocoupler krijgt geen stroom en licht dus niet op.
  • Zonder licht blijft de fototransistor uit. Een weerstand op de gate trekt de MOSFET-gate naar 0V.
  • De MOSFET gaat UIT en wordt een open schakelaar tussen LOAD en −.
  • De negatieve draad van de belasting is nu losgekoppeld van de massa. Er kan geen stroom lopen, de belasting krijgt 0V en is UIT.

In Python is dit GPIO.output(MOSFET_PIN, GPIO.LOW), of pwm.ChangeDutyCycle(0).

Als GPIO16 een PWM-signaal uitgeeft

Het script in deze tutorial maakt de PWM met pwm = GPIO.PWM(MOSFET_PIN, 500). Dit betekent dat GPIO16 500 keer per seconde tussen 0V en 3,3V springt. Dit volgt daarop:

  • De MOSFET volgt elke sprong. Hij is AAN tijdens elk HOOG deel en UIT tijdens elk LAAG deel, dus de belasting krijgt pulsen van 12V.
  • De duty cycle (inschakelduur) is het deel van elke periode waarin het signaal HIGH is. U stelt dit in met pwm.ChangeDutyCycle(), van 0 tot 100.
  • De gemiddelde spanning, en het gemiddelde vermogen, is de duty cycle maal de volle waarde.
pwm.ChangeDutyCycle() Signaal Gemiddelde op een 12V belasting
0 altijd LOW 0V, de belasting is UIT
10 1/10 van de tijd HIGH ongeveer 1,2V, ongeveer 10% vermogen
50 de helft van de tijd HIGH ongeveer 6V, ongeveer half vermogen
90 9/10 van de tijd HIGH ongeveer 10,8V, ongeveer 90% vermogen
100 altijd HIGH 12V, vol vermogen

Het script gaat van 10% naar 100% in stappen van 10%, zodat u elk niveau kunt zien. Een ledstrip ziet er bij een lage duty cycle zwakker uit, omdat hij te snel knippert om door het oog te worden gezien. Een ventilator of motor draait langzamer, omdat de draaiende massa de pulsen gladstrijkt.

U moet de PWM-frequentie laag houden, rond 500 Hz tot 1 kHz, omdat de PC817 een trage component is. Als de frequentie te hoog is, kan de MOSFET niet volledig schakelen. De belasting krijgt dan geen schone pulsen en de MOSFET wordt heet.

Andere gevolgen van dit ontwerp

  • De Raspberry Pi-kant en de 12V-kant zijn elektrisch gescheiden. De signaalmassa en de belastingsmassa zijn op de module niet met elkaar verbonden.
  • De gate-spanning komt van de belastingsvoeding, niet van de Raspberry Pi. Daarom moet de belastingsvoeding minstens ongeveer 6V zijn. Als de belasting meer dan een paar ampère trekt, gebruik dan 9V of meer. Een 5V belastingsvoeding werkt niet goed.

De pinout van de MOSFET-module

AOD4184, LR7843 en FR120N MOSFET-module pinout

De stuurkant is een header met 2 pinnen (2,54mm steek), dus hij past op een breadboard:

  • PWM: Deze pin ontvangt het stuursignaal van een GPIO-pin van de Raspberry Pi
  • GND: Deze pin moet worden verbonden met de massa (0V) van de Raspberry Pi

De vermogenskant heeft drie schroefklemmen:

  • +: Deze klem moet worden verbonden met de plus van de voeding van de belasting (bijvoorbeeld 12V) en met de positieve draad van de belasting. Beide draden delen deze ene klem
  • LOAD: Deze klem gaat naar de negatieve draad van de belasting. Dit is de geschakelde kant, en hij leidt naar de drain van de MOSFET
  • −: Deze klem moet worden verbonden met de min (massa) van de voeding van de belasting

※ Notiz:

De volgorde van de pinnen op een module kan verschillen tussen fabrikanten, en zelfs tussen productiebatches. Gebruik daarom altijd de labels die op de module staan. Kijk goed!

Bedradingsschema

Het eerste voorbeeld hieronder gebruikt een 12V ledstrip. Andere apparaten, zoals een ventilator, een DC-motor, een pomp of een solenoïde, worden verderop getoond.

Raspberry Pi bedradingsschema met AOD4184, LR7843 of FR120N MOSFET-module

Deze afbeelding is gemaakt met Fritzing. Klik om de afbeelding te vergroten.

  • PWM-pin van de MOSFET-module naar GPIO16 (pin 36) van de Raspberry Pi
  • GND-pin van de MOSFET-module naar GND van de Raspberry Pi (pin 34, direct naast pin 36, of een andere GND-pin)
  • Plus van de 12V voedingsadapter (via de DC-voedingsconnector) naar + van de MOSFET-module
  • Min van de 12V voedingsadapter (via de DC-voedingsconnector) naar − van de MOSFET-module
  • Positieve draad van de ledstrip naar + van de MOSFET-module (dezelfde klem als de plus van de adapter)
  • Negatieve draad van de ledstrip naar LOAD van de MOSFET-module

WARNING

De 12V voeding moet aan de kant van de schroefklemmen van de module blijven. Verbind hem nooit met een pin van de Raspberry Pi header. De GPIO-pinnen van de Raspberry Pi accepteren alleen 3,3V, en 12V vernietigt het bord.

Andere DC-apparaten aansluiten op de MOSFET-module

De Raspberry Pi-kant is voor elk apparaat gelijk: GPIO16 (pin 36) gaat naar PWM, en een GND-pin gaat naar GND. Wat verandert is de kant van de schroefklemmen. De lijsten onder elke afbeelding gaan alleen over die kant.

Controleer deze punten voordat u een nieuw apparaat aansluit:

  • De spanning van de adapter moet gelijk zijn aan de spanning van het apparaat. Gebruik voor een 12V apparaat een 12V adapter. De voeding moet ook 6V of meer zijn, zoals eerder uitgelegd.
  • De module moet de stroom van het apparaat aankunnen. De FR120N is alleen voor kleine apparaten, ongeveer 2A zonder koellichaam. De AOD4184 en de LR7843 zijn voor grotere.
  • Een apparaat met een spoel (een motor, een ventilator, een pomp of een solenoïde) is een inductieve belasting. De module heeft geen vrijloopdiode (flyback-diode) aan boord, dus u moet er zelf een toevoegen (1N5819 of 1N4007). Plaats hem over het apparaat. De kathode (de kant met de streep) gaat op de positieve draad van het apparaat, en de anode gaat op de negatieve draad van het apparaat.

U kunt hetzelfde Python-script voor al deze apparaten gebruiken. De enige uitzondering is een solenoïde: bestuur die alleen volledig AAN en volledig UIT (100% of 0%), en laat het fade-deel weg.

Raspberry Pi, MOSFET-module en 12V DC-motor

Raspberry Pi MOSFET-module 12V DC-motor bedrading

Deze afbeelding is gemaakt met Fritzing. Klik om de afbeelding te vergroten.

  • Plus van de 12V adapter naar + van de MOSFET-module
  • Min van de 12V adapter naar − van de MOSFET-module
  • Positieve draad van de motor naar + van de MOSFET-module
  • Negatieve draad van de motor naar LOAD van de MOSFET-module
  • Vrijloopdiode (flyback-diode) over de motor: kathode (streep) naar plus van de motor, anode naar min van de motor

De PWM duty cycle (inschakelduur) bepaalt hoe snel de motor draait. De module kan hem maar in een richting aansturen. Als u hem moet omkeren, gebruik dan een motordriver zoals de L298N, zoals getoond in de Raspberry Pi - DC Motor tutorial.

Raspberry Pi, MOSFET-module en 12V waterpomp

MOSFET-module bedrading voor een 12V waterpomp

Deze afbeelding is gemaakt met Fritzing. Klik om de afbeelding te vergroten.

  • Plus van de 12V adapter naar + van de MOSFET-module
  • Min van de 12V adapter naar − van de MOSFET-module
  • Positieve draad van de pomp naar + van de MOSFET-module
  • Negatieve draad van de pomp naar LOAD van de MOSFET-module
  • Vrijloopdiode (flyback-diode) over de pomp, op dezelfde manier geplaatst als bij de motor

De duty cycle (inschakelduur) bepaalt de waterstroom. Zorg dat er altijd water in de pomp zit. Droog draaien kan de pomp beschadigen.

Raspberry Pi, MOSFET-module en 12V ledstrip

MOSFET-module bedrading voor een 12V ledstrip met een kleur

Deze afbeelding is gemaakt met Fritzing. Klik om de afbeelding te vergroten.

  • Plus van de 12V adapter naar + van de MOSFET-module
  • Min van de 12V adapter naar − van de MOSFET-module
  • Positieve draad van de ledstrip (vaak gemarkeerd met 12V) naar + van de MOSFET-module
  • Negatieve draad van de ledstrip naar LOAD van de MOSFET-module
  • Geen vrijloopdiode (flyback-diode), omdat een ledstrip geen spoel heeft

De duty cycle (inschakelduur) bepaalt de helderheid. Een lange strip trekt meer stroom, dus lees de stroom van uw strip voordat u de module kiest. Deze bedrading is voor een strip met een kleur. RGB- en adresseerbare strips werken op een andere manier.

Raspberry Pi, MOSFET-module en 12V ventilator

MOSFET-module bedrading voor een 12V ventilator

Deze afbeelding is gemaakt met Fritzing. Klik om de afbeelding te vergroten.

  • Plus van de 12V adapter naar + van de MOSFET-module
  • Min van de 12V adapter naar − van de MOSFET-module
  • Rode draad van de ventilator naar + van de MOSFET-module
  • Zwarte draad van de ventilator naar LOAD van de MOSFET-module
  • Gele draad van de ventilator (snelheidssignaal), als uw ventilator er een heeft: laat hem onverbonden
  • Vrijloopdiode (flyback-diode) over de ventilator, op dezelfde manier als hierboven (het is goedkoop en veilig om toe te voegen)

De duty cycle (inschakelduur) bepaalt de snelheid van de ventilator. Sommige ventilatoren starten niet bij een heel lage duty cycle, dus begin bij ongeveer 30% of hoger.

Raspberry Pi, MOSFET-module en 12V magneetventiel

MOSFET-module bedrading voor een normaal gesloten 12V magneetventiel

Deze afbeelding is gemaakt met Fritzing. Klik om de afbeelding te vergroten.

  • Plus van de 12V adapter naar + van de MOSFET-module
  • Min van de 12V adapter naar − van de MOSFET-module
  • Positieve draad van het ventiel naar + van de MOSFET-module
  • Negatieve draad van het ventiel naar LOAD van de MOSFET-module
  • Vrijloopdiode (flyback-diode) over de spoel van het ventiel

Dit is een normaal gesloten ventiel. Als de module volledig AAN staat, gaat het ventiel open. Als de module UIT staat, sluit het ventiel. Gebruik hier geen PWM voor, alleen AAN en UIT.

Raspberry Pi, MOSFET-module en 12V solenoïdeslot

MOSFET-module bedrading voor een 12V solenoïdeslot

Deze afbeelding is gemaakt met Fritzing. Klik om de afbeelding te vergroten.

Om uw bekabelingsopstelling te vereenvoudigen en te organiseren, raden we het gebruik van een Schroevenklemaansluiting-shield voor Raspberry Pi aan. Deze shield zorgt voor veiligere en beter beheerbare verbindingen, zoals hieronder weergegeven:

Raspberry Pi Schroevenklemaansluiting-Shield
  • Plus van de 12V adapter naar + van de MOSFET-module
  • Min van de 12V adapter naar − van de MOSFET-module
  • Positieve draad van het slot naar + van de MOSFET-module
  • Negatieve draad van het slot naar LOAD van de MOSFET-module
  • Vrijloopdiode (flyback-diode) over de spoel van het slot

Schakel het slot volledig AAN of volledig UIT, nooit met een PWM-fade. De spoel wordt warm als hij lang AAN blijft, dus zet hem maar heel kort AAN om te ontgrendelen en zet hem daarna weer UIT.

Programmeren voor de Raspberry Pi om een DC-belasting te sturen met de MOSFET-module

Er is geen extra library nodig. Het script gebruikt de PWM-functie van RPi.GPIO op GPIO16 en herhaalt deze cyclus steeds opnieuw:

  • De belasting staat 2 seconden volledig AAN en daarna 2 seconden volledig UIT.
  • Het vermogen stijgt van 10% naar 100% in stappen van 10%, met 0,5 seconde per stap.
  • Het vermogen daalt op dezelfde manier van 90% terug naar 0%.
  • Het script wacht 1 seconde en begint dan opnieuw.

Als u op Ctrl + C drukt, stopt het script de PWM en geeft het de GPIO-pin vrij.

Snelle Stappen

  1. Zorg dat u Raspbian of een ander compatibel besturingssysteem voor Raspberry Pi op uw Pi hebt geïnstalleerd.
  2. Zorg dat uw Raspberry Pi met hetzelfde lokale netwerk is verbonden als uw pc.
  3. Zorg dat uw Raspberry Pi met internet is verbonden als u libraries moet installeren.
  4. Als u de Raspberry Pi voor het eerst gebruikt, zie hoe u de Raspberry Pi instelt
  5. Verbind uw pc via SSH met de Raspberry Pi met de ingebouwde SSH-client op Linux en macOS of PuTTY op Windows.
  6. Controleer of de RPi.GPIO library is geïnstalleerd. Als die ontbreekt, installeer hem met deze commando's:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  1. Sluit de Raspberry Pi, de MOSFET-module, de 12V voedingsadapter en de ledstrip aan zoals in het bedradingsschema hierboven. Laat de 12V adapter nog niet in het stopcontact zitten.
  2. Maak een Python-scriptbestand MosfetModule.py en voeg de volgende code toe:
# Deze Raspberry Pi code is ontwikkeld door newbiely.nl # Deze Raspberry Pi code wordt zonder enige beperking aan het publiek beschikbaar gesteld. # Voor volledige instructies en schema's, bezoek: # https://newbiely.nl/tutorials/raspberry-pi/raspberry-pi-mosfet-module import RPi.GPIO as GPIO import time MOSFET_PIN = 16 # GPIO16 (pin 36) connected to the PWM pin of the MOSFET module GPIO.setmode(GPIO.BCM) GPIO.setup(MOSFET_PIN, GPIO.OUT) pwm = GPIO.PWM(MOSFET_PIN, 500) # 500 Hz PWM, slow enough for the module's optocoupler pwm.start(0) # start with the load OFF def set_load(percent): pwm.ChangeDutyCycle(percent) print("Load power: {}%".format(percent)) try: while True: # turn the load fully ON, then fully OFF print("Load: ON") set_load(100) time.sleep(2) print("Load: OFF") set_load(0) time.sleep(2) # increase the power step by step (PWM) for percent in range(10, 101, 10): set_load(percent) time.sleep(0.5) # decrease the power step by step (PWM) for percent in range(90, -1, -10): set_load(percent) time.sleep(0.5) time.sleep(1) except KeyboardInterrupt: pass finally: pwm.stop() GPIO.cleanup()
  1. Steek de 12V voedingsadapter in het stopcontact.
  2. Voer het script uit met dit commando:
python3 MosfetModule.py
  1. Kijk naar de ledstrip. Hij brandt 2 seconden op volle helderheid en is daarna 2 seconden donker. Dan wordt hij langzaam feller, en daarna langzaam zwakker.
  2. Controleer de resultaten in de terminal.
PuTTY - Raspberry Pi
Load: ON Load power: 100% Load: OFF Load power: 0% Load power: 10% Load power: 20% Load power: 30% Load power: 40% Load power: 50% Load power: 60% Load power: 70% Load power: 80% Load power: 90% Load power: 100% Load power: 90% Load power: 80% Load power: 70% Load power: 60% Load power: 50% Load power: 40% Load power: 30% Load power: 20% Load power: 10% Load power: 0%

Het script herhaalt deze cyclus eindeloos. Tijdens het AAN- en UIT-deel verschijnt elke 2 seconden een nieuwe regel (door de time.sleep(2) regels). Tijdens het fade-up en fade-down deel verschijnt elke 0,5 seconde een nieuwe regel (door de time.sleep(0.5) regels). De uitvoer gaat door totdat u het script stopt door in de terminal op Ctrl + C te drukken. Het script zet de belasting dan uit en ruimt de GPIO-pin op.

Als u een 12V ventilator of motor gebruikt in plaats van de ledstrip, betekent dezelfde uitvoer dat de ventilator op volle snelheid draait, stopt, en dan sneller en langzamer gaat.

Extra kennis

AOD4184 versus LR7843 versus FR120N

Laten we de drie modules vergelijken om te zien welke bij uw project past:

AOD4184 LR7843 FR120N
Max. belastingspanning 40V DC 30V DC 100V DC
Aan-weerstand ongeveer 7 mΩ ongeveer 3,3 mΩ ongeveer 210 mΩ
Praktische stroom zonder koellichaam ongeveer 10–15A ongeveer 15A ongeveer 2A
Geschikt voor 12V / 24V / 36V belastingen 12V / 24V belastingen met grote stroom 24V / 48V kleine belastingen
  • De LR7843 heeft de laagste weerstand, dus hij blijft het koelst bij hoge stroom. Kies hem voor krachtige ledstrips of grote motoren op 12V of 24V. Ga niet boven 30V.
  • De AOD4184 is een goede allrounder. Hij kan tot 40V aan en voert nog steeds een sterke stroom.
  • De FR120N accepteert de hoogste spanning (tot 100V), maar zijn weerstand is veel hoger. Hij past alleen bij kleine stromen, ongeveer 2A zonder koellichaam.

Houd er rekening mee dat 50A en 161A grenzen van de MOSFET-chip zelf zijn. De kleine module kan niet zoveel dragen. De echte grens is warmte. Raak de MOSFET na een paar minuten draaien voorzichtig aan. Als hij te heet is om aan te raken, verlaag dan de stroom of voeg een koellichaam toe.

MOSFET-module versus relais

Laten we een MOSFET-module vergelijken met een relaismodule voor het schakelen van een belasting:

MOSFET-module Relaismodule
Bewegende delen geen ja, een mechanisch contact
Geluid stil klikt bij elke schakeling
Schakelsnelheid heel snel langzaam
PWM (helderheid / snelheidsregeling) ja nee
Levensduur lang, geen slijtage van contacten beperkt door slijtage van contacten
Type belasting alleen DC DC of AC (controleer de waarde van het relais)

Het is duidelijk dat de MOSFET-module de betere keuze is voor DC-belastingen, vooral als u helderheid of snelheid wilt regelen. Voor apparaten op wisselspanning blijft een relais het juiste gereedschap.

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!