www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

CAN (Controller Area Network)
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
.:alex:.
Član
Član



Pridružen-a: Sre 05 Mar 2008 11:51
Prispevkov: 24
Aktiv.: 0.11
Kraj: Domžale-Kamnik

PrispevekObjavljeno: Tor Dec 09, 2008 12:22 pm    Naslov sporočila:  CAN (Controller Area Network) Odgovori s citatom

A je mogoče kdo iz foruma že delal kej z CAN-om v arm-ih!Ker bi mi prišla vsaka informacija v zvezi z CAN-om zelo prav! Smile

Nazadnje urejal/a .:alex:. Tor Dec 09, 2008 1:47 pm; skupaj popravljeno 1 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
commander29
Član
Član



Pridružen-a: Pon 20 Nov 2006 15:24
Prispevkov: 47
Aktiv.: 0.21

PrispevekObjavljeno: Tor Dec 09, 2008 1:36 pm    Naslov sporočila:   Odgovori s citatom

Kaj te pa zanima?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
janiP
Član
Član



Pridružen-a: Čet 23 Okt 2008 23:00
Prispevkov: 145
Aktiv.: 0.72
Kraj: Ljubljana

PrispevekObjavljeno: Tor Dec 09, 2008 7:21 pm    Naslov sporočila:   Odgovori s citatom

CAN poznam precej dobro. Ne sicer v ARM-ih ampak logika je podobna.

Imam pa tudi kodo za CANopen, ki je zelo uporabna v raznih aplikacijah z mikrokontrolerji.


LP,
Jani
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
.:alex:.
Član
Član



Pridružen-a: Sre 05 Mar 2008 11:51
Prispevkov: 24
Aktiv.: 0.11
Kraj: Domžale-Kamnik

PrispevekObjavljeno: Sre Dec 10, 2008 8:34 am    Naslov sporočila:   Odgovori s citatom

Zanima me vse kar je povezano z CANom!Very Happy
Ker sem se sedaj sam srečal z to zadevo in bi mi prov prišal kakšen del kode kjer ste uporabljali CAN!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
ciko
Član
Član



Pridružen-a: Čet 27 Mar 2008 11:41
Prispevkov: 126
Aktiv.: 0.60
Kraj: Novo mesto

PrispevekObjavljeno: Sre Dec 10, 2008 8:47 am    Naslov sporočila:   Odgovori s citatom

Živjo!

Samo kodo boš moral nekje najdti na netu, kar se tiče uporabe in pojasnil, ti pa lahko pomagam. Jaz sem CAN uporabljal na PICih in LPCju vendar se razlikuje princip nastavljanja. Predvsem pri uporabi filtrov. Osebno mi je bil pri PICu bolj všeč, ker si resnično nastavil masko, medtem ko pri armu dodaš v tabelo IDje, ki jih želiš sprejemati. Zelo pomembno je, da ne dodaš v tabelo dvakrat isti ID. Pri prvih verzijah LPC2378 je prišlo do napake pri izvajanju kode. Mogoče so pri novejših verzijah to napako odpravili.

lp
Peter
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
janiP
Član
Član



Pridružen-a: Čet 23 Okt 2008 23:00
Prispevkov: 145
Aktiv.: 0.72
Kraj: Ljubljana

PrispevekObjavljeno: Sre Dec 10, 2008 11:37 am    Naslov sporočila:   Odgovori s citatom

Bom napisal nekaj o CAN-u:

CAN je bil originalno razvit za avtomobilska omrežja, kjer je več manjših senzorjev sporočalo svoje stanje. Eno CAN sporočilo lahko prenese do 8 bytov. Največje hitrosti prenosov so do 1 megabit na sekundo.

V vsakem sporočilu je vključenih še 11 (ali 29) bitov za naslov (identifier) in 15 bitov za CRC (kontrola napake), kar naredi CAN zelo varen in zanesljiv, posebno ker je CRC potrjen s strani vseh ostalih naprav v komunikaciji. Če ena sama naprava (med samim prenosom sporočila) ugotovi CRC napako, vse ostale naprave prezrejo sporočilo in le to gre v ponovno pošiljanje. Najboljše pri vsem tem pa je, da nam kot programerjem mikrokontrolerjev tega ni potrebno podrobno poznati, ker za vse poskrbi CAN modul znotraj mikrokontrolerja.

Še nekaj statistike: Če CAN omrežje dela pri 250 kbps 2000 ur letno, pri povprečni obremenitvi 25%, se neodkrita napaka pojavi enkrat v 1000 letih.

CAN naprave so ponavadi povezane med sabo ena za drugo s parico. Pri 1Mbps je maksimalna dolžina 40m, pri bolj običajnih 125kbps je dolžina 500m, pri 10kbps je nekaj km.

