Hej,
Jag har köpt två st rc-servon av modell Hitec HSR-1425CR continuous rotation. Jag hade tänkt att försöka bygga en liten robot.
Om jag har förstått det rätt så ska man styra servot med en puls på 1-2 ms med 20 ms mellanrum. Mina servon är modifierade för 360 graders rotation det finns alltså ingen potentiometer. Om man ger den en puls på över 1,5 ms ska den snurra åt ett håll och under 1,5 ms åt det andra. Mitt problem är att oavsett vilken pulslängd jag matar den med snurrar den åt samma håll.
Jag försöker kontrollera servot med en PIC16f690. Jag använder MPLAB med HI-TECH C. Vad gör jag för fel?
Kan du mäta signalen med Oscilloskop för att verifiera att den verkligen ändras?
edit, läste precis att du inte har oscilloskop... Jag gjorde nyligen en servostyrning i Arduino, men genererade den med timerinterrupt istället. typ såhär:
Ett fult sätt att göra delay är att räkna ut hur länge en NOP på din pic är,
sedan anropa en procedure som gör x antal nopar som ger en fördröjning på t.ex 0,1ms
Jag har för mig att PIC16F690 arbetar i 4 Mhz som default (så det kan kanske hjälpa att ändra _XTAL_FREQ till 4000000). Och för att styra servot ska signal+paus vara 20ms dvs om du har en signal på 1.5ms så ska pausen vara 18.5ms.
filipk skrev:Hej,
Jag har köpt två st rc-servon av modell Hitec HSR-1425CR continuous rotation. Jag hade tänkt att försöka bygga en liten robot.
Om jag har förstått det rätt så ska man styra servot med en puls på 1-2 ms med 20 ms mellanrum. Mina servon är modifierade för 360 graders rotation det finns alltså ingen potentiometer. Om man ger den en puls på över 1,5 ms ska den snurra åt ett håll och under 1,5 ms åt det andra. Mitt problem är att oavsett vilken pulslängd jag matar den med snurrar den åt samma håll.
Jag försöker kontrollera servot med en PIC16f690. Jag använder MPLAB med HI-TECH C. Vad gör jag för fel?
ylle skrev:Ett fult sätt att göra delay är att räkna ut hur länge en NOP på din pic är,
sedan anropa en procedure som gör x antal nopar som ger en fördröjning på t.ex 0,1ms
Hur räknar man hur lång tid en NOP() tar?
Min kod ser nu ut så här, servot snurrar fortfarande åt samma håll och i samma hastighet som innan oavsett vilken delay jag sätter in.
Ett steg du bör ta, inte för att jag tror att det har speciell betydelse just här men bara för att vara säker är att se till att initiera alla portpinnar som inte används som input som output! Då är du säker på att det inte är störningar den vägen iaf. Och såklart har du avkopplingskondensator på strömmen så det ska inte heller vara ett problem - för det har du väl?
* Kan du mäta på PORTC0? Du har inget oscilloskop men ett multimeter har du väl? Mät spänningen vetja, den bör ligga runt 0,5V vid 2ms puls och 0,25V vid 1ms puls. Fladdrar spänningen får du göra en bedömning om det ser mindre fel ut.
* Kan ditt evt. multimeter mäta frekvens? Om det kan ska du mäta den. Bör ligga runt 50Hz med de värden du anger.
* Har du testat att bara ha en LED på (med strömbegränsermotstånd såklart)? Kan du programledes styra PORTC0 av och på precis som du vill?