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 bus - vprašanje

 
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
urosg
Član
Član



Pridružen-a: Pet 27 Apr 2007 14:30
Prispevkov: 565
Aktiv.: 2.56

PrispevekObjavljeno: Čet Avg 25, 2011 12:44 pm    Naslov sporočila:  CAN bus - vprašanje Odgovori s citatom

Sicer mogoče čisto neumno vprašanje pa vendar me zanima da vem kje iskat problem.
Namreč ravno se ukvarjam s CAN Busom in povezavo dveh naprav med seboj in sicer imam Elektronik.si Board z dodanim CAN Transcieverjem (SN65HVD1040) ter Olimex LPC-P2129 ploščo, ki ima gor LPC2129 (prvi primerki, ni /00 ali /01 revizija) in ves pripadajoč čipovje.

Zanima me slednje, ali morajo biti parametri okoli bitrate-a in samplinga enako nastavljeni na vseh napravah da se znajo pravilno sporazumeti ali je pomemben samo bitrate da je enak na vseh napravah... ?

Namreč pri nastavljanju CANbus-a je potrebno nastaviti clock divider, TSEG1, TSEG2 ter SJW...

Sama povezava oz. komunikacija med portoma na Olimex-ovi plošči mi deluje, samo ko pa dodam še Elektronik.si board pa ne dobim nič kar pošiljam iz tega boarda.
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: Čet Avg 25, 2011 1:38 pm    Naslov sporočila:   Odgovori s citatom

Ko sem delal CAN povezavo med Texasom in PIC-em je bil naj pomembnejši bit rate. Ostali parametri ne toliko.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.75
Kraj: Kranj - struževo

PrispevekObjavljeno: Čet Avg 25, 2011 9:25 pm    Naslov sporočila:   Odgovori s citatom

Bitrate, dolžina frejma, dolžina IDja in sprejemni filtri morajo biti pravilno nastavljeni.
In seveda TX/RX opcije can vmesnika in povezava do io pinov.
Za STM imaš poleg knjižnice delujoč example.

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
janiP
Član
Član



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

PrispevekObjavljeno: Čet Avg 25, 2011 11:34 pm    Naslov sporočila:   Odgovori s citatom

Na tej povezavi najdeš opis teh časovnih segmentov, priporočila in tabelo za izračun.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
urosg
Član
Član



Pridružen-a: Pet 27 Apr 2007 14:30
Prispevkov: 565
Aktiv.: 2.56

PrispevekObjavljeno: Sob Avg 27, 2011 8:56 am    Naslov sporočila:   Odgovori s citatom

Malo sem se še igral in skopiral nastavitve IO pinov iz STLIB example-a, to je bila prva bistvena razlika (jaz sem imel oba pina na Alternate Function).

Sedaj je pa stanje tako, da dokler STM32 ne pošlje ničesar na bus vse teže lepo, ko pa enkrat poiskusim poslati en frame iz STM32a se pa potem komunikacija na busu ustavi.

Po izračunih naj bi bila obe napravi nastavljeni na 125kbit-s.

Kakšna ideja kje bi moral še kaj iskati?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.75
Kraj: Kranj - struževo

PrispevekObjavljeno: Ned Avg 28, 2011 11:32 am    Naslov sporočila:   Odgovori s citatom

Osciloskop?
Bus mora biti v Idle stanju ves čas ko ni komunikacije.

Spremljaš lahko dogajanje v statusnih registrih CAN modula, mogoče boš tam kaj videl.

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
urosg
Član
Član



Pridružen-a: Pet 27 Apr 2007 14:30
Prispevkov: 565
Aktiv.: 2.56

PrispevekObjavljeno: Pon Avg 29, 2011 4:06 pm    Naslov sporočila:   Odgovori s citatom

Sem se se malo igral, pa me zanima se to, glede na to, da so vsi parametri potrebni za to da se doloci bitrate CAN bus-a, TSEG1, TSEG2, Clock divider in me zanima kako je potem ko imas razlicne naprave z razlicnimi cclk-ji.

Npr. LPC tece z 12MHz oscilatorjem in PLL potem tece na 48MHz, clock divider je pa nastavljen na 4, kar potem znese nazaj 12MHz za peripheral clock.
ST tece pa z internim 8MHz clockom in brez peripheral dividerja.

Kateri parametri so potem tisti ki so pomembni da so enaki?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.75
Kraj: Kranj - struževo

PrispevekObjavljeno: Pon Avg 29, 2011 9:47 pm    Naslov sporočila:   Odgovori s citatom

urosg je napisal/a:
Kateri parametri so potem tisti ki so pomembni da so enaki?

Bitrate, dolžina frejma, dolžina IDja in sprejemni filtri morajo biti pravilno nastavljeni (filtri so lahko izklopljeni).

Ne pozabi na terminacijo vodila.

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
urosg
Član
Član



Pridružen-a: Pet 27 Apr 2007 14:30
Prispevkov: 565
Aktiv.: 2.56

PrispevekObjavljeno: Tor Avg 30, 2011 7:12 am    Naslov sporočila:   Odgovori s citatom

