Arduino centrála Z21 podle Philippa Gahtow

Tato stránka popisuje varianty zapojení, které ve svých vlastnostech zahrnuje centrála ze stránek Digital Modellbahn označená podle  Stummifora Z21PG, nebo podle fóra modelldepo A21.

Jsou to především tyto vlastnosti:

Arduino knihovny i samotné skeče pro centrálu jsou stále vyvíjeny a aktualizovány.

Pro svou konstrukci jsem si vybral doporučovanou variantu s Arduinem Mega2560 a další popis bude k této variantě.

Zapojení

Vycházel jsem ze zapojení z autorových stránek. Zachoval jsem proto původní zapojení pinů, aby byla centrála funkční i s původním skečem. Při konstrukci centrály jsem se snažil využít součástky, které jsem měl doma a proto je zapojení značně experimentální. Oproti autorově návrhu je jako můstek použit obvod L6203 (původní obvod TLE5205).

Do zapojení byly přidány tyto okruhy:

V původním návrhu ze Stummifora byl osazen THT integrovaný obvod 74HC244 neobvykle ze strany spojů, proto byl celý návrh přepracován. Oproti původnímu schématu byla opravena i hodnota rezistoru R50 na výstupu Loconetu. Přidány byly i blokovací kondenzátory k logickým obvodům.

Protože bylo použito nižší referenční napětí, musela být použita i jiná hodnota odporu pro trimr v obvodu měření teploty. Pro referenční napětí 1,1V je to trochu nešťastné zapojení (a pro měření nepřesné), ale kvůli zachování kompatibility, nebylo původní zapojení změněno. Změnil jsem pouze hodnotu trimru na 2kΩ.

Zdroj napájení včetně usměrnění a nastavení napětí je řešen samostatně a není součástí centrály. Nebyl předpoklad připojení této centrály na zdroj střídavého napájení, a proto byl ze zapojení na vstupu napájení vynechán usměrňovací můstek. Při připojování napájení centrály je proto nutné dodržet polaritu. Namísto klasických stabilizátorů napětí řady 78xx byly použity snižující měniče napětí s obvody LM2596.

Po přečtení připomínek na fóru byla přidána vratná pojistka (polyfuse) 0.5A do 12V větve pro napájení sběrnic LocoNet a XpressNet.

Konstrukce

Původní autorova sestava základní desky, Arduina a LAN modulu se mi líbila, a byla proto zachována. Na základní desku je pomocí pinových lišt délky 15mm osazena nejprve deska LAN modulu W5100 (nohama vzhůru). Na desku LAN je následně nasunuta deska Arduina Mega2560. U této desky je pro spojení se základnou použito pinových lišt délky 35mm. Postup osazování byl následující: Nejprve jsem nasunul pinové lišty 15mm do používaných pinů na desce shieldu W5100 a následně do základní desky a přes distanční podložky jsem desku shieldu přišrouboval k základní desce. Teprve nyní jsem pájel piny lišty do základní desky. Stejný postup jsem opakoval s pinovými lištami délky 35mm a deskou arduina Mega 2560. Protože předem nebylo možné přesně odměřit vzdálenosti desek, byly piny délky 35mm maličko delší a po zapájení byly tyto vyčnívající piny zkráceny.

Arduino náčrt (skeč)

Jelikož jsem se rozhodl využít možnosti použít displej pro zobrazování provozních stavů, dat Railcom a čtení CV, náčrt jsem stáhl ze Stummifora

Protože jsem se (pro zlepšení měření a čtení CV) rozhodl použít nižší referenční napětí, byl tento náčrt následně upravován. Referenční napětí lze zvolit (pouze ve starší verzi software, v novější verzi je již dáno použitým procesorem) zakomentováním a odkomentováním jednoho ze tří maker #define IN_REF_1V1 nebo #define IN_REF_2V56 nebo #define IN_REF_5V. Pokud už budete mít referenční napětí zvoleno, je nutno multimetrem změřit skutečné referenční napětí na pinu AREF. Interní referenční napětí je nepřesné a často se liší od nastaveného. Velikost tohoto napětí je individuální u každého Arduina, proto je nutné jeho změření. U mého arduina bylo při nastavení 1,1V na pinu AREF 1,055V. Tato naměřená hodnota je potřeba zadat do příslušného makra #define Urefer (v novější verzi software je název makra "Uref"). Protože jsem nebyl schopen zcela pochopit původní výpočty hodnot (pro proud, napětí a teplotu) vztahující se k referenčnímu napětí, byly upraveny i tyto výpočty v souboru Z21_LAN.h.

