ik moet voor een project op school een servo aansturen. is het mogelijk deze aan te sturen met een programma in C?
ik hoorde dat ik van PWM gebruik moest maken.
iemand soms een voorbeeld of informatie?
Gatze
Congratulations on your purchase. To begin using your quantum computer, set the power switch to both off and on simultaneously
een DC motor maakt gebruik van pwm Een servo motor moet je volgens mij aansturen met een gelijkspanning. De grootte van de gelijkspanning correspondeert met een bepaalde positie van de servo motor. Je kan een pwm signaal wel met een laagdoorlaat filter een gelijkspanning maken maar het preciese ervan weet ik niet
Marcel
AVR C tutorial http://expand.xs4all.nl/avr
Servo's zijn er in soorten en maten. Modelbouw servo's worden in de regel met een PWM puls aangestuurd. De pulsbreedte varieert dan tussen 1 en 2 ms waarbij 1,5 ms de middenpositie is.
Jeroen13
//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight
ik zit met het zelfde probleem, ik werk in C met een PIC16F877A om 20 mhz die heeft 2 PWM Kanalen, maar nou weet ik niet welke prescaler, pr2 en welke waardes ik in de CCPR1H en L registers moet schrijven.
PWR period = [(PR2)+1].4Tosc.(TMR2 prescale value) dat is de formule om periode mee te berekenen maar kom er niet echt uit
Wie kan mij en de topic starter hierbij helpen ?
Als je PIC vermogen moet leveren dan kan je gebruik maken van een h-brug. Deze stuur je dan met PWM aan en afhankelijk van welke pinnen je het PWM op zet draait het links of rechtsom.
Jeroen, de stappen op blz 66 van de datasheet moet je volgen.
De PWM periode (inverse van frequentie) stel je in met:
PWR period = [(PR2)+1].4Tosc.(TMR2 prescale value)En de duty cycle stel je in met:
PWM Duty cycle = (CCPR1L:CCP1CON <5:4>)*Tosc*(TMR2 prescale value)[Bericht gewijzigd door JuuL op ]
Jeroen13
//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight
http://www.piclist.com/techref/microchip/16F877/pwm.htm
heb deze site gevonden, alleen komt het dan niet echt uit.
Want welke frequentie moet een servo motor hebben, ik kom uit op 50hz 1/20ms maar dat lijkt me nogal laag.
en op deze manier?
void main()
{
while(TRUE)
{
int x=0;
int i=0;
if ( input(PIN_A4) == TRUE ) i++;
// als ingang A4 hoog wordt, i + 1
delay_ms(3000); //gedurende 3000miliseconden
if( i > 0 && i <= 2 )//als i een waarde heeft tussen 0 en 2
{
for (x=0; x<150; x++)
{
output_high(PIN_B0);
delay_ms(1.25);
output_low(PIN_B0);
delay_ms(18.75);
}
}
if( i > 2 && i <= 4 )//als i een waarde heeft tussen 2 en 4
{
for (x=0; x<150; x++)
{
output_high(PIN_B0);
delay_ms(1.5);
output_low(PIN_B0);
delay_ms(18.5);
}
}
if( i > 4 && i <= 6 )//als i een waarde heeft tussen 4 en 6
{
for (x=0; x<150; x++)// 150x20ms = 3seconden
{
output_high(PIN_B0);
delay_ms(1.75);
output_low(PIN_B0);
delay_ms(18.25);
}
}
else output_b(0x00);
}
}
de bedoeling is dat de pulsen worden geteld die op PIN_A4 toekomen, na 3000ms weet hij hoeveel pulsen er zijn geweest en stuurt het op PIN_B0 150x een cyclus van 20ms uit met daarin een puls van 1.25 tot 1.75ms die de toestand van de servo regelt.
Jeroen13
//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight
http://www.circuitsonline.nl/forum/view/33553/last Check dit topic maar eens, mss wordt het dan duidelijker