And grind eller open-drain på databus?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

And grind eller open-drain på databus?

Inlägg av jesse »

Vanligtvis använder man ju open-drain eller open-collector med ett pull-up motstånd i databussar med flera slavar. Jag ska göra en synkron databuss med upp till 16 slavar och totalt ca 3 meter kabel. Jag kommer att använda vanlig 5 volt logiska nivåer - alltså inga differentiella linor. Den ska klara datahastigheter på 600 kbit / sekund.

Jag har testat lite med open collector och pull-up motstånd på ca 3k3 och det verkar ju fungera (upp till 10 meter), men det är på gränsen - kanske 3k3 är lite för högt motstånd för att inte få för långa omslagstider. Kan tänka mig att 330 ohm ger distinktare omslag och mindre risk för störningar, men tycker det slösar onödigt med ström (15 mA).

Kom på att "open-collector"-lösningen egentligen är en AND-funktion, så varför inte använda en AND-grind istället, så blir ju omslagen supersnabba och något pull-up behövs i princip inte.

Exempel A är med AND-grind och exempel B är med open drain:

Bild
(kretsarna sänker upp till 25 mA)

Det går ju att cadda ett kretskort som passar båda varianterna, om jag bara sätter en jumper som förbinder "ingående" och "utgående" SDO (slave data output) i exempel B. (glömde rita in den på bilden).

För / nackdelar med open-drain / AND-grind:

Open drain: hög ström, långsammare up-flank, samma databuss hela vägen. (=fördel vid kontaktering: jag kan sätta IDC-kontakter med jämna mellanrum på samma kabel och få det mycket enkelt)

AND grind: propagation delay adderas vid varje grind (dock inget problem vid < 16 grindar), låg ström, SDO linjen måste separeras vid varje slav = separata datalinjer mellan varje slav = kräver separata kontakter och seriekoppling.

