Servo styrning

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Servo styrning

Inlägg av Korken »

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 »

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
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Inlägg av Korken »

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
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Inlägg av Korken »

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 »

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
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Inlägg av Korken »

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 »

Har du kollar signalen till servot ? Är den 1.5 +/- 0.5 ms ?
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Inlägg av Korken »

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 »

Vad exakt betyder att signalen "är OK" ??
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Inlägg av Korken »

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 »

Du menar pulser (alltså inte bara *en* puls), eller hur ?
Servot vill ha en kontinuerligt pulståg.
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Inlägg av Korken »

De va något jag inte visste.
Då har jag lärt mig något nytt! :D



//Emil
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Inlägg av Korken »

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 »

> 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 »

Pulserna ska komma med ett avstånd på ca 20 ms har jag läst.
Skriv svar