Jindra Fučík

Servo Kontrol

Úvod

V rámci projektu elektronické vizitky (vyšlo na mcu.cz 30.06.2015) mne napadlo, že by bylo možné udělat jednoduchý, přesto však komfortní ovladač pro modelářská serva.
Ovladač by měl být použitelný zejména pro začátečníky v oblasti vláčkového modelářství. Tedy pro ty, kteří už pochopili univerzálnost modelářského serva, ještě však nepochopili přednosti digitálního řízení kolejiště a stále hledají řešení jak kolejiště ovládat pomocí tlačítek, diod a relátek.
Ovladač je koncipovaný pro řízení pomocí dvojice tlačítek - jedno pro výhybku ve směru rovně, druhé pro výhybku ve směru do odbočky; nebo jedno pro závory otevřené a druhé pro závory zavřené. Třetí tlačítko, spolu s LED, slouží k nastavování.

Funkce zařízení

Tato verze podporuje následující funkce:
  • Ovládání jednoho modelářského serva
  • Volná definice dvou koncových poloh
  • Volná definice rychlosti přesunu mezi polohami
  • Dva signály pro ovládání, jeden pro nastavení
  • Nastavení lze kdykoli měnit
  • LED signalizující režim nastavení

Hardware

Z hlediska hardware se jedná o velice jednoduchý modul, servo má provozní napájení v podstatě stejné jako procesor, takže zdroj není nutné řešit. Pro testovací verzi jsem použil jednoduchá tlačítka a k nim pull up rezistory, pokud má být modul osazen v kolejišti, asi by bylo vhodné se zamyslet nad lepším ošetřením vstupů. V zapojení lze pochopitelně dělat různé úpravy - například přidávat zenerovy diody pro filtraci napájení, nebo měnit hodnoty pull-up rezistorů, přidat nějakou 7805 jako zdroj a podobně. Po pravdě, nic takového jsem zatím nepotřeboval, takže jsem to neřešil a nechávám na zralé úvaze čtenáře jestli potřebuje a nebo nepotřebuje takové věci řešit.

Servo Controll

Introduction

During my project electronic business card (published 30.06.2015 on mcu.cz) I decided, that it will be possible to create simple but comfortable driver for model servos.
Driver should be useful especially for beginners in model railroading. For those, who already understand benefits of model servos, but not yet understand benefits of digital control of model layout and still trying to solve control all layout using two push buttons, diodes and relays.
Driver is designed for controlling by use of two buttons - one for turnout to straight direction and second for turnout to turn direction; one for road crossing barriers in open position, second for road crossing barriers in closed position. Third button together with LED is for configuration.

Device functions

Current version support following functions:
  • Control of one model servo
  • Free definition of endpoints
  • Free definition of moving speed
  • Two signals for control of servo, one signal for setup
  • Configuration can be changed at any time
  • LED signalling configuration mode

Hardware

From hardware point of view the module is relative simple. Model servo using same voltage as used microcontroller, then it is no necessary to solve any special power source. I was used simple push buttons with pull up resistors for my test version. Once module will be used in layout, it would be good to use better protection of input signals. It is for sure possible to done variety of modifications in schematic - for example adding zener diodes for filtering of power voltage, change values of pull up resistors, add some 7805 as power source etc. In reality I do not need to done any of those changes, then I'm keeping it to the readers decision if it is necessary or not.

Software

Software je poměrně jednoduchý. Časovač Timer1 je použit pro vytváření signálu pro servo (s použitím přerušení) a hlavní kód obsluhuje tlačítka a řídí blikání LED.
Použité rutiny jsou notoricky známé z předchozích projektů, takže nemá cenu je dále rozebírat.

Nastavení

Pro nastavení se používá pět hodnot, z toho tři lze nastavit i za provozu. Hodnoty jsou uloženy v eeprom a lze je také poměrně efektivně měnit při programování procesoru. První hodnota udává výchylku pro pozici A, druhá hodnota udává výchylku pro pozici B, třetí hodnota definuje rychlost přesunu mezi pozicemi. Čtvrtá hodnota, kterou nelze měnit za provozu, určuje pracovní kmitočet serva (spacing interval) a poslední, pátá, hodnota určuje počáteční výchylku serva, pokud není stisknuté žádné tlačítko.
Krajní výchylky jsou definovány jako šířka pulzu *10µs. Běžné servo má pracovní rozsah 900µs - 2100µs, tedy přípustné hodnoty jsou hodnoty 90 - 210.
Parametr rychlost má následující význam: Hodnota 0, znamená maximální rychlost které je servo schopné. Hodnota 1 je takzvaná základní rychlost, takže změna o 10µs za každý krok (pokud je tedy vzdálenost koncových bodů A a B 100kroků = 1000µs - například A=100, B=200, rozdíl A-B*10µs = 1000µs), pak doba přestavení bude cca 2 sec (100 kroků / 50 Hz = 2sec).
Hodnota 2 znamená poloviční rychlost - každý krok se zopakuje 2x, takže přestavení z minulého příkladu bude trvat cca 4sec. Další hodnoty znamenají prostý násobek 3 znamená 6*2sec a tak dále.
Pro hodnoty větší než 128 (80hex) platí jiné pravidlo, zde hodnota znamená kolik kroků se přeskakuje. Tedy hodnota 128 -> 80hex znamená normální rychlost, přeskakuje se 0 kroků, takže přesun z předchozího příkladu bude trvat zase 2sec. Ovšem pro hodnotu 129 -> 81hex se přeskakuje jeden krok, takže rychlost přesunu je ve skutečnosti dvojnásobná - tedy přesun z předchozího příkladu bude trvat cca 1sec. Pro hodnotu 130 -> 82hex se přeskakují 2 kroky, takže přesun bude trvat cca 2/3sec. Ale pozor - počet kroků 100 není dělitelný 3, takže se v jedné krajní poloze bude servo chovat neklidně, neboť se nikdy netrefí do koncové polohy. Proto je nutné, aby počet kroků pro tuto rychlost byl například pouze 99. Pak bude program fungovat správně a rychlost přesunu bude zhruba 0,66sec.

