A CAN-busz (Controller Area Network) az egyik legelterjedtebb ipari buszrendszer — eredetileg gépjárművekhez fejlesztették ki, ma gyártósori vezérlésektől a mezőgazdasági gépekig mindenhol megtalálod. Ebben a fejezetben megérted, hogyan „veszekszik el” több eszköz azon, ki küldhet éppen üzenetet a közös vezetéken, mit tartalmaz egy CAN-üzenet, és hogyan találod meg a hibát egy oszcilloszkóppal.
2.1 A CAN-busz felépítése
Soros, multi-drop (több eszközös) ipari buszrendszer, amelynek adatkapcsolati rétegét nemzetközileg az ISO 11898-1, fizikai rétegét (nagy sebességű változat) az ISO 11898-2 szabvány rögzíti. A protokoll a Bosch CAN Specification 2.0 nevű gyártói specifikációjából nőtt ki — ebből indult ki az ISO 11898-1 is —, és mára szinte minden ipari ágazatban használják.
A CAN-buszra csatlakozó minden eszközt csomópontnak (node) hívjuk. Egy tipikus csomópont felépítése:
- MCU (mikrovezérlő, microcontroller unit): ez futtatja az alkalmazási programot, és döntést hoz arról, mikor és mit küld a buszra.
- CAN-vezérlő (CAN controller): ez alakítja át az MCU adatait CAN-protokoll szerinti keretekké (és fordítva) — sok mai mikrovezérlőben ez már be van építve, de ez típusfüggő: az adott MCU adatlapja mondja meg, van-e benne CAN-vezérlő.
- CAN-adóvevő (CAN transceiver): ez a fizikai illesztő áramkör, amely a vezérlő logikai jelét a buszon megjelenő elektromos jellé alakítja, és fordítva.
A CAN-busz két vezetéken — CAN_H (High) és CAN_L (Low) — vitt, differenciális (szimmetrikus) jelet használ, ugyanazon elven, mint az RS-485 (lásd 1.4.): a vevő a két vezeték KÖZTI feszültségkülönbséget érzékeli, ami nagy zavartűrést biztosít.
Lezárás és ellenőrzése méréssel
A nagy sebességű CAN-busz (ISO 11898-2) mindkét VÉGÉN egy-egy 120 Ω-os lezáró ellenállást (terminátort) igényel a CAN_H és CAN_L vezeték között. Ha ez hiányzik vagy hibás, a jel visszaverődik a vezeték végéről, és zavarja az átvitelt — jellemzően véletlenszerű, nehezen reprodukálható hibákat okoz.
Kapcsold ki a busz összes eszközét (feszültségmentesítve!), majd multiméterrel mérd meg a CAN_H és CAN_L vezeték közti ellenállást a busz egyik végén. A két terminátor a busz két végén a mérőműszer felől nézve PÁRHUZAMOSAN kapcsolódik, tehát az eredő ellenállás 120 Ω ‖ 120 Ω = 60 Ω — ennyit kell mérned. Ha az érték ettől jelentősen eltér, keresd meg, hiányzik-e egy terminátor, vagy sérült-e egy vezeték (a kiértékelést a 2.6. hibaelhárítási lépéssora részletezi).
Az ellenállásmérés csak feszültségmentes állapotban ad helyes és biztonságos eredményt — ha a busz aktív, a multiméter és az eszközök is károsodhatnak, az eredmény pedig félrevezető lesz.
2.2 Műszaki jellemzők
Domináns és recesszív állapot
Az az elektromos állapot a CAN-buszon, amikor a CAN_H és a CAN_L feszültsége határozottan eltér egymástól — ha BÁRMELYIK eszköz dominánsat küld, a busz dominánssá válik, függetlenül attól, hogy más eszközök közben mit küldenek.
Az „alapállapot” a buszon — csak akkor jelenik meg, ha MINDEN csatlakoztatott eszköz recesszívet küld (vagy éppen nem küld semmit).
Ez az egyszerű fizikai szabály — a domináns mindig „felülírja” a recesszívet — a teljes ütközéskezelés (2.4.) alapja.
Az alábbi két érték a Texas Instruments CAN-adóvevőkről szóló alkalmazási jegyzeteiből származik, és mindkettő 50–65 Ω-os terhelésre vonatkozik (vagyis szabályosan, két 120 Ω-os terminátorral lezárt buszra):
- Recesszív állapotban mindkét vezeték (CAN_H és CAN_L) egy közös, kb. a tápfeszültség felének megfelelő szintre (V_CC/2) van „gyengén” felhúzva — a köztük mért differenciális feszültség (V_OD) legfeljebb 50 mV.
- Domináns állapotban a meghajtó áramkör aktívan szétnyitja a két vezetéket — a differenciális feszültségnek legalább 1,5 V-nak kell lennie.
Maga az ISO 11898-2 szabványszöveg fizetős, a jegyzet összeállításakor nem állt rendelkezésre; ezek tehát a szabványt követő gyártói adatlap-értékek, nem a szabvány szó szerinti idézetei.
Ez a nagy különbség (50 mV az 1,5 V-hoz képest) az, ami a vevőnek egyértelműen és megbízhatóan felismerhetővé teszi a két állapot közti különbséget, még zajos környezetben is.
Csatlakozók
Bár a CAN-szabvány önmagában nem ír elő kötelező csatlakozótípust, a CiA (CAN in Automation) 303-1 ajánlása egy 9 pólusú D-Sub (DE-9) csatlakozót javasol az interoperabilitás érdekében — ezt sok gyártó követi, hogy az eszközök kompatibilisek legyenek egymással.
A CiA-303-1 szerinti jellemző kiosztás:
| Tű | Jel | Leírás |
|---|---|---|
| 2 | CAN_L | CAN-buszjel (domináns alacsony) |
| 3 | CAN_GND | CAN-föld |
| 5 | CAN_SHLD | opcionális árnyékolás |
| 7 | CAN_H | CAN-buszjel (domináns magas) |
| 9 | CAN_V+ | opcionális külső pozitív tápfeszültség |
A CAN_V+ egy OPCIONÁLIS tápláb: az ajánlás azt mondja meg, hogy a 9. tűre külső pozitív tápfeszültség KERÜLHET, azt viszont NEM, hogy mekkora. A tényleges érték eszköz- és gyártófüggő, és a CAN-adóvevők tápfeszültsége sem egységes (a mai eszközök között 3,3 V-os és 5 V-os adóvevő is van). Mielőtt bármit rákötsz erre a lábra, keresd ki a KONKRÉT eszköz adatlapján a megengedett tápfeszültséget. A megengedettnél nagyobb feszültség visszafordíthatatlanul tönkreteszi az adóvevőt — és ezt a hibát a kábelben kell majd keresned, nem a szoftverben, tehát órákat viszi el.
A táblázat a CiA 303-1 ajánlás jellemző kiosztását mutatja, tájékoztató jelleggel. Élesben soha ne eszerint köss be egy eszközt: mindig az adott gyártó dokumentációjából ellenőrizd a tűkiosztást, mert a D-Sub csak ajánlás, nem kötelező szabvány.
A 9 pólusú D-Sub csak EGY AJÁNLÁS, nem kötelező szabvány — ipari környezetben ettől eltérő csatlakozótípusokkal (körcsatlakozók, csavaros sorkapcsok) is találkozol. Mindig a konkrét eszköz dokumentációjából kell megállapítani a tényleges kiosztást.
Kis és nagy sebességű változat
A CAN-nak két fő fizikai réteg-változata van:
- High-Speed CAN (ISO 11898-2): a „hagyományos”, nagy sebességű (jellemzően 125 kbit/s–1 Mbit/s) változat, kettős végén lezárt (120 Ω) csavart érpárral.
- Low-Speed Fault-Tolerant CAN (ISO 11898-3): alacsonyabb sebességű, de HIBATŰRŐBB — egyetlen vezeték szakadása esetén is képes (csökkentett teljesítménnyel) tovább működni. Jellemzően kevésbé időkritikus alkalmazásokban (például gépjárművek karosszéria-elektronikájában) terjedt el.
Sebesség és távolság kapcsolata
Akárcsak az RS-485-nél (1.4.), a CAN-busznál is fordítottan arányos a sebesség és a megbízhatóan elérhető távolság. A CiA (a CAN-t gondozó szakmai szervezet) CANopen ajánlása szerint jellemző, iparban elfogadott értékek:
| Sebesség | Buszhossz | Max. leágazás (stub) hossz |
|---|---|---|
| 1 Mbit/s | 25 m | 1,5 m |
| 500 kbit/s | 100 m | 5,5 m |
| 250 kbit/s | 250 m | 11 m |
| 125 kbit/s | 500 m | 22 m |
| 50 kbit/s | 1000 m | 55 m |
| 20 kbit/s | 2500 m | 137,5 m |
A fenti értékek egy elterjedt szakmai ajánlásból (CiA/CANopen) származnak — a konkrét rendszertervezésnél mindig az adott gyártó adatlapját és a tényleges kábelparamétereket (keresztmetszet, kapacitás) kell figyelembe venni.
2.3 Adatkeret felépítése és mezői
A CAN-üzenet (keret) a legfontosabb és legtöbbet vizsgált eleme a protokollnak. A klasszikus, 11 bites azonosítós („Standard Format”, CAN 2.0A) adatkeret fő mezői sorrendben:
- SOF (Start of Frame) — egyetlen domináns bit, jelzi a keret kezdetét.
- Azonosító mező (Identifier) — 11 bit; ez határozza meg egyszerre az üzenet TARTALMÁT (mire vonatkozik) és a PRIORITÁSÁT (lásd 2.4.).
- RTR bit — megkülönbözteti az adatkeretet (adatot tartalmaz) a távkerettől (Remote Frame, amely adatot KÉR egy másik eszköztől).
- Vezérlőmező, benne a DLC (Data Length Code) — megadja, hány bájt adat következik (0-8 bájt).
- Adatmező — a tényleges átvitt adat, 0-8 bájt.
- CRC-mező — a küldő egy ellenőrzőösszeget (cyclic redundancy check) számol a küldött bitekből, és ezt küldi el; a vevő újraszámolja, és ha nem egyezik, hibát jelez.
- ACK-mező (nyugtázás) — bármelyik eszköz, amelyik hibátlanul fogadta az üzenetet, dominánsra írja felül ezt a bitet — így a KÜLDŐ tudja, hogy legalább egy vevő rendben megkapta.
- EOF (End of Frame) — jelzi a keret végét.
A bővített („Extended Format”, CAN 2.0B) keret ugyanezt a szerkezetet követi, de egy hosszabb, 29 bites azonosítóval — ez több egyedi üzenettípus megkülönböztetését teszi lehetővé nagyobb rendszerekben.
A klasszikus CAN kis, gyakori, rövid üzenetekre lett tervezve (pl. egy szenzorérték, egy állapotjelzés) — nem nagy adatmennyiség (fájl, kép) átvitelére. Ha egy alkalmazásnak nagyobb adatmezőre van szüksége, arra egy újabb változat, a CAN FD (Flexible Data-Rate) való, de ez már túlmutat ennek a fejezetnek a keretein.
Jelalakok, jelszintek
Az átvitel NRZ (Non-Return-to-Zero) kódolású: a jelszint a bit teljes idejére állandó marad (nem tér vissza egy köztes szintre minden bit után), és bitstuffinggel egészül ki: ha 5 egymást követő azonos bit (5 domináns vagy 5 recesszív egymás után) fordulna elő, a küldő automatikusan beszúr egy ellentétes polaritású „stuff bitet”. Ennek két célja van:
- biztosítja, hogy elég gyakran legyen jelváltás a szinkronban tartáshoz;
- a stuff-szabály megsértése (ha egy vevő 6 egymás utáni azonos bitet lát) MAGA IS hibajelzés (stuff error, lásd 2.5.).
Csatlakoztass egy digitális oszcilloszkópot (vagy CAN-elemzőt) a busz CAN_H és CAN_L vezetékére, differenciális mérési móddal (vagy két csatornán, majd a két jel különbségeként kiértékelve). Küldj el egy ismert tartalmú üzenetet, és azonosítsd a képernyőn a keret egyes mezőit (SOF, azonosító, DLC, adat, CRC, ACK, EOF) a fenti felépítés alapján.
2.4 Ütközéskezelés: bitkódolás, arbitráció, prioritás
Mivel a CAN-busz megosztott — több eszköz is csatlakozik ugyanarra a vezetékpárra —, elkerülhetetlen, hogy néha egyszerre TÖBB eszköz akar küldeni. A CAN erre egy elegáns, nem destruktív (adatvesztés nélküli) megoldást ad: az arbitrációt.
Amikor több csomópont egyszerre kezd el küldeni, mindegyik figyeli a buszt, MIKÖZBEN küld. Ha egy csomópont recesszív bitet küldött, de a buszon dominánsat lát (mert egy másik csomópont alacsonyabb azonosítóval küldött), akkor AZONNAL visszalép, és csak figyelővé válik — a „győztes” csomópont észre sem veszi, hogy ütközés történt, zavartalanul folytatja az üzenetét.
A „győztes” mindig az az eszköz, amelyiknek a legkisebb NUMERIKUS ÉRTÉKŰ azonosítója (CAN ID) van — ez a rendszer egyben azt is jelenti, hogy az azonosító egyben a PRIORITÁS is: minél kisebb az azonosító, annál magasabb a prioritás (annál „fontosabb”, sürgősebb üzenetről van szó).
Sok más buszrendszernél (pl. Modbus, lásd 4. fejezet) az eszköz CÍME csak azt mondja meg, KI a címzett. A CAN-nál az azonosító EGYSZERRE mondja meg, miről szól az üzenet, ÉS hogy milyen sürgős — ezért a CAN-rendszer tervezésekor gondosan kell kiosztani az azonosítókat: a valóban időkritikus üzenetek (pl. vészleállítás) kapják a legkisebb (legmagasabb prioritású) azonosítót.
Kidolgozott példa: az arbitráció bitről bitre
Nézzük meg számokkal, mi történik a buszon. Két csomópont pontosan egyszerre kezd küldeni, standard (11 bites azonosítós) formátumban:
- az A csomópont azonosítója 0x100 (decimálisan 256),
- a B csomópont azonosítója 0x200 (decimálisan 512).
Első lépés: írd fel a két azonosítót 11 biten, a legnagyobb helyi értékű (MSB) bittel kezdve. A 256 kettes számrendszerben egyetlen 1-est tartalmaz, a 8-as helyi értéken; az 512 szintén egyetlen 1-est, eggyel feljebb, a 9-es helyi értéken:
A (0x100): 0 0 1 0 0 0 0 0 0 0 0
B (0x200): 0 1 0 0 0 0 0 0 0 0 0
^ ^
| +-- itt dől el minden (2. bit)
+---- azonos bit, még nincs döntés (1. bit, MSB)Második lépés: fordítsd le a biteket buszállapotra. A logikai 0 = domináns, a logikai 1 = recesszív (2.2.), és a domináns mindig felülírja a recesszívet. Mindkét csomópont figyeli a buszt, miközben küld:
| Bit sorszáma | A küld | B küld | A buszon megjelenő állapot | Mi történik |
|---|---|---|---|---|
| 1. (MSB) | 0 → domináns | 0 → domináns | domináns | Mindkettő azt látja a buszon, amit küldött. Nincs döntés, mennek tovább. |
| 2. | 0 → domináns | 1 → recesszív | domináns (A húzza le) | B recesszívet küldött, de dominánsat lát → B azonnal visszalép, és csak figyel. |
| 3–11. | 0 → domináns | (már csak figyel) | A bitjei | A zavartalanul küldi végig a keretet. |
Eredmény: A nyer, mert a 2. bitnél nála állt domináns bit — vagyis a kisebb numerikus értékű azonosító nyert. B üzenete NEM veszett el és nem sérült: B egyszerűen megvárja, míg a busz felszabadul, és újrapróbálkozik.
Nem kell szabályt magolnod: a bitenkénti összehasonlítás automatikusan a kisebb számot hozza ki győztesnek. Ha ugyanis két bináris szám először egy adott helyi értéken tér el, ott a kisebbiknek áll 0 (domináns), a nagyobbiknak 1 (recesszív) — és a domináns nyer.
Állíts be két csomópontot úgy, hogy (majdnem) egyszerre próbáljanak küldeni, eltérő azonosítóval. Oszcilloszkópon vagy CAN-elemzőn figyeld meg, hogyan „adja fel” az alacsonyabb prioritású (nagyobb numerikus értékű azonosítójú) csomópont az üzenetküldést, és próbálja újra, amint a busz szabaddá válik.
Az azonosító mező szerepe az adatfogadásban — szűrés (filtering)
Az arbitráción túl az azonosítónak van egy MÁSIK, egészen más jellegű szerepe is: eldönti, hogy egy adott csomópont EGYÁLTALÁN FELDOLGOZZA-e a beérkező üzenetet.
Minden CAN-csomópont (pontosabban annak vevő áramköre) rendelkezik egy vagy több elfogadási szűrővel, amely összeveti a beérkező üzenet azonosítóját egy előre beállított mintával. Ha az azonosító illeszkedik a szűrőre, a csomópont FELDOLGOZZA (átadja a mikrovezérlőnek) az üzenetet; ha nem illeszkedik, egyszerűen FIGYELMEN KÍVÜL HAGYJA.
Ez azért fontos, mert a CAN-busz broadcast jellegű: MINDEN üzenetet MINDEN csatlakoztatott eszköz „hall” (nincs pontcím, mint a forrás/cél modellnél, lásd 1.3.) — a szűrés nélkül minden eszköznek fel kellene dolgoznia MINDEN üzenetet, ami feleslegesen terhelné a mikrovezérlőt.
Egy gyártósori vezérlőrendszerben egy hőmérséklet-érzékelő csomópont beállíthatja a szűrőjét úgy, hogy csak a saját azonosítójára címzett konfigurációs üzeneteket és az általánosan közzétett vészleállító azonosítót fogadja el — minden más forgalmat (pl. más érzékelők adatait) a hardveres szűrő szintjén, a mikrovezérlő terhelése nélkül eldob.
2.5 Hibakezelés
A CAN-busz egyik legfontosabb tulajdonsága a beépített, automatikus hibafelismerés és -kezelés.
Hibakeret
Ha egy csomópont hibát észlel az átvitel közben (bit-, stuff-, CRC-, forma- vagy nyugtázási hiba), azonnal egy hibakeretet küld a buszra. Ez törli az adott (hibás) üzenetet minden csomópont számára — a hiba azonnal, az egész hálózat számára láthatóvá válik, nem csak a küldő és egy vevő között marad rejtve.
Idézz elő szándékosan egy hibát, és figyeld meg oszcilloszkópon a megjelenő hibakeretet. A legmegbízhatóbb módszer erre nem a kábel bántása, hanem a konfiguráció elrontása: állítsd az egyik csomópontot a többitől ELTÉRŐ bitsebességre. Ez a csomópont ettől kezdve nem tudja helyesen értelmezni a többiek kereteit, folyamatosan hibát észlel, és sorozatban küldi a hibakereteket — vagyis a jelenség biztosan és azonnal előáll. (Terminátort kihúzni vagy csatlakozót meglazítani rövid, lassú laborbuszon nem feltétlenül vezet hibakerethez: a reflexió ilyenkor még nem biztos, hogy elrontja a bitet, és hiába vársz.) Utána azonnal állítsd vissza az eredeti bitsebességet.
Hibakezelési módszer: három állapot
Minden CAN-csomópont vezet egy küldési és egy fogadási hibaszámlálót. Ez alapján három állapotot különböztetünk meg:
A normál működési állapot: a csomópont teljes értékű hálózati tag, aktívan tud hibát jelezni.
Ha a hibaszámláló túllép egy küszöböt, a csomópont továbbra is részt vesz a kommunikációban, de „visszafogottabban” — kevésbé zavarhatja a többi eszköz forgalmát a saját hibajelzéseivel.
Ha a küldési hibaszámláló túllép egy magasabb küszöböt, a csomópont TELJESEN leválik a buszról — nem küld és nem fogad többé, amíg újra nem indítják. Ez egy védelmi mechanizmus: megakadályozza, hogy egy folyamatosan hibázó eszköz tönkretegye a teljes hálózat kommunikációját.
Ha egy diagnosztikai eszköz azt jelzi, hogy egy csomópont „Bus-Off” állapotban van, az azt jelenti, hogy AZ ADOTT csomópont saját magát véd(t)te le, mert túl sok hibát okozott. A hibakeresést ezen az EGY csomóponton (kábelezés, terminátor, tápellátás) kell kezdeni, nem a teljes hálózaton.
2.6 Gyakorlat: rendszerkiépítés, konfigurálás, forgalomtesztelés, hibaelhárítás
- Építs ki egy legalább két csomópontos CAN-hálózatot (két fejlesztőpanel vagy egy panel + egy szimulátor), megfelelő (120 Ω, mindkét végponton) lezárással.
- Mérd meg és jegyezd fel a lezárási ellenállást (2.1. gyakorlat mintájára).
- Konfiguráld be mindkét eszközt azonos átviteli sebességre.
- Küldj üzeneteket különböző azonosítókkal, és oszcilloszkóppal vagy CAN-elemzővel ellenőrizd az adatkeret felépítését (2.2. gyakorlat).
- Idézz elő szándékos ütközést (2.3. gyakorlat) és egy hibát (2.4. gyakorlat), dokumentáld a megfigyelt viselkedést.
- Készíts rövid jegyzőkönyvet: mért lezárási érték, beállított sebesség, a megfigyelt arbitráció és hibakeret leírása.
Rendszerezett hibaelhárítás: mit ellenőrizz és milyen sorrendben
Ha egy CAN-busz „nem megy”, a leggyakoribb hiba az, hogy a szerelő találomra kapkod: kicserél egy kábelt, újratölti a programot, cserél egy eszközt — és közben nem tudja, mit zárt már ki. A hibakeresés akkor gyors, ha rögzített sorrendben haladsz, a legegyszerűbb és legolcsóbban ellenőrizhető okoktól a bonyolultabbak felé. A CAN-nál ez a sorrend: előbb a fizika (vezeték, lezárás, táp), utána a konfiguráció, végül a jelszint és a hibás csomópont beazonosítása.
CAN-BUSZ HIBAELHÁRÍTÁSI LÉPÉSSOR
1. LEZÁRÁS MÉRÉSE (feszültségmentes állapotban!)
Kapcsold le a busz tápellátását, majd mérj ellenállást
CAN_H és CAN_L között. Két ép, 120 Ω-os terminátor
párhuzamosan 60 Ω-ot ad (2.1. gyakorlat).
kb. 60 Ω a lezárás rendben, tovább a 2. pontra
kb. 120 Ω csak EGY terminátor van a buszon:
a másik hiányzik, vagy a hozzá vezető
szakasz megszakadt
sokkal több egyik terminátor sincs bekötve, vagy a
vagy szakadás vezeték elszakadt a mérési pont és a
terminátorok között
kb. 0 Ω CAN_H és CAN_L rövidre zárva
(sérült kábel, rossz kötés)
2. VEZETÉKEZÉS ÉS POLARITÁS
Ellenőrizd csomópontonként, hogy a CAN_H a CAN_H-ra és a
CAN_L a CAN_L-re megy. Felcserélve a differenciális jel
polaritása fordított, ezért a vevő nem ismeri fel helyesen
a domináns és a recesszív állapotot: a csomópont süket.
Nézd át a csatlakozók meghúzását és a leágazások (stub)
hosszát is - a megengedett leágazás-hosszat a 2.2. alfejezet
táblázata adja meg a sebesség függvényében.
3. TÁPELLÁTÁS
Csomópontonként ellenőrizd, hogy az eszköz és külön az
adóvevő megkapja-e a saját, adatlap szerinti
tápfeszültségét. A 9 pólusú D-Sub 9. tűjére (CAN_V+) SOHA
ne kapcsolj olyan feszültséget, amit az adott eszköz
adatlapja nem ír elő.
4. AZONOS BITSEBESSÉG MINDEN CSOMÓPONTON
Minden csomópontnak UGYANAZZAL a bitsebességgel kell
dolgoznia. Ha csak egy is eltérő értékre van állítva, az
nem tudja helyesen értelmezni a többiek kereteit,
folyamatosan hibát észlel, és hibakeretekkel (2.5.)
árasztja el a buszt. Ilyenkor látszólag "az egész hálózat"
rossz, pedig egyetlen beállítás a hibás.
5. JELSZINTEK OSZCILLOSZKÓPPAL
Mérd meg a CAN_H és CAN_L közötti differenciális
feszültséget forgalom közben:
recesszív állapot legfeljebb 50 mV
domináns állapot legalább 1,5 V
Mindkét érték a szabályosan, két 120 Ω-os terminátorral
lezárt buszra vonatkozik (2.2.). Ha a domináns szint
jelentősen kisebb a vártnál, a meghajtó a megengedettnél
kisebb terhelést lát: tipikusan a kelleténél több
terminátor van a buszon.
6. A HIBÁS CSOMÓPONT BEAZONOSÍTÁSA
Kérdezd le a csomópontok hibaállapotát a diagnosztikai
eszközzel. Amelyik Bus-Off állapotban van, az önmagát
választotta le - a hibakeresést AZON AZ EGY csomóponton
folytasd (kábelezés, terminátor, tápellátás), ne a teljes
hálózaton (2.5.). Ha a hiba csak EGY csomópont
lecsatlakoztatása után szűnik meg, megvan a hibás eszköz.
7. DOKUMENTÁLÁS
Jegyezd fel, mit mértél és mit zártál ki vele. A következő
hibánál ez a jegyzőkönyv a leggyorsabb kiindulópont.A leggyakoribb hiba az, hogy valaki a 4. ponttal (szoftver, bitsebesség) kezdi, mert azt lehet a legkényelmesebben, a laptop mellől ellenőrizni. Ha viszont közben egy terminátor hiányzik, a beállításokat órákig nézegetheted: a hiba a vezetéken van, nem a programban. Az 1., 2. és 3. pont együtt néhány perc, és a hibák jelentős részét már itt megtalálod.
Párokban dolgozzatok. Az egyikőtök a másik háta mögött elront EGYET a működő CAN-hálózaton (például kivesz egy terminátort, felcserél egy CAN_H/CAN_L eret egy csatlakozóban, vagy átállítja az egyik csomópont bitsebességét), és nem árulja el, mit tett. A másiknak a fenti lépéssor szerint, SORRENDBEN haladva kell megtalálnia a hibát.
Vezess mérési jegyzőkönyvet: melyik lépésnél mit mértél, mi volt a mért érték, és mit zártál ki vele. A végén hasonlítsátok össze: hányadik lépésnél derült ki a hiba, és megtaláltad volna-e gyorsabban, ha kihagysz lépéseket. Cseréljetek szerepet.
Összefoglalás
- A CAN-busz csomópontjai MCU-ból, CAN-vezérlőből és CAN-adóvevőből épülnek fel, csavart érpáron (CAN_H, CAN_L), mindkét végén 120 Ω-os lezárással.
- A busz két állapotot ismer: domináns (0) mindig felülírja a recesszívet (1).
- A High-Speed CAN (ISO 11898-2) nagyobb sebességű, a Low-Speed Fault-Tolerant CAN (ISO 11898-3) hibatűrőbb, de lassabb változat.
- A sebesség és a megbízhatóan elérhető távolság fordítottan arányos.
- Az adatkeret fő mezői: SOF, azonosító (egyben prioritás is), RTR, vezérlőmező/DLC, adatmező, CRC, ACK, EOF.
- Az arbitráció bitenkénti, nem destruktív ütközésfeloldás: a legkisebb numerikus azonosítójú (legmagasabb prioritású) eszköz nyer, a többi visszalép és újrapróbálkozik.
- Hiba esetén a csomópont hibakeretet küld, amely törli a hibás üzenetet az egész hálózaton.
- Három hibaállapot van: Error Active (normál), Error Passive (korlátozott) és Bus-Off (teljes leválás) — ez utóbbi védelmi mechanizmus, nem „elromlott busz”.
- Domináns állapotban a differenciális feszültség legalább 1,5 V, recesszívben legfeljebb 50 mV (mindkettő 50–65 Ω-os terhelésre, gyártói adatlap-érték) — ez a nagy különbség teszi megbízhatóvá az állapotfelismerést.
- A CiA 303-1 egy 9 pólusú D-Sub csatlakozót ajánl, de ez nem kötelező szabvány, és a CAN_V+ tápláb feszültségét nem rögzíti: azt mindig az eszköz adatlapja adja meg.
- Az elfogadási szűrő (acceptance filter) dönti el, hogy egy csomópont feldolgozza-e a beérkező, broadcast jellegű üzenetet, vagy figyelmen kívül hagyja.
- A hibaelhárítás rögzített sorrendben gyors: lezárás mérése → vezetékezés és polaritás → tápellátás → azonos bitsebesség → jelszintek oszcilloszkóppal → a Bus-Off csomópont beazonosítása → dokumentálás.
Ellenőrző kérdések
- Milyen három fő részből épül fel egy CAN-csomópont?
- Mire való a 120 Ω-os lezáró ellenállás, és mi történik, ha hiányzik?
- Mekkora a differenciális feszültség dominánsban, illetve recesszívben, és miért fontos ez a nagy különbség?
- Mi a különbség a domináns és a recesszív állapot között, és melyik „győz”, ha egyszerre mindkettőt küldi valaki a buszra?
- Mi a különbség a High-Speed és a Low-Speed Fault-Tolerant CAN között?
- Sorold fel az adatkeret fő mezőit sorrendben, és mondd el, mire való a CRC-mező.
- Hogyan dönti el a CAN-busz, melyik eszköz „nyer”, ha egyszerre kezd küldeni kettő? Miért nevezzük ezt nem destruktív ütközésfeloldásnak?
- Mi a hibakeret szerepe?
- Mit jelent a Bus-Off állapot, és miért nem tekintjük egyszerűen „hibának”?
- Mire való az elfogadási szűrő (acceptance filter), és miért van rá szükség egy broadcast jellegű buszon?
- Egy CAN-busz nem kommunikál. Milyen sorrendben ellenőrzöd az okokat, és miért nem a szoftverbeállításokkal kezded?
Tudáspróba
1. Melyik fizikai réteg-szabvány rögzíti a High-Speed CAN-t? a) ANSI/TIA/EIA-485-A b) ISO 11898-1 c) ISO 11898-2 d) ISO 11898-3
2. Mekkora a nagy sebességű CAN-busz jellemző lezáró ellenállása? a) 220 Ω b) 50 Ω c) 100 Ω d) 120 Ω
3. Két csomópont egyszerre kezd küldeni, azonosítójuk 0x100 és 0x200. Melyik nyer az arbitráción, és miért?
4. Igaz vagy hamis: a CAN-arbitráció során a GYŐZTES csomópont üzenete is megsérül az ütközéstől, ezért azt meg kell ismételni. Indokold a válaszod, és mondd meg, mi történik közben a vesztes csomópont üzenetével.
5. Mi a CAN-adatkeret adatmezőjének maximális mérete a klasszikus (nem CAN FD) protokollban? a) 8 bájt b) 16 bájt c) 64 bájt d) 4 bájt
6. Nevezd meg a három CAN-hibaállapotot, és röviden jellemezd mindegyiket.
7. Egy csomópont Bus-Off állapotba került. Mi a helyes első lépés a hibakeresésben?
8. Miért van szükség a bitstuffing eljárásra a CAN-átvitelben?