Jindra Fučík

DCC točna

Zjistil jsem, že v prostředí DCC není pořádná definice pro chování točny. V mém kolejišti jsem potřeboval slušně motorizovat točnu zobrazenou na následujícím obrázku.
Mnoho lidí považuje za ovládání pokud k točně připojí lokomotivní dekodér nebo dekodér příslušenství a ručně sledují dojíždění do koncových poloh. Výrobci pak mají snahu doplňovat točny o mechanizmy zámků které je udržují v koncových polohách, ale při otáčení dělají neuvěřitelný rámus.

DCC turn table

I have found that here is no definition of turntables in DCC environment. In my layout I have turntable shown on following picture.
Many people using standard locomotive decoder or accessory decoder and manually turning the table to requested positions. Manufacturers adding various locking facilities, which fitting table in final positions, but producing unbelievable noise during rotating.

Prakticky žádná točna není schopná fungovat autonomně a automaticky. Neboť se zatím nikomu nepodařilo vytvořit mechanizmus jak sledovat s dostatečnou přesností polohu.
Pokusil jsem se použít méně tradiční řešení. V katalogu Austria Micro Systems jsem našel zajímavý obvod AS5045, který realizuje magnetický rotační kodér s přesností 12 bitů. (Touto cestou bych chtěl poděkovat za zaslané vzorky)

In reality no turntable on market can work automatic and autonomous. It is because nobody done good solution for measuring turntable position with good scale and accuracy.
I was tried to use less traditional method. I have found in a catalogue of Austria Micro Systems interesting chip AS5045. That chip realizing rotary encoder with 12bit scale. (I would like to thank for sending a samples)


AS5045

Pro svojí točnu jsem si stanovil následující požadavky:
  • Dostatečná přesnost pro použití i v mém modelovém měřítku N (1:160)
  • Opakovatelnost a univerzálnost celé konstrukce
  • Ovladatelnost pomocí běžně dostupných komerčních ovladačů
  • Rozšiřitelnost systému
  • Jednoduché a autonomní ovládání, tak aby bylo možné točnu ovládat i z počítače bez zásahu obsluhy

Hardware a mechanika

Mechanickou konstrukci jsem provedl velice jednoduše, použil jsem stavebnici převodovky Tamia a doplnil ji o díly z Merkuru (ND-104,ND-105,ND-107,ND-108). Pro stavbu je důležité, aby osa točny procházela pod převodovku. Na spodní stranu osy jsem upevnil magnet (pomocí lepidla). Podstatné je, aby se jednalo o magnet podle katalogu AS5045 (diametrálně {kolmo na osu} magnetovaný). Tedy magnet, který má severní a jižní pól "na stranách".
Pod magnet jsem pak přišrouboval destičku s osazeným obvodem AS5045. (obrázek plošného spoje a schéma je popsáno dole).

Následující obrázky ukazují celou mechanickou konstrukci. (Na obrázcích je místo stolu točny použito jen žluté kolečko, jinak jsou obrázky nepřehledné.)
I state following criteria for my turn table
  • Enough accuracy for my N (1:160) scale model
  • Repeatable and universal construction
  • To be controlled via market usual controllers
  • Extendibility of system
  • Easy and autonomous control, to be possible control turn-table also from computer without operator assistance

Hardware and mechanics

Mechanical mounting is very easy. I was used construction set of gearbox Tamia and add some mechanical parts from Merkur blocks (ND-104,ND-105,ND-107,ND-108). For construction is necessary to have spindle through all gearbox. To the bottom part of spindle I have mounted magnet (using glue). It is necessary to use magnet required by AS5045 catalogue (diametraly magnetized). It mean magnet which have poles "on sides".
On bottom side of magnet I have mounted small PCB with soldered AS5045. (Picture of PCB and schematic follows on bottom).

