GPIO védelme 12V-tól hogyan?

ESP32-ből készítettem egy logikai analizátort. Mivel 5V-os jeleket mérek vele, ellenállásosztón ( 2k + 1k ) keresztül juttatom a mért jelet az ESP lábaira.

Sajnos azonban a mért áramkörben van néhány 12V-os pont is.

Mi a legegyszerűbb módja annak, hogy megvédjem az ESP-t a 12V-os jelektől? Minden logikai bemenetre egy zener diódát kellene kötnöm a jel és a föld közé? Pontos típust tudtok mondani? Vagy van valamilyen más egyszerű módszer, amit alkalmazhatnék?

(Tudom, hogy vannak ilyen cél IC-k, amik jelszinteket konvertálnak, de szeretném azok nélkül megoldani. Az analizátor már működik, csak kibővíteném ezzel a védelemmel.)

Hozzászólások

Ez táp, nem level shifter. Semmi olyan jelet nem fog átvinni, aminek az alakjára kíváncsi vagy.

 

Csak zener biztos nem elég, kell egy ellenállás is, mert különben semmi nem korlátozza, hogy mennyi áram folyjon záróirányban.

En a tap es a 2k ellenallasod felso vege koze tennek schottky diodat (pinenkent egyet ertelemszeruen). Ha a jel 0v vagy 5v, nem csinal semmit, de ha 12v, nem engedi a tap+0.3V (vagy amennyi a nyito iranyu esese) fole az esp-d bemenetet, azt meg meg ki kell birnia. Az 1k ellenallasod miatt meg nem fog nagy aram folyni.

A zenernek nagy a kapacitasa, es lassan nyit. Nem biztos, hogy megvedi az aramkorodet, es elrontja a merest.

A strange game. The only winning move is not to play. How about a nice game of chess?

Igen, nyilvan. Amugy a legtobb mikrokontrollerben alapbol szokott lenni ilyen vedodioda a pin es tap meg a pin es fold kozott, ami nem engedi ki a valid tartomanybol (csak egy kicsit). Atmelnel extrem esetben meg meg is lehet taplalni ezen keresztul.

https://i.stack.imgur.com/v7nKD.png

A strange game. The only winning move is not to play. How about a nice game of chess?

Attol fugg, mi van a fiokban. Gondolom nem sorozatgyartod a kutyudet.

A max. feszultsegre (100V>12V), arama megfelel (1k ellenallason keresztul 200V-nal folyna rajta tobb, mint 200mA), kapacitasa relative kicsi (3pF), nem latok vele problemat. A nyitofeszultsege lehetne kicsit kisebb. Viszont ha 10MHz-re es sok csatornara kell, lehet, hogy a jelszintillesztovel amit ajanlottak, jobban jarsz.

A strange game. The only winning move is not to play. How about a nice game of chess?

Egyáltalán nem sorozatgyártás. Házi összeberhelés. És azért gondoltam a BAT41-re, mert abból van itthon.

De azt nem tudom értelmezni, hogy "jobban járok" az illesztővel. Ezek szerint 10MHz-en ezzel már torzulni fog a jelalak? Lesz olyan hogy 1-et mér 0 helyett és/vagy fordítva? Ezt mindenképpen el szeretném kerülni. Akkor inkább nem védem 12V ellen. (Vagy már az ellenállások is rossz ötlet 10MHz-en?)

Ezek szerint 10MHz-en ezzel már torzulni fog a jelalak? 

Igen, kb pont ott kezd el torzulni. Egyszeruen meg tudod becsulni abbol a tenybol hogy a parazitikus kapacitasok erteke nehany pF nagysagrendjeben van (attol fuggoen hogy mennyire illesztett es/vagy mennyire "gömbáramkör" jellegu a megoldasod). Legyen mondjuk 10pF, konzervativ becsles. Az ellenallasaid erteke 3k. Az ebbol adodo idoallando, az RC szorzat reciproka mondja meg a maximalis frekvenciat, azaz egy olyan frekvenciaju negyszogjelet mar teljesen eltorzit az exponencialis lecsenged, pl valahogy igy. Na, es itt ebbol a ket ertekbol olyan 30MHz koruli freki jon ki. Az meg mar elegge veszesen kozel van a 10MHz-hez.

