Styra servo med pic16f886

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
dubbear
Inlägg: 328
Blev medlem: 7 april 2010, 23:59:24
Ort: Göteborg
Kontakt:

Styra servo med pic16f886

Inlägg av dubbear »

Har köpt en borstlös rc motor med tillhörande esc.
Läser mig till att man styr esc'en med en 50-100hz pwm signal som ett varnligt hobyservo.

Nu får jag det till att jag inte kan få så låg pwm frekvens som 100hz när jag kör min uc i 4mhz
någonstans runt 300hz är lägsta värdet.
jag antar att jag kan köra min uc med en lägre frekvens men de stör usart kommunikationen och i2c kommunikationen som fins.
Det kanske är en dålig ide att styra servon med CCP modoulen i pwm läget i min uc?

Har tittat på denna tråden http://elektronikforumet.com/forum/view ... ervo+100hz
Och jag antar att om pwm läget inte lämpar sig är detta vägen att gå?
ToPNoTCH
Inlägg: 5157
Blev medlem: 21 december 2009, 17:59:48

Re: Styra servo med pic16f886

Inlägg av ToPNoTCH »

Som du själv kommit på är den inbyggda CCPWM modulen oanvändabr för servon.

Använd timers och interrupt i stället.

Det mest pedagogiska är att rita upp vågformen som servot skall få på ett papper.
Markera tiderna när pinnen skall sänkar respektive höjas, så blir det ganska lätt att lista ut hu man skall nyttja timern.
Det är dessutom marginellt svårare att styra fler servon om man har "grund loopen" klar.
Användarvisningsbild
dubbear
Inlägg: 328
Blev medlem: 7 april 2010, 23:59:24
Ort: Göteborg
Kontakt:

Re: Styra servo med pic16f886

Inlägg av dubbear »

Okej det var nog det jag "befarade"
Bara att sätta igång då,
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Styra servo med pic16f886

Inlägg av sodjan »

> när jag kör min uc i 4mhz

Ja *det* är ju inte speciellt snabbt !
Du bör nog upp i MHz området i alla fall...

Men annars så är ju servostyrning en ganska vanlig
applikation, det finns säkert massor av exempel "out there".
Och det är ju en ganska simpel timer-applikation. Några frågor
som man ska ta tidigt är t.ex hur många steg (d.v.s upplösning)
som man behöver. Ibland vill man bara styra mellan två fasta lägen,
ibland 10 eller kanske 100 olika lägen. Det styr lösningen en del.
Användarvisningsbild
Icecap
Inlägg: 26654
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Styra servo med pic16f886

Inlägg av Icecap »

På min hemsida, under "Freebies", finns ett projekt med PIC16C628A som kan styra ett antal servos. Använder en timer och för att ställa servopositionen ska man bara ändra den motsvarande variabel i mitten, interrupten tar hand om resten. Källkod i C finns med.
Användarvisningsbild
dubbear
Inlägg: 328
Blev medlem: 7 april 2010, 23:59:24
Ort: Göteborg
Kontakt:

Re: Styra servo med pic16f886

Inlägg av dubbear »

Ja tittade på lite exempel från "out there" och ditt exempel Icecap,
Men skrev ett eget så ja verkligen fattar hur det funkar
vet inte om det är till nytta för någon men så här blev det

Kod: Markera allt

static void interrupt
isr(void)
{
	T0IF = 0; 	// clear the interrupt flag
	
	if (servo1F) 					//Roder servo Flagga	
		{
		SERVO1 = 1; 				//Roder servo pwm port
		servo1F	=	0;	
		Motor_servoF = 1 ;			//Flagga för ESC 	
		TMR0 = servo1timer;			//Sätter Timer0 till vald tid Default 1.5ms
		return;
		} 
	
	if(Motor_servoF){				//Motor esc  Flagga
		SERVO1 = 0;
		Motor_servo = 1;			//Motor esc  pwm port
		Motor_servoF =0;
		puls20	= 1;				//Fagga för 100hz signalen
		TMR0 = Motor_servotimer ;	//Sätter Timer0 till vald tid Default 1ms
		return;
		}
	
	if (puls20)	
		{
		Motor_servo = 0;
		servo1F =1 ;
		TMR0 = 0b00000000; 			//100 hz
		return;
		
		}
	
	
	}
Tips eller frågor tas emot hjärtligt
Skriv svar