CAN je 'multi-master' omrežje. Katerakoli naprava lahko pošlje sporočilo kadarkoli. V primeru istočasnega pošiljanja dveh ali več sporočil, zmaga sporočilo z nižjim naslovom.

Sporočilo je poslano vsem ostalim napravam v omrežju. Od posamezne naprave je odvisno, ali je sporočilo z nekim naslovom zanjo zanimivo ali ne. Če ni, je filtrirano že na strojnem nivoju.

CAN se sedaj, poleg v prevoznih sredstvih, precej uporablja še v industriji, avtomatizaciji zgradb, itd.
Na osnovi CANa je razvitih nekaj više nivojskih protokolov, kot so: CANopen, DeviceNet, J1939, itd.

[vir za nekaj trditev je knjiga: Olaf Pfeiffer - Embedded Networking with CAN and CANopen]


LP,
Jani
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
MarkoM
Član
Član



Pridružen-a: Tor 12 Sep 2006 15:29
Prispevkov: 2825
Aktiv.: 12.38
Kraj: Lovrenc na P.

PrispevekObjavljeno: Sre Dec 10, 2008 11:48 am    Naslov sporočila:   Odgovori s citatom

.:alex:. je napisal/a:
Zanima me vse kar je povezano z CANom!Very Happy
Ker sem se sedaj sam srečal z to zadevo in bi mi prov prišal kakšen del kode kjer ste uporabljali CAN!


Ja, ne vem kje je problem? Knjižnice za CAN so spisane, inicializiraš bautrate, filter itd. Pokličeš funkcijo za pošiljanje in pošlješ 8bytov preko vodila določenemu naslovniku. Delal sem na PIC-ih in na Texasovih DSP (slednji imajo v k*** knjižnice) in je verjetno podobno tudi pri LPC-jih.
Wink
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
janiP
Član
Član



Pridružen-a: Čet 23 Okt 2008 23:00
Prispevkov: 145
Aktiv.: 0.72
Kraj: Ljubljana

PrispevekObjavljeno: Sre Dec 10, 2008 1:01 pm    Naslov sporočila:   Odgovori s citatom

Pa še nekaj o CANopen, s katerim se kar dosti ukvarjam:

Zamislimo si neko preprosto CAN omrežje: nekaj senzorjev na raznih mestih (vsak je svoja CAN naprava), nekaj aktuatorjev, kakšen krmilnik (ali dva).
Nek senzor je npr. skonfiguriran da periodično pošilja sporočilo o svojem stanju z naslovom 0x181. Drug senzor na naslovu 0x182, itd. En aktuator bo npr. sprejemal ukaz z naslova 0x201. Krmilnik bo sprejemal vse ukaze s senzorjev in pošiljal ukaze aktuatorjem.
Dokaj enostavna zadeva, ki v praksi precej zanesljivo deluje.

V praksi se pa stvari hitro začnejo nadgrajevati oz. komplicirati. Dobro je imeti možnost nastavljanja nekaj parametrov na posameznih senzorjih direktno s CAN vodila. Mogoče želimo nastaviti pogostost pošiljanja vrednosti s senzorja, ali pa naj se pošlje samo ob spremembi stanja. Želimo nastaviti, na katerem naslovu naj se pošilja stanje senzorja, itd.
Če se z napravo kaj čudnega dogaja, naj pošlje 'emergency message'. Naj periodično pošilja 'heartbeat', da druge naprave vejo, da je vse v redu.

Da ne bi z vsemi temi funkcionalnostmi ponovno 'izumljali kolesa', je dobro vedeti, da obstaja CANopen protokol, ki nam vse to omogoča.


CANopen je višenivojski protokol na osnovi CANa. Po eni strani je enostaven v smislu, da ne zahteva veliko nekih pravil za samo izvedbo protokola. Po drugi strani pa ponuja ogromno koristnih funkcionalnosti pri izvedbi omrežja. S svojimi 'device profili' se postavlja ob bok profibusu in tudi različnim industrijskim protokolom na osnovi etherneta.