Following pictures show all mechanical construction. (On the pictures is used yellow disk instead of table; otherwise are not visible internal parts.)
Následující obrázky ukazují použité schéma zapojení vlastního dekodéru a také destičky se snímačem polohy.
Destička snímače obsahuje přepínač JP8 pro volbu mezi rychlým a přesným (precizním) režimem vyhodnocování, vzhledem k tomu, že točna se v plné rychlosti otočí o 360° cca za 1 minutu, není rychlost vyhodnocování důležitá a je možné používat přesný režim.
Schéma vlastního dekodéru není úplně šťastné, při jeho tvorbě jsem de-facto použil destičku na které jsem experimentoval s MERG loko dekodérem. Je založená na H-Bridge pro řízení motoru a opticky odděleném vstupu DCC signálu. Pravděpodobně by bylo dobré realizovat H-Bridge pomocí integrovaného obvodu (Si9968CY, L6203, L293D, ...).
Část v rámečku vpravo jsem zatím nedoprogramoval. Obrazec plošného spoje jsem v této verzi ještě nezkoušel.
Poznámka: Pro mojí verzi jsem použil motor Tamia, který je pro napájení 3,3V; proto jsem IC2 použil 7805 a na motorové výstupy zapojil ještě 4 diody (dva anti-paralelní páry), dále jsem k motoru připájel filtrační kondenzátor 1nF a tlumivky (asi 47μH nebo snad 220μH - ty které se vyndají z analogové lokomotivy při její digitalizaci).
Following pictures shows used schematic of decoder and also PCB with position sensor.
Board of sensor contain switch JP8 for selecting between fast and precision mode; because my turntable rotating one 360° rotation per minute, the speed is not crucial and then I have switched it to "accurate mode".
Schematic of decoder itself is not that good as it can be. I was de-facto re-used board where I was done some experiments with MERG locomotive decoder. It is based on H-Bridge for driving motor and optocouplers for reading DCC signal. It seems, that it will be better to use some integrated H-Bridge (Si9968CY, L6203, L293D, ...).
I not finish software for part in frame yet. I also not tested this PCB yet.
Remark: For my version I have used engine Tamia designed for 3,3V; Then I replaced IC2 with 7805 and to motor outputs used 4 diodes (two anti-parallel connected pairs). Next I added filtering capacitor 1nF and filtering coils (approx 47μH or 22μH - that one you remove from analog locomotives when adding decoder).

All in one .zip

Software a logika

Popis logiky je doplněn o následující obrázek.
Z logického pohledu točna považuje stůl jako jednosměrný, tak jak je naznačeno fialovou šipkou. Červená, zelená a modrá čára pak vyznačují použitelné polohy stolu. Pokud má být umožněno otočit vůz na točně také o 180°, je nutné, aby byla každá poloha vyjádřená 2x. Celkem tedy máme 6 koncových poloh - na obrázku označené čísly 1~6.
Takže pokud chceme otočit lokomotivu v prvním stání, uvedeme točnu do polohy 1, najedeme na ní s lokomotivou a pak jí uvedeme do polohy 4. Tím dojde k úplnému otočení.
Vzhledem k tomu, že snímač vyhodnocuje 360° pomocí 12 bitů, je celý kruh rozdělen na 4096 dílků. Odesílat do točny číslo v takovém rozsahu by bylo velice nepraktické, proto jsem se rozhodl uložit polohy do CV registrů.

Točnu pak ovládám jako šest vyhybek - zjednodušeně - pokud na běžném ovladači přepnu vyhybku 1, točna se otočí do první koncové polohy (to samé pro vyhybku 2, 3..6). Pochopitelně základní adresa je konfigurovatelná v CV1 a CV9 jak je běžné pro dekodéry příslušenství.

Navíc jsem přidal ještě dvě další servisní polohy 7 a 8. Poloha 7 znamená otáčení po směru hodinových ručiček, poloha 8 proti směru hodinových ručiček. (Ve verzi pro 28 koncových bodů / 14 stání jsou to vyhybky 15 a 16)

Poznámka: Nová verze software pro 12/28 koncových bodů (6/14 stání) využívá obě polohy vyhybek 1-6(14). Vyhybka v přímém směru jako jeden směr a vyhybka ve směru do odbočky znamená stejné stání, ale "obráceně". Obě pozice pro každé stání se nastavují samostatně, takže není problém s nesouměrností točny nebo jinou kompenzací mechanických nerovností.

Software and logic

