Jag behövde en bidirektionell 3.3V<->5V nivåskiftare till ett i2c-projekt och jag hittade följande koppling på sparkfun (originalschema här) Det fungerar fint så inga problem där. Jag tänkte bara kolla om jag har förstått funktionen rätt. Jag är mer av en mjukvarukille och bygger sällan egna kretsar.
Om vi först kollar i riktning från LV1 till HV1 (LV1 är kopplad till en utgång och HV1 till en ingång):
Om LV1 är flytande eller hög är Q1s VGS 0V och transistorn spärrar. HV1 blir hög pga pullup-resistorn.
Om LV1 är låg blir VGS LV (som måste vara hög nog att aktivera transistorn), DS-kanalen öppnar och HV1 dras låg.
HV1 till LV1:
OM HV1 är flytande eller hög blir LV1 hög pga pullup till LV.
Om HV1 är låg dras LV1 låg genom Q1s body-diod. (Q1 kommer även börja leda pga ökad VGS).
Om både LV1 och HV1 är utgångar:
Om båda är höga händer ingenting.
Om båda är låga leder Q1. Men eftersom båda utgångar är 0V relativt gemensam jord händer ingenting.
Om HV1 är hög och LV1 låg.. Här tappar jag bort mig..
Q1 kommer leda pga hög VGS. LV1 sänker ström från HV1. Bränd utgång pga hög ström? Behövs resistor i serie med HV1 som strömbegränsare? Eller kommer HV1 höja source-spänningen så att transistorn stänger av och sen börja oscillera?
Stämmer allt det här?
Och hur räknar man ut maximal switch-frekvens? I databladet för BSS138 står det bl.a.
td(on) 5ns
tr 18ns
td(off) 36ns
tf 14ns
Det borde om jag förstått det rätt ge en minsta periodtid på 5+18+36+14=73ns, eller ca 13,7 MHz. Men jag gissar att man även måste räkna med gate-charge för att veta hur snabbt LV1 kan driva transistorn? Egentligen spelar det inte så stor roll vad maxfrekvens är för jag ska bara köra 100 kHz, men det hade varit intressant att veta hur man räknar

Och till sist, kan någon rekommendera en transistor som skulle fungera med 1,8V VGS?