28,10,0,50,1
600,600,60,1,3000,5000,25,800
90,150,1,50,12,30,50,1,70,12,1,50,1,1,1,5000
Powered By Creative Image Slider
3modul.dk 1
View Image
3modul.dk 2
View Image
3modul.dk 3
View Image
3modul.dk 4
View Image
3modul.dk 5
View Image
3modul.dk 6
View Image
3modul.dk 7
View Image

Baggrund

Jeg har, som mange andre, et ønske om, at et sporskiftes bevægelser bør ske med en mere naturtro hastighed end den et relæ kan præstere. Alternativ til relæer er servoer. Jeg begyndte derfor at anvende servoer til mine sporskifter. Til styring af servoerne var ”ESU SwitchPilot Servo” det naturlige valg. Desværre oplevede jeg en række begrænsninger og ulemper.

Jeg har ikke en fast modelbane, men bygger i stedet moduler. ”SwitchPilot Servo” vil være monteret under modulet. Justering og programmering vanskeliggøres, når man ikke samtidig kan se bevægelserne fra modulets overside.

En ”SwitchPilot Servo” kan håndtere 4 servoer. Til mit stations modul skulle jeg, til 9 sporskifter og 2 armsignaler (2 servoer pr signal), anvende 4 stk. ”SwitchPilot Servo” med tilhørende strømforsyninger.

Jeg har et ønske om at kunne betjene sporskifter og signaler ved hjælp af en sportavle. En analog kræver en del ledningstræk. En digital, f.eks. ESU EcOS har også en række begrænsninger herunder skærmstørrelse.

Jeg bryder mig ikke om at betjene sporskifter fra en EcOS, da skærmen efter min mening er for lille. Desuden skal man anvende en lille pegepind, som forsvinder, hvis man ikke er påpasselig. Da modulet kun vil være i anvendelse på diverse udstillinger, hvor risikoen er størst for at miste pegepinden, fravælger jeg EcOS.

Denne artikel beskriver et alternativ. I slutningen af artiklen viser jeg, hvordan jeg simpelt monterer servoerne ved hjælp af nogle skabeloner, jeg har fremstillet.

Hvordan virker en servo motor?

En servo motor styres af et pulserende firkantsignal (puls). Signalet gentages (pulserer) for at holde servoen på den pågældende position. Firkantsignalet sendes hver 20 ms. Bredden (længden) af firkantsignalet bestemmer den ønskede position.

 

Figur 1. Firkantsignal

En puls bredde på 1ms fortæller servoen, at den skal gå til minimum position (typisk 00). En puls bredde på 2ms instruerer servoen til at gå til maksimum position (1800). Ønsker man en anden position mellem 00 og 1800, må man i gang med lommeregneren.

Servoen bevæger sig hurtigt fra den ene position til den anden. Hvis det skal fore gå mere naturtro skal servoen instrueres i at flytte sig gradvis fra den ene position til den anden. Dette foretages af det kontrollerende program, f.eks. det program (firmware) der findes i ”SwitchPilot Servo”. Hastigheden kontrolleres ved at opdele bevægelsen fra den ene position til den anden i mindre trin og indsætte en forsinkelse i mellem hvert trin.

Alternativ. Brug en computer.

En computer kan programmeres og kan derfor benyttes til at generere et pulserende firkantsignal. En standard computer (PC eller bærbar) har dog en begrænsning i at kunne kontrollere flere enheder. Der findes dog en computer, der kan kontrollere flere enheder: Raspberry Pi.

Raspberry Pi savner en nøjagtig clock funktion, så det er vanskeligt at bestemme og fastholde puls bredden. Efter nogen søgning på internettet fandt jeg dog et lille modul, der kan forbindes med en Raspberry Pi og som tilmed kan kontrollere 16 servoer samtidigt. Dette lille modul fremstilles af Adafruit og hedder Adafruit 16-Channel Servo Driver. Kombinationen af en Raspberry Pi og en Adafruit 16-Channel Servo Driver lød for mig som et rigtig godt alternativ.

En Raspberry Pi Model B+ kan erhverves for ca. 260 kr. Den skal have en strømforsyning (mini usb stik), sådan en kan erhverves for ca. 70 kr. Desuden skal der anvendes et SD-kort (f.eks. 8Gb micro SD-kort). Dette kort bruges som ”hard disk”. En Adafruit 16-Channel Servo Driver kan købes hos Brink for under 250 kr. Den kræver ikke i sig selv en strømforsyning (strøm leveres fra Raspberry Pi), men den skal udstyres med en strømforsyning til at dække servoernes behov.

Alt i alt en langt mindre investering end den der ville være nødvendig ved brug af SwitchPilot.


Figur 2. Raspberry Pi Model B+


En Raspberry Pi er lidt større end et kreditkort. Styresystemet er Linux (der findes flere varianter) og den er forholdsvis nem at tilgå.

Den kan bruges til at styre forskellige enheder der kan tilknyttes via sine GPIO (General Purpose Input Output) ben.

Adafruit 16-Channel Servo Driver forbindes til Raspberry Pi med fire ledninger. 2 til strømforsyning og 2 til en såkaldt I2C forbindelse.