Pro měření proudu se používá snímací rezistor o hodnotě 0,33Ω. Pokud se rozhodnete použít jinou hodnotu, budete ji muset změnit v makru #define senseResist. Pokud máte definováno makro #define BOOSTER_INT_CURRENT_SHORT_DETECT, bude centrálu vypínat nadproud, který je měřen na tomto snímacím rezistoru.  V případě snímacího rezistoru jiné hodnoty je nutno přepočítat vypínací hodnotu DETECT_SHORT_INT_VALUE na správnou hodnotu referenčního napětí a změnit ji. Výpočet hodnoty je následující: 

I*R*1024/Uref

kde I je vypínací proud v A, R je hodnota snímacího rezistoru v Ω a Uref referenční napětí (změřené na pinu VREF) ve V. Pro vypínací proud 3A je to např. :

3*0,33*1024/1,055 = 961  (zaokrouhleno na celé číslo!)

Měření je 10-ti bitové, takže pokud vám vyjde hodnota vyšší než 1023, musíte buď zvýšit referenční napětí, nebo snížit hodnotu snímacího rezistoru. 

Pro měření teploty byl použit NTC termistor MF52 20kΩ s β faktorem 3950. Referenční hodnota odporu termistoru v Ω pro 25°C se zadává do makra #define TempRefResist. Pro výpočet teploty je nutno znát i nastavenou hodnotu odporu na trimru. Problém je v tom, že tuto hodnotu nelze změřit, pokud je trimr nebo termistor připojen. Vypočítaná hodnota odporu trimru pro měření do 100°C je v tomto zapojení 394Ω. Nastavená hodnota v Ω se zadává do makra #define ResistTrimm. Pokud se rozhodnete použít termistor s jiným β faktorem, budete muset pozměnit vzorec v souboru Z21_LAN.h. Pro výpočet logaritmu ve vzorci pro teplotu je zapotřebí do programu přidat knihovnu "math" (#include <math.h>), ve zde zveřejněném programu je tato knihovna již přidána. Měření teploty a napětí je pouze informativní (nevypíná centrálu).

Displej je připojen pomocí I²C rozhraní. To, jaký typ displeje použijete, lze zvolit zadefinováním makra #define OLED nebo #define LCD. Displej používá upravenou knihovnu SSD1306Ascii-master (s neupravenou se vám překlad kódu nezdaří). Centrálu jsem vyzkoušel jak s grafickým OLED displejem 0.91" 128x32 s čipem SSD1306, tak i se znakovým LCD displejem 1602 s deskou rozhraní I²C.

WiFi modul

Centrála používá pro vytvoření přístupového bodu (AP) WiFi modul s procesorem ESP8266. Program pro procesor lze nalézt na stránkách autora Digital Modellbahn. Program se do modulu nahrává pomocí Arduino IDE, do kterého je nutné nahrát podporu pro procesory ESP. Nejjednodušším řešením pro nahrávání programu (USB) se mi jevil modul "Wemos D1 mini" použitý na Stummiforu, proto bylo zapojení přizpůsobeno pro tento modul. Modul Wemos D1 mini nemá přizpůsobení logických úrovní a je potřeba s tím při návrhu počítat. Podle doporučení byl na výstup stabilizátoru 3,3V WiFi modulu přidán i filtrační kondenzátor. S centrálou jsem úspěšně vyzkoušel moduly ESP-01, ESP-07, ESP-12F s adaptéry a Wemos D1 Mini. Pro moduly ESP-01, ESP-07 a ESP-12F jsem použil adaptéry osazené tranzistory pro konverzi logických úrovní. Adaptér obsahuje i přepínač pro nahrávání programu. Návrh DPS jsem následně upravil pro použití jak modulu Wemos D1 Mini, tak i modulů s adaptérem (ESP-01, ESP-07, ESP-12). Samozřejmostí je, že se osadí pouze jeden modul. Protože nakonec padla volba na umístění centrály do kovové krabičky, byl použit modul ESP-07, který má osazen i konektor pro externí anténu. Modul ESP-07  je připájený na desku "Wemos D1 mini", původní modul ESP-12F jsem při testech zničil. Při práci zásadně používejte pomůcky pro ochranu před elektrostatickými výboji (ESD) nebo alespoň dodržujte zásady pro manipulaci). Při použití adaptéru modulu ESP-01 je nutno pro nahrávání programu uzemnit pin GP0.

