Dead bandwidthtid för RC-servo

Robot, CNC, Pneumatik, Hydraulik, mm
Thuren
Inlägg: 1
Blev medlem: 11 mars 2011, 15:15:09

Dead bandwidthtid för RC-servo

Inlägg av Thuren »

Hej Svenska Elektronikforumet, nyfrälst elektroniker här ;)

Jag köpte nyligen ett RC-servo (TowerPro SG-5010) från electrokit, de anger DBW till 4 ms, tillverkaren anger 20 us och i övrigt ger googlande både 4 ms och 4 us i lika delar samt någon gång 20 us, vad ska man tro egentligen?

Har en atmega 168 som jag tänkte styra servot med.

Min plan var ju att fuska lite och köra NOPar manuellt till en början mest för att det är kul att få liv i servot, för att sedan sätta mig med näsan i dokumentationen och köra PWM på riktigt, men det blir ju svårt om tiden är i storleksordningen mikrosekunder eftersom nopar inte ger tillräckligt bra "upplösning" sas.
Gimbal
Inlägg: 8669
Blev medlem: 20 april 2005, 15:43:53

Re: Dead bandwidthtid för RC-servo

Inlägg av Gimbal »

Standard är väl en puls var 20ms som är ca 1-2ms lång.
Användarvisningsbild
Icecap
Inlägg: 26638
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Dead bandwidthtid för RC-servo

Inlägg av Icecap »

Och det är inte PWM, det är pulsbredd-styrning.
bearing
Inlägg: 11675
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Dead bandwidthtid för RC-servo

Inlägg av bearing »

Det kommer ju behövas tusentals NOP för att göra pulsen - verkar lite opraktiskt. ATmega168 har ju en 16-bitars PWM-modul. Med den kan man få mikrosekundupplösning på både pulsen och perioden, om man vill.
Användarvisningsbild
LHelge
Inlägg: 1772
Blev medlem: 2 september 2007, 18:25:31
Ort: Östergötland
Kontakt:

Re: Dead bandwidthtid för RC-servo

Inlägg av LHelge »

Det kan vara så att jag är ute och cyklar nu, men jag tror du blandar ihop två olika saker. Till ett analogt servo ska du inte skicka pulser oftare än var 20:e millisekund, annars blir det överbelastat på något sätt.

Det du pratar om DBW är i min värd en slags hysteres kring nuvarande arbetspunkt. Ett exempel:

DBW = 4 us
servots nuvarande position motsvarar en pulslängd på 1,5 ms = 1500 us
Du skickar kontinuerligt pulser på exakt 1500 us, allt är frid och fröjd
Helt plötsligt ändras belastningen och servot flyttar sig motsvarande 1 us till pulslängd 1,501 ms alternativt du börjar skicka pulser på 1,501 ms och servot behåller sin position. Då denna förändring ligger inom +- 2 us (total bandbredd 4 us) från den sanna positionen/pulslängden så skiter servot i denna avvikelse och fortsätter som inget har hänt. Tills det att felet blir större än 2 us.

Detta för att det inte ska uppstå oscillationer kring mittpunkten som belastar servot mer än nödvändigt.

Som jag sa tidigare så kan det hända att jag bara yrar nu, jag har ingen källa på detta utan det är bara något jag antingen läst någonstans för länge sedan eller bara hittat på själv.
Skriv svar