Prostředí pro použití LocoNetu s Arduinem
Pro použití Arduina v prostředí digitálního kolejiště a LocoNetu budeme potřebovat nějaké minimální prostředky. A to jak hardwarové rozhraní,
tak některé softwarové knihovny.
Hardware
Rozhodl jsem se vytvořit minimální
avšak univerzální hardware, který bude možné použít pro všechny používané varianty LocoNetu. Loconet rozlišuje tyto typy zařízení:
- LocoNet klient (pasivní zařízení, nejčastěji ovladač nebo dekodér)
- Bez použití DCC (ovladač)
- S použitím DCC (booster, detektor obsazení)
- LocoNet master (centrála)
- LocoNetT master(Většinou komplexní centrály kombinující několik funkcí a několi sběrnic)
- LocoNetB master (plnohodnotný LocoNet) (Většinou centrála připravená pro velké kolejiště spoléhající výhradně na LocoNet rozvody)
- LocoNet zakončovač (Jedná se o pseudo zařízení, se kterým se setkáte především u extra dlouhých rozvodů)
- Master pro pasivní LocoNet (Zase se jedná o pseudo zařízení které se používá pro vytvoření napěťových úrovní sběrnice v případě že není přítomná žádná centrála)
Detailní popis
Ačkoli seznam vypadá celkem rozsáhle, tak se ve skutečnosti jedná především o způsob používání signálů RailSync(+/-) a také vytváření proudového zdroje pro zakončení sběrnice.
Zařízení
prvního typu spoléhají na LocoNet který umožňuje aby se zařízení ze sítě napájelo, přičemž zařízení
1.a si vystačí s napájením a je jedno jakého typu
toto napájení je. To jsou především ovladače, které emají jiný zdroj energie, nebo například počítačová rozhraní, často také dekodéry, které mají externí napájení,
ale používají optické oddělení sběrnice, takže používají napájení ze sběrnice pro napájení těchto oddělovačů. Pro získání energie se používají právě signály
RailSync(+/-), energie se získá pomocí dvojice diod, která vybírají kladnou část napájení. Je doporučeno používat rychlé diody, neboť signál RailSync má obsahovat
obdélníkový DCC signál, takže jejich používání je efektivnější a méně zatěžuje sběrnici. Pochopitelně filtrační kondenzátor, jehož velikost by měla odpovídat
spotřebovanému proudu. Zařízení typu
1.b jsou na tom v zásadě stejně, jen navíc odebírají a zpracovávají signály RailSync.
Zařízení
druhého typu má v LocoNetu v zásadě dvě úlohy: Vytvářet signál RailSync a vytvářet proudové zakončení (Tedy zdroj proudu 15mA s maximálním napětím 12-15V
na signálu loconet). Zařízení typu
2.a se spokojí s tím, že přivedou k signálům RailSync prosté stejnosměrné napětí o velikosti zhruba +12V až +15V, to
je z pohledu LocoNetu legitimní stav, odpovídá tomu, kdy je DCC odpojeno protože například došlo ke zkratu. Stav je to tedy legitimní, ale pro některé případy
je neužitečný. Nicméně třeba pro napájení ovladačů je naprosto v pořádku a nic neomezuje. Centrály typu
2.b jsou důslednější a přivádějí zde DCC nezesílený
signál (Ten, který se v Lenz notaci označuje jako C,D). Slovo nezesílený si různí výrobci vysvětlují všelijak. Většina z nich si uvědomuje, že telefonní kabel (AWG28)
není úplně vhodný pro velké proudové zátěže, takže není dobré do vedení posílat proud větší než cca 250mA maximálně 500mA pokud věříme na kvalitu použitého kabelu.
Na druhou stranu je problematické toto napětí odpojovat při přetížení, neboť tím pádem připravíme ovladače o napájení a nemáme nikoho, kdo by poslal příkaz k
obnovení provozu. Proto se často setkáme s tím, že jsou signály RailSync připojené přes rezistory 27Ω a nejsou nijak jinak jištěny. Na tuto konstrukci trochu
pozor, protože se sběrnice může nacházet ve třech různých stavech:
- Signály RailSync obsahují diferenciální DCC signál, pak je vždy v jednom přítomné napětí (řekněme 14V) a ve druhém je 0V. Potom je maximální
proud který je možné odebírat roven proudu v jednom vodiči I = (UMAX - UNOM)/R = (14 - 7) / 27 = 259mA
- Oba signály RailSync obsahují současně kladné napětí. K tomu dochází když je "odpojený" traťový DCC signál (třeba po zkratu). Potom je maximální
proud který je možné odebírat roven dvojnásobku proudu v jednom vodiči, neboť se dá odebírat z každého z vodičů I = 2(UMAX - UNOM)/R = 2(14 - 7) / 27 = 518mA
- V případě, že odebíráme proud jako diferenciální (mezi RailSync+ a RailSync-) pro správnou detekci DCC signálu pomocí dvou optronů, pak
proud který je možné odebírat roven polovině proudu v jednom vodiči, neboť se účastní oba rezistory v sérii I = (UMAX - UNOM)/2R = (14 - 7) / (2*27) = 129mA
Pro vytvoření proudového zakončení (Pull up) potřebujeme jednoznačně vytvořit zdroj proudu cca 15mA. Já mám celkem rád zdroje proudu založené na dvou tranzistorech
a k nim dvou rezistorech. Někdo preferuje integrované zdroje proudu, ty se mi v minulosti neosvědčili, ale asi to není objektivní. Aby bylo možné se rozhodnout,
v jaké aplikaci se náš přípravek nachází, potřebujeme tento být schopni tento zakončovací zdroj odpojit. Já jsem na přípravku zvolil jednoduchý pinový jumper.
Propojením dvou nožiček připojíme zdroj proudu k LocoNetu. Je také potřeba přivést napájení na vstup tohoto zdroje proudu.
Třetí zařízení je spíše praktická obezlička pro instalace s velmi dlouhým rozvodem, kdy maximální napětí vytvořené pomocí Pull Up poklesne pod přípustnou
hranici a zařízení pak nejsou schopna komunikovat. Proto se na koncích sběrnice extrémně vzdálených od centrály instalují pomocné destičky, které využívají napájení
z vodičů Rail Sync stejně, jako bylo popsáno u zařízení prvního typu, ale toto napětí pak používají pouze pro zdroj proudu připojený k vodičům loconet. Takové
zařízení je pak naprosto pasivní, jen zvedá úroveň pull up.
Poslední
čtvrtý typ zařízení je užitečný pokud vytváříme LocoNet bez centrály (někdy označovaný jako pasivní LocoNet). S pasivním LocoNetem se setkáváme
například u modulových kolejišť, kdy je samostatná centrála a samostatný LocoNet pro řízení lokomotiv (trakce) a pak si modelář vytvoří ještě menší rozvod
řekněme v rozsahu jedné stanice, který používá pro ovládání návěstidel, výhybek a ostatního příslušenství. V takovém případě si vystačí například jen s moduly
LocoIO které jsou použité jak v režimu vstup (tlačítko) tak v režimu výstup (přestavník). Potom není úplně nutné do systému zahrnovat centrálu. Jenže
bez centrály nemáme k dispozici napájení na vodičích Rail Sync a také nemáme k dispozici Pull Up. Proto lze připojit jeden z přípravků, který nemá žádnou
ovládací logiku, ale právě zprostředkovává DC napájení Rail Sync a zprostředkovává napájení Pull Up.
Pro úplnost uvádím rozložení pinů v obou přípustných typech konektorů. Telefonní konektor je u nás běžnější, proto se mu věnují všechny popisy. U 6,3mm
stereo jack konektoru je dobré si všimnout, že místo Rail Sync je rovnou uváděn Power Source, přitom norma upozorňuje na nutnost omezení tohoto zdroje energie
na maximálně 20mA při napětí 12-15V, neboť při zastrkování konektoru dochází k propojení se signálem loconet.
Označení signálu jako loconet+ a loconet- u telefonního konektoru je trochu zavádějící, ve skutečnosti se jedná o jeden signál a vodiče jsou propojeny.
Schéma a deska tištěných spojů
Jak již mnohokrát zaznělo, LocoNet používá sdílené komunikační médium, kde každé zařízení které odesílá data, tak zároveň sleduje, jestli přijímá stejná data
a nebo jestli došlo k jejich poškození (díky tomu, že dvě zařízení začala komunikovat ve stejný čas). Komunikace je definovaná tak, že zakončovač
sběrnice vytváří v klidovém stavu na sběrnici napětí (ideálně 12V, maximálně 24V) s proudovou zatížitelností 15mA. Jako logická 1 (Mark) se považuje
napětí větší než +4,0V proti signálu GND. Jako logická 0 (Space) se považuje hodnota napětí menší než +4,0V proti signálu GND. Data mají být přijímána
s hysterezí větší než 1,0V se středem v hodnotě +4,0V. Minimální vstupní impedance přijímače je 47kΩ. Pro dodržení těchto parametrů většina
běžných rozhraní začíná vstupním rezistorem právě 47kΩ a následně se dělí na dvě skupiny - buď spoléhají na kvalitu vstupního pinu na procesoru
takže pomocí prostého děliče provedou posun požadované zlomové hodnoty 4,0V směrem k hodnotám pro daný procesor, nebo používají komparátor, který
porovnává napětí na sběrnici s referenční hodnotou. Já jsem zvolil právě tuto druhou variantu. Jako komparátor jsem použil LM311. Pro zápis do
sběrnice se používá jednoduchý tranzistor, který stahuje pull up napětí k nule. Požadavky sběrnice nejsou příliš rozsáhlé, takže lze použít v
podstatě každý běžný tranzistor. Pro snažší diagnostiku jsem přidal ještě dvě LED diody a nějaké filtrační kondenzátory. Také jsem osadil dva
konektory pro připojení sběrnice, které jsem jak je zvykem označil nesprávným značením "LocoNet in" a "LocoNet out", ačkoli jsou rovnocenné.
Na obrázku desky je u konektoru vyznačeno číslování pinů.
Pokud se vám obrázek nezobrazuje dost velký, klidně si jej zvětšte s použitím kláves
"Ctrl +" a "Ctrl -", obrázek je vektorový a tak nedojde k jeho poškození (pokud používáte Micro$oft explorer, tak vám obrázek uteče do pravého horního rohu).
Význam pinů je následující:
Pin | Význam |
1 | +12V_pull-up Vstup napájení pro pull up napětí (v případě použití nezapomeňte propojit jumper JP1) |
2 | Pwr_LN_out Výstup napětí ze zběrnice (je možné použít k napájení ovladače, max 15mA) |
3 | GND - signálová zem |
4 | Vcc - vstup napájení pro komponenty převodníku (+5V stabilizované) |
5 | Rail_Sync+ - přímé propojení se signálem Rail Sync+ na konektoru (lze použít jako vstup i výstup) |
6 | Rail_Sync- - přímé propojení se signálem Rail Sync- na konektoru (lze použít jako vstup i výstup) |
7 | LN_out - vstup dat, která tečou od procesoru do sběrnice |
8 | LN_in - výstup dat, která tečou od sběrnice do procesoru |
Modul je postaven tak, aby bylo dobře pasoval do univerzální desky nepájivého pole a přitom byl zachován přístup ke konektorům.
Příklady použití
Nyní je čas si popsat příklady zapojení destičky k Arduinu v různých kombinacích popsaných v první kapitole. Příklady připojení používají oblíbené
Arduino UNO, ačkoli v praxi používám mnohem častěji menší desky, například Arduino Pro Mini. Příklady respektují použití LocoNet knihoven pro Arduino
popsaných v následujících kapitolách.
Podivný symbol uprostřed destičky znamená piny pro připojení Pull up, a pokud je přes ně namalovaný čtvereček, znamená to propojení jumperem. Také
jsem nerozkresloval silovou část zesilovače DCC signálu v obrázku 2.b.
Příklad 1.a - Ovladač LocoNet napájený ze sběrnice
Příklad 1.b - Zesilovač LocoNet používající signály Rail Sync pro čtení DCC
Příklad 2.a - Jednoduchá LocoNet centrála, která vytváří LocoNetT (pouze napájení v signálech RailSync)
Příklad 2.b - LocoNet centrála, která vytnáří plnohodnotný LocoNet
Příklad 3 - LocoNet zakončovač
Příklad 4 - Master zařízení pasivního LocoNetu
Poznámka: zapojení z příkladu 3 a 4 jsou opravdu okrajová a nebudu je dále rozvíjet. Vzhledem k tomu, že není připojeno napájení 5V pro komparátor,
je mnohem lepší jej neosazovat a nebo vyjmout z patice.
Software
Otázka software je celkem jednoduchá, všechny příklady se opírají o knihovny EmbededLocoNet, které je možné stáhnout na
GitHubu
jako součást projektu
MRRwA - Model RailRoading With Arduino. Tyto knihovny používají TIMER1 & ICP1 (na
deskách UNO a ostatních s procesorem ATmega328) a/nebo TIMER5 a ICP5 (na deskách MEGA s procesorem ATmega2560). Proto je vždy vstup dat z LocoNetu
(LN_in) připojen na deskách s procesorem ATmega328 na vstup 8 (někdy značený jako D8) a na deskách s procesorem ATmega2560 bude přiveden na vstup
48 (někdy značený jako D48)
Tyto knihovny, stejně jako vše kolem LocoNetu upozorňují na to, že formát některých zpráv podléhá autorskému právu Digitrax, Inc. a/nebo Elektronik GmbH
a jsou používány s povolením pro MRRwA projekt. Proto si včas přečtěte přiložený soubor LICENSE, jestli je můžete používat.
Pozor na jednu drobnost - knihovny se vyvíjejí poněkud živelně a často si v nich autoři odkládají různé debug výpisy na sériový port a občas se v nich objevují
né zcela přesné implementace či chyby. Například v používání LNCV byla donedávna poměrně fatální chyba.