LAN modul W5100

Vyskytly se případy, kdy centrála pracovala spolehlivě, ale docházelo k výpadkům komunikace přes LAN rozhraní, příp. nebylo možné komunikaci navázat. Na vině jsou klony ethernet modulu W5100, na kterých bývá osazeno pole rezistorů chybné hodnoty. Doporučuje se vyměnit pole rezistorů za samostatné rezistory velikosti 0402, což je náročné na vybavení i trpělivost, ale lze to vyřešit i připojením přídavných THT rezistorů přímo na piny LAN konektoru. Dva rezistory o hodnotě 100Ω je potřeba zapojit mezi piny 1,2 a 3,6 konektoru LAN.

Nastavení WiFi připojení

Hodně jsem se natrápil při standardním nastavení IP adresy 192.168.0.111. Kvůli připojení přes LAN (W5100) je domácí síť nastavená tak, aby DHCP server přiděloval adresy v rozsahu 192.168.0.xxx. To kolidovalo s nastavením přístupového bodu (dále jen AP) Direct AP WiFi modulu, který byl nastaven na stejnou síť. Jak můžete vidět na fotografii nastavil jsem proto AP na adresu 192.168.1.111. Můžete použít jakoukoli jinou adresu (než přiděluje vaše síť). Toto nastavení je nutné provést ve skeči (Z21_ESPArduinoUDP_v28u.ino) pro WiFi modul. Pokud adresu budete měnit je zapotřebí změnit i adresu brány (gateway). Ostatní se již dá nastavit přes webové rozhraní. Připojíte se k síti Z21_ESP a zadáte heslo 12345678. Do vašeho prohlížeče zadáte IP adresu AP, který byl nastaven ve skeči. Objeví se vám obrazovka jaká je vidět na fotografii. Potom zadejte do oken WiFi klienta název vaší domácí sítě a její heslo. Pokud následně toto nastavení potvrdíte tlačítkem "Submit", router vám přiřadí IP adresu, která se vám objeví nad okny WiFi klienta. Nastavit se dá i číslo WiFi kanálu AP (výchozí je 6) a počet modulů připojených na sběrnici S88. Nyní se můžete připojit ke své domácí síti. V nastavení aplikace Z21 už jen zadáte IP adresu klienta. Pokud se nechcete připojovat do vaší domácí sítě, můžete se připojit přímo na AP. V tom případě zadáte do aplikace IP adresu AP. 

V aplikaci Z21 můžeme vidět aktuálně měřené hodnoty pro proud do kolejí, teplotu na termistoru a měřené napětí. Měření proudu pro centrálu je pouze na snímacím rezistoru můstku a je shodně zobrazeno ve všech třech řádcích pro proud. Napětí v centrále je měřeno před můstkem, takže výsledkem není přesné napětí na kolejích a nezahrnuje úbytky na tranzistorech h-můstku a na snímacím rezistoru. Napětí je shodně zobrazeno na obou dvou řádcích.

Nastavení Rocrail

Notebook s instalací Rocrailu byl připojen přes WiFi rozhraní (direct AP). Nastavení připojení lze vidět na fotografii. Vyzkoušel jsem zpětné hlášení přes sběrnici S88, připojeny byly první dva moduly obsazení. Odzkoušel jsem i ovládání centrály, automatický i ruční režim, ovládání příslušenství i jízdu lokomotiv. Vše funkční.

Centrálu jsem zkoušel s XpressNet ovladačem minimaus i LocoNet ovladačem vlastní výroby. 

Testování

Na hodinu jsem připojil centrálu na umělou zátěž (cca 2,5A) a pomocí osciloskopu sledoval DCC signál. Signál nebyl deformován a driver (můstek) se jen mírně zahřál. Jelikož výpočet teploty na termistoru byl ještě podle původního vzorce, nemohu doložit výslednou teplotu.

V dalším testu jsem připojil umělou zátěž (cca 0,4A) na 1 hodinu. Teplota se zvýšila z 23°C na 32°C. Chladič obvodu L6203 je postačující. Pro modeláře, které to zajímá, je pro Al chladič se svislým žebrováním tloušťky 3mm a pro maximální ztrátový výkon (20W) obvodu L6203 vypočítaná plocha chladiče 108cm², pro nastavený vypínací proud 3A (cca 10W) je to pouhých 31cm². Asi to nikoho nezajímá, protože podle fotografií, co jsem viděl na Stummiforu, jsou osazovány chladiče asi 5x až 10x větší.

Modelářům, kteří rádi experimentují, lze stavbu centrály doporučit. Pokud však elektronice nehovíte, kupte si centrálu hotovou. Při dnešních cenách není o čem přemýšlet.

Upozornění: Návrhy jsou určeny pro ruční výrobu desky plošných spojů. Otvory všech součástek jsou zmenšeny pro snadné ruční vrtání !!! Nepoužívejte návrhy vytvořené v programu Eagle pro generování dat pro strojní výrobu!!!

Edit: Pro všechny verze hardware byly přidány novější verze software, konkrétně V4.90 s podporou displeje. Protože se v aplikaci Z21 zobrazovaly nesmyslné hodnoty napětí a teploty, byl přidán výpočet průměrné hodnoty z deseti měření. 

Po konzultaci na Stummiforu jsem se rozhodl přidat optické oddělení do obvodu externího zesilovače (boosteru). Centrálu již předělávat nebudu, ale výkresy i desku jsem upravil. Upravené zapojení nebylo testováno!

Centrála Z21PG Nano

Protože testy dopadly dobře, rozhodl jsem se vyzkoušet i mini verzi centrály postavené na Arduinu Nano. Tato verze má pouze konektor pro LocoNet. Sběrnice XpressNet, S88 a výstup na externí booster byly vynechány. Výstupy na OLED displej, Booster displej a rozšíření pro čtení Railcom byly do zapojení přidány. Pro použití WiFi modulu je u této verze nutno použít adaptér s přizpůsobením napěťových úrovní. U této centrály je použito externí referenční napětí vytvořené pomocí obvodu TL431. Toto referenční napětí se používá při výpočtu proudového zatížení a napájecího napětí, měření teploty nebylo implementováno.  

Pozor. Hodnota odporu R1 v obvodu referenčního napětí je špatně zadána, správná hodnota je 4k7.

Můžete si všimnout, že na místě výkonových rezistorů je možno použít ocelový drát. Pro rezistory nízkých hodnot je to dobrý materiál, protože na rozdíl od odporových drátů (kanthal, konstantan, ad.) se dobře pájí.

Edit: Pro všechny verze hardware byly přidány novější verze software, konkrétně V4.90 s podporou displeje. Protože se v aplikaci Z21 zobrazovaly nesmyslné hodnoty napětí a teploty, byl přidán výpočet průměrné hodnoty z deseti měření. 

Centrála Z21PG Mega Pro

Další modifikaci jsem se rozhodl udělat zjednodušením zapojení a zmenšením desky. To je dosaženo použitím Arduina Mega Pro a vypuštěním pro mne nepotřebného výstupu pro externí booster a rozhraní LAN. Rozšíření pro Railcom detektor, OLED display a pro booster display zůstaly zachovány. Všechny konektory jsou nyní umístěny na jediné straně desky. WiFi jsem se rozhodl použít ve verzi s adaptérem, který řeší napěťové přizpůsobení signálů. Pro napětí 5V a 12V jsou opět použity snižující měniče s obvodem MP2307.

Z technického řešení je zajímavé pouze použití dutinkových lišt pro Arduino Mega Pro. Z dutinkových lišt jsem před osazením na desku kleštěmi vytahal nepoužívané piny. Návrh desky v Eagle formátu je opět  pouze pro ruční výrobu.

 Namísto trimru pro nastavení napětí na termistoru je použit rezistor s hodnotou 470Ω. Změřil jsem jeho přesnou hodnotu a tuto zadal do programu. Tato hodnota v Ω se zadává do makra #define ResistTrimm. 

Opět jsem pro měření na analogových vstupech použil interní referenční napětí 1.1V. Při oživování jsem byl příjemně překvapen, když jsem naměřil na výstupu Arduina AREF přesnou hodnotu 1.100V. Tuto naměřenou hodnotu je nutno zadat do příslušného makra #define Urefer (v nové verzi software je to makro "Uref"). 

Edit: Pro všechny verze hardware byly přidány novější verze software, konkrétně V4.90 s podporou displeje. Protože se v aplikaci Z21 zobrazovaly nesmyslné hodnoty napětí a teploty, byl přidán výpočet průměrné hodnoty z deseti měření. 

