 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
urosg Član


Pridružen-a: Pet 27 Apr 2007 14:30 Prispevkov: 565 Aktiv.: 2.56
|
Objavljeno: Čet Avg 25, 2011 12:44 pm Naslov sporočila: CAN bus - vprašanje |
|
|
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 |
|
 |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.38 Kraj: Lovrenc na P.
|
Objavljeno: Čet Avg 25, 2011 1:38 pm Naslov sporočila: |
|
|
Ko sem delal CAN povezavo med Texasom in PIC-em je bil naj pomembnejši bit rate. Ostali parametri ne toliko. |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.75 Kraj: Kranj - struževo
|
Objavljeno: Čet Avg 25, 2011 9:25 pm Naslov sporočila: |
|
|
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  |
|
Nazaj na vrh |
|
 |
janiP Član

Pridružen-a: Čet 23 Okt 2008 23:00 Prispevkov: 145 Aktiv.: 0.72 Kraj: Ljubljana
|
Objavljeno: Čet Avg 25, 2011 11:34 pm Naslov sporočila: |
|
|
Na tej povezavi najdeš opis teh časovnih segmentov, priporočila in tabelo za izračun. |
|
Nazaj na vrh |
|
 |
urosg Član


Pridružen-a: Pet 27 Apr 2007 14:30 Prispevkov: 565 Aktiv.: 2.56
|
Objavljeno: Sob Avg 27, 2011 8:56 am Naslov sporočila: |
|
|
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 |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.75 Kraj: Kranj - struževo
|
Objavljeno: Ned Avg 28, 2011 11:32 am Naslov sporočila: |
|
|
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  |
|
Nazaj na vrh |
|
 |
urosg Član


Pridružen-a: Pet 27 Apr 2007 14:30 Prispevkov: 565 Aktiv.: 2.56
|
Objavljeno: Pon Avg 29, 2011 4:06 pm Naslov sporočila: |
|
|
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 |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.75 Kraj: Kranj - struževo
|
Objavljeno: Pon Avg 29, 2011 9:47 pm Naslov sporočila: |
|
|
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  |
|
Nazaj na vrh |
|
 |
urosg Član


Pridružen-a: Pet 27 Apr 2007 14:30 Prispevkov: 565 Aktiv.: 2.56
|
Objavljeno: Tor Avg 30, 2011 7:12 am Naslov sporočila: |
|
|
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 |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.75 Kraj: Kranj - struževo
|
Objavljeno: Tor Avg 30, 2011 9:00 am Naslov sporočila: |
|
|
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  |
|
Nazaj na vrh |
|
 |
urosg Član


Pridružen-a: Pet 27 Apr 2007 14:30 Prispevkov: 565 Aktiv.: 2.56
|
Objavljeno: Ned Sep 04, 2011 5:41 pm Naslov sporočila: |
|
|
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 |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.75 Kraj: Kranj - struževo
|
Objavljeno: Ned Sep 04, 2011 7:53 pm Naslov sporočila: |
|
|
Š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  |
|
Nazaj na vrh |
|
 |
|
|
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: 485 dni
Powered by phpBB © 2001, 2005 phpBB Group
|