-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: 9 Servos, Auflsung 1s --> Wie lse ich das?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    18.10.2011
    Beitrge
    44

    9 Servos, Auflsung 1s --> Wie lse ich das?

    Anzeige

    Hi Zusammen,

    mchte mich mal kurz vorstellen, ich habe erst vor kurzem begonnen mit mit Mikrocontrollern und den Mglichkeiten zu beschftigen, habe viel gelesen, noch mehr gelesen und bin gerade dabei auf einem Breadboard meine ersten "Hallo Welt" Programme zu testen. Also Led leuchten, blinken und so weiter.

    In weiterer Folge mchte ich mal 9 Servos ansteuern knnen mit einer Auflsung von 1s bei mind. 50Hz und maximal 330Hz. Nur frage ich mich wie ich das anstellen soll denn mit Soft-PWM wird das wohl nicht so leicht zu lsen sein. Bei einem Prozessor mit 16Mhz ist eine s gerade mal 16 Taktlngen lang. Neben den 9 Servosausgngen brauche ich noch zumindest einen Eingang am C.

    Habt ihr eine Idee wie ich das lsen knnte? Oder welche Bauteile es vielleicht gibt die solchen Aufgaben gewachsen sind?

    Danke Euch und liebe Gre
    PuraVida

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    16.03.2011
    Ort
    Dresden
    Alter
    30
    Beitrge
    1.937
    Ich habe es zwar noch nicht verwendet, aber das Pololu Mini Maestro scheint fr solche Aufgaben wie geschaffen zu sein. Damit sollte man dem C auf jeden Fall einiges an Arbeit abnehmen knnen. Bei einer reinen C-Lsung msste man viel mit Timern arbeiten. Ich hatte mir auch schon gedacht, dass es theoretisch funktionieren knnte, wenn man einen Ausgang mittels Timer fr die Pulsweite High stellt und fr den Rest der Periode wieder Low. Whrend dieser restlichen Zeit knnte man dann die Pulsweiten fr die anderen Servos setzen, sodass jeder nacheinander seinen Puls bekommt. Ist aber wie gesagt nur so eine Idee von mir, sowas wrde ich zumindest ausprobieren. Bei 20ms Periodenlnge knnte man also 10 Servos ansteuern, der Timer lsst sich eigentlich auch auf s genau einstellen.
    Musst du halt wissen, ob du die einfache Lsung oder die Bastellsung bevorzugst. Bei Letzterer lernt man aber denk ich mal mehr.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    18.10.2011
    Beitrge
    44
    Hi Geistesblitz!

    Danke fr den Tipp mit dem Pololu Board. Das lst ja super genau auf.

    Da ich aber eine eigene Anwendung basteln will und auch noch ein User-Interface mit vier Tasten brauche sowie eine 5 stellige LED Anzeige wrde ich das gerne selbst basteln damit ich das genau auf meine Bedrfnisse zuschneidern kann.

    Was die wohl fr einen Controller fr ihr Board verwenden? Vielleicht wre ja der was fr mich...??

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    16.03.2011
    Ort
    Dresden
    Alter
    30
    Beitrge
    1.937
    Naja, das Pololu-Board lsst sich auch ber UART per C ansprechen. Allerdings muss ich mich damit auch selbst erst noch auseinandersetzen. Bei sowas ist es halt sinnvoll, die Aufgaben aufzuteilen. Es ist einfach besser, wenn der C zum Rechnen den "Kopf frei hat" und die Generierung der Servosignale vom Pololu bernommen wird. Ansonsten wrde ich die Variante probieren, die ich oben vorgestellt hab. Ich werd das auf jeden Fall auch noch mal probieren, wenn ich mein C-Board wieder zum laufen bekomm. Wahrscheinlich haben die anderen hier auch noch ein paar Vorschlge, ich bin ja selbst uch noch nicht so erfahren in der Materie.

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.05.2005
    Ort
    Berlin
    Beitrge
    316
    Was bedeutet: [zitat]bei mind. 50Hz und maximal 330Hz[/zitat]

    Meinst du damit die Refreshrate?

    Ich sag mal, 32 Servos mit 1us Auflsung ist kein Problem. Ich mach das so, dass ich mir ne Wertetabelle vorberechne und die dann einfach auf die Ports haue. Die Tabelle muss nur neu berechnet werden, wenn sich ein Servo bewegen soll.
    Problem: Der uC ist bei jedem Refhresh-Vorgang (bei mir alle 10ms) fr maximal 1ms blockiert.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    18.10.2011
    Beitrge
    44
    Hi lokirobotics!

    Ja, ich meine die Refreshrate.

    Mein Servosignal soll von 750s bis 2250 s in 1s Schritten einstellbar sein. Bei Analogservos alle 20ms (50Hz) und bei DigitalServos alle 3ms (330Hz) wiederholt sich das Signal - der Refresh sozusagen.

    Was ich vorhabe soll in etwa so funktionieren: Es bilden immer drei Servos eine Gruppe. Der Benutzer stellt fr jeden Servo eine Start und eine Stoppposition ein. Dann stellt er ein mit welcher Geschwindigkeit der Servo von der Start zur Stoppposition fhrt. Und auerdem noch, wie lange der 2. Servo wartet nachdem der erste seine Position angefahren ist. All diese Infos sollen in den EEProm.


    Wie wirfst Du das Signal auf die Ports? Und wieso ist dann der C blockiert?

    LG

    Dann kommt ein Startsignal und der 1. (u. ev. 3.) Servo fhrt langsam in seine Endposition, es vergeht eine Pause, und der 2. Servo fhrt in seine Endposition.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.05.2005
    Ort
    Berlin
    Beitrge
    316
    *kopfklatsch* Klar, alle 20ms sind 50Hz. Ok.

    Bei jedem Refresh wird eine Routine angestoen, die den Inhalt der Servotabelle einfach auf die Ports schmeit. In der Tabelle sind die bergangszeiten (sprich von der aktuellen Zeile zur nchsten), sowie die Pin Signale kodiert. Wie du selber sagst, ist die krzeste Zeit 0,75ms, die Lngste 2,25ms. Das ist eine Differenz von 1,5ms. Bei den von dir vorgegebenen Zeitintervallen wre die maximale Abarbeitungszeit der Tabelle 1,5ms. (Eintrag eins ausgeben, 1,5ms warten, Eintrag zwei Ausgeben, return).

    Das ganze andere Zeug (wie schnell bewegen, von wo bis wo) bernehmen dann andere Routinen. Das knnte man jetzt wieder mit einer Tabelle oder Liste lsen (Servoposition zur Zeit t).
    Jetzt kann man entweder die ganze Servotabelle vorberechnen, oder man macht es Schrittweise (Animationstabelle mit n Schritten und Servotabelle jeweils neu berechnen).

    Ich fahre meine Servos mit 100Hz, die Positionsvorgaben fr Animationen kommen von extern ber UART, luft alles super. 330Hz sollten auch drin sein.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    18.10.2011
    Beitrge
    44
    Zitat Zitat von lokirobotics Beitrag anzeigen

    Bei jedem Refresh wird eine Routine angestoen, die den Inhalt der Servotabelle einfach auf die Ports schmeit. In der Tabelle sind die bergangszeiten (sprich von der aktuellen Zeile zur nchsten), sowie die Pin Signale kodiert. Wie du selber sagst, ist die krzeste Zeit 0,75ms, die Lngste 2,25ms. Das ist eine Differenz von 1,5ms. Bei den von dir vorgegebenen Zeitintervallen wre die maximale Abarbeitungszeit der Tabelle 1,5ms. (Eintrag eins ausgeben, 1,5ms warten, Eintrag zwei Ausgeben, return).
    Die Idee klingt gut. Der C htte ja nicht viel zu tun sonst, da strt es nicht weiter wenn mal 1,5ms nix passiert denke ich mir.

    Was mir noch gar nicht klar ist, wie Du die Zeit mit wenn Du jetzt, sagen wir Servo 1 ein Positionssignal von 1500s schicken willst? Zhlst Du da einen Timer mit?

    Kann ich mir das so Vorstellen: Die Routine wird aufgerufen und alle Pins wo Servos drauf hngen gehen auf High. Dann luft ein Zhler im Hintergrund mit. Sagen wir erster Servo 1000s zweiter Servo 1500 s. Sobald der Timer auf dem Wert ist der 1000s entspricht wird der erste Pin auf Low geschaltet. Und wenn der Zhlerwert den 1500s entspricht wird der nchste Pin auf Low gesetzt. So ungefhr?

    Wie frgst Du das ab? Mit if? Case? Bekommst Du da keine Zeitprobleme beim Zhlerstandvergleich? Wie gesagt dauert 1s ja gerade mal 16 Takte bei 16Mhz Taktung.

    Du hast ja nicht zufllig ein C-Codeschnippsel fr mich von der Routine?

    LG

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.05.2005
    Ort
    Berlin
    Beitrge
    316
    Vergleichen muss ich nichts mehr. Die Werte werden, wie gesagt vorberechnet. Das ist dann eine Byte Liste. Die Bytes muss ich dann nur noch Maskieren (welche Servos sollen aktiv sein) und in die Portregister kopieren. Das schafft man in 16 Takten.
    Wie ich das Warten umgesetzt habe, kann ich dir aus'm Kopf nicht sagen. Kann sein, dass es eine einfache NOP Schleife ist. Das schau ich zu Hause noch mal nach.

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    18.10.2011
    Beitrge
    44
    Ich glaube, wir reden ein bisl aneinander vorbei. Oder ich kann Dir nicht folgen. *gg*

    Bei mir starten drei bis sechs Servos gleichzeitig. Die fahren aber nicht alle den gleichen Endpunkt an sondern jeder einen individuell eingestellten. Das sind die Werte die Du in der Tabelle hast, oder? Ich mu also 6 Ports mal auf High setzen und dann zu unterschiedlichen Zeitpunkten wieder auf Low. Wenn ich Pech habe dann ist das (Hausnummer) 1500, 1501, 1502, 1503,1504, 1506 s, etc. Ins Portregister schreiben ist klar, sollte sowas wie einen Takt dauern. Aber wie stelle ich fest wann 1500s vergangen sind um wieder das Portregister zu beschreiben? Und wie, wann 1501s vergangen sind? Hmm.. mit einer NOP schleife die vorher schon die differenzen kennt und die Servos nach Werten sortiert...

    Wre cool wenn DU nachschauen knntest wie Du das genau gelst hast. Mir fehlt noch irgendwie der Plan... Naja, Newbie halt.

    Aber ich war schon extrem stolz auf meine blinkende LED, ist ja immerhin alles neu fr mich.

Seite 1 von 2 12 LetzteLetzte

hnliche Themen

  1. ADC-Auflsung ATmega8
    Von Tido im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 24.08.2008, 14:39
  2. Auflsung berechnen
    Von Tido im Forum Sensoren / Sensorik
    Antworten: 6
    Letzter Beitrag: 23.01.2008, 10:15
  3. 32-Bit-Timer mit 1mS Auflsung
    Von ACDC im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 13.11.2006, 09:09
  4. mit KTY Auflsung von mehr als 1C
    Von ba4_philipp im Forum Sensoren / Sensorik
    Antworten: 5
    Letzter Beitrag: 22.05.2006, 13:16
  5. Kleinste Auflsung bei Servos?
    Von Roberto im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 22
    Letzter Beitrag: 13.11.2004, 19:55

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhnge hochladen: Nein
  • Beitrge bearbeiten: Nein
  •