-
        

Ergebnis 1 bis 2 von 2

Thema: Servo Ansteuerung funktioniert nicht ( PIC und C)

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    13.11.2007
    Alter
    24
    Beiträge
    88

    Servo Ansteuerung funktioniert nicht ( PIC und C)

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    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:

    Code:
    // 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

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    20.07.2009
    Beiträge
    40

    Servo Ansteuerung

    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ß

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •