Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

CAN interfejs na fizickom nivou

[es] :: Elektronika :: Mikrokontroleri :: CAN interfejs na fizickom nivou

Strane: 1 2

[ Pregleda: 4714 | Odgovora: 25 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Stojan Trifunovic

Član broj: 15156
Poruke: 366
*.rs
Via: [es] mailing liste



+8 Profil

icon Re: CAN interfejs na fizickom nivou22.01.2009. u 19:56 - pre 185 meseci
Pa ako od CAN-a koristis samo fizicki nivo, razlike u odnosu na RS485 nema.

Glavna razlika izmedju RS485 i CAN drajvera (fizicki nivo layera) je u detekciji kolizije. CAN je moze detektovati, a RS485 ne. Da razjasnim, pod kolizijom se podrazumeva da dva drajvera istovremeno posalju na liniju razlicit podatak. Ako jedan posalje log. 0 a drugi log. 1, nastaje kolizija podataka.

Ovo je moguce zbog drajvera koji je izveden tako da poslata log. 0 uvek pregazi log. 1 (kao sto u I2C protokolu master ili slave slanjem logicke 0 "pregazi" logicku 1 generisanu pull-up otpornikom). To omogucava da nod koji je vec poceo sa slanjem logicke 1 detektuje da je na liniji i dalje log. 0, i prekine dalje slanje, odnosno prepusti dalju predaju onome ko je prvi zapoceo slanje logicke 0. Oblik signala svakog noda je specifican (recimo da svaki ima svoj unikatan serijski broj), i ukoliko pri istovremenom slanju tog serijskog broja (on se prvi salje) na liniji jedan nod detektuje da se predato i primljeno stanje ne slaze (neko drugi vec zapoceo komunikaciju), prepustice njemu dalji rad sve dok linija ne bude slobodna.

U praksi nije sve bas tako jer se ne moze govoriti o logickoj 0 i 1 u diferencijalnim signalima, ali takav je princip.

Ovakav princip omogucava mogucnost koja se ne srece kod ostalih komunikacionih protokola. Da bilo koji nod bez intervencije mastera (ukoliko master uopste postoji) u bilo kom trenutku moze poceti sa slanjem podataka. Da bi se ipak smanjio "upad" u vec zapocetu vezu, svi nodovi moraju odredjeno vreme "osluskivati" stanje na liniji, i tek ako je ona cista poceti sa predajom.

Ostale razlike (izlazna impedansa, maksimalna brzina i daljina) su otprilike podjednake. Mozda bi se jedan drajver pokazao bolji od drugog, ali mislim da bi se isto dobilo i sa drajverima drugih proizvodjaca. To su ipak samo finese.


Dallas 1-wire protokol sa vecim brojem nodova upravo zbog kolizije primenjuje slanje obicnog pa invertovanog bita masteru u slucaju poslate komande za iscitavanje njegovog serijskog broja. Jedino je na taj nacin moguce detektovati koliziju po prijemu drugog bita. CAN protokolom detekcija kolizije je omogucena u samom drajveru, na fizickom nivou.

I2C protokolom sa vecim brojem nodova master uvek diktira kompletnu komunikaciju pojedinacnim prozivkama nodova, tako da u njemu nema potrebe za detekcijom kolizije (dva noda ne mogu zapoceti istovremenu predaju).

RS485 protokolom komunikaciju moze ili diktirati master (kao kod I2C), ili se pak ona resava prenosom tokena (poruke kojom prethodni nod omogucava kontrolu nad linijom sledecem). Korekcija gresaka je ipak i ovde neophodna da token ne bi negde "zalutao" i tako se nepovratno izgubio. Postoje naravno i drugi nacini (u DMX512 protokolu master neprestano salje podatke svim slave redom, samo simpleksom).


To je znaci glavna razlika na fizickom nivou. Ukoliko ti je bitna detekcija kolizije, uzmi CAN, a ukoliko nije, koristi i dalje RS485. Uostalom, mozes koristiti i CAN drajvere umesto RS485 drajvera jer su (ukoliko ne koristis detekciju kolizije) kompatibilni (mozda je eventualno signal invertovan). Naravno, potrebno je obratiti paznju i na ostale finese (max broj nodova, duzina i sl.).

Mislim da je CAN drajver ipak u maloj prednosti zbog mogucnosti eksternog podesavanja (trimerom na SLOPE-CONTROL pinu) vremena prelaska sa log 0 na log 1 (i obrnuto) cime se moze smanjiti refleksija za konkretno okruzenje. Takodje i zbog bolje zastite u slucaju kvara pojedinacnih drajvera, kako se ne bi zablokirala linija.


Koliko vidim, nije ti bitan bas svaki bit, a izbegao bi korekciju gresaka. U tom slucaju moguce da bi ti simpleksni DMX512 odgovarao. Detaljnije o njemu imas u AN1076 sa www.microchip.com .

Pogledaj i prilog. U njemu su objasnjeni prakticni problemi koji se srecu pri konstrukciji mreze. Jeste da je za RS485, ali isto vazi i za CAN.


Za buduci rad, smatram da bi bilo bolje da ovladas i CAN protokolom. Ipak je on standardan, a buduci da je integrisan, omogucuje mikrokontroleru mnogo manji utrosak instrukcijskih ciklusa u odnosu na rucnu detekciju i korekciju gresaka. Buduci da si vec ovladao kompleksnijim USB protokolom, CAN ces lakse shvatiti. Pogledaj i poglavlje o razlikama izmedju pojedinih protokola sa mog sajta.
Prikačeni fajlovi
 
Odgovor na temu

mradomir
mradomir
Novi Sad

Član broj: 123964
Poruke: 169
82.117.202.*



+28 Profil

icon Re: CAN interfejs na fizickom nivou22.01.2009. u 20:17 - pre 185 meseci
Citat:
Po mom misljenju najbolje je da uzmes CAN controler (ako nije vec integrisan u uC) i interfejs (Transciever) i mirno spavas. Na jednoj strani samo upises sta hoces da posaljes, na drugoj strani primis poruku sa vjerovatnocom od (ErrorTransmitRate * 10EXP-11) da je to nedetektovana greska. Tesko da mozes bolje od toga za toliko malo posla koliko je potrebno za implementaciju toga i koliko to malo sve kosta.


Uf, glava me zabolela čitajući AT90CAN32 datasheet.
Nije baš tako jednostavno, možda je to cena sigurnosti prenosa.
Jel neko radio sa pomenutim MCU?

 
Odgovor na temu

Stojan Trifunovic

Član broj: 15156
Poruke: 366
*.rs
Via: [es] mailing liste



+8 Profil

icon Re: CAN interfejs na fizickom nivou22.01.2009. u 20:53 - pre 185 meseci
Da odmah unapred napomnem da nemam prakticnih iskustava ni sa CAN ni sa RS485 protokolom, tako da bi ipak bilo korisno kao sto je Odin D. naveo testirati hardver pre upotrebe.

Takodje, nije moguce "mesati" drajvere (da ih pola bude sa RS485 a pola sa CAN drajverima), cak iako se ne koristi kolizija (zbog razlicitih impedansi, ali i drugih razloga). Mozda bi RS485 drajveri cak mogli i podneti koliziju (sa njenom detekcijom pa bi se i oni mogli upotrebiti umesto CAN drajvera), ali oni jednostavno nisu namenjeni za takve stvari.


@mradomir
Probaj najpre da shvatis sam protokol. Imas ga odlicno objasnjenog u npr. MCP2510 datasheetu (sa www.microchip.com ). Posebno pogledaj data frame-ove i poglavlja sa prijemom i predajom poruka. Jednom kada shvatis protokol, lakse ces ukapirati kako je implementovan u mikrokontroleru.
 
Odgovor na temu

branko_g
Merna tehnika i elektronika

Član broj: 159227
Poruke: 756
*.static-fiber.styrion.net.



+9 Profil

icon Re: CAN interfejs na fizickom nivou23.01.2009. u 07:10 - pre 185 meseci
Citat:
Takodje, nije moguce "mesati" drajvere (da ih pola bude sa RS485 a pola sa CAN drajverima)...


Zašto ne?
RS485 drajver ima izlazni stepen koji radi u mosnom spoji, tako da je uključena ili jedna ili druga dijagonala
mosta tako da je na izlazima H i L napon +- ili -+ respektivno ,
a kod CAN busa je napon +-(dominantan, uključeni izlazni tranzistori)) ili
0V(recesivan, izlazni tranzistori isključeni).
Potrebo je samo PULL-UP otpornicima (H -Otpornik-Minus i L-Otpornik-Plus) ostvariti takvo stanje na busu
da kada je stanje CAN transivera recesivno ti PULL-UP otpornici drže BUS na -+ tako da je to stanje i za RS485
transiver logička "0" kao i za CAN transiver.
Pre par godina san našao u ELEKTOR-u jedan članak baš sa tom temom gde su prikazano i rešenje tog "problema".
Videću da ga pronađem i postaviću ga u ovom forumu.

