-         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 27

Thema: Viele Servos an einem Chip

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.09.2006
    Ort
    Nähe Mannheim
    Beiträge
    269

    Viele Servos an einem Chip

    Anzeige

    Sers
    Ich bin grad dabei meinem Robbi Beine zu bauen
    An jedem Bein sind 6 Servos angeschlossen wobei das für ausreichende Beweglichkeit genügen sollte ;P

    Ich habe momentan den Chip "Atmel ATMega 8535" der mit 16MHz läuft.
    Da dieser leider nur 3 Hardware PWM's besitzt bin ich gezwungen auf software umzusteigen.
    (unter allgemein => Software PWM kann man sich das mal anguggn ;P)

    Ich wollte nun fragen ob mir jemand einen Microprozessor empfehlen kann der soviele Hardware PWM ausgänge besitzt.
    Oder vielleicht eine art erweiterung für meinen aktuellen Chip mit dem ich diese auch ansteuern kann.
    Zur not nehm ich einfach 2 von denen ^^
    Wenn jemand eine bessere Idee hat wie man Servos optimal ansteuert nur raus damit ^^


    Danke schonmal im vorraus

    mfg
    Feratu

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    02.10.2007
    Beiträge
    68
    Hallo Feratu,

    Du könntest einen Timer-IRQ laufen lassen mit der notwendigen Auflösung der PWM, in der eine Varible hochgezählt wird.

    Dann kannst Du im Hauptprogramm am Anfang alle Ausgänge setzen und dann bei jedem neuen Wert der Variablen die einzelnen Kanäle prüfen ob diese wieder abgeschaltet werden müßen.

    Servos werden normalerweise alle 20ms mit einem Puls von 1..2ms angesteuert. Um eine Auflösung von 100 Schritten zu erreichen muß dein Timer-IRQ mit 1ms/100 = 10µs laufen, in der Zeit kann der µC ca. 150 Befehle verarbeiten.

    Da nach 2ms alle Ausgänge wieder null sind hätte der µC die restlichen 18ms nichts zu tun, diese kann man nutzen um wieder so ein 2ms Paket einzuschieben.

    So kann man schon eine ganze Reihe von Servos steuern. Aber die Soll-Daten müßen ja auch irgendwie in den Controller, daher sollte man dazu noch was Luft lassen.

    Grüße


    Grüße

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    ich arbeite gerade an etwas ähnlichem und gehe folgendermassen vor:
    alle 20ms (timer-interrupt) werden alle servo ports eingeschalten. nach einer weiteren ms wird in eine blockierende funktion gesprungen, die die servo-pins wieder abschaltet, in etwa so (opcode):
    Code:
    for(i=0;i<255;i++) // schleife dauert max. 1ms
    {
      if(i>servoposition1)SERVOPORTn=0;
      else warte_solang_wie_wenn_bedingung_erfüllt();
      if(i>servoposition2)..
      ...
    }
    je nach servo-anzahl wird die auflösung natürlich geringer, bei mehr als 12 Servos sollte man evtl. auf 2 funktionen aufsplitten, die abwechselnd alle 10ms aufgerufen werden.

    da die funktion zeitkritisch ist, schreibt man sie am besten in assembler. den rest der zeit (18-19ms) hat man für andere berechnungen frei.

    gruesse von der katz

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.09.2006
    Ort
    Nähe Mannheim
    Beiträge
    269
    Moin
    https://www.roboternetz.de/phpBB2/viewtopic.php?t=35211
    Das steht meine Aktelle ansteuerung von 6 Servos über die selbe Methode, wie in deinem Vorschlag.
    Allderdings sind 6 Servos zuwenig und wenn ich mehr hinzufüge sinkt die Genauigkeit der Servos da ich die Frequenz des Timers verringern müsste.
    Wenn die frequenz zu hoch ist dann eiert der controller nurnoch im ISR des Timers rum und die normale Hauptschleife Funktioniert garnicht mehr.
    Das selbe Problem tritt auf wenn ich zuviele IF schleifen in den Timer schreibe . Leider habe ich keine Bessere Idee wie ich um die schleifen herum komme.

    Wäre großartig wenn du deine Idee hast was ich an meiner PWM verbessern könnte bzw wie ich das Problem lösen könnte.

    Ist es eigentlich möglich 2 Microcontroller so zu vernetzen das sie funktionieren wie ein großer?
    Oder gibt es einen Chip der eine PWm weobei man die Pulsweite über ein Bus System steuert ?

    Noch meine Frage an euch was ihr davon haltet:
    Ich dachte mir ich baue eine Art AT ST aus starwars nach

    Hier ein Bild davon:


    Klar das ich das so niemals hinbekommen werde ohne en haufen Geld und wirklich viel Geduld ^^
    Aber eine stark vereinfachte Version bestimmt

    Meine Idee ist es das Bein einfach so beweglich wie möglich zu machen indem ich ein haufen Servos benutze wobei die aktuellen 10 ausreichen sollten.
    Zur stabilisierung benutze ich ein kleines Gewicht das den Oberkörper simulieren soll.
    Im endeffekt soll es dann so funktionieren als ob man beim laufen das Gleichgewicht nur mit dem Oberkörper halten würde.

    Wenn der Robi einfach nur da steht befindet sich das gewicht in der mitte.
    Bevor der robbi ein Bein anhebt bewegt sich das Gewicht auf das noch stehende Bein.
    Das Gewicht muss halt so schwer sein das der Roboter auf ein Bein stehen kann ohne umzufallen.
    Wenn er los läuft bewegt sich das Gewicht in Richtung des anderen Beines
    und dann halt hin und her ....


    Umsetzung:
    1. Ich habe einen kleinen Schrittmotor und ein Zahnriehmen mitdem ich das Gewicht hin und her bewegen könnte.
    2. Die 2. Idee besteht aus 2 zusätzlichen servo motoren die sich bewegen können wie ein Moving Head allerdings ist daran keine Lampe sonder eiene Stange mit Bleigewicht, die je nach Kipprichtung das Gleichgewicht halten soll. Man könnte sagen sie schwingt hin und her.


    Ich habe einiges über Laufroboter hier gelesen aber da war nur rellativ wenig über 2 Beiner drin. Es wäre also super wenn mir jemand tipps bzw erfahrungen sagen könnte in diesem Bereich.

    mfg
    Feratu

  5. #5
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    65
    Beiträge
    12.474
    wenig über 2 Beiner drin. Es wäre also super wenn mir jemand tipps bzw erfahrungen sagen könnte in diesem Bereich.
    Eine der elementarsten Formen eines zweibeinigen Laufroboters ist wohl der Yeti (oder Toddler) der auch im RN beschrieben ist.

    https://www.roboternetz.de/phpBB2/viewtopic.php?t=20369

    http://web.mit.edu/newsoffice/2005/robotoddler.html
    Robotic Toddler
    Control programs in the Cornell and Delft robots are extremely simple, because a large portion of the control problem is solved in the mechanical design. The MIT robot uses customized learning software that exploits this design, allowing the robot to teach itself to walk in less than 20 minutes, or about 600 steps.

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.09.2006
    Ort
    Nähe Mannheim
    Beiträge
    269
    Hi Robocar
    Ich habe mir das mal ähnlich zusammengebastelt allerdings klappt das nicht
    Ich vertseh zwar den Grund nicht aber ok ^^

    Ich hatte meine PWm auf 50Hz ausgelegt (die 20mS)
    Darin enthalten die 1 - 2mS Impuls

    Seltsamerweise lief das ding aber nicht.???
    Vielleicht habe ich mich ja verrechnet und die Frequenz stimmte nicht.
    Wie auch immer,...

    Als ich die Frequenz auf knappe 2KHz hochschraube funktionierte das ding beinahe einwandfrei
    nur bei einem Wert nah am rechtsausschlag fängt der Servo an zu vibrieren
    Du weist nicht zufällig woran das liegt ?

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.09.2006
    Ort
    Nähe Mannheim
    Beiträge
    269
    hi manf
    Die kenn ich garnich sau lustig XD besonders der Toddler ^^

    Ich will halt vermeiden das der Robi hin und her Wackelt
    also er soll rellativ gerade laufen und nicht so schwanken als wäre er besoffen ^^

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    ich würde die Servos mit 50Hz ansteuern. dafür sind sie gedacht, und selbst wenn sie bei exotischen frequenzen funktionieren sollten, tun das wahrscheinlich 1. nicht alle und 2. geht dann noch mehr rechenzeit für die dinger drauf.

    bist du sicher, dass dein µC mit 16MHz läuft und nicht etwa noch mit 1MHz? einfach mal ne led blinken lassen testweise.

    ca. 100Hz erhältst du bei 16MHz mit prescaler 1024, wenn du den timer im overflow-interrupt auf 100 setzt (im normal timer mode).

    gruesse

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.09.2006
    Ort
    Nähe Mannheim
    Beiträge
    269
    Hab nochmal nachgeschaut und 16MHz sind angegeben
    Mein Programm steht unter dem Link
    https://www.roboternetz.de/phpBB2/viewtopic.php?t=35211
    Der untere Post ist der aktuelle.

    Also ich schreibe mal meine rechnung hin und du schaust ob ihc kein Fehler gemacht habe ;P
    Das sind meine Timer einstellungen:

    Config Timer0 = Timer , Prescale = 1
    Enable Timer0
    On Timer0 Isr_von_timer1
    Enable Interrupts
    Load Timer0 240

    Die Rechnung dazu:
    Timer0 = 8Bit Timer = 256
    Timer Frequenz:
    (16000000Hz / 1 = 16MHz)

    Gewollt 1 MHz
    16000000 / 1000000 = 16

    Einzustellender Load:
    256 - 16 = 240

    Eingestellter Zählwert der Variable A (zählende Variable)
    480 (Testweise ermittelt)
    Fpwm = 480 * (1/1000000) = 4.8x10^-4
    = 1/4.8x10^-4
    = 2083,3333... Hz

    Damit gehts
    werde aber deinen Vorschlag gleich ausprobieren

  10. #10
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    65
    Beiträge
    12.474
    Zitat Zitat von Feratu
    Ich will halt vermeiden das der Robi hin und her Wackelt
    Nur noch als Ergänzung, hier gibt es eine sehr schöne Zweibeiner-Laufstudie mit QRIO, die (besonders bei 00:35 - 00:43) zeigt, wie bei geringer Schrittfrequenz das Gewicht verlagert wird durch Schwanken oder hier eleganter durch seitliches Verschieben des Körpers über den Standfuß.
    Bei hoher Schrittfrequnz bleibt der Körper auch ohne Gewichtsverlagerung im Mittel stabil.
    Manfred

    http://www.youtube.com/watch?v=oEfJC32BuQQ

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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