Vodilo je terminirano na vsaki strani z 120Ohm uporom, IDji so vsi 11bitni, se pravi če potem prav razumem moram TSEG1, TSEG2, SJW nastaviti na obeh enako in potem preračunat prescaler na vsakem posebej, da dobim ena bitrate ven?

Vendar po dokumentaciji ki sem jo našel na FreeScale (http://www.freescale.com/files/microcontrollers/doc/app_note/AN1798.pdf) strani gre ravno obratno, začne se računati iz željenega bitrate-a in CCLKja iz česar se dobi ostale parametre.

Sicer sem testiral tudi brez terminiranja, ker imam povezavo med enotami vse skupaj dolgo cca. 50cm in želim stestirati na majhnih bitrate-ih (125kbit/s) in deluje brez terminiranja.


Nazadnje urejal/a urosg Tor Avg 30, 2011 5:21 pm; skupaj popravljeno 1 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.75
Kraj: Kranj - struževo

PrispevekObjavljeno: Tor Avg 30, 2011 9:00 am    Naslov sporočila:   Odgovori s citatom

urosg je napisal/a:
začne se računati iz željenega bitrate-a in CCLKja iz česar se dobi ostale parametre.

Tako ja. Prescaler za grobo nastavitev in bit timingi za fino nastavitev.

urosg je napisal/a:
...deluje brez terminiranja.

včasih pa tudi ne... Sem imel tak primer.

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
urosg
Član
Član



Pridružen-a: Pet 27 Apr 2007 14:30
Prispevkov: 565
Aktiv.: 2.56

PrispevekObjavljeno: Ned Sep 04, 2011 5:41 pm    Naslov sporočila: icon_great  Odgovori s citatom

Mi je uspelo vzpostaviti povezavo med LPC2129 in STM32F103.

Najprej je potrebno ugotoviti ce je mozno z vsemi prescalerji dobiti enak clock za sam CAN (to je bil recimo pri LPC2129 problem ker je imela plosca gor 14.7456MHz) in sem ga zamenjal z 12MHz, potem sem pa na obeh ploscah nastavil prescaler tako da sem dobil ven 1MHz clock za CAN peripheral potem pa po formulah, ki so dosegljive na netu (prejsnji post - link) in primerih uporabil izracunane parametre na obeh ploscah enake (treba zelo podrobno prebrati navodila) in voila, cudezno zacelo delovati.

Hvala vsem za poste, ki so mi na razlicne nacine pomagali da sem prisel do konca.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.75
Kraj: Kranj - struževo

PrispevekObjavljeno: Ned Sep 04, 2011 7:53 pm    Naslov sporočila:   Odgovori s citatom

Še ena podrobnost - poskusi imeti parametre za bit timing čim večje.
CAN hardver zna sam popravljati te parametre ob resinhronizaciji (do +/- 4 tq). Zato je potrebno, da imaš v nastavitvah še nekaj zaloge vrednosti (toleranco).

V J1939 standardu (avtomobilski CAN 250 kbaud) je zahteva, da je Sample Point: čim bližje, vendar ne kasneje kot na 7/8 trajanja bita. Sample Point je točka med BS1 in BS2.
Ker lahko CAN tudi samodejno skrajšuje tisti zadnji čas, sem jaz vzel takšne parametre, da je Sample Point na 6/8 bita in ga avtomatsko lahko prestavi do 7/8.
Time Quanta imam nastavljen na dokaj majhen čas, torej se resinhronizacija izvaja v kratkih (finih) korakih.

Koda:
  // CAN je na APB1
  // PCLK1  = 36 MHz  (HCLK   / 2) (APB1)

  // 250 kbaud -> NominalBitTime = 4 us
  // NominalBitTime = 1tq + tBS1 + tBS2 = 4 us
  //  tq = (BRP[9:0] + 1) x tPCLK
  //  tPCLK = time period of the APB clock
  //  tq refers to the Time quantum

  // SAE J1939-11    3.14  (pg. 9)

  //    It is recommended that a tq be selected which permits the sample point (see Figure 5) to be located as close
  //    to but not later than 7/8 of a bit time (0.875x4uS = 3.5uS). This provides the best tradeoff between

  //    propagation delay and clock tolerance.
  // SYNC = 1 tq
  // BS1 (PROP_SEG + PHASE_SEG1) = 11 tq
  // BS2 (PHASE_SEG2) = 4 tq
  // prescaler = (36 MHz / ((1+11+4) x Baud)) - 1 = 8
  // tq = 0,250 us

  CAN_InitStructure.CAN_SJW = CAN_SJW_2tq;     // maximum number of time quanta the CAN hardware is allowed to lengthen or shorten a bit to perform resynchronization (1tq..4tq)
  CAN_InitStructure.CAN_BS1 = CAN_BS1_11tq;    // time quanta in Bit Segment 1 (1tq..16tq)
  CAN_InitStructure.CAN_BS2 = CAN_BS2_4tq;     // time quanta in Bit Segment 2 (1tq..8tq)
  CAN_InitStructure.CAN_Prescaler = 8;         // Specifies the length of a time quantum. It ranges from 1 to 1024.
  CAN_Init(CAN1, &CAN_InitStructure);

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
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
Stran 1 od 1

 
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