Kezdőoldal » Tudományok » Alkalmazott tudományok » Servo motort milyen precízen...

Servo motort milyen precízen lehet vezérelni?

Figyelt kérdés

Értem én, hogy 20ms-onként kell kiküldeni a jelet. Azt is értem, hogy 1ms és 2ms közötti jelet kell kiküldeni. De ez viszonylag szűk sáv. Bármilyen szögű elfordulást nem tudok elérni.

PIC-el szeretném megvezérelni. Saját PWM jelet állítottam elő...de nem vagyok megelégedve a pontossággal.

Esetleg erről szóló dokumentumot, vagy c programot is adhatnátok.


2013. febr. 9. 15:24
1 2
 1/16 anonim ***** válasza:
Nemadunk :D
2013. febr. 9. 16:36
Hasznos számodra ez a válasz?
 2/16 anonim ***** válasza:

A tengelyen kell lennie egy "rotary encoder" nevű alkatrésznek.

Annak a jelét be kell vezetni a PIC-be, és programmal feldolgozni.

2013. febr. 9. 20:19
Hasznos számodra ez a válasz?
 3/16 anonim ***** válasza:

Ja és a szervó motor kaphatja folyamatosan a feszültséget.

Nincs 20ms-os megkötés. (olyan talán a léptetőmotornál van, de azt inkább léptetőmotor vezérlő IC-re szokták bízni.)

2013. febr. 9. 20:24
Hasznos számodra ez a válasz?
 4/16 A kérdező kommentje:

De én kicsi RC motorról beszélek.


Pl:


[link]

2013. febr. 9. 21:13
 5/16 anonim ***** válasza:

Neki pontosan működik:

[link]

pc-pic-servo:

[link]


A pwm-et megszakításkezeléssel csináltad?

2013. febr. 10. 10:59
Hasznos számodra ez a válasz?
 6/16 A kérdező kommentje:

Igen...

Pontosabban a timer0 400-szor 0.5 milliszekundumig (ez 20ms ) elszámol. Minden alkalomkor megszakítja a főprogramot és ha kell nulláról egyre állítja a jelet.

2013. febr. 10. 19:09
 7/16 anonim ***** válasza:

400*0-5=200

oszcilloszloppal neuzted?

2013. febr. 10. 21:31
Hasznos számodra ez a válasz?
 8/16 anonim ***** válasza:

Ha jól gondolom, a 20ms-ot osztottad 400 részre. Az 1ms-ra így 20 jut.

A felbontás: 360/20=18fok.

Vagy így:?

TIMER1: 20ms-onként ad megszakítást.

TIMER2: 1...2ms között , a 16 bites regiszterrel 0,1 fokot is el lehet érni.

2013. febr. 11. 08:24
Hasznos számodra ez a válasz?
 9/16 A kérdező kommentje:

Persze...a 20ms-ot osztottam fel 400 részre. És pontosan ez a gond, hogy 18 fok a felbontás.

A timer2 csak 8bites...legalábbis ezen a PIC-en.

Amúgy meg azt is figyelembe kell vegyem, hogy három motort akarok meghajtani egy kontrollerrel.

2013. febr. 11. 10:05
 10/16 anonim ***** válasza:

Microchip Advanced Parts Selector (MAPS):

[link]

például a PIC18F46K22 -ben 4db 16 bites van


De elég lehet 2db timer is:


servo_1 = 5555; // initial value for servo_1

servo_2 = 5555;

servo_3 = 5555;

//A 20ms-ot 3 részre kell osztani: TMR0: 6,666ms,

//Megszakítás kiszolgáló prg:

if (INTCON.TMR0IF) { //Ha TMR0 okozta a megszakítást:

i++

switch (i) {

case 1: TMR3=servo_1 ;LATA = 1; //időzítő indítás, és a megfelelő kimenet H szintre állítása

case 2: TMR3=servo_2 ;LATA = 2;

case 3: TMR3=servo_3 ;LATA = 4; i=0;

}

else if (INTCON.TMR3IF) {

LATA = 0; //Ha TMR3 okozta a megszakítást, mindhárom kimenet Lszintre állítása

2013. febr. 11. 12:44
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!