Centrála Z21PG ESP8266

Autor projektu Philipp zveřejnil novou verzi centrály, jejíž základem je čip ESP8266. Ke konstrukci byla použita varianta Wemos D1 mini, konkrétně její klon. Autor použil jako můstek levný modul s obvodem L298N, tato varianta pracuje s obvodem L6203. Jak se můžete dočíst na webu autora, je tato verze omezená počtem vstupně výstupních pinů čipu ESP8266. Na rozdíl od "větších bratrů" zde nenajdete měření teploty, měření trakčního napětí, rozhraní LAN, RailCom detektor, rozhraní S88, ani rozhraní pro externí booster (i když podpora boosteru byla přidána). Počet pinů čipu ESP8266 však dovoluje připojit rozhraní XpressNet i LocoNet. Autor implementoval i možnost připojení I2C OLED displeje s rozlišením 128x64. Co se týče této konstrukce, je k vypnutí trakční koleje při programování použito relé (HK4100 DC12V), jako step down konvertory jsou použity měniče s obvody MP2315.

I když jsem stále ujišťován, že použitý čip ESP8266 je 5V tolerantní, několik už jich svou službu vypovědělo. Rozhodl jsem se proto upravit zapojení tak, aby nebylo na vstupy ESP modulu přiváděno napětí vyšší než 3,3V. To v obvodu zajišťují Schottky diody D1 a D2. Na jejich místě mohou být použity i jiné typy např. BAT85. Další úpravou byla záměna hodnot rezistorů na vstupech komparátoru tak, aby napětí na vstupu komparátoru nepřekračovalo jeho napájecí napětí (ve schématu R1, R2, R3, R4). Další možností by bylo připojit napájení komparátoru (pin 8) na zdroj 12V. Do obvodu byl také přidán konektor SV1 pro volitelné připojení indikátoru zátěže nazvaného "Booster display".

Jak si můžete všimnout, snímací rezistor byl použit s hodnotou 0,22Ω, proto je v souboru CONFIG.h nutné upravit hodnotu pro měření vypínacího proudu "DETECT_SHORT_INT_VALUE ". Pro vypínací proud 3A je to hodnota 205. Wemos D1 Mini má na analogovém vstupu A0 dělič napětí, který umožňuje přivést na tento vstup až 3,3V. Měření je 10-ti bitové, dělič má hodnoty odporů 221kΩ a 96kΩ (příp. 220k a 100k), což odpovídá převodu z 3,3V na referenční 1V. Vzorec pro výpočet je I*Rsens*1024/U. Při proudu 3A je na odporu 0,22Ω úbytek 0,66V.

0.66*1024/3.3 = 205

hodnotu snímacího odporu je nutno zadat do makra #define senseResist 0.22

Další úpravou, která však není pro každého, je odebrání zmíněného odporového děliče na analogovém vstupu A0. S touto úpravou se zlepší měření proudu i čtení #CV na programovací koleji. Na modulu D1 mini jsem odpájel dva rezistory velikosti 0603 a na místo rezistoru, umístěného blíže pinu A0, jsem připájel rezistor s hodnotou 1kΩ (jen pro ochranu, není kritické, možno i 0Ω). Po provedení této úpravy je nutné upravit vzorec pro výpočet proudu v souboru "Z21_LAN"

// inAm = VAmpINT / senseResist * 1000 * (3.3/1024);      //na

inAm = VAmpINT / senseResist * 1000 * 1.05/1024; 

a také vypočítat novou hodnotu "DETECT_SHORT_INT_VALUE". Pro proud 3A a snímací rezistor s hodnotou 0.22Ω to bude 

0.66*1024/1.05 = 644

pro jiné hodnoty odporu a proudu lze také počítat podle vzorce R*I*1024/Uref

Tyto dva rezistory odpájet

na místo tohoto připájet nový 1kΩ

Jak píše autor na svých stránkách, je již po prvním nahrání programu na vstupu RX aktivní LocoNet, a proto již není možné pro další nahrávání použít rozhraní USB. Do programu proto byla přidána aktualizace pomocí OTA (Over The Air). Pro ty, kdo se s tím ještě nesetkali, uvedu stručný návod. Přes WiFi se počítačem připojte přímo k ESP, v Arduino IDE se vám v nabídce portů objeví síťový port s IP adresou, zvolte port a můžete nahrávat. 

Důležité: Frekvence CPU ESP8266 musí být nastavena na 160 MHz.