- 3D-Druck Einstieg und Tipps         
Seite 8 von 8 ErsteErste ... 678
Ergebnis 71 bis 75 von 75

Thema: Mehrere RC Signale einlesen und mehrere Servos ausgeben

  1. #71
    Unregistriert
    Gast
    Anzeige

    Praxistest und DIY Projekte
    Hallo Searcher,

    also ich habe den Code so ausprobiert und wie Du schon vermutet hast reagiert der 3.Servo etwas rauer. Ich habe auch festgestellt, dass es aber sehr abhängig vom Servotyp ist.
    Im Moment verwende ich nur analoge Servos, ich werde morgen noch einen digitalen Servo ausprobieren.

    Was mir aufgefallen ist, dass die Servogeschwindigkeit sehr linear ist; Ganz habe ich es auch noch nicht verstanden, wie ich hier eine eher exponentiellere Kennlinie fahren könnte.
    Damit meine ich bei kleineren Ausschlägen ein schnelleres Ansprechverhalten.
    Dann hätte ich noch eine Verständnisfrage, ganz ist mir noch nicht klar warum die Rechenzeit 8µs beträgt. Wodurch wird dies bestimmt, durch den Timer 1?
    Das Problem mit der externen Stromversorgung lag übrigens an einem zu schwachen Netzteil, welches zwar mit 5Volt bezeichnet ist, 8Volt anzeigt unbelastet, aber durch den Spannugnswandler auf dem IO Board nur irgendwas mit 4.2V liefert. Ein 12V Netzteil brachte die Lösung

    Aber ansonsten funktioniert es sehr sehr gut. Habe noch ein wenig mit den Werten hier und da gespielt, aber meistens habe ich es verschlimmbessert Wie immer
    Ich mach mich morgen noch daran, den Deltabetrieb, d.h. Umschaltung auf Kettenantrieb einzuarbeiten, damit das auch wieder funktioniert.
    Mal sehen wie ich das mit den Potis gedeichselt bekomme, denke das werde ich rausmachen, da ein Code schneller gebaut ist, als mit den Potis rumspielen.
    Dann fehlt noch das Einschalten von LEDs, dann gehts an den Umbau des Baggers. Der Umbau sollte eine schneller Sache sein, da hab ich eher Heimspiel

    VG
    Thomas

  2. #72
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Zitat Zitat von Unregistriert Beitrag anzeigen
    Dann hätte ich noch eine Verständnisfrage, ganz ist mir noch nicht klar warum die Rechenzeit 8µs beträgt. Wodurch wird dies bestimmt, durch den Timer 1?
    Meinst Du diese 8µs?
    Zitat Zitat von Searcher
    Die längste Zeit, die zwischen zwei 8µs Bewegungen (Decr Berechnung_3a) von Servo3 liegt, ...
    Die 8µs kommen vom Timer0. Der läuft ja durch seinen Prescaler von 64 mit 125000Hz. 1/125000Hz = 8µs.
    Alle 8µs schaltet der Timer also einen Schritt weiter - erhöht sein Register TCNT0 um eins weiter bis 255 wo es dann beim nächsten Schritt auf 0 gesetzt wird (überläuft) und ab da wieder den Berg rauf schreitet. Weil er damit die Zeiten für die Pulsbreite der Servos macht, kann die Pulsbreite nur in Schritten mit 8µs verändert werden. Puls kann also ein Vielfaches von 8 lang sein (8µs, 16µs, 32µs ....) aber nicht 5µs, 17µs etc. Wenn also Berechnung_3a um eins verändert wird, wird die Pulslänge von Servo3 um 8µs, eben die kleinst mögliche für Timer0 abmeßbare Zeiteinheit, verändert. *keuch* *lufthol*

    Ich sollte nicht soviel schreiben. Je mehr man schreibt, desto mehr Mist kann dabei rauskommen


    Also allgemein bekommt ein Servo eine Sollposition durch die Pulsbreite seine Servosignals mitgeteilt. Das Servo versucht nun mithilfe seiner eingebauten Elektronik und dessen Eigenschaften die Sollposition so schnell wie möglich zu erreichen. (Da gibt es schon Unterschiede zwischen den verschiedenen Typen)

    Um den Lauf des Servos von "außen", also durch das Programm zu verlangsamen wird nicht die Endsollposition übermittelt, sondern eine Pulsweite, die nur wenig von der vorherigen abweicht. Das Servo fährt also nicht zur Endposition siondern ein kleines Stück dorthin (In unserem Fall ein Stück, daß eine 8µs Pulsweitenveränderung ausmacht). Nach einer Weile wird die Pulsweite wieder ein Stück in Richtung Endsollweite verändert - das Servo macht wieder einen kleinen Schritt. Die Geschwindigkeit des Servos hängt also von diesen "Weilen" ab, die zwischen den Pulsweitenveränderungen in Richtung Sollpulsweite liegt.

    Die "Weile" also die Zeit, die zwischen den Veränderungen vergeht, wird hier mit Timer1 bzw Timer2 bestimmt. Jedesmal, wenn die Zeit abgelaufen ist (Das Interruptflag steht) wird zB Berechnung_3a verändert.

    Man könnte sich auch andere Methoden einfallen lassen. Ich meine, es gab mal zu Beginn des threads, eine bzw mehrere Variablen, die immer mit jedem Durchlauf der Hauptschleife hochgezählt wurden und bei einem bestimmten Wert ein Servo ein Stück weitergeschaltet hatten. Damit könnte man Servo3 wieder weniger "rauh" bekommen. Oder sich andere Methoden einfallen lassen ....

    Exponetielle Geschwindigkeitsverläufe oder Rampen - Gehirnschmalz zum Erzeugen der Zeiten zwischen den Servoimpulsveränderungen stecken. Ich kann aber heute und demnächst vermutlich nicht

    Ich mach mich morgen noch daran, den Deltabetrieb, d.h. Umschaltung auf Kettenantrieb einzuarbeiten, damit das auch wieder funktioniert.
    Mal sehen wie ich das mit den Potis gedeichselt bekomme, denke das werde ich rausmachen, da ein Code schneller gebaut ist, als mit den Potis rumspielen.
    Dann fehlt noch das Einschalten von LEDs, dann gehts an den Umbau des Baggers. Der Umbau sollte eine schneller Sache sein, da hab ich eher Heimspiel
    Genau, erstmal die Basis schaffen, ich bin beim Daumen drücken.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  3. #73
    Neuer Benutzer Öfters hier
    Registriert seit
    26.12.2004
    Beiträge
    12
    Hallo Fachleute

    Ich nutze den Code von #64 auf einem Arduino nano, das Programm funktioniert einwandfrei!!
    Ich möchte nun wenn der Baggerarm Servo gegen einen Taster fährt das Servo Stoppen und erst bei einem Richtungswechsel des Fernsteuer Signales das Servo wieder freigeben.
    (evtl. könnte man mit einem Transistor den Plusspannung des Servos unterbrechen oder gibt es noch bessere Möglichkeiten??)

    Für eine Antwort möchte ich mich jetzt schon Bedanken !

  4. #74
    Ich entschuldige mich dafür, dass ich seit Jahren nicht mehr hier war.
    Auch wenn es für eine Antwort auf die Frage von pocketpcuser schon einige Jahre zu spät ist, antworte ich trotzdem (vielleicht sucht ja mal jemand anderes nach genau dieser Lösung).

    Einem Servo die Betriebsspannung zu nehmen ist keine gute Idee. Das Servo verliert seine Haltekraft. Zudem reagieren manche Servos sehr nachtragend, wenn die Versorgungsspannung wegfällt, aber die Impulse des Empfängers weiter anliegen.

    Im Code wäre es recht einfach gewesen, einen Endschalter für ein bestimmes Servo zu integrieren. In den Zeilen 299 bis 334 werden unter anderem die Servostellungen berechnet. Dies passiert mit den Zeilen:
    Code:
    Decr Berechnung_1a
    Incr Berechnung_1a
    Decr Berechnung_2a
    Incr Berechnung_2a
    In diesen Zeilen wird die jeweilige Stellung von Servo 1 oder Servo 2 nach rechts oder links verschoben.
    Wenn nun z.B. die Linksbewegung des Servos 1 mit einem Endschalter begrenzt werden soll, liese sich das mit lediglich 3 Programmzeilen bewerkstelligen.

    Vor der Hauptschleife den Endschalter einrichten mittels:
    Code:
    Endschalter Alias Pinx.y     ' Pin festlegen, an dem der Endschalter angeschlossen wird
    Portx.y = 1                  ' PullUp an dem Pin einschalten

    Im jeweiligen Berechnungsblock (abhängig von Servo und Richtung) dann z.B. folgende Änderung durchführen:
    Code:
    ' Decr Berechnung_1a                        <--- diese Zeile ersetzen durch... 
    If Endschalter = 1 then Decr Berechnung_1a         ' Nur ausführen, wenn Endschalter nicht betätigt ist

    Nun würde das Servo nur solange in die entsprechende Richtung bewegt werden können, solange der Endschalter (oder besser gesagt der EndTASTER) nicht betätigt ist.
    Sobald der Baggerarm den Taster betätigt (am Endschalter-Pin liegt dann Masse an), würde die Variable "Berechnung_1a" nicht mehr weiter decreased -> Das Servo bleibt stehen.

  5. #75
    Neuer Benutzer Öfters hier
    Registriert seit
    26.12.2004
    Beiträge
    12
    Danke für Die INFO.
    Auf diese Lösung bin ich dann auch gekommen.

Seite 8 von 8 ErsteErste ... 678

Ähnliche Themen

  1. Mehrere analoge Werte über ein ADC einlesen möglich?
    Von HeXPloreR im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 07.08.2012, 18:18
  2. Schaltkreis für mehrere Servos
    Von Sebbokalypse im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 12.11.2009, 19:46
  3. Mehrere Signale umschalten
    Von flexxo im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 25.02.2007, 14:56
  4. Antworten: 9
    Letzter Beitrag: 02.04.2006, 18:53
  5. Mehrere Signale über einen Interrupt erkennen
    Von Minifriese im Forum Elektronik
    Antworten: 22
    Letzter Beitrag: 04.06.2004, 09:31

Berechtigungen

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

Solar Speicher und Akkus Tests