DCC dekodér pro 1/2/4 modelářská serva
Vydáno: 7.11.2011Tento 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á.
Obr. 1 – 3 – Schéma a plošný spoj
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.
Obr. 4
CV Values
CV# | CV# | default | min-max | význam | meaning |
---|---|---|---|---|---|
513 | 1 | 1 (vyh. 5-8) | 0-63 | Primární adresa, spodní polovina | Primary address, low half |
515 | 3 | 1 | 0-255 | Rychlost Serva 1 | Speed of servo 1 |
516 | 4 | 1 | 0-255 | Rychlost Serva 2 | Speed of servo 2 |
517 | 5 | 1 | 0-255 | Rychlost Serva 3 | Speed of servo 3 |
518 | 6 | 1 | 0-255 | Rychlost Serva 4 | Speed of servo 4 |
7 | 30(35) | – | Verze | Version | |
8 | 13 (0D hex) | – | ID Výrobce | Manufacturer ID | |
521 | 9 | 0 | 0-7 | Primární adresa, horní polovina | Primary address, high half |
541 | 29 | 128 (bit 7) | 0/128 | konfigurace – 128 = ukládat nastavení a po startu se vracet k minulému stavu | Configuration – 128 = save last state and return after startup |
545 | 33 | 78 (4E hex) | 10-127 | Délka mezery – doporučuji neměnit tohle je cca 50Hz (vzorec je CV546*256µs, takže cca 20ms) | Spacing – it is recommended not change it – cca 50Hz (formula is CV546*256µs; it means cca 20ms) |
546 | 34 | 1 | 1 | Příznaky (nepoužívá se) | Flags (not used) |
547 | 35 | 100 (64 hex) | 90-210 | Pozice A pro servo 1 (čas pulsu *10µs, takže 100=1,00ms; 250=2,5ms) | Position A for servo 1 (pulse time *10µs; it means 100=1,00ms; 250=2,5ms) |
548 | 36 | 100 (64 hex) | 90-210 | Pozice A pro servo 2 | Position A for servo 2 |
549 | 37 | 100 (64 hex) | 90-210 | Pozice A pro servo 3 | Position A for servo 3 |
550 | 38 | 100 (64 hex) | 90-210 | Pozice A pro servo 4 | Position A for servo 4 |
551 | 39 | 200 (C8 hex) | 90-210 | Pozice B pro servo 1 (čas pulsu *10µs, takže 100=1,00ms; 250=2,5ms) | Position B for servo 1 (pulse time *10µs; it means 100=1,00ms; 250=2,5ms) |
552 | 40 | 200 (C8 hex) | 90-210 | Pozice B pro servo 2 | Position B for servo 2 |
553 | 41 | 200 (C8 hex) | 90-210 | Pozice B pro servo 3 | Position B for servo 3 |
554 | 42 | 200 (C8 hex) | 90-210 | Pozice B pro servo 4 | Position B for servo 4 |
555 | 43 | 4 | 4-10 | Počet pulsů po dosažení pozice | Number of pulses after position reach |
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.
Obr. 5
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í.
CV33 Values
CV33 f [Hz] t [sec] (A=100, B=200, speed=1)
98 40 2,5
78 50 2
65 60 1,66
56 70 1,4
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.
Obr. 6
Obr. 7 – Nastavení polohy
Zdroj a poslední verze: http://www.fucik.name/masinky/x/dcc4servo_v3.x.html
(Pro Honzíkovy vláčky převzato s laskavým svolením autora)
Rubrika: DIGI-CZ, Elektronika, TECHNIKA, ZPRÁVY