Chybující CAN sběrnice

Pokud Vam chybuje CAN sběrnice, využijte tento "CAN-Bus Troubleshooting Guide", kde naleznete několik tipů co překontrolovat a ověřit, aby jste chybu nebo poškozené zařízení nalezli.

1) Pokud zařízení vyvíjíte a testujete si odeslání dat na CAN, pamatujte na to, že Vaše zařízení musí mít protistranu, která data přijme. CAN rámec obsahuje ACK bit, odesílatel zprávy odesílá tento bit v recesivním stavu, příjemci však tento bit "stahují" do dominantní úrově a odesílatel toto kontroluje, tedy odesílá recesivní a kontroluje že čte dominantní. Pokud tedy Vaše zařízení odesílá zprávu a nikdo mu ji nepotvrdí, nastane chyba.

Stejně tak pokud máte jen jediného příjemce dat, nesmíte jej nastavovat do režimu listen only (řadič, can controller ) nebo silent mode (budič, CAN transceiver). V tomto režimu odesílatel také nedostane potvrzení. Mimochodem toto je častá chyba při připojení na FMS bránu. Zde se listen only mód z tohoto důvodu nenastavuje, narozdíl od připojení přímo například na motorový CAN.

2) Ověřte si, že všechna zařízení na CANu mají stejnou rychlost. Pokud je vyvíjíte, na internetu je možné najít nejrůznější kalkulačky nastavení registrů pro bitrate. Tyto registry nenastavují jen rychlost, ale i polohu vzorkovacího bodu. Ten se nastavuje obvykle na 75 až 87.5%. Vícenásobné vzorkování se používá na nižších rychlostech, kde je dostatek Tq. Je pravděpodobné, že pro obvyklé řadiče CANu při 1Mbit nebude vhodné vícenásobné vzorkování nastavit.

Vyborný kalkulátor nastavení je například na stránce http://www.bittiming.can-wiki.info/ . Věnujte poornost ovšem věte:

Use the value of the clock rate at the first stage of the BaudRatePrescaler BTR, not the clock of the controller or crystal (typically for a 16 MHz clocked NXP SJA1000 use '8').

Interní frekvence třeba u SJA1000 je totiž 1/2 použitého krystalu. Pokud větu přehlédnete, budete se divit, že zařízení komunikuje na dvojnásobné rychlosti než jste chtěli.

3) Překontrolujte zakončovací odpory. Správně se CAN bus zakončuje na obou koncích odporem 120 ohmu. Pro kontrolu deaktivujte všechna zařízení na CANu (odpojte napájení) a změřte odpor mezi CAN H a CAN L vodiči. Ideální hodnota je 60 ohmů, tedy 2 odpory paralelně. Například hodnota 40 ohmu znamená, že na CAN sběrnici jsou 3 zakončovací odpory. Ještě menší hodnoty pak mohou znamenat zkrat mezi vodiči nebo poškozený budič některého zařízení.

4) Vyvarujte se topologii CANu do hvězdy, topologie by měla být průběžná s maximální délkou odboček do 0.5 metru.

5) Pokud můžete, deaktivujte komunikaci mezi zařízeními (ty jsou ale stále zapnuté) a změřte napětí mezi CAN H a GND a stejně tak i mezi CAN L a GND. Je li napětí menší než cca 2V, lze předpokládat že některá z vodičů je poškozen.

Tímto způsobem si multimetrem můžete ověřit, který vodič je CAN H a který CAN L, pokud neznáte pinout a nemáte osciloskop. Předpoklad je že na CANu běží nějaká komunikace. Pro high speed CAN platí že na CAN H naměříte napěti mezi 2.5 až 3.5V. V případě CAN L pak naměříte napětí mezi 1.5 až 2.5V. Skutečné hodnoty závisejí na charakteru komunikace, zejména zatížení sběrnice.

Pamatujte že u 3V3 budičů jsou při dominantní úrovni mírně menší a rozdíl napětí vůči recesivnímu stavu není symetrický. Recesivní stav má u 3V3 budičů hodnotu 2.3V.