Following figure is used for describe a logic of turntable.
From logical point of view turntable understand his table as uni-directional; as marked by purple arrow. Red, green and blue lines showing possible table positions. If it should be possible to turn car around 180°, it is necessary, to have every position presented 2x. It means, we have 6 end positions - on a figure marked by numbers 1~6
It means - if we want to rotate locomotive from first standing position in rotunda, we should turn the table to position 1, move locomotive to the table and then rotate it to position 4. It will full rotate the locomotive
Because sensor measure 360° rotation by 12bits, the full circle is divided into 4096 steps. Sending to turn table a numbers in this range will be not effective, then I decided to store end positions into CV registers

I'm controlling turntable as a six turnouts - simplified - when I turn on usual controller turnout 1, the turntable will rotate into first end position (the same for turnouts 2,3..6). Of course basic address can be configured in CV1 and CV9 as usual for accessory decoders.

I also added two additional service positions 7 and 8. Position 7 means rotating clockwise, position 8 means counter clockwise. (In version for 28 endpoints / 14 stand it is turnouts 15 and 16)

Remark: New version of software for 12/28 endpoints (6/14 stand) using both directions of turnouts 1-6(14). Turnout in straight position mean one stand and turnout in curved direction mean same stand but opposite side. Both positions for every stand are configured separately, then it is no problem to eliminate non-symmetry of turntable
Základ program pro mikrořadič jsem použil podle vzoru Paco Cañada. Jedná se o velice jednoduchý program pro řízení jednoduchého příslušenství. Dekodér reaguje na pakety typu:
1111111111 0 10AAAAAA 0 1AAACDDD 0 EEEEEEEE 1
Běžné ovladače jako Lenz LH100, Roco MultiMaus, Xbus TCO odesílají změnu polohy vyhybky jako "nastavení" (C=1) jednoho z osmi výstupů (definovaný pomocí DDD), pokud se jedná o polohu do odbočky, pak se nastavuje bit s lichou adresou, pokud se jedná o polohu rovně, pak o sudou adresu. (jak je definováno v NMRA dokumentu RP-9.2.1, kapitola D)
Na jednu adresu příslušenství tedy vychází pouze 4 výhybky. Dekodér tedy musí reagovat na 2 adresy. Tuto situaci jsem vyřešil tak, že dekodér ignoruje nejnižší bit (LSB) adresy. (Verze pro 28 pozic ignoruje 2 nejnižší bity)
1111111111 0 10AAAAax 0 1AAACDDD 0 EEEEEEEE 1
To v praxi znamená, že dekodér vždy obsadí adresy v pořadí sudá, lichá (nula se považuje za sudou), takže pokud zadáme adresu 1, tak obsadí 0 a 1; pokud zadáme 2, obsadí 2 a 3, stejně jako když zadáme 3, také obsadí 2 a 3. Pro adresu první vyhybky pak platí, že je to adresa dekodéru krát 4. Tedy pokud je adresa dekodéru 0 nebo 1, pak reaguje na vyhybky 1,2..8; pokud je adresa dekodéru 2 nebo 3, pak reaguje na vyhybky 9,10...16; a tak dále.
Dekodér pro 28 pozic obsazuje celkem 4 adresy, takže 0,1,2 a 3 jsou první skupina (vyhybky 1-16), 4,5,6 a 7 druhá skupina (vyhybky 17-32), 8,9,10 a 11 třetí skupina (vyhybky 33-48) a tak dále.

Poznámka: Protože Lenz počítá zásadně od jedničky, nelze použít první adresu (0,1), protože na Lenz ovladači nelze adresovat první polovinu. V systémech Lenz je nutné od adresy vyhybky vždy odečíst 4. Pokud vlastníte systém Lenz, poznáte že při výchozím nastavení točna nereaguje na vyhybky 7 a 8, ale na vyhybky 3 a 4, proto je nutné nastavit adresu alespoň 2, aby točna reagovala na vyhybky 5-10+11,12
Ve verzi pro 28 konců pak zadejte adresu minimálně 4 a točnu bude možné ovládat na adresách 13-28.

Následující tabulka popisuje seznam použitých CV.
As a source for software I was used code inspired by Paco Cañada. It is simple code for manage simple accessory decoders. Decoder reacts on packets type:
1111111111 0 10AAAAAA 0 1AAACDDD 0 EEEEEEEE 1
Usual controllers (Lenz LH100, Roco MultiMaus, Xbus TCO) sending information about change of turnout as "set" (C=1) of one of eight outputs (defined by DDD), if it is position to turn, then it is bit with odd address, for straight position it is a bit with even address. (as defined in NMRA document RP-9.2.1, section D)
It means, that one address can be used for 4 turnouts. Then decoder must react to two addresses. I solved this situation that decoder ignore least significant bit (LSB) from address. (28 endpoints version ignore 2 LSB bits)
1111111111 0 10AAAAax 0 1AAACDDD 0 EEEEEEEE 1
It means, that decoder always use two addresses in order even, odd (zero is understand as even). For example, if we will enter address 1, decoder will use 0 and 1; if we will enter 2, decoder will use 2 and 3, the same if we will enter 3, also will use 2 and 3. Address of first turnout is decoder address multiply by 4. It means if decoder address is 0 or 1, then decoder react to turnout address 1,2..8; if decoder address is 2 or 3, then it will react to turnouts 9,10..16; etc.
Decoder for 28 endpoints using 4 address at all, it means: 0,1,2,3 as a first group (turnouts 1-16), 4,5,6,7 second group (turnouts 17-32), 8,9,10,11 third group (turnouts 33-48) etc.

Remark: Because Lenz systems always counting from one, than it is not possible to use first address (0,1), because Lenz controllers will not allow you to control first half. In Lenz systems is necessary subtract 4 from turnout address. If you are using Lenz system, you will recognize, that turntable not react to turnouts 7 and 8, but to 3 and 4. In this case is necessary to use address at minimum 2, to allow turntable react to turnouts 5-10+11,12
In version for 28 endpoints enter address at minimum 4; and you will control turntable on address 13-28

Following table describe lists of used CV values.

CV Values
CV#CV#defaultmin-maxvýznammeaning
51311 (vyh. 1-8)0-63Primární adresa, spodní polovinaPrimary address, low half
515310-255Uložená poloha část 1 (pouze pro čtení)*Saved position part 1 (read only)*
516410-255Uložená poloha část 2 (pouze pro čtení)*Saved position part 2 (read only)*
 710-Verze (10 = verze 1.0)Version (10 means version 1.0)
 813 (0D hex)-ID VýrobceManufacturer ID
521900-7Primární adresa, horní polovinaPrimary address, high half
54129128 (bit 7)0/128konfigurace - 128 = dekodér příslušenstvíConfiguration - 128 = accessory decoder
54533100-255Rychlost dojezdu při upřesňování polohySpeed used for finetuning of position
5463400/1Příznaky (1=po zapnutí dojíždět na poslední zadanou pozici)Flags (1=go to last used position after startup)
547350 (00 hex)0-255Pozice 1, část 1*Position 1, part 1*(00 00 hex = 0)
548360 (00 hex)0-255Pozice 1, část 2*Position 1, part 2*
549373 (03 hex)0-255Pozice 2, část 1*Position 2, part 1*(03 FF hex = 1023)
55038255 (FF hex)0-255Pozice 2, část 2*Position 2, part 2*
551397 (07 hex)0-255Pozice 3, část 1*Position 3, part 1*(07 FF hex = 2047)
55240255 (FF hex)0-255Pozice 3, část 2*Position 3, part 2*
5534112 (0C hex)0-255Pozice 4, část 1*Position 4, part 1*(0C 00 hex = 3072)
554420 (00 hex)0-255Pozice 4, část 2*Position 4, part 2*
555437 (07 hex)0-255Pozice 5, část 1*Position 5, part 1*(07 FF hex = 2047)
556440 (FF hex)0-255Pozice 5, část 2*Position 5, part 2*
5574512 (0C hex)0-255Pozice 6, část 1*Position 6, part 1*(0C 00 hex = 3072)
558460 (00 hex)0-255Pozice 6, část 2*Position 6, part 2*
..........pro 12 pozic až ...for 12 endpoints to ...
5595714 (0E hex)0-255Pozice 12, část 1*Position 12, part 1*(0E A7 hex = 3751)
57058167 (A7 hex)0-255Pozice 12, část 2*Position 12, part 2*
..........pro 28 pozic až ...for 28 endpoints to ...
6018915 (0F hex)0-255Pozice 28, část 1*Position 28, part 1*(0F 66 hex = 3942)
60290102 (66 hex)0-255Pozice 28, část 2*Position 28, part 2*

