Jednoduchá DCC točnaOd doby, kdy jsem postavil svůj první DCC dekodér pro točnu již oběhlo hodně vody. Za tu dobu se svět mírně posunul. V oblasti robotiky vznikla nová serva založená na DYNAMIXEL Protokolu 1.0. Jedno velmi zajímavé a u nás snadno dostupné je servo Waveshare ST3215. Zároveň se na trhu objevili mimořádně levné procesory založené na otevřené architektuře RISC-V. Já jsem použil procesor CH32V003 a prostředí Arduino Core CH32. Tato kombinace umožnila poměrně značné zjednodušení celého systému. Především došlo k zásadnímu zjednodušení hardware a mechanické stránky. Zejména pro malé točny, kde je možné přimontovat most (uzavřenou točnu) přímo na unašeč motoru. Jako například Točna ze starého CD. |
Simplified DCC turn tableA lot of water has flowed under the bridge since I built my first DCC decoder for a turntable. In the meantime, the world has moved on a bit. In the field of robotics, new servos based on the DYNAMIXEL Protocol 1.0 have emerged. One particularly interesting option, and one that is readily available here, is the Waveshare ST3215 servo. At the same time, extremely affordable processors based on the open RISC-V architecture have appeared on the market. I chose to use the CH32V003 processor along with the Arduino Core CH32 environment. This combination allowed for a significant simplification of the entire system. In particular, the hardware and mechanical aspects were substantially simplified—especially in the case of small turntables, where the bridge (the rotating platform itself) can be mounted directly onto the motor drive. An example of this would be a turntable made from an old CD. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Stejně jako u předchozí verze, i tato verze splňuje následující požadavky:
Hardware a mechanikaMechanická stránka se mimořádně zjednodušila použitím komerčního serva, které obsahuje všechny potřebné komponenty. Zůstává tedy jen elektronika, která se příliš neliší od elektroniky pro běžné přestavníky. Dekodér využívá opticky oddělený vstup pro DCC a nezávislé napájení. Všechny tyto komponenty jsou poměrně běžné, proto nemá cenu je řešit. Pro připojení na straně serva je pak použito doporučené zapojení podle katalogu Waveshare. Servo vyžaduje napájení v rozmezí 6 až 12 V, proto je na desce také step down regulátor. Použil jsem jednoduchý modul, který je také velmi dostupný pod různými názvy. Zde je důležité před připojením serva nastavit vhodné výstupní napětí právě podle potřeb serva. Na následujících obrázcích je detailní fotka dekodéru a schéma dekodéru. |
Same as with previous, I state following criteria for my turn table:
Hardware and mechanicsThe mechanical aspect has been significantly simplified through the use of a commercial servo, which incorporates all the necessary components. This leaves only the electronics, which do not differ substantially from those used for standard turnout motors. The decoder features an optically isolated DCC input and an independent power supply. Since all these components are quite standard, there is no need to discuss them in detail. For the servo connection, the configuration recommended in the Waveshare catalog is used. As the servo requires a supply voltage between 6 to 12 V, a step-down regulator is included on the board. I utilized a simple module—widely available under various names—but it is crucial to set the output voltage to the appropriate level for the specific servo before connecting it. The following images show a detailed photo of the decoder and a schematic of the decoder. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SoftwareJak již zaznělo, software je vytvořený v prostředí Arduino. Vzhledem k tomu, že servo komunikuje s přenosovou rychlostí 1000000 bitů za vteřinu (jeden megabit), není vhodné použít Arduino knihovny Serial, která používá prosté přerušení a softwarovou obsluhu. Místo této knihovny jsem si vytvořil jednoúčelovou knihovnu STservoS. Tato knihovna využívá modernější přístup založený na DMA přenosu. Naopak pro čtení DCC dat jsem zachoval tradiční postup založený na přerušení a čtení hardwarového timeru. Software je k dispozici na GitHubu. LogikaLogika zůstala v podstatě stejná jako u předchozí verze. Vzhledem k většímu výkonu procesoru bylo možné některé části nastavení zásadně zjednodušit. Pro názornost si použijeme příklad s točnou podle následujícího obrázku. Točna potřebuje znát počet výjezdů, v našem případě máme 3. Tuto hodnotu zadáme do CV34 (výchozí hodnota je právě 3, maximum je 15). Pak také potřebujeme zadat, od jakého čísla výhybky točna počítá svou adresu. Tato informace se zadává do CV1 a CV9 celkem běžným způsobem. Výchozí hodnota je 5, což pro systémy Roco znamená od výhybky číslo 5, pro systémy Lenz to znamená od výhybky číslo 1. Zadávání adres a posouvání mezi Roco a Lenz už bylo popsáno mnohokrát a nemá cenu se k němu vracet. Na obrázku je vidět, že točna má 3 výjezdy (paprsky). Vzhledem k tomu, že se jedná o točnu a je tedy možné lokomotivu otočit, je potřeba uvažovat všech 6 poloh, ve kterých se může točna nacházet. Pro lepší představivost je dobré pracovat s tím, kde má točna ovládací boudu. Pro první výjezd může být bouda tedy na pozici 1, nebo na pozici 1’. To v praxi znamená, že na ovladači zvolíme výhybku 1 (pokud máme počáteční adresu 1), zvolením pozice "rovně" otočíme boudu do polohy 1, zvolením pozice "do odbočky" otočíme boudu do polohy 1’. Identicky pro výjezdy 2 a 3. Pochopitelně je vhodné si vytvořit vhodný ovládací panel založený například na XbusTCO, který bude názorněji vyjadřovat polohu točny. Točna používá ještě jednu další adresu. V našem případě by se jednalo o adresu 4. Na této adrese lze ručně ovládat otočení. Tedy na ovladači navolím adresu 4 a stiskem tlačítka "do odbočky" se točna velice pomalu začne točit v jednom směru, stiskem tlačítka "rovně" pak v druhém směru. Po uvolnění tlačítka se zastaví. Stejně jako u předchozí verze, tak i u této je poloha snímána pomocí snímače s přesností 12 bitů. Kruh je tedy rozdělen na 4096 kroků. Proto jako u předchozí verze i tady je pro každý výjezd poloha uložená do dvou CV. |
SoftwareAs previously mentioned, the software is developed within the Arduino environment. Given that the servo communicates at a data rate of 1,000,000 bits per second (one megabit), the standard Arduino Serial library, which relies on basic interrupts and software based handling, is unsuitable. Instead, I created a dedicated library called `STservoS`, which employs a more modern approach based on DMA (Direct Memory Access) transfers. Conversely, for reading DCC data, I retained the traditional method based on interrupts and hardware timer readings. The software is available on GitHub. LogicThe logic remains essentially the same as in the previous version. Thanks to increased processor performance, it has been possible to significantly simplify certain aspects of the configuration. To illustrate this, let’s look at the example of a turntable shown in the image below. The turntable needs to know the number of exits. In this case, there are 3. This value is entered into CV34 (the default value is 3; the maximum is 15). We also need to specify the turnout number from which the turntable begins counting its addresses. This information is entered into CV1 and CV9 in the standard manner. The default value is 5; for Roco systems, this means starting from turnout number 5, while for Lenz systems, it means starting from turnout number 1. The process of assigning addresses and the differences between Roco and Lenz systems have been described many times, so there is no need to repeat them here. As shown in the image, the turntable has 3 exits (spokes). Since it is a turntable, meaning a locomotive can be rotated, we must account for all 6 possible positions in which the turntable can be oriented. To make this easier to visualize, it is helpful to consider the location of the turntable's control cabin. For the first exit, the cabin could be in position 1 or position 1’. In practice, this means that if the starting address is 1, you select turnout 1 on your controller: choosing the "straight" position rotates the cabin to position 1, while choosing the "diverging" (turnout) position rotates it to position 1’. The same applies to exits 2 and 3. Naturally, it is advisable to create a suitable control panel, for instance, one based on the XbusTCO system, to provide a clearer visual indication of the turntable's position. The turntable utilizes one additional address; in our case, this is address 4. This address allows for manual control of the rotation. By selecting address 4 on the controller, pressing the "turnout" (diverging) button causes the turntable to rotate very slowly in one direction, while pressing the "straight" button causes it to rotate in the opposite direction. Releasing the button brings it to a stop. As with the previous version, the position is detected by a sensor with 12-bit resolution. The full circle is thus divided into 4,096 steps. Consequently, just as in the previous version, the position for each exit is stored across two CVs (Configuration Variables). |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CV Values
* Poznámka: tyto CV lze nastavovat také zápisem do CV8 - viz dole * Note: this CV can be modified also by writing into CV8 - see bottom | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Vzhledem k tomu, že nastavování CV pro koncové polohy je poněkud náročné (trefovat se do 4096 hodnot zabere dost času), rozhodl jsem se přidělat ještě jednu možnost nastavování. |
Because setting up CV for end positions is little complicated (pointing to 4096 values is time consuming), I decided to add one optional method of programming. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||