bidirectional RS485 ?

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Användarvisningsbild
jesse
Inlägg: 9241
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

bidirectional RS485 ?

Inlägg av jesse »

Nu blir jag lite fundersam när jag ska koppla en bidirectional RS485 på bara två linor, dvs. half duplex.
Jag tänker mig att det bara ska behövas en RX och en TX till RS485-drivern från processorn för att det ska fungera. Men om jag kopplar 2 st sådana drivers (tänkte använda LTC485 eller ekvivalent) MOT VARANDRA SÅ BLIR DET VÄL KORTSLUTNING ?

Bild Bild

Det finns ju en pinne som heter DE som uppenbarligen måste sättas on vid sändning och omedelbart off efteråt för att inte orsaka kortslutning när den på andra sidan svarar ?

Dels verkar det lite ogenomtänkt. Om båda startar konversation samtidigt? Och om jag kör hårdvaru-UART i processorn så blr det ju extra jobbigt om jag måste shifta ytterligare en pinne "sänd / ta emot" vid varje sändning. Måste man verkligen göra det, eller finns det nån lösning där DE alltid kan vara "on" och man både kan sända och ta emot data? Annars måste ju båda processorerna ha stenkoll så att de inte pratar i mun på varandra!

Alternativet, som jag hade föreställt mig, var att vem som helst skulle kunna prata när de andras datautgång är "hög" - dvs passiv, så som det är på t.ex. I²C. Men det kräver väl en open -collector lösning, och det är väl långt ifrån RS485 antar jag?

Vitsen med att jag vii använda RS485 är ju att det funkar relativt säkert på lite längre avstånd. Nu ska jag visserligen inte ha mer än ca 10 meter (vid 1 MHz) men I²C klarar ju knappt en halvmeter, vad jag förstår.

Finns det andra lösningar med den funktion jag söker, dvs:

* kan ta emot data när TX är hög.
* kan skicka och ta emot med bara två trådar (plus GND)
* minst 10 meter och 1 Mbps

(RS232 klarar ju bara 100Kbps och 5 volts logiska nivåer antagligen inte så långt vid 1 MHz ?)

I mitt fall är dessutom slavkretsen "korkad", dvs. den vet inte om den tar emot data eller sänder, utan har alltid sin RX och TX aktiva. (när den tar emot data är då TX hög, men det är den ju också då den sänder ettor) så den kan ju inte ge någon styrsignal till DE-pinnen.
Användarvisningsbild
Icecap
Inlägg: 26784
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: bidirectional RS485 ?

Inlägg av Icecap »

Alltså... RS485 är half-duplex, vill du ha simplex heter det RS422.

Men man gör så att båda drivkretsar lyssnar konstant, den ena (mastern?) byter då till att sända (en förfråga om data kanske) varefter den byter till att lyssna, den "andra" svarar då vid att slå kretsen till sända-läge och skicka data/svar och när det är klart slås kretsen till lyssna-läge igen.

Ytterst enkelt egentligen, kräver dock att man har ett tydlige protokoll med känd blockstorlek (inte nödvändigtvis statisk storlek) samt att man kan slå av sändaren när HELA sista byten är skickat klart men normalt är det knappast ett problem.
Användarvisningsbild
jesse
Inlägg: 9241
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: bidirectional RS485 ?

Inlägg av jesse »

Måste nog skrota idén om RS485 om det är så. Som sagt, slavkretsen kan inte signalera när den sänder, så det funkar inte.
Användarvisningsbild
Icecap
Inlägg: 26784
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: bidirectional RS485 ?

Inlägg av Icecap »

"slavkretsen kan inte signalera när den sänder"?
Vad menas?

Kan kretsen inte styra drivkretsen?
Eller menar du att slaven ska skicka signal till mastern om att den vill sända?

Är det det senare har du totalt missuppfattat!
Tomgång: slav lyssnar, master lyssnar.
Master styr/frågar: slav lyssnar, master sänder.
Slav svarar: slav sänder, master lyssnar

