PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo Ansteuerung funktioniert nicht ( PIC und C)



Pilotzi
27.10.2009, 12:07
Hi
ich versuche nun schon seit langem dieses Problem (ja für mich ist es eins^^) zu lösen, nun bin ich auf diese Idee gekommen:


// Taktfrequenz 4MHz

#include <C:\Programme\bknd\CC5X\16F84A.H> // Prozessor-Typ definieren
#pragma config |= 0b.1111.1111.0010 // Konfigurationswort





void pause(uns16 ms)
{
OPTION=2;
TMR0=191;
while(TMR0);
}

bit servo @ PORTA.0;
bit hoch @ PORTA.1;
bit runter @ PORTA.2;

void main(void)
{
TRISB = 0b.0000.0000; // Pins RB0...RB7 -Ausgänge
PORTB = 0b.0000.0011;
TRISA = 0b.0000.0110;

Sprungmarke:

servo=1;
pause(2);
servo=0;
pause(40);

while(hoch)
{
servo=1;
pause(1);
servo=0;
pause(40);
PORTB= 0b.1111.0000;
}

while(runter)
{
servo=1;
pause(3);
servo=0;
pause(40);
PORTB= 0b.0000.1111;
}

goto Sprungmarke;



}

Ich weiß das es keine PWM in dem Sinne ist aber theoretisch müsste es doch funktionieren. Aber das Servo leuft nur in eine Richtung und bleibt dann da vor sich hin knarrend stehen. Ich weiß nicht weiter und ne richtige PWM kann ich auch nicht. Freue mich auf Antowrt
liebe Grüße Marius

hm_heli
04.11.2009, 20:42
Hi Marius,
eigentlich habe ich keine Lust auf Anfragen dieser Art zu reagieren,
bei denen ich herauszufinden muss, was sich der Programmierer gedacht hat.
Da Du aber erst 16 bist und bisher keine Antwort bekommen hast,
versuche ich Dich ein wenig weiter zu bringen.
Servos werden tatsächlich anders angesteuert, aber so zum Lernen
kannst Du das schon so machen, aber:
-- Der Parameter ms in der Funktion Pause wird nicht verwendet:
Servos werden normalerweise mit einer Wiederholfrequenz von
20ms und Impulsbreiten von ca. 1 bis 2ms betrieben.
Wiederholfrequenzen zwischen 15 und 25ms und Impulsbreiten von
0.9ms bis 2.1ms sind normal. Für Roboterbeine habe ich auch schon
0.5ms bis 2.5ms gesehen, das muss aber die Mechanik eines Servos
zulassen.
-- Mir scheint, Du vermischt die Benutzung der Ports A und B
Ich bin auch nicht sicher, ob man die Portbits als "Flags" verwenden
kann, nimm doch einfach eine RAM Speicherzelle als Merker-Variable.
-- Du musst auch darauf achten, dass Servos nicht innerhalb von 2 Zyklen
ständig mit "Vollgas" hin- und herfahren können! D.h. die
Wiederholfrequenz ist 20ms, aber die Impulslängen dürfen sich nicht
ständig von einem Zyklus zum anderen ständig zwischen 1 und 2 ms
ändern. Ich hoffe, das hilft ein wenig.
Gruß