Home » Elektronik » Växel dekoder för 64 servos

Växel dekoder för 64 servos

Använda servos istället för normala växel motorer är en utmaning för styrelektroniken. Jämfört med normala växelmotorer så skall dessa dekodrar inte endast koppla på/av strömmen till växelmotorn, utan måste även uppfylla följande funktioner

  • Skicka en specifik signal till servon, så den ställer sig i rätt position.
  • Ändra sig långsamt. Du vill inte att servon skall flytta sig med sin egen hastighet, utan mycket långsammare än så.
  • Stäng av all ström till servon om du stänger av strömmen till spåren.
  • Koppla tillbaka strömmen till servon, men inte samtidigt som de andra. Om du har t.ex. 100 servos så vill du INTE koppla på strömmen samtidigt till dem. Det kommer att dra så mycket kraft så det kommer att påverka spänningen med resultatet att mikroprocessorerna kommer få Brown-out och alla startas om.
  • Separat strömmatning till servona. Inte komma från samma anslutning som matar mikroprocessorerna
  • Måste spara min/max positionerna i minnet. Du vill inte att servon rör sig för mycket eller för lite. Och alla servos behöver rör sig olika mycket.
  • Senaste positionen måste lagras. På så sätt ändrar den inte växeln till utgångspositionen varje gång du kopplar på strömmen.

Denna lista har jag fått fram av erfarenhet under tiden som jag utvecklade servostyrningen. Samtliga funktioner i listan är nu implementerade i mina dekoders.

Jag har skapat en kort video för att visa hur rörelserna ser ut. Både på växeln men även på hur servon rör sig och mikrobrytarna kopplas på/av. Hoppas den hjälper dig med att få en bild över vilka rörelser du får i växlarna.

 

Arkitekturen

Servo dekodern är uppbyggd med en centralenhet och ett antal mindre slavenheter. Varje centralenhet kan hantera 16 slavenheter och varje slavenhet fyra servos och fyra signaler. Japp, du hörde rätt. Den kan även hantera signalerna. Så en fullt utbyggd lösning så kan den kontrollera 64 servos och 64 signaler. På min modelljärnväg har jag fyra centralenehter eftersom de är under olika sektioner av borden. Alla centralenheter har så klart inte fullt med slavenheter. En av dem har endast fyra slavenheter än så länge i alla fall.

 

USB och Raspberry Pi

Samtliga konfigurationsändringar för t.ex adresserna till växeldekodern, servo hastigheten, min/max servo positioner mm ändras genom USB interfacet på centralenheten. Programvaran som jag använder för ändringarna är utvecklad och körs på en Raspberry Pi. Jag använder just en Raspberry Pi eftersom det är en helt normal linux dator, och jag hade den redan tillgänglig för mitt belysningsprojekt. För er som inte vet vad en Raspberry Pi är för något, så är det i grund och botten en väldigt liten och billig dator. Ungefär samma storlek som en normal växeldekoder för fyra växlar. Jag kommer i framtiden att lägga upp en komplett image att använda på en Raspberry Pi för nerladdning. Det kommer att göra det mycket enklare att komma igång för nya användare. Lägg en kommentar på sidan om du är intresserad av en sådan.

 

XpressNet connection

Anslutning till modelljärnvägen sker genom XpressNet. Jag vet att ett antal personer kommer tycka att detta är idioti och kommer att argumentera för att det är bättre att använda standard DCC signal från spåren istället. Oftast så är det första argumentet att du kan endast koppla in 31 enheter på den bussen, beroende på version. Det är ju faktiskt inte helt rätt. Du kan ha max 31 enheter som pratar på bussen, men antalet enheter som kan endast lyssnar på bussen är mycket mycket högre.Så det är ingen begränsning alls. Det finns också feedback information på bussen. Varför skulle jag vilja ha det? Låt oss säga att du vill ändra en signal till rött så fort som tågen kör in på nästkommande block. Väldigt enkelt att implementera ifall du kan lyssna på feedbacken från det blocket. Andra alternativet är så klart att få instruktionen från t.ex TrainController att ställa om signalen till rött. Inte alltid så enkelt att få det att fungera smärtfritt. Det sista argumentet är varför jag skall dra kraft från DCC boostern till att hantera växlar? Låt boostern göra det den är designad för att göra. Dvs generera ström till spåren och loken. Inget annat

 

