PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Korken
Inlägg: 2230 Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön
Inlägg
av Korken » 4 september 2006, 19:43:22
Hej alla glada!
Jag har gjort en testkod för att styra ett servo.
Men den fungerar inte som jag har tänkt mig.
Den gör så att den börja på sitt 0-ställe (1ms) till max (2ms) och en liten paus mellan men den bara hackar på samma ställe hela tiden.
Det är första gången jag skriver en sånhära kod så säg till om jag gör något fel.
Kod på en Butterfly @ 8Mhz:
Kod: Markera allt
#define F_CPU 8000000
#include <util/delay.h>
#include <avr/io.h>
int main (void) {
// set PORTD for output
DDRD = 0xFF;
PORTD = 0x00;
while(1)
{
for (int i = 1000; i < 2000; i = i + 100)
{
PORTD = 0xFF;
_delay_us(i);
PORTD = 0x00;
_delay_ms(20);
}
for (int i = 0; i < 10; i++)
{
_delay_ms(100);
}
for (int i = 2000; i > 1000; i = i - 100)
{
PORTD = 0xFF;
_delay_us(i);
PORTD = 0x00;
_delay_ms(20);
}
}
return 0;
}
//Emil
Croaton
Inlägg: 137 Blev medlem: 23 november 2005, 10:06:26
Ort: Örnsköldsvik
Inlägg
av Croaton » 4 september 2006, 19:54:07
Lite citat från delay.h:
_delay_us(double __us): The maximal possible delay is 768 us / F_CPU in MHz.
_delay_ms(double __ms): The maximal possible delay is 262.14 ms / F_CPU in MHz.
Alltså i ditt fall border _delay_us max kunna vara 96 µS och _delay_ms 32 ms.
Hoppas detta hjälper dig!
/Croaton
Korken
Inlägg: 2230 Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön
Inlägg
av Korken » 4 september 2006, 20:04:38
Ahh, ok!
Man tackar!
Ska testa det. Jag har förmig att _delay_ms(); tar decimal tal va? Då det är en double.
Typ _delay_ms(1.5);
//Emil
Korken
Inlägg: 2230 Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön
Inlägg
av Korken » 4 september 2006, 20:39:41
Japp, det fungerar nu!
Men der vrider sig bara ca 60*. Är det oftast standars för ett servo?
//Emil
Croaton
Inlägg: 137 Blev medlem: 23 november 2005, 10:06:26
Ort: Örnsköldsvik
Inlägg
av Croaton » 4 september 2006, 21:04:24
Perfekt!
60 grader låter dock i minsta laget. Jag tycker nog att det borde vara 90-180 grader.
Ett tips kan ju vara att använda Stop Watch i AVR studio och på så vis verifiera att du får rätt pwm ut.
Ett annat fel kan ju kanske vara någon fuse som ställer till så att du inte har en 8MHz clocka.
/Croaton
Korken
Inlägg: 2230 Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön
Inlägg
av Korken » 5 september 2006, 16:53:59
När jag drar med tång så ska den gå 180 grader men den gör bara 1/3.
Jag har kollat klockan och de tycks vara rätt.
Vad kan vara fel?
//Emil
sodjan
EF Sponsor
Inlägg: 43267 Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Inlägg
av sodjan » 5 september 2006, 18:25:54
Har du kollar signalen till servot ? Är den 1.5 +/- 0.5 ms ?
Korken
Inlägg: 2230 Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön
Inlägg
av Korken » 5 september 2006, 18:41:38
Ja, den är ok.
Har testat på flera servon med samma resultat.
//Emil
sodjan
EF Sponsor
Inlägg: 43267 Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Inlägg
av sodjan » 5 september 2006, 18:59:50
Vad exakt betyder att signalen "är OK" ??
Korken
Inlägg: 2230 Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön
Inlägg
av Korken » 5 september 2006, 19:07:53
Jag tog skopet och kopplade upp så jag körde en puls med 2ms först och sedan en med 1ms och den var perfäkt i längd.
//Emil
sodjan
EF Sponsor
Inlägg: 43267 Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Inlägg
av sodjan » 5 september 2006, 19:12:04
Du menar pulser (alltså inte bara *en* puls), eller hur ?
Servot vill ha en kontinuerligt pulståg.
Korken
Inlägg: 2230 Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön
Inlägg
av Korken » 5 september 2006, 19:15:03
De va något jag inte visste.
Då har jag lärt mig något nytt!
//Emil
Korken
Inlägg: 2230 Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön
Inlägg
av Korken » 5 september 2006, 19:18:13
Ok, nu tycks det fungera bättre men den frider sig bara ca 110 grader.
Har ni några fler idéer?
//Emil
sodjan
EF Sponsor
Inlägg: 43267 Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Inlägg
av sodjan » 5 september 2006, 19:45:23
> den vrider sig bara ca 110 grader.
"bara" 110 grader ?
Hur mycket *ska* det vrida sig ?
bearing
Inlägg: 11682 Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm
Inlägg
av bearing » 5 september 2006, 19:55:21
Pulserna ska komma med ett avstånd på ca 20 ms har jag läst.