Det kan næsten ikke være nemmere.

Adafruit 16-Channel Servo Driver har en indbygget clock funktion, der muliggør nøjagtig kontrol af puls bredden og håndterer al kommunikation med servoerne. Ønskes kontrol med flere end de 16 servoer et modul kan håndtere, kan der tilføjes op til 61 Adafruit 16-Channel Servo Driver i serie, så man dermed kan kontrollere 992 servoer fra en Raspberry Pi.

Figur 3. Adafruit 16 channel Servo Driver


Jeg havde i forvejen en Raspberry Pi, men besluttede, at den ikke skulle anvendes til dette, da den i forvejen havde andre funktioner, herunder kontrol af min 3D printer. Jeg anskaffede mig derfor en ny samt en 16-Channel 12-bit PWM/Servo Driver og gik i gang med at eksperimentere.

I dag har jeg en række programmer til Raspberry Pi, der kan kontrollere sporskifterne på mit stations modul.

Figur 4. Sportavle Brørup station

Den i figur 4 viste sportavle er lavet som en dynamisk html side med ”clickable images”. Trykker (clicker) man på et sporskifte, skifter det og billedet opdateres til at vise den aktuelle position.

Som tidligere skrevet vil modulet kun blive anvendt på diverse udstillinger. Modulet vil derfor være udsat for transport i mellem hver anvendelse. Da servoerne efter opstilling, nedtagning og transport kan gå ud af justering vil en justering (konfigurering) af servoerne ofte være nødvendig. Til det brug har jeg lavet en anden html side (se figur 5)

Figur 5. Konfigurering af servoer

På denne html side kan man justere positioner (minimum og maksimum), ændre sporskiftets position (0 = minimum, 1 = maksimum) samt den forsinkelse (i millisekunder), der skal være mellem hver bevægelse fra den ene position til den anden. Positionerne er udtrykt i ticks og ikke i grader. Dette for at simplificere programmellet bagved, så der ikke skal spildes tid på at omregne fra grader til pulslængde. Adafruit kan styre andet end servoer, derfor skal man bl.a. fortælle med hvilken frekvens firkant signalet skal gentages med. I dette tilfælde ønsker vi en gentagelse hvert 20 ms, dvs. vi ønsker at anvende en frekvens på 50 Hz. Længden af firkant signalet udtrykkes i heltal. Der er derfor brug for at udtrykke pulsbredden i andet end millisekunder. Af årsager jeg ikke kender, så er formlen for omregning mellem millisekunder og ticks denne:

Ticks = puls bredde (ms) * 4096 / 20 (ms)

Ticks impuls (ms)
205 1
307 1,5
410 2


Regner vi den anden vej så vil f.eks. sporskifte 6 have en puls bredde varierende fra 1,387 ms til 1,494 ms (omregnet i grader 69,7 hhv. 88,9)


Ticks impuls (ms)
284 1,387
306 1,494

Dette forklarer forhåbentlig, hvorfor tallene i figur 5 er som de er.

Jeg har ikke tænkt mig at beskrive min alternative servo løsning yderligere. Skulle nogen være interesseret så har jeg en ikke færdiggjort logbog, der beskriver opsætning af Raspberry Pi, ligesom jeg gerne udleverer kildekode og de billedfiler, der skal bruges til sportavlen.

Montering af servoer

Som lovet først i denne artikel vil jeg afslutte med at beskrive, hvordan jeg simpelt og enkelt monterer en servo.

Montage skabeloner

Jeg er i besiddelse af en 3D printer, og hvad er mere oplagt end at bruge den til at lave nogle skabeloner til montering af servoer.

Jeg har lavet fire dele

  1. En servo holder. Servoen monteres under modulet i denne holder. Det sikrer, at servoer altid har den samme afstand til pladen.
  2. En monteringslære der anvendes sammen med servo holderen på undersiden af modulet
  3. En monteringslære, der anvendes på oversiden. Den anvendes sammen med den første monteringslære og sikrer, at afstanden til sporskiftet altid vil være den samme.
  4. En borelære. Denne anvendes til at bore et styre hul, hvorigennem servoens forlængede arm (en piano tråd) skal kobles med sporskiftet.

De fire elementer er afbilledet i figur 6.

Figur 6. Holder og monterings lærer


Først anvendes borelæren til at bore et lille hul (2mm)


Dernæst anvendes et større træbor. Det lille hul bores op til en passende størrelse der tillader servoens arm plads til sin bevægelse.


Den lille monteringslære anbringes på oversiden så den præcis passer ind over det opborede hul.


På undersiden af modulet anbringes den anden monteringslære, og den kobles sammen med læren på modulets overside.


Herefter har jeg har monteret en servo i servo holderen med servo arm og piano tråd.

Servo holderen med servo anbringes nu i monteringslæren.

Så er bores der for og servoen monteres.


Tilbage er kun justering af servoen.

Jeg håber denne artikel har givet inspiration og ideer til anvendelse af servoer til sporskifter.

Juli 2015

Poul Erik Sørensen

Design by 3modul.dk