3.8. Niveau-omzetting¶
Een GPIO-pin op de camera levert ongeveer 3,3 V wanneer hij hoog is. Een apparaat aan de andere kant draait mogelijk op 5 V (oudere microcontrollers, veel sensorborden) of 1,8 V (nieuwere sensoren, sommige chip-naar-chip-bussen). De twee rechtstreeks verbinden is soms veilig en soms destructief; niveau-omzetting is het circuit dat de kloof betrouwbaar overbrugt.
3.8.1. Waarom directe aansturing over verschillende spanningen een pin kan beschadigen¶
De I/O-pad van elke chip heeft een paar ingebouwde beschermingsdiodes: een van de pin naar de massa, en een van de pin naar de voedingsrail van de chip. Ze zijn er om een elektrostatische ontlading (ESD) op te vangen – een korte, hoogspanningspiek door statische elektriciteit die een pin kan raken wanneer het bord wordt vastgepakt. Iemand die over een vloerkleed heeft gelopen kan enkele kilovolts aan statische lading dragen; het aanraken van de verkeerde pin draagt die lading in nanoseconden over op de chip. De bovenste beschermingsdiode wordt in doorlaatrichting gebracht en leidt de puls veilig naar de voedingsrail voordat deze de transistors binnen in de chip bereikt.
Wanneer een 5V-signaal continu wordt toegepast op een 3,3V-pin die niet 5V-tolerant is, geleidt de bovenste beschermingsdiode voortdurend. De diodes zijn gedimensioneerd voor korte ESD-pulsen, niet voor continue stroom; de voedingsrail begint boven 3,3 V uit te stijgen, de diode wordt warm, en ofwel de pin ofwel de spanningsregelaar op de chip valt uit.
5V-tolerante pinnen gebruiken een andere ingangstrap – de bovenste diode gaat naar een hogere rail of ontbreekt – zodat het toepassen van 5 V ongevaarlijk is. Of de pinnen van een bord 5V-tolerant zijn, verschilt per bord; raadpleeg de OpenMV Cam-snelreferentie.
De andere richting heeft een eigen probleem. Een 3,3V-GPIO die hoog aanstuurt produceert ~3,3 V op de draad. Een 5V-ontvanger die 0.7 × Vcc nodig heeft om hoog te herkennen, ziet zijn drempelwaarde op 3,5 V; 3,3 V kan als laag of als dubbelzinnig worden gelezen. Zelfs zonder schade werkt het signaal niet betrouwbaar.
Een niveau-omzetter lost beide richtingen op.
3.8.2. De N-MOSFET als schakelaar¶
De onderstaande circuits gebruiken een enkele N-kanaals MOSFET. Deze heeft drie pinnen – gate, drain en source – en gedraagt zich als een elektrisch gestuurde schakelaar.
De stuuringang is de spanning tussen de gate en de source, geschreven als Vgs (gate-naar-source-spanning):
Vgs = (gate voltage) - (source voltage)
De MOSFET geeft om dit verschil, niet om de absolute spanning op een van beide pinnen afzonderlijk. Het gedrag volgt uit Vgs:
Wanneer
Vgsboven de drempelspanning van de MOSFET ligt (doorgaans rond 1 V voor een klein-signaal logic-level onderdeel), gaat de transistor aan en vloeit er vrij stroom van drain naar source.Wanneer
Vgsop of onder 0 ligt, gaat de transistor uit en vloeit er vrijwel geen stroom van drain naar source.
Het drain-source-pad is het geschakelde stroompad; Vgs opent of sluit die schakelaar.
Een N-MOSFET heeft ook een body-diode tussen drain en source die geleidt wanneer de drain meer dan ~0,6 V onder de source wordt getrokken. De diode is een bijproduct van de fabricage; de bidirectionele omzetter hieronder gebruikt hem opzettelijk.
3.8.2.1. Bedradingsregels¶
Een N-MOSFET is geen symmetrisch driepolig component. De body-diode wijst van source (anode) naar drain (kathode), en Vgs is wat het kanaal stuurt. Hieruit volgen twee regels die voor elk N-MOSFET-schakelcircuit moeten gelden:
Source gaat naar de lagere spanning; drain gaat naar de hogere. Met de drain op de hogere rail is de body-diode in sperrichting gebracht en doet niets. Verwissel ze en de body-diode staat de hele tijd in doorlaatrichting: stroom vloeit van de nu hogere source via de body-diode naar de nu lagere drain, ongeacht wat de gate doet. De MOSFET houdt op een schakelaar te zijn – hij lekt continu, het signaal kan niet worden uitgeschakeld, en het component oververhit en valt vaak uit.
De gate is gekoppeld aan de spanningsrail van de source. Door de gate op de rail te houden waar de source in rust op zit, wordt
Vgs = 0in ruststand, ruim onder de drempelwaarde; de MOSFET blijft stevig uit totdat iets ofwel de gate boven de source aanstuurt (het eenrichtingscircuit hieronder) ofwel de source onder de gate trekt (het bidirectionele circuit). Laat de gate ergens anders zweven en de uit-toestand is niet langer gedefinieerd – ruis, lekstroom of strooicapaciteit kanVgsboven de drempelwaarde laten driften en de MOSFET willekeurig inschakelen.
Het omkeren van een van beide regels maakt van de niveau-omzetter een lekkend, onbetrouwbaar pad. Beide omzettercircuits hieronder volgen deze regels: source aan de lagere kant, drain aan de hogere, gate gekoppeld aan of aangestuurd vanaf de rail van de source.
3.8.3. Eenrichting 3,3 V → 5 V¶
De eenvoudigste niveau-omzetter duwt een eenrichtingssignaal van de GPIO van de camera naar een 5V-ingang. Een enkele N-MOSFET plus twee weerstanden klaart de klus.
Een N-MOSFET zet een 3,3V-signaal in niveau om (en inverteert het) naar een 5V-uitgang.¶
Wanneer de GPIO hoog aanstuurt (3,3 V op de gate), ligt Vgs boven de drempelwaarde en gaat de MOSFET aan; de drain wordt naar ~0 V getrokken. Wanneer de GPIO laag aanstuurt (0 V op de gate), is de MOSFET uit en brengt de 10 kΩ pull-up de drain naar 5 V.
De uitgang is het omgekeerde van de ingang. Software kan het signaal terugklappen (schrijf 0 voor “5V-uitgang hoog”), of twee trappen cascaderen om een niet-geïnverteerd signaal te krijgen tegen tweemaal het aantal componenten.
3.8.4. Bidirectioneel met één N-MOSFET¶
Voor een lijn die vanaf beide kanten moet worden aangestuurd – een gedeelde bus waar elk uiteinde de lijn laag kan trekken – is het standaardcircuit een enkele N-MOSFET per lijn, met één pull-up naar de voeding van elke kant.
Een enkele N-MOSFET overbrugt een 3,3V- en een 5V-lijn; elke kant heeft een eigen pull-up.¶
De gate is gekoppeld aan de 3,3V-voeding, dus het gedrag van de MOSFET hangt af van welke kant aan het aansturen is:
Beide kanten in rust. De source zit op 3,3 V via de linker pull-up; de gate is op 3,3 V;
Vgs = 0; de MOSFET is uit. De 5V-kant zweeft naar 5 V via de rechter pull-up. Beide kanten lezen hoog.De 3,3V-kant trekt laag. De source zakt naar 0 V;
Vgsstijgt boven de drempelwaarde; de MOSFET gaat aan en geleidt van source naar drain. De 5V-kant wordt via de transistor laag getrokken.De 5V-kant trekt laag. De drain zakt naar 0 V; de body-diode van de MOSFET (drain naar source) komt in doorlaatrichting en geleidt; de source (3,3V-kant) wordt naar ongeveer 0,6 V getrokken.
Vgsoverschrijdt dan de drempelwaarde en de MOSFET gaat volledig aan, waardoor beide kanten laag worden.
De BSS138 is de standaard N-MOSFET voor dit patroon; klein-signaal logic-level N-MOSFETs met vergelijkbare gate-drempelspanningen gedragen zich hier allemaal op dezelfde manier.