Har tidigare tänk att jag skulle styra mina 18-20 servon med ett atmel168 och två tlc5940 chipp. Dock verkar det som att det inte kommer att funka pga att arduinochippet inte stödjer mer än 12 servon.
Har då kollat på följade lösningar.
ArduinoMega som stödjer upp till 48 servon
atmel168+ scc micro controller (som verkar vara det bästa alternativet)
Fulmekka tlc +kod ?
Jag tror att man ganska enkelt kan göra servosignalen i mjukvara i en AVR, och således styra ett servo per ledig I/O.
Det är ju en ganska långsam signal med period på 20 ms och längd på 1 ms. Ifall AVR:en körs på 20 MHz blir 1 ms 20000 klockcykler. Om mjukvaran ger ett jitter på ett tiotal klockcyckler tror jag inte det gör något.
men går det att få till exakta rörelser?
Alla de projekt jag har kollat på använder sig utav ett eller flera Pololu controllers just för den anlednigen att de vill kunna styra hastighet,gradantal osv. Men det är kanske en ren programerings fråga?
Jag har ett projekt på min hemsida med en PIC som kan styra 12 RC-servo. Varje servo har en variabel i minnet som "spelas" upp och det fungerar skitbra. Att expandera detta till 24 kanaler är knappast ett problem, finns det 2 timers som kan användas kan man ha dom till att klara 12 vardera.
Sedan kan mjukvaran "trilla" på variablerna som det behövs, det klarar den enkelt.
Så själva pulsningen sköts helt autonomt av en (eller två) timer(s) som "spelar upp" värden, sedan kan huvudprogrammet sköta ändringar av variabler helt efter eget tycke.
Ok. Exakta rörelser menade jag att servona rör sig t.ex 20grader i en repetion av 10ggr o att det skulle hamna på samma ställe, men jag kom senare på att det handlar nog mer om kvaliteten på servot än min begränsade programmering ?. Dock
så har jag inte studerat koden för Pololu, så det går kanske att fixa på annat sätt. Tänkte, baserat på det jag har läst att ett pololu chip är 'lättare' att komma igång med.
OK. Du vet säkert vad du menar, men notera att begreppet
"samma ställe" har samma problem som "exakt"...
Båda begreppen måste omsättas i "% av fullt utslag" eller
något liknande konkret för att kunna tas ställning till. D.v.s är
"inom 1% av fullt utslag" detsamma som "samma ställe" ?
(Du behöver inte svar, det vara bara ett exempel...)
Har för mig att du kan få ut 32st servo pulser med 16 bitars upplösning (som genereras av hårdvaran. dvs, inget svaj alls i pulserna), med en atmega168 och 4st 74237 kretsar. Det var ett tag sedan jag pysslade med det och minnet är lite svajigt.
Hur är det med förflyttning av flera servon simultant?
Sist jag höll på med servon så fick jag bara ett servo att röra sig per gång. Men det var ngt pga av min bristfälliga kodning.
Det är helt säkert ett kodningsfel! Med en (eller fler) timer-ISR till att skicka ut pulserna är det bara att ändra värdet som motsvarar deras position, sedan kör resten automatisk.
ghost_rider skrev:Hur är det med förflyttning av flera servon simultant?
Sist jag höll på med servon så fick jag bara ett servo att röra sig per gång. Men det var ngt pga av min bristfälliga kodning.
Inga problem. Pulslängden laddas hela tiden om inför nästa puls (en rad i irq-rutinen) så alla positioner kan ändras från puls till puls.
ah okej.
Men en sista fråga, varför stödjer det nya servo biblioteket bara upp till 12 servon? Är det bristen på PWM pins? http://www.arduino.cc/en/Reference/Servo
Om du har 12 servon som alla kör med ytterställning (2ms) blir PRT 2ms * 12 = 24ms. Man brukar att säga att standard bör vara runt 20ms ± något så 12 st är väl ganska lagom.
Och man använder väl knappast ett PWM-modul till detta, man använder en (eller fler) timer!
Med en Renesas M16C med 120 pinnar kan jag nog fixa mjukvaran att styra runt 80 st servon om det behövs.
Hela idéen med timer-ISR är att "huvudprogrammet" bara har en tabell där det petar in vilka positioner servon ska ta, interrupt-programmet ser sedan till att skapa pulserna enl. dessa värden och huvudprogrammet kör bara sin grej.
Se det som 2 olika program som kör: det ena skriver i en tabell vilka positioner som ska användas och det andra ser till att skicka pulserna enligt samma tabell. Dessa 2 program stör inte varandra men tuggar på i sin egen takt.