Open-drain versus push-pull: opbouw, stijgtijd, wired-AND en toepassingen

Beide zijn uitgangstrappen die digitale signalen afgeven, maar ze verschillen in hoe ze een H maken. Een push-pulluitgang combineert een pMOS aan de voedingszijde met een nMOS aan de massazijde en stuurt zowel H als L actief met transistors; daardoor is hij snel en loopt er in rust vrijwel geen stroom. Een open-drainuitgang heeft alleen een nMOS aan de massazijde: L wordt omlaag getrokken, maar voor H wordt de uitgang losgekoppeld en trekt een pull-upweerstand de lijn omhoog. De stijgflank is trager, maar meerdere uitgangen kunnen op één lijn worden aangesloten (wired-AND) en de pull-upspanning is vrij te kiezen, waardoor open-drain wordt gebruikt voor I2C en interruptlijnen.

KenmerkPush-pulluitgangOpen-drainuitgang
Opbouw van de uitgangstrapTwee transistors: een pMOS aan de voedingszijde en een nMOS aan de massazijde (dezelfde vorm als een CMOS-inverter)Alleen een nMOS aan de massazijde. De drain is naar de pin uitgevoerd; aan de voedingszijde zit niets
Hoe H wordt gemaaktDe pMOS gaat aan en verbindt de pin met de voedingDe nMOS gaat uit en koppelt de pin los (hoogohmig); een externe pull-upweerstand trekt de lijn omhoog
Hoe L wordt gemaaktDe nMOS gaat aan en verbindt de pin met massaDe nMOS gaat aan en verbindt de pin met massa (hetzelfde)
StijgsnelheidSnel. De pMOS laadt de lijn opTraag. Bepaald door de tijdconstante RC van pull-upweerstand R en lijncapaciteit C (bijv. 4,7 kΩ en 100 pF geven ongeveer 0,47 µs)
DaalsnelheidSnel. De nMOS ontlaadt de lijnSnel. De nMOS ontlaadt de lijn
Meerdere uitgangen op één lijnNiet mogelijk. Als H en L botsen, loopt er een grote stroom van de voeding naar massaMogelijk. Zodra één uitgang L geeft, wordt de lijn L (wired-AND)
Koppeling met circuits op een andere spanningDe H-spanning wordt bepaald door de eigen voedingsspanning. Voor circuits op een andere spanning is een niveauomzetter nodigDe H-spanning wordt bepaald door waar de pull-up op is aangesloten, zodat die binnen de maximale pinspanning aan de spanning van de ontvanger kan worden aangepast
StroomverbruikIn rust vrijwel nul (alleen lekstroom). Bij het schakelen lopen laad- en ontlaadstromenZolang L wordt gegeven, blijft er stroom door de pull-upweerstand lopen (bij 3,3 V en 4,7 kΩ ongeveer 0,7 mA)
Indicatie van de snelheidEnkele tientallen MHz of meer is haalbaarBeperkt door pull-upweerstand en capaciteit. Bij I2C bijvoorbeeld 100 kHz, 400 kHz of 1 MHz
Belangrijkste toepassingenSnelle signalen zoals SPI- en UART-signalen, klokken, algemene GPIO en geheugenbussenI2C en SMBus, interrupt- en resetlijnen die door meerdere componenten worden gedeeld, koppeling met circuits op een andere spanning en het aansturen van leds

De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.

Wanneer welke variant?

Push-pulluitgang
Wanneer één uitgang een ingang aanstuurt en snelheid en een laag stroomverbruik belangrijk zijn. Gewone digitale signalen zoals GPIO, SPI en UART gebruiken deze uitgang.
Open-drainuitgang
Wanneer meerdere componenten dezelfde lijn aansturen (I2C, gedeelde interrupt- of resetlijnen), of wanneer een signaal via een andere pull-upspanning aan een circuit op een andere spanning moet worden doorgegeven.
Omschakelen
Bij veel microcontrollers kan een GPIO-pin via de configuratie tussen push-pull en open-drain worden omgeschakeld. Pinnen voor I2C worden als open-drain ingesteld en krijgen een externe pull-upweerstand.

Veelgestelde vragen

Hoe kies je de waarde van de pull-upweerstand?

Hoe kleiner de weerstand, hoe sneller de stijgflank, maar ook hoe groter de stroom zolang L wordt gegeven en hoe hoger de L-spanning (VOL). De bovengrens volgt uit de lijncapaciteit en de vereiste stijgtijd, de ondergrens uit de stroom die de uitgang kan opnemen en de VOL-specificatie. Bij I2C worden vaak enkele kΩ gebruikt (bijvoorbeeld ongeveer 2,2 tot 10 kΩ).

Wat gebeurt er als je twee push-pulluitgangen rechtstreeks met elkaar verbindt?

Als de ene H en de andere L geeft, loopt er via de pMOS van de H-zijde en de nMOS van de L-zijde een grote stroom van de voeding naar massa (busconflict). De lijnspanning komt bovendien ergens tussenin te liggen, wat warmte en schade aan componenten kan veroorzaken. Gebruik voor gedeelde lijnen daarom open-drain of een tri-state-uitgang die zich kan loskoppelen.

Waarom gebruikt I2C open-drain?

Omdat meerdere apparaten dezelfde SDA- en SCL-lijnen aansturen. Dat de ontvanger SDA omlaag trekt om een ACK terug te geven, dat een slave SCL laag houdt om de ander te laten wachten (clock stretching) en dat er arbitrage plaatsvindt als meerdere masters tegelijk beginnen te zenden, berust allemaal op de wired-AND-eigenschap: zodra één apparaat L geeft, is de lijn L.