Om jag väljer open-drain med 1k pull-up (5 mA) - hur lång fördröjning på uppåtflanken kan jag räkna med i ett nät som ovan ( 16 slavar, 3 meter flatkabel) - kommer det att vara tillförlitligt med god marginal vid 600 kbps eller bör jag cadda så jag kan använda AND-grindar också för säkerhets skull. ( då måste jag ha två kontakter på varje slav , en "in" och en "ut" = bökigare.

Ska man köra 300 Mbps så krävs det andra lösningar, men jag tycker mina 600 kbps är så pass långsamt att det inte ska behövas så avancerade interface.
Användarvisningsbild
Schnegelwerfer
Inlägg: 1863
Blev medlem: 8 november 2004, 13:46:56

Re: And grind eller open-drain på databus?

Inlägg av Schnegelwerfer »

En fördel med open drain/kollektor är ju att man slipper "kortslutningssituationen" där en sändare (hög) driver ström direkt till en annan sändare (låg). Hur har du tänkt att lösa bussarbitreringen?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46878
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: And grind eller open-drain på databus?

Inlägg av TomasL »

Du får räkna på buss kapacitansen.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: And grind eller open-drain på databus?

Inlägg av blueint »

Kika på hur SCSI löst problematiken. Men det låter som att en Open-Collector är vettig lösning.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: And grind eller open-drain på databus?

Inlägg av jesse »

Schnegelwerfer: Med AND-grindar så uppstår ju inga krockar - en eller flera datalinjer kan gå låga - då går ju utgången på grinden låg, dvs fungerar precis som om det vore open-drain, fast med fördelen att när nollan "släpper" så blir det en aktiv etta på utgången, inte en långsam RC-beroende uppgång.

Arbitrering? behövs inte... Det är ju en synkron SPI buss: Det finns en master som adresserar slavarna antingen en och en eller globalt. I det senare så ska svaret endast vara "nolla" = upptagen, "etta" = klar (med bearbetning av en instruktion) ... där ska nollan vara dominerande så att "mastern" får en "etta" när alla slavar är klara.

TomasL: tja.. enda sättet för mig att räkna på det är att koppla upp en buss, köra ett pulståg ut på en open-drain samtidigt som jag har ett "lämpligt" pull-up mostånd, och sedan titta på hur det ser ut i oscilloskop. Sen är det väl bara att välja hur lång fördröjning man kan godkänna. Har just nu bara inget att koppla upp ... det jag ska koppla ihop finns inte än.

blueint: SCSI??, hårddiskinterfacet? Det verkar ju vara en djungel av standarder... men det kan ju vara intressant. Som sagt, mer än 1 Mbps är inte intressant.

Efter att ha funderat ett tag så lutar det nog åt open-collector - Det ger mig möjligheten att kontaktera smidigare - så troligtvis vinner det förslaget (det är ju beprövat!). Eftersom jag har löst strömförsörjningen av bussen på ett bättre sätt har jag inte några problem längre med att den drar 10-20 mA.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46878
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: And grind eller open-drain på databus?

Inlägg av TomasL »

Börja med att lägga ihop kapacitanserna för alla enheter, du hittar det i databladen förmodligen samt även kabelns.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46878
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: And grind eller open-drain på databus?

Inlägg av TomasL »

Men, åandra sidan förstår jag inte riktigt vad du är ute efter.
Ligger alla slavar i serie eller ligger dem parallellt?
Ligger dem parallellt måste du ha 3-state utgångar (i princip), fixas enkelt med en 3-S inverterare med enableingång.
Användarvisningsbild
baron3d
EF Sponsor
Inlägg: 1352
Blev medlem: 1 oktober 2005, 23:58:43
Ort: Torestorp

Re: And grind eller open-drain på databus?

Inlägg av baron3d »

Strömförbrukningen som du beräknat gäller bara när du sänder en "0".
När du skickar "1" eller när du inte skickar något, drar pullup-motståndet inget!
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: And grind eller open-drain på databus?

Inlägg av blueint »

Det drar energi att ladda upp och ur kabel + transceiver kapacitanser, förmodligen försumbart i energiförbrukning. Men kan ha betydelse för maximal ström i utgångssteg.

jesse, SCSI kanske har flera standarder. Men den elektriska principen är rätt standard. Kika på SCSI-2 med sin aktiva terminering och bus där man bara kan klämma på nya enheter efter behov.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: And grind eller open-drain på databus?

Inlägg av jesse »

Tyvärr kan jag inte välja system som jag vill, jag är ganska låst till hur slavarna ser ut och framför allt utrymmet på kretskortet. Men en liten open-drain eller AND-krets i SOT23 passar bra. (utgångarna som de är är 5-volts logiska, vilka jag har ritat ut som trekanter / buffertar på teckningen). Jag har inte någon information om vilken slav som ska sända, så tristate fungerar inte. (har alltså ingen signal som avgör när den ska vara aktiv eller inte)

Jag kan inte se vad det är för kapacitans på utgången på t.ex. MC74VHC1G07D från ON-semiconductors. Det är väl den plus banan på kretskortet + kontakten + kabeln + ingången på mastern som blir totala kapacitansen.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46878
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: And grind eller open-drain på databus?

Inlägg av TomasL »

Jodå, du kan visst använda tristate, jag gör det på våra SPI-bussar.

Koppla så här:
IckeInverterad Buffer med Inverterande Enableingång. (74AHCG125G 73-834-82 73-834-90) Enkretslogik o SOT353 kapsel

Ingången till noll.
Tristate/enableingång till slavens utgång, pull-upp på linan.

Funktionen blir då, när din slavs utgång blir hög, går buffern i tristate, linan dras då upp av pulluppen, vilket ger en "Etta".
När slaven skickar en nolla, enablas bufferns utgång, eftersom ingången är "nollad" blir utgången noll
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: And grind eller open-drain på databus?

Inlägg av jesse »

Jo, givetvis kan jag koppla så - det blir ju detsamma som en open-drain i princip. LVC1G125/126 finns ju.
Skriv svar