- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Servo-Ansteurung dreht nicht vollständig in gewünschte Position

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2010
    Ort
    Nähe Wien
    Alter
    34
    Beiträge
    108
    Anzeige

    Powerstation Test
    Hallo!
    Danke für die Antworten!

    Also um speziell auf robo_tom_24 einzugehen jetzt mal:

    1) Du musst die CPU Frequenz vor der Inkludierung der delay Lib definieren - kommt den keine Warnung vom Compiler?
    Zu meiner Schande muss ich gestehen das ich die Warnung übersehen habe weil ausgeblendet.
    Habe jetzt die Frequenz definiert, FuseBit gesetzt und Optimization Level auf 2 gesetzt.

    2) Du musst dem Servo Zeit geben die Position anzufahren -> die Drehgeschwindigkeit steht im Datenblatt, bzw. auf der Servoverpackng
    Ich nehme mal an in dem von dir geposteten Beispiel-Code wird das dann so gemacht werden? Habe jetzt mal deine "neue" Version des Programms getestet, kommt aber zum gleichen Ergebnis. mehr dazu weiter unten.

    3) Weißt du wie eine Servoansteuerung funktioniert? Du brauchst nicht 500 Signale das sich was tut, sondern es reichen wahrscheinloch 10 ach aus
    Wie schon geschrieben ist das hier mein erster Test, die 500 Impulse waren auch nur zu Testzwecken, um dem Servo mit 10 Sekunden genug Zeit für das Anfahren der Position zu geben. Im endgültigen Programm wird das natürlich nicht in dieser Form passieren.



    So, hier mal die aktuelle Version des Testprogramms:
    Code:
    #define F_CPU 8000000UL    //Quarzfrequenz
    
    #include <avr/io.h>
    #include <util/delay.h>
    
    #define SERVO_2 PB1
    
    int main (void)
    {
    
        DDRB |= 1<<SERVO_2; //als Ausgang definieren 
        
        while(1) 
        {
            PORTB |= 1<<SERVO_2;
            //Pin einschalten
            _delay_us(1500);
            //Positionsinformation einsetzen
            PORTB &= ~(1<<SERVO_2);
            //Pin ausschalten
            _delay_ms(18);
            //auf 20ms auffüllen
        }    
        
        return 0; //wird nie erreicht    
    }
    Der Aufbau ist noch immer der gleiche, also ein Servo an Pin B1 des AtMega32.

    Ablauf:
    Bei Einschalten des Netzteils dreht der Servo sich ca 2 mm (werden so ca 15° sein schätz ich mal) in die gewünschte Richtung.
    Danach nichts mehr.

    Beim herumspielen hab ich gerade festgestellt, das der Servo sich jedes mal, wenn ich die Servo-VCC-Leitung vom Netzteil abstecke und wieder anstecke erneut 15° dreht, bis er in Mittellage ist, danach zuckt er nur noch ganz leicht, verharrt aber in Mittellage.
    Interessante neue Erkenntnis wie ich finde.
    Kann das eventuell irgendwer deuten?
    Ich "wackel" hier nicht mit dem Stecker des Servos (also kein Wackelkontakt im Anschluss), um das auszuschleißen habe ich die Spannungsversorgung über ein Steckbrett umgeleitet und stecke hier nur direkt am Steckbrett ab und an.

    LG
    ijjiij

    PS: Mit beiden Servos das gleiche Ergebnis! Die Servos ansich sind nicht kaput und funktionieren einwandfrei.

  2. #12
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Code:
    // #define LEDRED PD6 Die rote LED hängt wohl an PD6
    DDRD |= (1<<PD6); // LED-Pin ist Ausgang
    while(1)
    {
    	PORTD |= (1<<PD6); // LED-Pin high
    	_delay_ms(1000); // eine Sekunde warten
    	PORTD &= ~(1<<PD6); // LED-Pin low
    	_delay_ms(1000);
    }
    Funktioniert das wie erwartet?

    Code:
    while(1)
    {
    	//Pin einschalten
    	PORTB |= 1<<SERVO_2;
    	PORTD |= (1<<PD6); // LED high
    	_delay_us(1500);
    	//Positionsinformation einsetzen
    	//Pin ausschalten
    	PORTB &= ~(1<<SERVO_2);
    	PORTD &= ~(1<<PD6); // LED low
    	_delay_ms(18);
    	//auf 20ms auffüllen
    }
    Das auch?

    Mit einem Lautsprecher/Kopfhörer könnte man die 50 Hertz des Servosignals hören:

    http://www.youtube.com/watch?v=fGHDkUlJuh0
    (Im Hintergrund brummen die 50 Hz)

    Das Zucken der Servos beim Einschalten ist normal. Wie wird die Schaltung, speziell die Servos, mit Spannung versorgt?

    Gruß

    mic

    [Edit]
    "Dabei hab ich die Stromversorgung des Servos aus einer eigenständigen Stromquelle (wie empfohlen) sichergestellt."

    Habe ich glatt überlesen. GND von Schaltung, Servo und Stromquelle verbunden?
    Geändert von radbruch (24.06.2012 um 00:37 Uhr)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2010
    Ort
    Nähe Wien
    Alter
    34
    Beiträge
    108
    Zum ersten Code:
    Ja, funktioniert wie erwartet, die Rote LED leuchtet immer für ca 1 Sek, geht 1 Sek aus, wieder an, etc.

    Zum 2. Code:
    Funktioniert NICHT wie erwartet!
    Die LED geht an, der Servo zuckt kurz (wie beschrieben, etwa 10-15° in die gewünschte Richtung). Die LED bleibt an und der Servo bewegt sich nicht mehr.
    Bei (wie vorhin beschrieben) trennen und wieder anschließen der Servo-Spannung geht die LED kurz aus (blinkt) für nichtmal ne halbe Sekunde, der Servo dreht ca 10-15°.
    Komplettes Trennen der Servo-Spannung ändert auch nichts, also die LED blinkt deswegen trotzdem nicht.

  4. #14
    Erfahrener Benutzer Roboter-Spezialist Avatar von robo_tom_24
    Registriert seit
    04.02.2012
    Ort
    Burgenland, Österreich
    Beiträge
    485
    Kann es sein das du einen Fehler in deiner Schaltung hast?
    Hast du die beiden GNDs verbunden?
    Ist die Versorgungsspannung ausreichend?
    -> Es gibt auch Servos mit 6 bzw 7.4V!
    Wenn du eine Modellbaufernsteuerung + Empfänger hast, probier deine Servos dort einmal aus...

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2010
    Ort
    Nähe Wien
    Alter
    34
    Beiträge
    108
    Hallo!

    Ich hab den Fehler jetzt zwar nicht gefunden, aber immerhin soweit eingegrenzt das das ganze auf meinem Steckbrett funktioniert.
    Also der Fehler dürfte wohl irgendwo auf meinem Servo-Board liegen.

    Habe jetzt alle Verbindungen am Servo-Board nachgeprüft, alles soweit auch richtig verdrahtet.
    Wenn ich das Board aber weglasse, das Signal direkt auf mein Steckbrett weiterleite genauso wie die Spannungsversorgung und die Servos (jetzt mal zu Testzwecken erstmal einen, dann beide am gleichen Signal), dann drehen die Servos beide wunderbar.

    Gut, wie dem auch sei, der Fehler ist eingegrenzt, das Servoboard wird verschrottet und ein neues gebastelt.

    Vielen lieben Dank euch allen!

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. RC-Servo Position bestimmen
    Von Jared im Forum Motoren
    Antworten: 21
    Letzter Beitrag: 11.07.2015, 10:55
  2. bits werden nicht vollständig in struct eingelesen
    Von cesupa im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 20.05.2008, 20:08
  3. Antworten: 14
    Letzter Beitrag: 10.07.2007, 21:17
  4. Servo dreht sich nicht ganz
    Von Spion im Forum Elektronik
    Antworten: 8
    Letzter Beitrag: 11.01.2006, 20:05
  5. Eagle: Pinkontakt nicht vollständig mit Fläche verbunden
    Von Arme Sau im Forum Konstruktion/CAD/3D-Druck/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 7
    Letzter Beitrag: 20.04.2005, 17:39

Berechtigungen

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

12V Akku bauen