Pozdrav.
 
Odgovor na temu

Stojan Trifunovic

Član broj: 15156
Poruke: 366
93.86.59.*



+8 Profil

icon Re: CAN interfejs na fizickom nivou23.01.2009. u 12:21 - pre 185 meseci
Pa dobro, uz takvo budzenje moglo bi raditi.

Mislio sam prvenstveno na pogorsanje karekteristika linije usled razlicitih impedansi CAN i RS485 drajvera, i eventualno njihovih drugacijih (brzih ili sporijih) odziva.
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.rs.



+7 Profil

icon Re: CAN interfejs na fizickom nivou23.01.2009. u 13:16 - pre 185 meseci
Daleko odoste...

Procitao sam sve o CAN-u i kako resava problem konflikta na liniji. Znam da svaki uredjaj zapocinje slanje na liniju prvo svojom adresom, i sve vreme slanja istovremeno cita sta je na liniji. Ako se jos neki uredjaj prijavio onda ce adresa na liniji da bude ona koja je najmanja (nule nadvladaju jedinice) i kada uredjaj procita adresu, a ona je manja od njegove on odustaje od daljeg slanja prepustajuci liniju uredjaju sa nizom adresom. Njegovo je samo da nadgleda liniju i da detektuje sledece idle stanje pa da ponovo pokusa sa slanjem. i td...

Kod mene je problem vrlo jednostavan: imam RS485, 9600 bida, koji radi u modu master - slave, broj bajtova koji se salju je manji od 10 i imam cek sumu . Dakle vrlo prosta stvar koja iskljucuje konflikt na liniji a zbog malog broja bajtova i cek suma je efikasna a zbog male brzine nije potrebno precizno podesavanje linije. Zelim samo da sirmovan kabl zamenim upredenom paricom i nista vise. Racunam da umesto RS485 drajvera iskoristim CAN drajver (ima ih koji su i pin to pin kompatibilni) jer moze da drajvuje vise cvorova, pa racunam da manje skuplja smetnje (sto ne mora da znaci sve dok se ne proba).

Takodje sam napomenu da zbog dodatnih zahteva ove godime moram da napravim novu verziju maticnog PCB-a uredjaja i tada cu mozda da uvedem CAN. Dakle, postavio sam problem kao privremeno resenje da izbegnem sirmovana kabl, a da nista ne menjam na postojecoj verziji uredjaja. Samo to.

Pozdrav svima.

 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: CAN interfejs na fizickom nivou

Strane: 1 2

[ Pregleda: 4714 | Odgovora: 25 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.