Wat is het verschil met open-collector?

Het principe is hetzelfde: met een bipolaire transistor als uitgangstransistor heet het open-collector, met een MOSFET open-drain. Beide trekken alleen L omlaag en maken H met een pull-upweerstand.

Test uw begrip

Wat is de juiste werking als meerdere circuits met open-drain-uitgangen op één signaallijn met een pull-upweerstand worden aangesloten?

  1. ADe uitgangen botsen en gaan altijd kapot
  2. BAls ook maar één 0 uitgeeft, wordt de lijn 0, en het werkt als wired-AND
  3. CAls ook maar één 1 uitgeeft, wordt de lijn 1
Antwoord en toelichting tonen

Antwoord: B. Als ook maar één 0 uitgeeft, wordt de lijn 0, en het werkt als wired-AND

Een open-drain-uitgang heeft twee toestanden: de transistor trekt de lijn naar aarde of koppelt los, en de 1 wordt door de pull-upweerstand gemaakt. Als ook maar één 0 uitgeeft, wordt de lijn 0, en alleen als iedereen losgekoppeld is, wordt hij 1: het werkt als wired-AND, en ook als uitgangen botsen, gaat niets kapot. Het wordt gebruikt voor I²C-bussen, interruptlijnen en niveauomzetting tussen circuits met verschillende voedingsspanningen. De stijgtijd wordt bepaald door de pull-upweerstand en de bedradingscapaciteit en is dus traag.

Wat verandert er als je de waarde van de pull-upweerstand van een open-drain-uitgang kleiner maakt?

  1. ADe stijgende flank wordt trager, maar de stroom bij een L-uitgang neemt af en het verbruik daalt
  2. BDe stijgende flank wordt sneller, maar de stroom bij een L-uitgang neemt toe en VOL stijgt gemakkelijker
  3. CDe spanning van het H-niveau wordt hoger dan de voedingsspanning waarnaar is opgetrokken, waardoor de grenswaarde van de ontvangende ingang eerder wordt overschreden
Antwoord en toelichting tonen

Antwoord: B. De stijgende flank wordt sneller, maar de stroom bij een L-uitgang neemt toe en VOL stijgt gemakkelijker

Het H-niveau van een open-drain-uitgang ontstaat doordat de pull-upweerstand de signaallijn omhoogtrekt wanneer de uitgangstransistor uit staat. De stijgsnelheid wordt bepaald door de tijdconstante van de weerstand en de bedradingscapaciteit, bijvoorbeeld 1 µs bij 10 kΩ en 100 pF. Een kleinere weerstand maakt de flank sneller, maar bij een L-uitgang loopt er stroom van de voeding door de weerstand: bij 3,3 V en 1 kΩ is dat 3,3 mA. Overschrijdt deze stroom de conditie voor IOL in de datasheet, dan blijft VOL niet binnen de gespecificeerde waarde; kies dus een waarde die aan beide voldoet.

Welke eigenschap van I2C-communicatie is juist?

  1. AVoor elk apparaat is een eigen chip-selectlijn nodig
  2. BZenden en ontvangen hebben aparte lijnen en kunnen in beide richtingen tegelijk plaatsvinden
  3. CMeerdere apparaten worden aangesloten op twee lijnen, klok (SCL) en data (SDA), en de tegenpartij wordt via een adres gekozen
Antwoord en toelichting tonen

Antwoord: C. Meerdere apparaten worden aangesloten op twee lijnen, klok (SCL) en data (SDA), en de tegenpartij wordt via een adres gekozen

I2C is synchrone seriële communicatie waarmee meerdere apparaten met slechts twee lijnen, SCL en SDA, worden verbonden. De master stuurt eerst het 7-bits adres van de tegenpartij en alleen het apparaat met dat adres antwoordt. De lijnen zijn open-drain, worden met pull-upweerstanden naar 1 getrokken en elk apparaat kan ze naar 0 trekken. Het is geschikt voor onderdelen waarbij weinig bedrading belangrijker is dan snelheid, zoals temperatuursensoren, versnellingssensoren en EEPROM's.

  1. Hoe geeft bij I2C de ontvangende partij aan dat een byte aan gegevens is ontvangen?
  2. Wat is de juiste rol van een level shifter die wordt geplaatst bij het doorgeven van signalen tussen twee blokken met verschillende voedingsspanningen?

Oefenvragen over Logische schakelingen

Belangrijke termen uitgelegd

Open-drainuitgang
Uitgang waarbij alleen de drain van de uitgangstransistor naar buiten is gevoerd en alleen het lage niveau actief wordt aangestuurd. Het hoge niveau komt van een externe pull-upweerstand, zodat meerdere uitgangen één lijn kunnen delen of met schakelingen op een andere voedingsspanning kunnen worden verbonden. Wordt bijvoorbeeld gebruikt op I2C-bussen.
Pull-upweerstand
Weerstand die een signaallijn met de voeding verbindt om deze op niveau 1 te houden wanneer niets de lijn aanstuurt. Voorkomt zwevende ingangen en wordt ook gebruikt voor onder meer I2C-lijnen.
I2C
Synchrone seriële communicatie waarbij meerdere apparaten op twee lijnen, klok (SCL) en data (SDA), zijn aangesloten en de tegenpartij met een adres wordt gekozen. De lijnen zijn open-drain met pull-up.

Verwante vergelijkingen