- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 30

Thema: Servo Modelcraft Standard-Servo RS 2 an M32-Board

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    03.01.2012
    Ort
    Großefehn LK Aurich, Ostfriesland)
    Alter
    43
    Beiträge
    17
    Ich denke mal wenn die kleinen Servos an einem Port funktionieren dann ist dieser korrekt geschaltet. Aber zur Sicherheit hier trotzdem mal mein Code:

    void ServoInit(void);
    {
    DDRC |= IO_PD6;
    DDRC |= IO_PC4;
    DDRC |= IO_PC6;

    servo1_pos_d=12;
    servo2_pos_d=5;
    servo3_pos_d=22;
    }

    void servo(int servo_nr,int position, int speed)
    {
    switch (servo_nr)
    {
    case 1:
    servo1_pos_d=position;
    break;
    case 2:
    servo2_pos_d=position;
    break;
    case 3:
    servo3_pos_d=position;
    break;
    }

    }
    ------------------------------------------------

    und dies steht in der Timer-ISR in der rp6controllib.c



    if(servo_timer>servo1_pos_d) PORTD &= ~IO_PD6; else PORTD |= IO_PD6;
    if(servo_timer>servo2_pos_d) PORTC &= ~IO_PC4; else PORTC |= IO_PC4;
    if(servo_timer>servo3_pos_d) PORTC &= ~IO_PC6; else PORTC |= IO_PC6;

    if(servo_timer<200) servo_timer++; else servo_timer=0;

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    PD6 ist kein Ausgang:

    DDRC |= IO_PD6;

    Drehbereich von 0,5 bis 2,2 Millisekunden erscheint mir zuviel für ein RS2-Servo.
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    03.01.2012
    Ort
    Großefehn LK Aurich, Ostfriesland)
    Alter
    43
    Beiträge
    17
    Ich habe das Beispiel aus der Anleitung genommen und umgeschrieben:

    Zitat Anleitung: DDRC |= IO_PC7; // PC7 ist nun Ausgang

    Und, wenn der Port kein Ausgang ist, dann sollten doch die kleinen Servos auch nicht funktionieren, oder? Im übrigen habe ich auch die anderen beiden Ports probiert: kleine OK, große nicht.


    Nachtrag:

    Habe es jetzt umgeschrieben in:

    DDRC = IO_PD6 | IO_PC4 | IO_PC6;

    jetzt tun die großen an PC4 und PC6, aber nicht an PD6. Warum nicht?

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    PD6 ist kein Ausgang weil Du ins DDR--C Register schreibst und nicht ins DDR--D:

    DDRC |= IO_PD6; // falsch,

    DDRD |= IO_PD6; // korrekt


    DDRC ist natürlich für den PortC gedacht.

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    > Und, wenn der Port kein Ausgang ist, dann sollten doch die kleinen Servos auch nicht funktionieren, oder?

    Je nach Servo Typ kann der Signaleingang auch signifikanten Strom ziehen - wenn der nur über den internen Pullup Widerstand geliefert wird reicht das manchmal aus, manchmal aber eben nicht.
    (Eine 1 im PORTx Register schaltet den Pullup zu wenn der Pin als Eingang konfiguriert ist also DDRx 0 ist.)

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Na also, das passt doch. Wie von SlyD schon vermutet steuerst du die Servos mit Eingängen über die internen PullUps an. Bei analogen Servos wird aus dem Signal direkt die Motoransteuerung erzeugt und deshalb wird das Signal belastet. Vermutlich bricht das Signal bei den stärkeren RS2 zusammen:

    Code:
    void ServoInit(void)
    {
    	DDRD |= IO_PD6;
    	DDRC |= IO_PC4;
    	DDRC |= IO_PC6;
    
    	servo1_pos_d=12;
    	servo2_pos_d=12;
    	servo3_pos_d=12;
    }
    Vermutlich ignoriert der Kompiler den Block nach dem ;
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    03.01.2012
    Ort
    Großefehn LK Aurich, Ostfriesland)
    Alter
    43
    Beiträge
    17

    Ach verd.....!

    Was so ein einziger Buchstabe alles ausmachen kann! Ich habe es jetzt angepasst und...

    ES FUNKTIONIERT!!!!! ALLE Servos LAUFEN JETZT!!! AN ALLEN DREI PINS!

    SUPER!!!

    Ich bedanke mich bei euch und allen anderen die mir geholfen haben das Problem einzukreisen und schließlich zu lösen! Herzlichsten Dank dafür!

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Filou89
    Registriert seit
    24.12.2010
    Ort
    Thun, Switzerland
    Alter
    36
    Beiträge
    116
    Hallo zusammen.
    Ich weiss, das Thema ist eigentlich erledigt.
    Ich habe genau das selbe Problem mit den selben Servos aber anderem Programm.
    An meiner M32 Möchte ich am I/O Port ES-05 und RS-2 Servos betreiben.
    Die ES-05 Miniservos funktionieren mittlerweile einwandfrei.
    Wenn ich aber am selben Port einen RS-2 Servo anschliesse, resetet das Programm immer wieder.
    Am Servo sollte es eigentlich nicht liegen, da der neu ist. Zudem habe ich einen 1000uF Kondensator an die Speisung kurz vor dem Servo angelötet.
    Als ServoLib verwende ich die Lib von Dirk.
    Woran könnte das liegen?
    Ich hoffe, ihr könnt mir auch so super helfen.

    Grüsse,
    Filou

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    > Ich hoffe, ihr könnt mir auch so super helfen.

    Naja um Softwareprobleme zu lösen müsste man natürlich die Software sehen.

    Wenn Du den Thread gelesen hast, siehst Du ja das ein falscher Buchstabe reicht...

    MfG,
    SlyD

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    ... und bei
    void ServoInit(void);

    das Semikolon gehört da nicht hin - dürfte so eigentlich nicht fehlerfrei übersetzt werden.

Ähnliche Themen

  1. STANDARD SERVO S-325 HB für 2,95€
    Von radbruch im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 1
    Letzter Beitrag: 29.10.2010, 14:34
  2. Infos zum Servo ES-05 von Modelcraft (Conrad)
    Von s.frings im Forum Motoren
    Antworten: 4
    Letzter Beitrag: 27.05.2010, 15:05
  3. Suche Ersatz für MODELCRAFT DIGI Line TS-11 MG Servo
    Von oberallgeier im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 3
    Letzter Beitrag: 17.05.2010, 22:00
  4. Stellbereich TOP-LINE STANDARD SERVO RS 2 JR
    Von malthy im Forum Motoren
    Antworten: 8
    Letzter Beitrag: 30.04.2009, 20:11
  5. RB-35 oder Gear Motoren zu Servo standard
    Von lukasiver im Forum Motoren
    Antworten: 7
    Letzter Beitrag: 11.01.2009, 16:45

Berechtigungen

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

Solar Speicher und Akkus Tests