* 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í.
Pokud točnu nastavíme do správné polohy (s použitím ručního otáčení pomocí adres 7 a 8, nebo tak že mechanicky odpojíme motor/převodovku a točnu ručně natočíme do požadované polohy) a pak provedeme zápis do CV8, tak se aktuální poloha uloží do příslušné dvojice CV.
Pokud zapíšeme do CV8 hodnotu 0, zapíše se hodnota do CV 3 a 4, odkud je pak lze číst běžným způsobem.
Pokud zapíšeme do CV8 hodnotu 1, zapíše se hodnota do CV 35 a 36 - koncová pozice 1.
Pokud zapíšeme do CV8 hodnotu 2, zapíše se hodnota do CV 37 a 38 - koncová pozice 2.
Pokud zapíšeme do CV8 hodnotu 3, zapíše se hodnota do CV 39 a 40 - koncová pozice 3.
Pokud zapíšeme do CV8 hodnotu 4, zapíše se hodnota do CV 41 a 42 - koncová pozice 4.
Pokud zapíšeme do CV8 hodnotu 5, zapíše se hodnota do CV 43 a 44 - koncová pozice 5.
Pokud zapíšeme do CV8 hodnotu 6, zapíše se hodnota do CV 45 a 46 - koncová pozice 6.
pro 12 pozic až ...
Pokud zapíšeme do CV8 hodnotu 12, zapíše se hodnota do CV 57 a 58 - koncová pozice 12.
pro 28 pozic až ...
Pokud zapíšeme do CV8 hodnotu 28, zapíše se hodnota do CV 89 a 90 - koncová pozice 28.

Sestavení a oživení

Sestavení má určité drobné kroky, které se vyplatí dodržet, aby si člověk nepřidělal starosti. (Čísla v závorce jsou platná pro verzi s 28 pozicemi)
Po sestavení obou destiček a jejich vzájemném propojení (trojžilový vodič pro data ze senzoru a dvoužilový pro napájení, nezapomeňte na zkratovací propojku) je dobré začít tím, že si ověříte připojení motoru. To se dělá velmi jednoduše - zvolením vyhybky 8(16) by se po jejím přehození měla točna roztočit po směru hodinových ručiček. Pokud se točí proti směru, je nutné přehodit přívod motoru. Potom zvolíme vyhybku 7(15) a ověříme, zda se točna točí proti směru hodinových ručiček.
Pokud se ani v jednom případě netočí, ověříme si, jestli nemáme systém typu Lenz, pak by se točila po směru hodinových ručiček při přehození vyhybky 4(12) a proti při vyhybce 3(11). Potom je vhodné zapsat do CV1 hodnotu 2(4) a ke každému zde popisovanému číslu vyhybky přičíst 4(12).
Potom si ověříme funkci senzoru. Zvolíme vyhybku 1 a přehodíme jí do nějaké polohy. Točna by se měla rozjet a po chvíli zastavit v některé pozici. Neměla by ujet více než polovinu otáčky. Pokud se točí a nezastavuje, pravděpodobně není senzor a magnet v optimální poloze.
Točení je možné kdykoli zastavit tím, že přehodíme vyhybku 7(15) nebo 8(16) do odbočky.