Masik megkozelites: az I2C busznal azert mondjak hogy 1MHz a maximalis sztenderd sebesseg mert ott is ilyen 2k2-3k3 koruli felhuzoellenallasokat hasznalnak. Szort kapacitas az kb ugyanennyi. Persze novelheted a clock rate-t, de akkor csokkentened kell az ellenallasokat (merthogy a kapacitassal nem tudsz mit kezdeni, az annyi amennyi). Mint ahogy az esetedben is: csinalhatsz 100R+220R-bol is osztot, az jobban birja a nagyfrekvenciat, csak hat az mar elegge  hataron van ha sztenderd general purpose output max aramterheleset nezed (5V-on 330ohm az mar 15mA, es hat az mar nagyon nem keves egy logikai ice kimenetenek).

Nem digitális jelről beszélünk? Kit érdekel a torzulás?

A lényeg hogy a 0 szint a processzor garantált 0-ja alatt van-e, illetve az 1 a garantált 1 felett?

CMOS bemeneteknél ez általában a proci tápfesz 0.3x alatt és 0.7x felett van. TTL kompatibilis logikánál meg 0.8 V alatt és 2 V felett.

Az a "védelem" inkább parazita effektus, nem illik rá támaszkodni! Az oka egyébként a kimeneti CMOS pár p csatornás tagjában lévő parazita dióda a source és drain között.

Egy schottky valóban előbb nyit. Amúgy a gyakorlatban azért szokott működni. Nyilván itt is limitálni kell az áramot egy ellenállással.

Azt ne is keress, mert utoljára a CD40xx sorozat tudott valami hasonlót, ami kb. a 80-as évek technológiája.

5.5V-ig üzemszerűen működik (100+ MHz-en), 6.5V-ig biztosan nem purcan ki, efelett ha betartod a "max. 50mA folyhat az IC-n keresztül" kitételt, akkor megmarad a cucc, különben jó eséllyel kinyílik a teteje.

Igen, olyan feszültséget enged tovább és 3.3V-ról kell megtáplálni. 10MHz környékén a lefutó élnél már csalni fog egy kicsit (kb. 10ns), de szerintem ez - az egyszerűségét figyelembe véve - elfogadható kompromisszum

„Az összeomlás elkerülhetetlen, a katasztrófa valószínű, a kihalás lehetséges.” (Jem Bendell)

Jó ez a hc4050, de nem keveset eszik ...

Mivan??? Ez egy CMOS cucc, adatlap alapján uA-eket vesz fel.

Valami rosszul csinálhatsz, vagy tönkrement az IC.

Ja, ne legyen üresen hagyva bemenet az IC-n! Ha nem használod semmire se azt a bemenetet, akkor is legyen fixen GND-re vagy tápfeszre kötve, különben ilyen dolgok tudnak történni.

Ha az ESP 3.3V-os lábával hajtottam meg, akkor nem ment, ha saját tápot adtam neki, akkor rendben ment. Azt hittem, hogy az ESP 3.3V-os lába csak az ESP meghajtására jó, de azóta egy OLED kijelzőt is tápláltam onnan, és azt rendben vitte. Ezek szerint az volt a baj, hogy nem minden bemenetre kötöttem jelet? De hisz ez egy logikai analizátor lesz. Nem fogom mindig minden bemenetét használni.

Le kellene rajzolnod, mit csinálsz, hogyan csinálod. Egyrészt a 74HC4050-nek 20 µA a maximális áramfelvétele, ezt nem nevezném soknak. Ugyanakkor, ahogy zeller helyesen írta, ha a kimenetét terheled, az az áram a táp felől fog kifolyni, az örökmozgót felejtsd el. ;)