Nastavení za provozu

Jak již bylo řečeno, za provozu lze nastavovat tři parametry - obě koncové výchylky a rychlost přestavení.
Nastavení se provádí jednoduše pomocí nastavovacího tlačítka. V normálním stavu je led zhasnutá, tlačítka A a B se pak používají k přepínání polohy serva.
Po prvním stisku nastavovacího tlačítka led jednou blikne - pak funkce tlačítek přechází do režimu "+" a "-" a nastavuje se krajní poloha A. Nastavená poloha se automaticky ukládá.
Druhý stisk nastavovacího tlačítka indikuje LED dvojitým bliknutím. Pak dochází k nastavení krajní polohy B podle stejného modelu jako v předchozím případě.
Po třetím stisku nastavovacího tlačítka LED blikne třikrát. Tím indikuje režim nastavení rychlosti. Při nastavování rychlosti servo střídavě přechází mezi polohou A a B, aby uživatel mohl sledovat jak se zvolená rychlost projevuje.

Software

Software is relative simple. Timer 1 is used for creation of servo signal (in cooperation with interrupt), and main code controlling push buttons and blinking of LED.
Used routines are well known from previous my projects, then it is no necessary to describe them

Configuration

Device using five values for configuration. Three of them can be configured during operation. Values are stored in eedrom and it is possible to change them during programming of processor. First value define angle for position A, second value define angle for position B, third value define speed of move between positions. Fourth value, that can not be changed during operation, define working frequency of servo (spacing interval); and last, fifth, value define sterting position of servo, until first button is pressed.
Endpoint angles are defined as pulse width *10µs. Usual servos working in range 900µs - 2100µs, then acceptable values are 90 - 210.
Speed value have following description: Value 0 mean maximum speed of servo. Value 1 is called "basic speed", it mean distance of 10µs per step. Then if distance of endpoints A and B is for example 100 steps = 1000µs - for example A=100 and B=200, distance A=B*10µs = 1000µs; then time for move will be cca 2 sec (100 steps / 50Hz = 2 sec).
Value 2 mean half speed - every step is multiplied 2x, then move from previous example will take about 4sec. Next values mean only another multiply; then 3 mean 3*2 = 6 sec etc.
Values bigger than 128 (80hex) using different rule. This value means how many steps are "skipped". Then value 128 -> 80hex mean normal speed; here are skipped 0 steps, then move from previous example will take again cca 2sec. But value 129 -> 81hex mean skip one step, then speed will be in reality 2x bigger; it mean that move from previous example will take cca 1sec. Value 130 -> 82hex mean skip of two steps, then move from previous example will take 2/3sec. Note, that number of steps 100 is not possible to divide by 3, then servo will remain in one endpoint unstable, because will never reach requested endpoint. Then it is necessary to have number of speed steps set to 99. It will make program working normally and move will take 0.66sec.

Configuration during operation

As it was already stated, during operation can be changed three parameters - both endpoints and moving speed.
Setup is done simply by using configuration button. In normal state led is off and buttons A and B are used for switching servo endpoints.
When configuration button is pressed first time, led will blink once - then function of buttons becoming into "+" and "-" and is used for configuration of endpoint A. Configured position is automatically stored.
Second push of configuration button is indicated by two blinks of LED. It mean setup of servo endpoint B using same model as above.
Third push of configuration button is indicated by three blinks of LED. It mean configuration of moving speed. During configuration of speed servo periodically moving betwaan endpoints A and B to allow user how selected speed step look like.

Závěr

Jednoduchá aplikace, která umožňuje komfortně využít modelářské servo v kolejištích ovládaných zastaralým analogovým způsobem.
Po stránce hardware je možné vytvářet na modulu ještě celou řadu dalších vylepšení - nahradit tlačítka nějakými jinými vstupními členy (opto-oddělovači, relátky a podobně), nebo doplnit nějakou napájecí část (například usměrňovací můstek a stabilizátor 7805). Ale pro4, když je tak jednoduché koupit USB nabíječku k telefonu?

Conclusion

Simple application, that allows comfort usage of model servo in old fashion train layouts based on obsoleted analogue control.
From hardware point of view it is possible to done variety of changes on module - replace push buttons by another input elements (opto-couplers, relays etc), or add some power source part (for example diode rectifier and voltage regulator 7805). But why, once you can buy comfortable USB mobile phone charges?


Pokud máte problém s osazováním, nebo s výrobou desek plošných spojů, využijte kontaktní formulář na TOMTO web-shopu, kde si můžete objednat komponenty nebo hotový dekodér.
Pravděpodobně budete potřebovat využít kontaktní formulář pro výrobku které nejsou součástí standardního výrobního programu.

Once you have problems with soldering or creating PCB boards, please use contact form on THIS web-shop, where you can order some parts or finished decoder.
Probably you will need to use contact form for modules not included in standard production.


Donwnload: doc.pdf HEX