6) Na vypnutém CAN zařízení odpojeném od CANu a bez zakončovacího odporu změřte odpor mezi CAN H a GND a stejně tak mezi CAN L a GND. Je li naměřená hodnota nízká, je pravděpodobně počkozen budič. Naměřená hodnota bude v řádech jednotek až desítek mega ohmů dle použitého CAN bus budiče. Pokud nenaměříte nic, neznamená to ještě přerušený spoj nebo jinou závadu, pouze multimetr nemusí dokázat tuto hodnotu změřit. Porovnejte proto například hodnotu s jiným kusem stejného zařízení či změřte po zapnutí zařízení napětovou uroveň na CAN vodičích. Taktéž je možné změřit v tomto vypnutém stavu odpor mezi CAN H a CAN L, měl by mít hodnotu v řádech desítek kilo ohmů. Hodnota menší naž 10 kilo ohmů může znamenat poškození CAN budiče.

7) V případě že CAN vedení je stíněné, nezapomeňte že stínění se zapojuje jen na jedné straně. Pokud jsou zapojeny oba konce, může vodiči protékat proud, který způsobí že indukční a kapacitní vazbou se do CAN vodičů přenáší rušení.

8) Oddělte prostorově CAN vodiče od silových vodičů. Pozor zejména na závity mezi silovými a CAN budiči.

9) Při velkém rušení může místo klasického zakončovacího odporu pomoci zakončení zvané Split termination nebo Biased Split Termination.

10) Pokud některé zařízení nefunguje, máte jistotu že se náhodou nejedná o jinou verzi CANu? Například low speed, CAN má jiné úrovně signálu.

11) Velmi sporadické chyby na CANu může také způsobovat vysoké zatížení sběrnice (Bus load). Je vhodné CAN síť provozovat při zatížení max 60-70 procent. Nejde o to že by se tam již další data "nevlezla", ale o to že se nemusejí odeslat včas, přednost dostanou jiná data a následně dojde k signalizaci chyby, neboť příjemce data nedostal s požadovanou periodou. Pak je třeba přejít na větší komunikační rychlost, pokud to například délka CAN sběrnice dovoluje, nebo pro některá data snížit periodu odesílání dat tak, aby zatížení kleslo.

12) Před začátkem vývoje si prostudujte errata použitého CAN řadiče. Například externí řadič MCP 2510 má mnoho chyb a zejména chyba v synchronizaci, která nastává při malé zátěži CANu, je velmi nepříjemná. Její částečná eliminace je možná při použití přesných krystalových jednotek, ale ani tak není zcela eliminována.

13) Pozor na dodavatele, opravdu dodal co měl? Stalo se nám, že jsme objednali budiče TJA1055T. Od nejmenovaného dodavatele zboží dorazilo, na sáčku bylo označeni správné. Nicméně zařízení po osazení nefungovalo. Zběžným pohledem se zdálo že budič je správný. Ale byla to chyba, na pouzdře jsme přehlédli na konci označení "/3", to znamená že bez pull up rezistoru budič nepojede.....

TJA1055T_pull_up

14) Zákazník od nás nakupoval před dlouhou dobou CAN zařízení a provozoval je na rychlosti 10kb. Po dlouhé době objednal další a ono mu nefungovalo. Kde je chyba? Nové budiče CANu obsahují timeout funkci, které zabraňuje tomu, aby třeba MCU při své chybě (zamrznutí) odesílalo na sběrnici dominantní úroveň. Viz. dokumentace k TJA1051:

7.2.1 TXD dominant time-out functionA ‘TXD dominant time-out’ timer is started when pin TXD is set LOW. If the LOW state on pin TXD persists for longer than tto(dom)TXD, the transmitter is disabled, releasing the bus lines to recessive state. This function prevents a hardware and/or software application failure from driving the bus lines to a permanent dominant state (blocking all network communications). The TXD dominant time-out timer is reset when pin TXD is set HIGH. The TXD dominant time-out time also defines the minimum possible bit rate of 20 kbit/s.

Problém byl v tom, že původní zařízení používalo před X léty budič PCA82C250, u nově vyrobeného se použil TJA1051. Původní řadič PCA82C250 však nic takového neuměl, rychlost 10kb bez problému fungovala.

PCA82C250 TJA1051

15) Používáte li low speed CAN bus (fault-tolerant CAN), je sběrnice schopna pracovat i při přerušení jednoho z vodičů CANH/CANL, případně zkratu na zem nebo na napěti (Vcc nebo baterie). Protože CAN pak nepracuje diferenciálně, ale jako single wire, je více náchylný k rušení. Budiče jsou vybaveny obvykle výstupem ERR, který tutu situaci indikuje. Stav tohoto výstupu je vhodné monitorovat nebo prověřit.