DCC dekodér pro 1/2/4 modelářská servaTento dekodér vznikl jako rozšíření dekodéru Paco Cañada. Jedná se pouze o změnu firmware, zapojení a podstata je stále stejná.Zdroj a poslední verze: http://www.fucik.name/masinky/x/dcc4servo_v3.x.html Pro doplnění schéma a plošný spoj |
DCC decoder for 1/2/4 model servosThis decoder is only enhancement of decoder by Paco Cañada. It is only enhancement of software. Hardware and principles are still same.Source and last versions: http://www.fucik.name/masinky/x/dcc4servo_v3.x.html For info - schematics and board: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
all in one .zip |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Existují dvě verze software. Verze 3.0 a 3.5. a dvě pod-verze 3.2 a 3.4 Verze 3.0 zastavuje čtení dat během pohybu serva, takže je možné, že nepřijme některý paket, nicméně pohyb serva je velmi přesný. Verze 3.5 naopak čte data neustále, takže může dojít ke chvění serva při pomalém pohybu. Verze 3.2 Čte neustále, ovládá však pouze 2 serva, zato ve 4 polohách - Servo 1 dostává polohy A1,B1,A1 a B2, Servo 3 dostává polohy A3,B3,A4,B4 (serva 2 a 4 se nepodporují) - to je vhodné pro tří-cestné výhybky a pro CarSystem Verze 3.4 Čte neustále, ovládá však pouze 1 servo, zato v 8 polohách - to je vhodné pro ovládání šuplíkových nádraží nebo malé točny velikosti Z a menší Hlavní změna spočívá v tom, že dekodér definuje zvlášť polohu serva pro pozici A(rovně) a pro pozici B(do oblouku). Dále je možné měnit směr otáčení ještě před dokončením otáčky. A také je možné nastavit rychlost otáčení na maximální rychlost serva. |
Here exist two versions of software. Version 3.0 and 3.5 and two subversions 3.2 and 3.4 Version 3.0 stopping read of packets during servo move. It mean, it is possible, that decoder lose some packet, but servo move is very accurate. Version 3.5 not interrupts packet reading, then it is possible that servo during slow moving can do small vibrations. Version 3.2 not stopping read packets, handling only 2 servos, but in 4 positions - Servo 1 receiving positions A1, B1, A2 and B2, Servo 3 receiving positions A3,B3, A4 and B4 (Servos 2 and 4 not supported) - it is useful for three way turnouts and for CarSystem Version 3.4 not stopping read packets, handling only 1 servo, but in all 8 positions - it is useful for small turntables for Z scale and smaller Main change is, that decoder defining separate servo position for A(forward) and B(turn). It is also possible to change direction before servo finish previous move. And it is also possible to set up maximum servo speed. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CV Values
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Programování CV je možné provádět ve stránkovém a v přímém režimu. Adresu lze naprogramovat také tak, že stisknete tlačítko a přehodíte příslušnou výhybku, dekodér si pak určí a uloží adresu Pokud máte s programováním potíže, lze nastavit hodnoty CV již při nahrávání hex souboru do procesoru. Postup je zachycen na následujícím obrázku. |
The programming can be made it in Paged and Direct mode. To program the decoder address we can use the pushbutton, push the button and switch the turnout, the decoder will calculate and store relevant address If you will have a problems with programming CV, you can modify it during burning hex file into PIC. Steps are on following figure. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Zelená je primární adresa Červená - čas pro servo 1...4 Žlutá - A poloha pro serva 1...4 Modrá - B poloha pro serva 1...4 Fialová - ostatní Také je možné si CV odpočítat od začátku, jejich poloha odpovídá jejich číslu CV35=CV41: Je možné si všimnout, že pro každé servo se nastavuje pozice pro A (rovně) a B (do odbočky) samostatně. Je možné nastavit i hodnoty v obráceném pořadí - tedy A=200 a B=100, takže není nutné obracet servo. Pozor: dekodér neprovádí žádnou kontrolu na hodnoty, většina serv funguje v rozsahu 0,9 - 2,1 ms (90-210). Překvapila mne serva blue-arrow (ta levná malá modrá), která se na blbé hodnoty začala točit dokola. Přidal jsem nové CV43 - udává počet pulsů po dosažení pozice. Tato hodnota je důležitá zejména pokud používáte maximální rychlost serva. Servo potřebuje ještě nějaký čas, aby se ustálilo na svojí pozici. Při pomalém běhu je ten čas velmi krátký, ale při rychlém přesunu se může stát, že servo ani nestihne na svojí pozici doběhnout. V takovém případě je možné tuto hodnotu zvětšit. Použitelné hodnoty jsou cca mezi 4 až 10, delší vedou ke chvění serva, kratší k nedobíhání na pozici. Určení rychlosti serva (CV3-CV6) - rychlost znamená kolikrát se použije každý puls. Takže pokud máme definované polohy A=100 a B=180 (1ms - 1,8ms), máme 80 kroků, takže při výchozím kmitočtu 50Hz je doba otáčení 80/50=1,6sec při rychlosti 1. Při rychlosti 2 to bude dvojnásobně dlouho - tedy cca 3,2sec, při rychlosti 3 to bude trojnásobek, tedy 4,8sec. Pokud nastavím rychlost 0, znamená to maximální rychlost serva. (tu najdete v dokumentaci k servu a znamená rychlost otočení o 60° - cca 67kroků dekodéru) Pokud nastavíme rychlost na hodnotu větší než 128, použije se jiná logika výpočtu. Namísto opakování kroků se použije přičítání větších čísel. Jednoduše řečeno pokud použijeme rychlost v rozsahu 128-255, dekodér odečte od zadaného čísla 127 a tolikrát rychleji servo poběží. Několik příkladů, vždy pro první servo, vždy pro: CV#35=A=100; CV#39=B=200; CV#33=78=50Hz Příklad 1: CV#3=1 CV#35-CV#39=200-100=100 čas=(100*1)/50=2sec Příklad 2: CV#3=2 CV#35-CV#39=200-100=100 čas=(100*2)/50=4sec Příklad 3: CV#3=3 CV#35-CV#39=200-100=100 čas=(100*3)/50=6sec Příklad 4: CV#3=128 CV#35-CV#39=200-100=100 128-127=1 čas=(100/1)/50=2sec Příklad 5: CV#3=129 CV#35-CV#39=200-100=100 129-127=2 čas=(100/2)/50=1sec Pozor: pro případ kdy se používá dělení nesmí první podíl (v závorce) vycházet desetinné číslo, takže pro další příklad musíme provést korekci B pozice na 199 Příklad 6: CV#3=130 CV#35-CV#39=199-100=99 130-127=3 čas=(99/3)/50=0,66sec Příklad 7: CV#3=131 CV#35-CV#39=200-100=100 131-127=4 čas=(100/4)/50=0,5sec CV33 - kmitočet; jedná se o celkem zásadní hodnotu pro servo. Většina výrobců serv uvádí, že jejich serva jsou konstruovaná pro kmitočet 50Hz, některá (Multiplex) pro 40Hz. Pokud potřebujete větší rychlost, můžete experimentovat s kmitočty 60Hz a možná i 70Hz, víc vám servo asi nedovolí. |
Green is primary address Red - time for servo 1...4 Yellow - A position for servo 1...4 blue - B position servo 1...4 Purple - rest It is also possible to count CV - the position is equivalent to the CV no. CV35=CV41: It is possible to find, that every servo defining position A (forward) and B (turn) separately. It means, that it is possible to setup values in different order - A=200 and B=100; it means it is not necessary to mount servo up side down. Warning: Decoder not checking any values, usual servos working in range 0.9 - 2.1 ms (90 - 210). I was surprised by blue-arrow servos (that cheap blue one), which on wrong values start rotating. I have added new CV43 - it means how many pulses are send to servo when it reach final position. This value is crucial especially when you are using maximum servo speed. Servo needs some time for stabilization his position. When it moves slowly, the time is short, but during a fast move it can happen, that servo not catch his position on-time. In that case is good to increase value of CV43. Useful values are between 4 and 10. Bigger values mean noise on servo, lower that servo not reaches his position. Determining servo speed (CV3-CV6) - value means how many times is used every speed pulse. If we are moving servo from position 100 to position 180 (1ms - 1.8ms), we have 80 speed steps, with default frequency 50Hz and speed 1 it mean 80/50=1.6sec. With speed 2 it will be two times longer - cca 3.2sec, for speed 3 it will be three times - 4.8sec. If speed value is set-up to 0, it means maximum servo speed. (It can be found in vendor documentation) For a speed value greater than 128 will be used different logic. Instead of repeating a pulse, the bigger adding will be used. It means, when we will use speed in a scale 128-255, decoder subtract 127 from given value and this value use for multiply speed of servo. Few examples, always for first servo, always for: CV#35=A=100; CV#39=B=200; CV#33=78=50Hz Example 1: CV#3=1 CV#35-CV#39=200-100=100 time=(100*1)/50=2sec Example 2: CV#3=2 CV#35-CV#39=200-100=100 time=(100*2)/50=4sec Example 3: CV#3=3 CV#35-CV#39=200-100=100 time=(100*3)/50=6sec Example 4: CV#3=128 CV#35-CV#39=200-100=100 128-127=1 time=(100/1)/50=2sec Example 5: CV#3=129 CV#35-CV#39=200-100=100 129-127=2 time=(100/2)/50=1sec Warning: for a case we are using dividing, the value in first brackets can not use tenths, then we will change B position to 199 Example 6: CV#3=130 CV#35-CV#39=199-100=99 130-127=3 time=(99/3)/50=0,66sec Example 7: CV#3=131 CV#35-CV#39=200-100=100 131-127=4 time=(100/4)/50=0,5sec CV33 - frequency; it is almost crucial value for servo move. Usual vendors say, that his servo is designed for 50Hz, some of (Multiplex) for 40Hz. If you need bigger speed, you can try to use with a frequency of 60Hz and also 70Hz. Bigger will not servo allow you. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CV33 Values
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Překmitnutí serva U levných analogových serv se často stává, že při použití maximální rychlosti a velké výchylky dochází k "překmitnutí". To je přirozená vlastnost serva, pokusím se jí demonstrovat na následujícím obrázku. Servo se nachází v pozici A a dostane příkaz k okamžitému přesunu do pozice B. To je pochopitelně daleko, takže servo připojí motoru plné napájení a čeká na další puls. Ten je stále ještě pro vzdálenou pozici, takže servo pokračuje plnou rychlostí. Když přijde třetí puls, servo zjistí, že přejelo a tak se začne vracet. Většinou se návrat povede na první pokus, ale může se stát, že i zde dojde k překmitu a tak servo zase provede korekci. Z toho důvodu je nutné, aby drátovody mezi servem a vyhybkou (závorami, vraty výtopny) byli dostatečně pružné, aby dokázali tento překmit vykompenzovat. |
Servo overlap Cheap analog servos usually do with maximum speed that it will overlap. It is done by principles of servo. I will try to demonstrate it on following figure. We have servo in position A and send him command to move to position B. That is of course far. That means, that servo will connect his motor to full voltage and will wait for next pulse. This pulse is again for far position, and then servo continues with full speed. When third pulse will arrive, servo recognizes, that is over, then will start to go back. Usually return will happen for first try, but it can happen, that servo overlap again and then will do last correction. For that reason is necessary to use flexible/pliable wires for connection of servo and turnout (barriers, shed doors) to allow them to compensate this overlap. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Nastavení polohy popis bude doplněn |
Position set-up description will be added |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||