Stav projektu

  • Točna správně reaguje na příkazy k pohybu
  • Bohužel z neznámého důvodu nefunguje programování pomocí MultiMaus + Roco 10754 opraveno
  • Z nějakého důvodu přestalo fungovat čtení pomocí NanoX (ještě nedávno fungovalo) opraveno
  • Nefunguje vychytávka se zápisem do CV8, ještě jí musím prověřit opraveno
  • Celkově schází zpětná vazba - mám představu že využiji 3 volné výstupy z procesoru a připojím na ně něco jako 7442 Zpětná vazba nepracuje optimálně. Prvních 6 výstupů znamená 6 pozic (stejné pro oba směry u 12 koncové verze), výstup 7 znamená že točna není v žádné známé pozici (bylo použito vyhybek 7 nebo 8), výstup 8 znamená, že točna se otáčí do některé pozice. Výstupy jsou použitelné s moduly zpětné vazby
  • V krátké době doplním ještě program pro 16(12+4) a 32(28+4) konců (6 nebo 14 stání)hotovo


..a nakonec bych chtěl naznačit, jak je možné vyrábět dekodér jako nezávislý výrobek (podle OK2TPQ)
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.
When you rotate table to requested position (using manual turn via address 7 and 8, or mechanically disconnect motor/gear box and rotate table manually to requested position) and then write to CV8, then actual position will be stored to requested pair of CV.
When we will write value 0 to CV8, position will be stored in CV3 and CV4 (useful for following read)
When we will write value 1 to CV8, position will be stored in CV35 and CV36 (end position 1).
When we will write value 2 to CV8, position will be stored in CV37 and CV38 (end position 2).
When we will write value 3 to CV8, position will be stored in CV39 and CV40 (end position 3).
When we will write value 4 to CV8, position will be stored in CV41 and CV42 (end position 4).
When we will write value 5 to CV8, position will be stored in CV43 and CV44 (end position 5).
When we will write value 6 to CV8, position will be stored in CV45 and CV46 (end position 6).
for 12 endpoint version to...
When we will write value 12 to CV8, position will be stored in CV57 and CV58 (end position 12).
for 28 endpoint version to...
When we will write value 28 to CV8, position will be stored in CV89 and CV90 (end position 28).

Mount and tune up

It is good to follow next steps to avoid problems during mounting. (Numbers in brackets are for 28 endpoint version)
After finishing both PCBs and interconnect of them (three wire cable for data and two wire for power; do not forget jumper) is good to start with check connection of engine. It is easy - select turnout 8(16) and turn it, turntable should start rotate clock-wise. If rotate opposite, then switch engine wires. Then check if for turnout 7(15) table rotate counter clock-wise.
If turntable not rotate, then check, if your DCC system is type Lenz, then turntable will rotate clock-wise after turning turnout 4(12) and CCW with turnout 3(11). Then it is good to write value 2(4) into CV1 and add a value of 4(12) to any of described values of turnout.
Next step is to check sensor function. Chose turnout 1 and switch it. Turntable should rotate to some position and stop. The way should be at maximum half of one turn. When table not stop in any position, the sensor or magnet is not in good position or connection not working well.
Turning is possible to stop at any time by switching turnout 7(15) or 8(16) to turn position.

Project status

  • Turn table well react to "move" commands
  • From unknown reason not working programming using MultiMaus + Roco 10764 repaired
  • Also it stops working reading CV values via NanoX (few days ago it works) repaired
  • Also the feature with write into CV8, I should check it repaired
  • Globally I missing feedback outputs; I have plan to use 3 outputs from processor and connect it to some 7442 Feedback not working optimal. First 6 outputs are used for 6 end positions (in a case of 12 outputs version for both sides), output 7 out of position (it was used turnouts 7 or 8), and output 8 turntable running to some position. Outputs are compatible with my feedback modules
  • In a short period of time I will add also version for 16(12+4) and 32(28+4) endpoints (6 or 14 stands) (done)


..and at the end I would like to show, how is it possible to build decoder as an independent product (inspired by OK2TPQ)


 



Download: Beta code and HEX for 6 endpoints, Beta code and HEX for 12 endpoints, Beta code and HEX for 28 endpoints, PCB.

FAQ

Pokud se točna nedokáže zastavit v klidu na koncové pozici a neustále přejíždí doleva a doprava, je to zejména proto, že vůle v převodech (zejména v poslední části) je moc velká. Dbejte proto, aby na sebe kolečka pevně seděla.

FAQ

In a case that turntable can not find final position and still moving left/right, it is because gearbox not fitting well (especially last part). Be sure, that wheels in gearbox fitting together.