Nekaj značilnosti:
    Jedro CANopen naprave je 'Object Dictionary'. To je imenik spremenljivk, ki se uporabljajo za komunikacijo, za 'device profile' ali pa čisto poljubno znotraj naše aplikacije. Te spremenljivke so čisto navadne kot ji poznamo v C-ju: char, int, unsigned, lahko so arrayi ali celo strukture. Vsaka spremenljivka ima svoj index in subindex. Z nekim 'mastrom' lahko dostopamo do katerekoli spremenljivke na katerikoli napravi v mreži.
    PDO sporočila so za prenašanja procesnih podatkov, npr. vrednost senzorja. Vsebujejo samo naslov in podatke, so praktično enaka kot 'navadna' CAN sporočila. Seveda pa jim je možno nastavljati naslov, vsebino, način pošiljanja (oz. sprejemanja).
    Nadzor nad omrežjem: NMT in 'Heartbeat' sporočila.
    Sporočila o napakah.
    Sinhronizacija med napravami.
    Na razpolago so razni 'device profili' za različne namene: npr.: za I/O module, za enkoderje, za pogone (nadzor hitrosti, momenta, pozicije, servo), dvigala v stavbah, vetrne turbine, fotovoltaika, itd.




Zdaj sem se pa razpisal Very Happy
Sicer ne delam reklame za CANopen, sem se pa kar nekaj ukvarjal z njim.

Če koga zanima je na razpolago prosta koda za CANopen:
http://canopennode.cvs.sourceforge.net/canopennode/

Spisal sem jo, ko sem imel še preveč časa Very Happy
Je pa precej profesionalno napisana in tudi deluje zelo zanesljivo na večih mojih projektih. Zaseda manjši del spomina mikrokontrolerja.

Trenutno je sicer napisana za dsPIC30F in dsPIC33F, je pa enostavno možno dodati tudi druge mikrokontrolerje, sploh LPCje. Seveda sem na razpolago za pomoč.


LP,
Jani
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
alessio
Član
Član



Pridružen-a: Pon 04 Dec 2006 8:39
Prispevkov: 363
Aktiv.: 1.61
Kraj: Ljubljana

PrispevekObjavljeno: Sre Dec 10, 2008 7:49 pm    Naslov sporočila:   Odgovori s citatom

Zdravo Jani,

hvala za nekaj razlage o CANopen.

Delam sicer s CAN-om in LPC2000 na parih projektih z custom low level protokolom,
zaenkrat pa še nisem imel potrebe/zahteve po CANopen. Čeprav se to zna kmalu spremeniti...

Iskal sem url za checkout tvojega stacka-a iz SF CVS-ja, pa ga nisem našel. Ga lahko napišeš tukaj?

Sicer pa sem videl, da si zadevo licenciral z GPL. Mislim, da je to za embedded applikacije lahko faktor, ki bo večino odvrnil od uporabe tega stacka.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
janiP
Član
Član



Pridružen-a: Čet 23 Okt 2008 23:00
Prispevkov: 145
Aktiv.: 0.72
Kraj: Ljubljana

PrispevekObjavljeno: Sre Dec 10, 2008 9:32 pm    Naslov sporočila:   Odgovori s citatom

alessio je napisal/a:

Iskal sem url za checkout tvojega stacka-a iz SF CVS-ja, pa ga nisem našel. Ga lahko napišeš tukaj?

Podrobnosti o CVS-ju so tukaj .
Sam sicer uporabljam tortoiseCVS. Za anonimen dostop so parametri sledeči (pogovorno okno CVS prevzemi):
vrednost CVSROOT:
:pserver:anonymous@canopennode.cvs.sourceforge.net:/cvsroot/canopennode
Moduli pa so trije (vsi so potrebni, naložiš jih v isti direktorij):
CANopen_stack
Example
Object_Dictionary_Editor



Object_Dictionary_Editor je web aplikacija, ki deluje v Firefoxu 3. Zaženeš jo tako, da s Firefoxom odpreš datoteko _project.html. Izgled je na sliki.


alessio je napisal/a:
Sicer pa sem videl, da si zadevo licenciral z GPL. Mislim, da je to za embedded applikacije lahko faktor, ki bo večino odvrnil od uporabe tega stacka.

Hvala za nasvet. Sicer mi licenca ni pomembna, samo nekaj mora biti. Kaj pa misliš o licenci LGPL, ki bi veljala samo za stack in ne za celotno aplikacijo?


LP,
Jani



CANopen.png
 Opis:
CANopen Object Dictionary Editor
 Velikost datoteke:  125.24 KB
 Pogledana:  134 krat

CANopen.png


Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
alessio
Član
Član



Pridružen-a: Pon 04 Dec 2006 8:39
Prispevkov: 363
Aktiv.: 1.61
Kraj: Ljubljana

PrispevekObjavljeno: Čet Dec 11, 2008 8:46 pm    Naslov sporočila:   Odgovori s citatom

janiP je napisal/a:

Kaj pa misliš o licenci LGPL, ki bi veljala samo za stack in ne za celotno aplikacijo?


