Servo motort milyen precízen lehet vezérelni?
É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.
A tengelyen kell lennie egy "rotary encoder" nevű alkatrésznek.
Annak a jelét be kell vezetni a PIC-be, és programmal feldolgozni.
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.)
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.
400*0-5=200
oszcilloszloppal neuzted?
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.
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.
Microchip Advanced Parts Selector (MAPS):
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
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!