- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 46

Thema: "Vereinfachung" von radbruchs Servoansteuerung mög

  1. #11
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Anzeige

    Praxistest und DIY Projekte
    Ja, zwei Servos (oder mehr) am selben Kontrollerpin funktioniert natürlich auch.
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  2. #12
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    OK, Hmmm... da fällt mir spontan ein das Port für das SFH5110 zu nehmen, weil die "Buchse" bei mir schon da ist.

    Ist diese Doppelbelegung möglich oder muss ich den Teil für die IR-Kommunikation aus der Lib heraustrennen? IR-Komm. brauche ich nicht, weil ich via ISP flashe.

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    15.12.2007
    Beiträge
    46
    hallo,
    @pinsel120866:
    leider geht das in meinem fall mit der synchronen ansteuerung nicht, weil der eine servo einen greifer schließen bzw. öffnen soll und der andere servo den greifer nach oben oder unten bewegen soll!

    kann mir keiner mit meinem programm helfen ?

    danke für alle antworten
    mfg Felix
    Wer Rechtschreibfehler findet, darf sie behalten !!

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    05.10.2008
    Beiträge
    10
    Aber da sich bei Radbruchs "Walker" die diagonal zueinander stehenden Beine immer gleich bewegen braucht man anstatt 8 Pins nur 4^^

    wobei ich mir jetz nicht mehr sicher sind ob sich auch die Servos gleich bewegen...
    kommt ja drauf an wie rum man die drehr entweder sie bewegen sich gleich oder genau umgekehrt...

    Ach vom Prinziep her kann man se mit 4 pins ansteuern^^

    €: Wenn er um die Kurve will muss er sich was ausdenken^^

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

    kann mir keiner mit meinem programm helfen?
    Ähm, ich wußte nicht, das du weiterhin auf Hilfe wartest. Mit den Erläuterungen von oben solltest du nun deine Servos immerhin blockierend ansteuern können.

    leider geht das in meinem fall mit der synchronen ansteuerung nicht
    Das "Blockieren" bezieht sich auf den Rest des Programms, mehrere Servos funktionieren einfach so:

    Code:
    do
      Ausgang Impuls für 1. Servo auf high
      Impulslänge für 1.Servo abwarten
      Ausgang Impuls für 1. Servo auf low
    
      Ausgang Impuls für 2. Servo auf high
      Impulslänge für 2.Servo abwarten
      Ausgang Impuls für 2. Servo auf low
    
      Impulspause (20ms - (Impulslänge1+Impulslänge2)) abwarten
    while(Servos haben Ziel noch nicht erreicht)
    Jetzt alles klar?

    Gruß

    mic


    [Edit][Offtopic]
    ...vom Prinzip her kann man se mit 4 pins ansteuern
    Ja, im Prinzip schon, aber echtes "Gehen" wird so nicht funktionieren. Das liegt in erster Linie daran das man nur bei einzelner Ansteuerung der Servos die mechanischen und elektrischen Toleranzen korrigieren kann.
    wobei ich mir jetz nicht mehr sicher sind ob sich auch die Servos gleich bewegen
    Doch, genau das machen sie und genau das ist ein großer Sch.... Je nach Einbauort und -lage bewegen sich die Servos bei längeren Impulsen auf/ab bzw. vor/zurück oder bei kürzeren Impulsen ab/auf bzw. zurück/vor. In der nächsten (sechsbeinigen!) Version meines "Walkers" werde ich deshalb die Drehrichtungen der Servos anpassen (Motor und Poti umpolen) um eine Symetrie der Werte entlang der Längs- bzw. der Hochachse zu erhalten. D.h.: kleine Werte=alle Beine vor/hoch, große Werte=alle Beine hinten/unten. Das ist vielleicht kein wissenschaftlicher Ansatz und macht möglicherweise die Ansteuerung mit inverser Kinedingsda schwierig bis unmöglich. Aber weil ich ja noch Beineanfänger bin scheint mir das für den Einstieg leicher umsetzbar.
    [/Offtopic][/Edit]
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    15.12.2007
    Beiträge
    46
    hi ,
    oh ja vielen dank
    ich habs kapiert jedenfalls fast!
    woher weiss ich wie lange ich den vorgang wiederholen muss bis der servo in der stellung ist die ich haben wollte, weil der servo gibt doch keine werte zurück oder doch?
    muss ich mich da durch ausprobieren herantasten oder kann ich pauschal einfach mal die stellzeiten die draufstehen hernehmen ?

    danke für deine hifreiche antwort
    mfg Felix
    Wer Rechtschreibfehler findet, darf sie behalten !!

  7. #17
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Das Umrechnen der Stellzeiten aus dem Datenblatt ist vermutlich nicht ganz einfach. Ich würde das Senden der Impulse einfach solange wiederholen bis die Servos nicht mehr zucken. Etwas besser wäre vielleicht so:

    Code:
    stellzeit = (pos_neu - pos_old) * WiederholungenproStep  
    do
      Impulse senden
    while(stellzeit--)
    Nur zur Info und nochmals etwas offtopic:
    weil der servo gibt doch keine werte zurück oder doch?
    https://www.roboternetz.de/phpBB2/viewtopic.php?t=37927

    Dazu benötigt man allerdings einen analogen Eingang zur Ansteuerung des Servos ;) Das ist aber schon sehr fortgeschritten, Anfänger/Einsteiger sollten sich erstmal mit den Grund- und Standartfunktionen der Servos vertraut machen.
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    15.12.2007
    Beiträge
    46
    hallo,
    ok danke für den hinweis !
    des mit dem analogen zeugs lass ich dann erstmal und werde etz malanfangen
    wenn ich nimmer weiterkomm bzw. der greifer fertig ist und funktioniert melde ich mich wieder!
    bis dann
    mfg Felix
    Wer Rechtschreibfehler findet, darf sie behalten !!

  9. #19
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    Sag mal RCX,

    laufen deine Servos mit den ASURO-Akkus? Ich habe die Erfahrung gemacht dass 5V zum Betreiben der Servos nicht ausreicht. Ausserdem ziehen die Servos so viel Strom dass man einen Transistor braucht.

  10. #20
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    Schönen Nachmittag,

    Ich habe mir eine Erweiterungsplatine für 3 Servos gebastelt und diese auf meine ATMEGA32 Erweiterungsplatine gesteckt. Für die Servos belegt habe ich die PINS PB5(MOSI), PB6(MISO) und PB7(SCK) der ISP-Schnittstelle.

    In der Asuro.c habe ich folgendes eingetragen:
    Code:
    /* function for Servos */
    /* example code right Servo On, middle Servo On, left LED Off */
    /* Servo(OFF,ON,ON); */
    void Servo(unsigned char left, unsigned char middle, unsigned char right)
    {
    	if (left || middle || right) {
    		DDRB |= (1 << PB5) | (1 << PB6) | (1 << PB7);
    		PORTB |= (1 << PB5) | (1 << PB6) | (1 << PB7);
    	}
    	if (!left) PORTB &= ~(1 << PB7);
    	if (!middle) PORTB &= ~(1 << PB6);
    	if (!right) PORTB &= ~(1 << PA5);
    }
    In die Asuro.h
    Code:
    /* function for Servos */
    /* example code right Servo On, middle Servo ON, left LED Off */
    /* BackLED(OFF,ON,ON); */
    void Servo(unsigned char left, unsigned char middle, unsigned char right);
    Und das Programm ist so
    Code:
    #include "asuro.h" 
    
    unsigned char i, servo_stellzeit; 
    
    void servo(unsigned char winkel){ 
    unsigned int count=0; 
    do{ 
       count++; 
       Servo(ON,ON,ON); 
       FrontLED(ON); 
       Sleep(winkel); 
       Servo (OFF,OFF,OFF);
       FrontLED(OFF); 
       Sleep(255); Sleep(255); Sleep(255); 
    }while (count<servo_stellzeit); 
    } 
    
    int main(void) { 
    
    Init(); 
    StatusLED(OFF); 
    do{ 
    servo_stellzeit=35; 
    servo(51); 
    servo(90); 
    servo(51); 
    servo(15); 
    servo_stellzeit=2; 
    for (i=15; i<88; i+=2) servo(i); 
    for (i=90; i>17; i-=2) servo(i); 
    }while (1); 
    return 0; 
    }
    Aber es bewegt sich nichts...
    Könntet ihr mir bitte etwas unter die Arme greifen?

Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

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

12V Akku bauen