Če imaš stack licenciran z GPL, potem bi moral uporabnik z uporabo tega stacka tudi vso svojo aplikacijo licencirati z GPL, kar med drugim pomeni tudi objavo vse svoje izvorne kode za aplikacijo.

LGPL je po mojem bolj primerna, razmisli pa še o manj restriktivni licenci kot je BSD ali MIT. Ena opcija, zelo interesantna po mojem mnenju, pa je primer pri FreeRTOS-u, uporablja namreč modified GPL.

S temi licencami je cela kolobocija, odločitev je odvisna od tebe, koliko bi rad zaščitil svoje delo in spodbujal FOSS.

Bo pa morda še Glitch rekel kakšno močno na to temo predvidevam... Wink
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
.:alex:.
Član
Član



Pridružen-a: Sre 05 Mar 2008 11:51
Prispevkov: 24
Aktiv.: 0.11
Kraj: Domžale-Kamnik

PrispevekObjavljeno: Pet Dec 12, 2008 9:39 am    Naslov sporočila:   Odgovori s citatom

Videm da vas je ker neki ki se oz. ste se že ukvrjali z can-om!V mojem primeru morem upoštevati J1939!Sedaj se spravim vse to pretuhtat potem pa vas začnem gnjavit Laughing
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
ciko
Član
Član



Pridružen-a: Čet 27 Mar 2008 11:41
Prispevkov: 126
Aktiv.: 0.60
Kraj: Novo mesto

PrispevekObjavljeno: Čet Dec 18, 2008 10:35 am    Naslov sporočila:   Odgovori s citatom

Še eno opozorilo:

LPC2378 ima napako v zvezi s CAN busom, kako je pa z ostalimi čipi pa ne vem. Če pride do zapolnitve bufferja se CAN bus zaklene in ne komunicera. Meni se je to zgodilo, ko sem debugiral (izvajanje kode je čakalo). Kako hitro se napolni buffer pri realnem izvajanju kode pa ne vem.

Lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
ciko
Član
Član



Pridružen-a: Čet 27 Mar 2008 11:41
Prispevkov: 126
Aktiv.: 0.60
Kraj: Novo mesto

PrispevekObjavljeno: Tor Jan 06, 2009 1:51 pm    Naslov sporočila:   Odgovori s citatom

Kot sem že omenil, ima LPC2378 bug pri can busu:

Introduction:
Each CAN controller provides a double Receive Buffer (RBX) per CAN channel to store incoming messages until they are processed by the CPU. Software task should read and save received data as soon as a message reception is signaled.
In cases, where both receive buffers are filled and the contents are not read before the third message
comes in, a CAN Data Overrun situation is signaled. This condition is signaled via the Status register and the Data Overrun Interrupt (if enabled).

Problem:
In a Data Overrun condition, the CAN controller is locked from further message reception.

Workaround:
1. Recovering from this situation is only possible with a soft reset to the CAN controller.

2. If software cannot read all messages in time before a third message comes in, it is recommend to change the acceptance filtering by adding further acceptance filter group(s) for messages, which are normally rejected. With this approach, the third incoming message is accepted and the Data Overrun condition is avoided. These additional messages are received with the corresponding
group index number can be easily identified and rejected by software.


Za prejem sporočil (RX) sem uporabil IRQ z drugo najvišjo prioriteto, vendar mi še vedno pride do overruna.

Ali ima kdo napisano proceduro odpravljanja napak? Sam sem naredil, vendar ne deluje vedno:

Koda:

//v IRQ rutini

    if (CAN1GSR & 0x02) {
        //data overrun

        //soft reset
        CAN1MOD |= 0x01;
       
        //morda bi bil potreben delay

        //pobrisi RM bit
        CAN1MOD &= ~0x01;
    }


Lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
ciko
Član
Član



Pridružen-a: Čet 27 Mar 2008 11:41
Prispevkov: 126
Aktiv.: 0.60
Kraj: Novo mesto

PrispevekObjavljeno: Čet Jan 08, 2009 12:49 pm    Naslov sporočila:   Odgovori s citatom

Can bus sem uporabil, ker imam veliko prometa, no saj ob inicializaciji. Vzel sem primer od Keil-a, ga predelal. Vse lepo in prav, dokler nisem začel testirati na večjem sistemu. Sedaj se mi pojavljajo različne napake. Malo sem pregledal po datasheetu o can busu in zasledil različne načine delovanja CAN busa, različni mode-i. Posebaj mi je v oko padel FULLCAN mode.

Ali lahko kdo opiše ta način s preprostimi besedami, oz kdaj se ga uporablja. Sam sem imel nekoliko težav z razumevanjem.

Hvala
Lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 486 dni


Powered by phpBB © 2001, 2005 phpBB Group