Ezek szerint az volt a baj, hogy nem minden bemenetre kötöttem jelet? De hisz ez egy logikai analizátor lesz. Nem fogom mindig minden bemenetét használni.

A fizikát, az áramkörök működését meglehetősen hidegen hagyja a bosszankodásod, a te feladatod ezt jól megtervezni, megcsinálni. Lebegő bemenet esetén bizonytalan potenciálon lesz a bemenet, hiszen lebeg, nem kötötted sehova. Ennek folyománya, hogy a kimeneti MOSFET-ek szembe nyithatnak, az egyik még nem zárt le teljesen, a másik még nem nyitott ki teljesen, a két csatornán át áram fog folyni, fogyaszt és disszipál, mint a veszedelem, rosszabb esetben tönkre is mehet. Megoldás lehet egy-egy nagy ellenállással - pl. 2.2 MΩ - a bemeneteket fixen GND-re kötni.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Én is ezt csinálnám, de nagyon észnél kell lenni, mert a tápba folyatunk áramot, a mai MCU-k fogyasztása kicsi, így simán megemelhetjük a tápfeszültséget, különösképpen, ha több ilyen bemenetről egyszerre folyatjuk be azt az áramot. Szóval vagy olyan tápegység kell, amelyik nem csak forrás, de nyelni is képes - nem jellemző -, vagy kell egy műterhelés, ellenállás a táp és GND közé, amelyet méretezni kell.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Jo, most ugyanez a feladat, de lehet 230VAC is.

Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....

Zenert ne, lassú lesz! A legtöbb Zenernek nagy a kapacitása. Használj TVS-t, de a bemeneti ellenállás után. Osztó nem kell.

Én azt nem értem, hogy 12V-ra miért nem jó az ellenállásosztó? Vagy a bemeneten egyszer 5V egyszer 12V jön?

És igen, ahogy többen is írták a level shifter lenne a megfelelő megoldás, ellenállásoknál lehet szívni nagy sebességgel, ugyanis a bemeneti kapacitást fel kell tölteni, de ennek újában lesz már az ellenállás is.

1k x 10 pF  = 10 ns, kb 100 MHz lenne a határ, tehát a 10-et még tudhatja. Fontos hogy az ellenállás minél közelebb legyen a lábhoz és a TVS-hez, ha ezt az utat választod, a hosszabb huzalozás nagyobb kapacitást is jelent.

Ha összegzem, amit itt írtatok:

- van egy max. 3,3V-os bemeneted, ennek az alánlott bemeneti jelszintjeit tudjuk?
- a jelforrásod lehet 12V, de nem feltétlenül annyi, a meghajtóképessége ismeretlen.
- erre kellene valami védelmet eszkábálni, hogy a logikai szintek meglegyenek a 3.3V-os bemeneten 10Mhz-ig?

Nem volna egyszerűbb 20Msps A/D konverterrel? A teljes 12V-os tartományra 4 bit is elég szerintem, de nem tudom, manapság hol találsz ilyesmit

Nem volna egyszerűbb 20Msps A/D konverterrel? A teljes 12V-os tartományra 4 bit is elég szerintem, de nem tudom, manapság hol találsz ilyesmit

Ezt alapos megfontolás után írtad? Hogyan veszel el ennyi adatot, hova tárolod a stream-et? DMA és sok RAM kell hozzá, egyáltalán nem triviális megcsinálni.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Munkám kapcsán csinálok ilyesmit, nem véletlenül írtam. :) Van olyan MCU, amelyben van gyors A/D, van DMA, valamennyi RAM, de vagy külső RAM-ot kell illeszteni, vagy olyannak kell lennie a feladatnak, hogy valós idejű előfeldolgozás után valamilyen gyors buszon - USB, SPI, SQI - lehet tolni fel a részeredményeket valami nagyobb teljesítményű gépre, amelyben ebből a szempontból korlátlan mennyiségű RAM és CPU sebesség van már. Pl. ilyen lehet egy PC.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Két irány van:

- bután dumpolni az adatokat PC-re, utólag mazsolázni. Itt talán a sávszélesség igény a legnehezebb, már legalább high speed USB kell hozzá. Igaz, vannak USB<->SPI konverterek, amik tudhatják a szükséges sávszélt. Sőt, ennek az is lehet az előnye, hogy egy ügyes logikával akár hardverből is megoldható, hiszen kb. egy párhuzamos beírású, soros kiolvasású shift-regiszter szükséges csak. Meg egy órajel generátor a latch-hez. Csak aztán győzze a PC lekezelni realtime az SPI adathalmot.

- fel is dolgozni egyből. Ekkor már kb. egy picoscope szintű eszközről beszélünk. Lehet vele szívni, de megéri? Tanulásnak oké, de tisztázzuk hogy csak annak.

Van egy harmadik irány, amit mi csinálunk. Előfeldolgozzuk a jelet, annak bizonyos paramétereit küldjük fel a PC-nek, amelyik majd elvégzi a további feldolgozást. Így a sávszélesség is megoldódik, RAM sem kell sok, és az MCU sebességigénye is elviselhető, bár oda azért elég gyors kell.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Meg hozzátéve, hogy az analog fronteddel ugyanúgy szívni fog. Nem nagyon fogsz találni olyan AD-t, ami ezt a sebességet tudja, 12V analóg feszt megeszik és 3.3-as a digit IO-ja. Nem mondom hogy biztos nem, de nem gyakori.

Akkor meg ugyanúgy ellenállásosztózni kell, ami épp ugyanazokat a problémákat fogja behozni, mint a digitális beolvasás esetén.

Vagy le kell másolni egy szkóp bemeneti áramkört, na az tudja amit kell.

Egészen addig nem is bonyolult, amíg nincs méréshatár váltás, illetve a bemeneti kapacitás nulla. Előbbi most akár "out of scope" (pun intended), de az utóbbival el kell bánni.

Csak annyival lesz bonyolultabb, amennyivel a komplex számok bonyolultabbak a valósaknál. Embere válogatja, hogy ez kinek mennyi :)

szkóp bemenete azért picivel bonyolultabb egy ellenállásosztónál

Természetesen. Arra utaltam, hogy nem feltétlenül kell másolni, ki is szabad találni, amit szeretnénk. A munkám során az esetek döntő többségében egyedi megoldásokat találok ki, nem szeretem azt a hozzáállást, amikor valaki összeollóz innen-onnan megoldásokat, amelyek egyszerre lesznek pazarlók, redundánsak, meg a konkrét helyzethez nem tökéletesen illeszkedők. Arról nem is beszélve, hogy vannak olyan feladatok, amelyek csak egyedileg megoldhatók, mert nem egy tucatprobléma, hanem teljesen speciális, egyedi. Persze velem is volt már olyan, hogy szabadalmaztatott megoldást kellett használnom, mert annyira nem triviális volt a probléma, illetve a szabadalmaztatott megoldáson módosítottam, de az alapötlet egy szabadalomra épül.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Meg hozzátéve, hogy az analog fronteddel ugyanúgy szívni fog. Nem nagyon fogsz találni olyan AD-t, ami ezt a sebességet tudja, 12V analóg feszt megeszik és 3.3-as a digit IO-ja. Nem mondom hogy biztos nem, de nem gyakori.

Akkor meg ugyanúgy ellenállásosztózni kell, ami épp ugyanazokat a problémákat fogja behozni, mint a digitális beolvasás esetén.

Vagy le kell másolni egy szkóp bemeneti áramkört, na az tudja amit kell.

Szerkesztve: 2022. 08. 12., p – 10:21

dupla:(