DCC točnaZjistil 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 tableI 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:
Hardware a mechanikaMechanickou 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
Hardware and mechanicsMechanical 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, ...). 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, ...). 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 logikaPopis 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 logicFollowing 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
* 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
..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 upIt 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
..and at the end I would like to show, how is it possible to build decoder as an independent product (inspired by OK2TPQ) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|