Mikroprocessorn och programmering

Centralenheten är byggd runt mikroprocessorn PIC 18F4550. En av funktionerna i denna kret är en USB anslutning och denna använder jag för kommunikation med Raspberry Pi för konfigurationsändringar. Programvaran är skriven i  MikroC från MikroElektronika. En av egenheterna är att serienumret på USB enheten måste vara unikt, och jag sätter detta genom att använda current timestamp som en konstant vid kompileringstillfället. En väldigt enkel lösning för mig, och garanterar att jag får unika USB serienummer. Av denna anledningen så har jag inkluderat fyra olika .HEX filer i nerladdningspaketet. Enda skillnaden mellan dem är USB serienumret. Om du ansluter två kort till samma Raspberry Pi med samma serienummer så kommer linux att försöka göra en multipath koppling till dem, då den identifierar samma kort två gånger, fast på olika anslutningar. Inte så bra. Så använd olika .HEX filer så är du säker. Om du behöver mer än fyra centralenheter, lägg en kommentar till posten så kompilerar jag fler och laddar upp.

 

Anslutningar till och mellan korten

servocontroller wiring

För att ansluta korten korrekt, gör följande

  1. Koppla in +5V till centralenheter. Observera att det inte finns något skydd ifall du kopplar fel
  2. Koppla in +5V till slavenheterna för ström till servona. Strömmen till servona och strömmen till centralenheterna har gemensam nolla. Så var noggrann med anslutningarna här. Jag rekommenderar er att använda ett separat powersupply för matningen till servona. Allt för att undvika störningar på mikroprocessorerna.
  3. Anslut slavenheterna till centralenheten. Jag använder helt vanlig larmkabel som du kan köpa på rulle i normala teknikbutiker. Fyra ledars varianten, där jag endast använder tre av dem.
  4. Koppla in servona till slavenheterna. Nollan (normal svart i servo kabeln) skall vara ansluten närmast kanten på kretskortet och signalen (gul på mina servos) närmas mikroprocessorn.
  5. Anslut USB kabeln till centralenheten och till Raspberry Pi’n. Jag har faktiskt ett antal USB hubbar utspridda under modelljärnvägen där samtliga är anslutna till en och samma Raspberry Pi. Detta rekommenderar jag dig att göra ifall du är intresserad av andra project från mig. Jag använder USB och/eller Raspberry Pi en hel del.
  6. Anslut XpressNet kabeln. L anslutningen är +V och används inte för centralenheten. Så den behöver du inte koppla in. Jag gör det dock ändå eftersom jag inte vet vad som skall anslutas till bussen längre ner. Om jag t.ex vill ansluta en handkontroller till så behöver jag alla kablar.

 

Linux verktyg

Linux verktyget har mycket funktionalitet. Du kan göra följande med det.

  • Sätt namnet på centralenheten
  • Sätt servo armens hastighet
  • Sätt min och max positionerna på servon
  • Sätt adressen på centralenheten
  • Visa alla inställningar, inklusive adressen till varje individuell servo och signal
  • Lista alla ansluta centralenheter
  • Spara och ladda alla inställningar till/från en fil.
  • Slå på ident LED’en på centralenheten

För kommandosyntax och hjälp, kör följande kommando.

./servoSettings help

Schema

Circuit - ServoCentralCard V1.2

Circuit - ServoSignal DaughterCard V1.5

 

Krestkort

Centralenhet

PCB - ServoCentralCard V1.2

Ja, jag vet. Det finns en text som heter ”Isak är bäst på LEGO” Isak, min son på 4 år hjälpte mig att etsa kretskorten (för övrigt en kanonaktivitet att göra med en 4’a åring) och krävde då att den texten skulle finnas där. Så det är bara att acceptera det….

20160218-_MG_0812-02

 

Slavenhet

PCB - ServoSignal DaughterCard V1.5

20160218-_MG_0811

 

Nerladdningar

CentralCard V1.2 CAM
DaughterCard V1.5 CAM
4 x Servo DaughterCard HEX
16 x ServoCard Controller HEX
servoSettings.tar.gz

Lämna ett svar

E-postadressen publiceras inte.

*