- SF800 Solar Speicher Tutorial         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 27

Thema: Viele Servos an einem Chip

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

    Powerstation Test
    Also wäre es am sinnvollsten die schritgeschwindigkeit soweit gochzuschrauben das er sich selbst stabilisiert

  2. #12
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    72
    Beiträge
    13.136
    Vielleicht, es kommt auf die Zielsetzung an.
    In der Umgebung gibt es auf alle Fälle noch ein paar Anregungen :
    http://www.youtube.com/watch?v=ZlOBmUb__VM
    http://www.youtube.com/watch?v=vcH97Dx8VCk
    http://www.youtube.com/watch?v=eoUoyBCB1Kg&NR=1

  3. #13
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.09.2006
    Ort
    Nähe Mannheim
    Beiträge
    269
    XD sieht ja witzig aus XD
    Ma sehn was sich draus machen läst
    DU kennst aber nich zufällig ein Chip der PWM besser kann als der MIcro Controller ?
    Ein weiteres Problem ist mir gerade aufgefallen
    Der verzettelt sich manchmal und weis dnn nich mehr wo er war
    also bleibt das Bein stehn und es passiert garnix mehr

    mfg Feratu

  4. #14
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    72
    Beiträge
    13.136
    Wenn es um die Steuerung von Servos geht, dann gibt es auch einen Servo Controler. Es ist aber auch nur ein entsprechender Controler mit Spezialaufgabe.
    http://www.google.de/search?hl=de&q=...ntroller&meta=

    Ich wollte in der Diskussion nicht abschweifen, es ist aber nach den angesprochenen Themen ein weites Feld. Schlimmstenfalls kann man ja später noch einen Thread zu den speziellen Themen der Bewegungen aufmachen, das entwickelt sich dann...
    Manfred

  5. #15
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.09.2006
    Ort
    Nähe Mannheim
    Beiträge
    269
    Na der SD20 Controller hört sich dochmal sehr gut an ;P
    danke dir ;P
    NUr die Frage ist
    1. Kann ich den mit meinem Chip verbinden ? (I²C Bus sollte der eigentlich haben)
    2. Ich habe den MAX 232 an meinem Chip hängen um damit Texte zum PC zu senden. Aber der Servo Controller benötigt die selben Pins.
    Kann ich nun Beide an die Leitung hängen ohne das sie sich im Weg stehn ?

    ps: In dem Thread geht es einfach um beides ^^

  6. #16
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    60
    Beiträge
    1.080
    Feratu, bist du sicher, das die Fuses in deinem µC nicht zufällig den Takt durch 8 teilen?

    Servosteuerung mache ich übrigens per Software, die mit 10 Servos ganz ordentlich und flatterfrei funktioniert und nicht viel Rechenzeit erfordert.
    Ich steuere die Servos nacheinander in einer Interrupt-Routine an.
    Diese Routine schaltet in einem Rutsch den aktuellen Servo ab, schaltet den nächsten an und belegt einen Timer mit einem passenden Wert, sodaß dessen Überlauf nach 1-2ms diesen Servo abgeschaltet und den folgenden einschaltet usw.
    Nach einem Durchgang aller Servos kommt eine Pause, die 20ms - (summe aller servozeiten) lang ist, wozu ich einen n+1. virtuellen Servo setze.

    Gruß MeckPommER
    Mein Hexapod im Detail auf www.vreal.de

  7. #17
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.09.2006
    Ort
    Nähe Mannheim
    Beiträge
    269
    Also meine Fusebits sind genauso eingestellt wie hier beschrieben

    https://www.roboternetz.de/wissen/in...sebitquarz.gif

    Ich bin lediglich die Schritte durchgegangen und habe das Programm verändert.

    Oder liegt das vielleicht an den Kondensatoren die am Quarz hängen
    Bei einem 8MHz quarz sind es 22pF könnte ja sein das andere eingesetzt werden müssen.
    Das is mir grade erst aufgefallen ^^

    Könntest du mal einen Programm ausschnitt posten?


    ps: ich programmier in Bascom unter Basic

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Alter
    61
    Beiträge
    114
    Also zu Basic kann ich nichts sagen. Ich denke, die Servosteuerung sollte in Assembler geschrieben werden.
    Ich mache das bei einem PIC wie folgt:

    In der Totzeit (18 ms, wo keine Servos aktiv sind) werden die Abschaltzeiten der einzelnen Servos berechnet, (Z.B. Servo 1 nach 1,9 ms, Servo 2 nach 1.2 ms, Servo 3 nach 1.8 ms, Servo 4 nach 1.8 ms).

    Diese Werte werden jetzt nach aufsteigender Zeit sortiert:
    (1.2 - Servo 2), (1.8 - Servo 3 und Servo 4), (1.9 Servo 1)

    Jetzt berechne ich nur die Differenzen bis zum Ausschalten des jeweils nächsten Servos (Startwert ist 0.0 ms):
    (S2 - 1.2) , (S3 & S4 - 06), (S1 - 0.1)

    Diese Werte schreibe ich in eine zweispaltige Tabelle. 1. Wert ist ein Bitmap aller auszuschaltenden Servos. 2. Wert ist die Zeit bis zum Ausschalten der nächsten Servos.
    0x00 | 1.2 ; Start, noch keine Servos ausschalten, 1.2 ms warten
    0x02 | 0.6 ; S2 ausschalten, 0.6 ms warten
    0x0c | 0.1 : S3 und S4 abschalten (Bits 3 und 4), 0.1 ms warten
    0x01 | 0.0 : S1 abschalten und fertig

    Die Interrupt-Routine kriegt einen Pointer auf die erste Zeile der Tabelle als Parameter.
    Meine Timer-Interrupt-Routine macht jetzt folgendes (nachdem sie einmal zum Zeitpunkt 0ms angestoßen wurde);
    XOR Spalte 1 der Tabelle mit den Ausgabe-Ports der Servos.
    Setze nächsten Timer-Interupt auf den Wert der Spalte 2 der Tabelle.
    Erhöhe Zeilen-Pointer in die Tabelle um 1.

    Vorteile:
    - Die Interrupt-Routine ist extrem schnell.
    - Es können mehrere Servos gleichzeitig ausgeschaltet werden, da immer 8 Bit am Port gleichzeitig gekippt werden können.
    - Die Anzahl der Servos ist hauptsächlich durch die Anzahl der Ports beschränkt.

    Nachteile:
    Etwas RAM-Verbrauch durch die angelegte Tabelle.

    Ist softwaretechnisch ein ziemlicher Aufwand, das Ganze elegant und effizient hinzubekommen, funktioniert aber tadellos.

  9. #19
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.09.2006
    Ort
    Nähe Mannheim
    Beiträge
    269
    Also das Prinzip habe ich soweit verstanden und muss sagen gute idee ^^
    Aber wie bekomst du die genaue Zeit hin ?
    ich glaube mit W
    Waitms 1.2
    is das nicht getan ^^
    Oder hast du noch einene 2. Timer laufen der dir das berechnet ?

    Ich dachte mir vll wäre es ja möglich eine timer zu machen der alle 20ms ein interupt auslöst.
    Gleichzeitig läuft ein wesentlich schnellerer Timer der einfach nur drin hat
    also
    Dim a as word
    Interup_timer2_
    load timer2 xxx
    a = a + 1
    return

    Der andere Timer hingegen hat
    interupt_timer_der 20ms_hat:
    load ....
    porta.0 = 1
    ..
    ..
    porta.7 = 1
    a = 0
    do
    If a >= 100 then porta.0 = 0
    ...
    ...
    If a >= 180 then porta.7 = 0

    loop until a = 500 'das sollen dann halt 2ms sein
    Return

    In der Hauptschleife steht halt drin was für ein Wert der jeweilige servo hat

    Ich probier das ma aus ;P

  10. #20
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.09.2006
    Ort
    Nähe Mannheim
    Beiträge
    269
    Schade geht nich XD
    wer häts gedacht ^^

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen