Sida 1 av 1

RC Mottagare och servon

Postat: 26 juli 2006, 00:10:57
av Korken
Hej alla glada!

Jag har letat lite på google efter en sida där det finns information om hur pulsen ser ut från en RC - 2kanals motagare och hur signalerna ska se ut till ett RC servo.
Om någon vet en bra sida eller dylikt så säg gärna till! :)

//Emil

Postat: 26 juli 2006, 00:29:22
av sodjan
Du behöver knappast någon sida, det är väldigt enkelt.

Varje 20 ms kommer det en puls.

Pulslängden varierar mellan 1.0 och 2.0 ms, där 1.5 ms är "mittläget"
och de två andra naturligtsvis är de två ändlägena.

Det som är kritiskt är pulslängden, 20 ms pausen kan variera
lite utan att det spelar någon större roll. Det gör det enklare att
generera pulser från en PIC/AVR, eftersom man kan köra med en
fast (ca) 20 ms paus mellan pulserna oberoende vilken pulsbredd
det råkar vara...

That's it.

Hur många *kanaler* anläggningen har spelar ingen roll alls...

Postat: 26 juli 2006, 00:34:38
av limpan4all
Signalen går vanligen mellan 0 och 6V men troligen fungerar det mellan <2V=låg och >3,5=hög. Servot har 6V

Postat: 26 juli 2006, 00:48:20
av sodjan
Nu har jag varit borta från RC-branchen i 30 år, men jag har för
mig att 4.8 V var vanligt drivspänning till servon (d.v.s 4 x 1.2V NiCad cell).

Men det kanske har hänt lite på 30 år... :-)

Postat: 26 juli 2006, 03:20:15
av Henry
4.8v är väl nästan lite av en standard kan man säga, men numera klarar dom max 6v utan problem.

Postat: 26 juli 2006, 09:16:55
av limpan4all
Självklart så är det vanligast med NiCd numera men grejorna/"standarden" är konstruerade för att jobba med vanliga brunstensbatterier och då blir matningen över 6V när batterierna är nya.

Postat: 26 juli 2006, 12:48:08
av Korken
Ok!

Jag trodde det skulle vara mkt mer avancerat! :)
Bara en fråga, om man inte vill ha den i nått av ändlägena eller mitten typ lite till "höger" kanske vrida det 30*, finns det något speciellt sätt att göra det?

//Emil

Postat: 26 juli 2006, 12:58:19
av JimmyAndersson
Läs det andra inlägget i tråden igen. :) Sodjan skrev:
"Pulslängden varierar mellan 1.0 och 2.0 ms, där 1.5 ms är "mittläget"
och de två andra naturligtsvis är de två ändlägena."


Dvs 1ms = ena ändläget, (0°). 2ms = andra ändläget, (180º)
1.5ms = Mittpositionen (90º)

Det är faktiskt mycket enklare att styra servon än vad man först tror. (Jag började för 4 dagar sedan och har precis byggt en kamera-styrning.) :)

Postat: 26 juli 2006, 13:02:40
av limpan4all
Om servot arbetsområde är 270 grader och du vill vrida det 30 grader så blir det som följer 30/270=0,1111. Fullt utslag på servot är 1ms så 0,1111*1ms+1ms=1,1111ms eller för 270 - 30grader 1-0,1111*1ms+1ms=1,8889ms

Postat: 26 juli 2006, 13:10:33
av sodjan
När man bygger en servostyrning, så är en av sakerna som man
måste bestämma i förväg, vilken "upplösning" man vill ha.
D.v.s hur många distinkta "steg" vill man ha mellan "full vänster"
och "full höger" (eller vad man nu vill kalla ändlägena).

När det gäller styrning från en uC, så kan t.ex 256 steg (eller lägre) vara
lämpligt, eftersom det ger störst uppösning med enklaste beräkningar
med en 8 bitars uC.

Man behöver aldrig fundera på att köra avancerade beräkningar (med
floating point eller liknande), utan vanlig fixed point (med 8 eller 16 bitar)
räcker bra.

Sen kan man med en uC lägga till trevliga saker som acceleration/retardation
och maxhastighet genom att "rampa" pulsbredden på lämpligt sätt
vid ändringar, Kan vara lämpligt om servot hanterar något (t.ex en
kamera :-) ) med rellativt stor massa, men det är lite överkurs...

Postat: 26 juli 2006, 16:59:47
av Korken
Ok, ja tror jag börjar förstå mig på detta.
Alltså, om man kör med 8bitar så har man från 0-255.
Och om 0° är 1ms och 270° är 2ms så blir det att man delar upp 270° i 256 så får man hur stort steget är och 1ms i 256 så får man hur lång pulsen ska vara (270/256 ~ 1.55 -> 1.55° per bit | 1/256 ~ 0,0039ms -> 1+0,0039ms per steg) så varje bit står för en speciell punkt i vridningen på servot, har jag rätt så långt?

//Emil

Postat: 26 juli 2006, 17:17:36
av sodjan
> har jag rätt så långt?

Japp. :-)

Sen får dessa värden "mappas" över till vilka resurser som processorn har.
Man får räkna på olika inställningar av timers o.s.v. och justera
sina värden och steg så att det hela blir enkelt och smidigt i processorn.

Det kanske inte är just 256 steg som är optimalt, vad vet jag, det beror
på vilken timer man väljer att använda (de har lite olika pre/post scalers
t.ex) och naturligtsvis vilka krav man har på hela lösningen...

Det kan ju även finnas externa (mekaniska) krav som gör att man vill
ha en viss upplösning.

Det är inte heller helt nödvändigt att köra med 8-bitar, med *lite* mer
job i koden kan man använda en 16-bitars timer och få betydligt
bättre upplösning. Som sagt, det beror på vilka krav man har.

Postat: 26 juli 2006, 17:50:31
av Korken
Det viktiga är ju bara att servot inte hackar fram.

Men, en sak ja har funderat lite på som jag inte förstår mig på är hur man ställer in hastigheten på servot.
Många servon vrider sig väldigt fort men om man inte vill att det ska det så fort kan man ju "hacka" sig fram men om man inte vill att det ska hacka hur gör man då?

//Emil

Postat: 26 juli 2006, 19:07:35
av sodjan
Det jag menade var att även om man har ett visst antal fasta "steg",
så kan man i programvaran göra så att pulslängden inte ändras abrupt, utan
med en ramp. Det blir lite mer pyssel i koden.
En linjär ramp är enklast, en ramp med accelaration och inbromsning
är lite mer komplicerat men inte omöjligt (man kanske onödigt... :-) ).

Sen beror det på vad du menar med "hackar". Ett RC servo är i princip
byggt för att så snabbt som möjligt nå ett visst läge. Det finns inget
läge där det går med jämn fart, eller så. Mer än vad man kan simulera
genom att ändra pulslängden "mjukt" från någon