Vad är problemet? Att du inte har en pinne ledig till att styra riktningen på slaven?
Användarvisningsbild
jesse
Inlägg: 9241
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: bidirectional RS485 ?

Inlägg av jesse »

Slaven är en specialkrets (en 12 kanals AD-omvandlare) med skiftregister som skiftar ut data och skiftar in kontrollregister mm... denna kan inte "tala om" för RS485 kretsen att "nu sänds data", alltså ingen pinne ut som kan styra LTC485'ans DE-pinne (sänd-enable). Kan ju placera en µC i mellan men känner att det skulle vara enklare med nån mer direkt lösning.

Så jag har : AVR med inbyggd hårdvaru SPI i ena änden, 3 meter kabel med 8 trådar (ethernetkabel), och så två st. sådana 12-kanals AD i andra änden som ska ha var sin egen "chip select" signal.

Enklast, om jag vill köra på RS485 spåret, så får det bli snarare RS422 då, med en driver för varje tråd, och då kommer jag upp i 2x5 trådar + GND + VSS dvs. 12 ledare :x
Chip-select är dock inga snabba grejer, så de kan vara enkla ledare. Då får jag 10 ledare. Om jag kunde para ihop DI och DO till en bidirectional data så kommer jag ner i 8 ledare.

Upptäckte att faktiskt Canbus fungerar i princip som en open-collector med pull-up motstånd, och kan därmed fungera i båda riktningarna utan problem. Och den är ju erkänt bra i störande miljöer , klarar 1Mbps minst 10 meter. Så om jag bara kör datalinjen som en canbus borde den klara sig bra. (ska läsa lite mer om det nu, sen blir det provkörning på 6 meters lina.)
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47698
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: bidirectional RS485 ?

Inlägg av TomasL »

du kan ju alltid köra duplex på 485, då slipper du att enabla sändaren, dock blir det 4 trådar
Användarvisningsbild
Icecap
Inlägg: 26784
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: bidirectional RS485 ?

Inlägg av Icecap »

Och då är det faktisk 2 st RS422 det är tala om då men drivkretsen kan fint vara den samma fast då med "låst" riktning.

Och ja, jag tycker också att det är dumt med olika namn på samma funktion men RS422 är simplex och RS485 är half duplex fast spänningsnivåer är identiska och sändare och mottagare kan vara lika, i fallet med RS485 ska sändaren dock kunde sättas i 3-state.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47698
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: bidirectional RS485 ?

Inlägg av TomasL »

Den stora skillnaden mellan 422 och 485 är:
RS422 Point To Point dvs endast två enheter på linan.
RS485 Multidrop, dvs det kan finnas flera enheter på linan.
Användarvisningsbild
jesse
Inlägg: 9241
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: bidirectional RS485 ?

Inlägg av jesse »

hm.. jag tror jag kör med canbus-tranceivers. De fungerar utmärkt om jag inte bara sänder nollor på databussen för länge (sändarna har dominant time-out). Och på klockan kör jag enkelriktade differentiella drivers och receivers, kan ju köra LVDS kanske (Low voltage differential signaling) sen ska det nog fungera. Lite hemmasnickrat kanske, men å andra sidan kommer aldrig något annat att anslutas där ändå. Bara det fungerar.

Thomas: jag vet att jag rör ihop det en del. Och det blir ju inte bättre för att alla sidor som handlar om rs422/485 bara berättar lite om funktionen, inte allt. Dock så kan ju en tranceiver vara både rs422 och rs485. Men jag trodde faktiskt att RS485 kunde existera som "delad" dvs full duplex med 4 linor.

canbus driver MCP2551
FIN1001 - 3.3V LVDS 1-Bit High Speed Differential Driver
FIN1002 - LVDS 1-Bit High Speed Differential Receiver

(angående LVDS var det någon som talade löst om att det inte dög till långa avstånd (>50cm) och inte heller tålde störningar. Maxim har testat sina LVDS-kretsar och fått följande resultat : 30 meter partvinnad kabel, 400Mbps, Överförda bitar: 1.73 x 10^13. Error bits: 0,Test time:> 10hrs. Jag tror jag ska klara mig med 5 meter , 0.5 Mbps :P )
Senast redigerad av jesse 29 november 2009, 22:58:49, redigerad totalt 1 gång.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47698
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: bidirectional RS485 ?

Inlägg av TomasL »

Jo det gör den också, men det finns bara en master, resten är slavar, och har man flera slavar så måste sändarna stängas av på de slavar som inte sänder.

Detta innebär att en slav aldrig kan sända på eget bevåg utan allt styrs från mastern.
Normalt skickar mastern ett meddelande, som slaven i fråga svarar på, sedan skickar mastern till nästa klient osv.
Det innebär naturligtvis att mastern hela tiden måste polla slavarna en efter en.
Har man bara två enheter, dvs en master och en slav, så kan man låta slaven få sända hela tiden på en duplexbuss.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: bidirectional RS485 ?

Inlägg av blueint »

Jag har för mig att om man har en bit kabel emellan ~0,5 meter så går det bra elektriskt med "krockar".
Användarvisningsbild
jesse
Inlägg: 9241
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: bidirectional RS485 ?

Inlägg av jesse »

nja... känns ju inte sååå rätt. Det räcker ju inte att kretsarna inte ska brinna upp, de ska ju tolka "krocken" rätt också, dvs. dominerande bit (låg) ska vinna över "Hög". Annars blir det nog ingen bra datakommunikation. I praktiken skulle mottagaren sända konstant "hög" ut på sin sida, samtidigt som sändaren ska försöka få fram sitt budskap genom att togga mellan hög, låg.... jag tror att den enda som kommer att kunna läsa det meddelandet är sändaren själv. :foliehatt:
xxargs
Inlägg: 10189
Blev medlem: 23 september 2006, 14:28:27
Ort: Södertälje

Re: bidirectional RS485 ?

Inlägg av xxargs »

låter som ni nu funderar på lösningar som man redan gjorde på telegrafens tid i slutet av 1800-talet för att kunna telegrafera samtidigt som ta emot telegrafi på samma tråd, även telefonen använder samma teknik, dvs. använda hybrid/gaffel/direktiv riktkopplare (kärt barn har många namn) i båda ändarna - den vägen så blir det också 'automatiskt' terminerat på andra ändan även om drivern sänder fullt på båda sidorna samtidigt.

Nackdelen är dock att lösningen är bara ända till ända kommunikation utan avtapp till slavar mitt på linjen. För en slav som lyssnar är informationen obegriplig blandat om man bara lyssnar mitt på linjen genom att mäta spänningen eller strömmen.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: bidirectional RS485 ?

Inlägg av blueint »

0) Om den bit som läses från linjen skiljer sig från den som skickas ut så kan man utgå från att meddlandet blivit förstört.
1) Om mottagande enhet mottar meddelandet med inkorrekt checksumma, och därmed kastar det så kan man utgå från att meddelandet blivit förstört.

Mao det går att hantera situationen på flera sätt. Men även drivkretsen brukar ha inbyggda skydd.

För Analog devices " ADM2485: High Speed, Isolated RS-485 Transceiver with Integrated Transformer Driver":
Output Short-Circuit Current 60 - 200 mA.

"The device has current-limiting and thermal shutdown features to protect against output short circuits and situations where bus contention might cause excessive power dissipation."

Cat5 kabel har en resistans på ~0,188 Ω/m.
Användarvisningsbild
jesse
Inlägg: 9241
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: bidirectional RS485 ?

Inlägg av jesse »

Nej, jag ska undvika kortslutning.
Nackdelen är dock att lösningen är bara ända till ända kommunikation utan avtapp till slavar mitt på linjen. För en slav som lyssnar är informationen obegriplig blandat om man bara lyssnar mitt på linjen genom att mäta spänningen eller strömmen.
Det är kanske möjligt. Men nu har jag bara en slav i andra änden.
Skriv svar