- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 12

Thema: Servosignal von Timer1 KanalA und ~B zeigt Ausfälle

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von oberallgeier Beitrag anzeigen
    Danke für den Tip. Klar, das geht - und ist vermutlich schneller programmiert und am Laufen. ABER - eine sequentielle Pulsausgabe kann eben je nach Pulslänge der verschiedenen Servos die Nachfolger mit wechselnden Periodenlängen versorgen - dann stimmt im Prinzip der Puls nicht mehr zur Periode. Daher mein Bemühen die verschiedenen Pulse in einem tmerfixierten Raster loszuwerden und die gewünschte Periodenlänge stabil zu halten.
    Ich denke, du gibst dir da an der falschen Stelle Mühe. Bei einem Servo ist, in Grenzen natürlich, das Puls/Pause Verhältnis unerheblich. Ich kenne (aus der Zeit vor den µC) Schaltungen von Fernsteuersendern, die einfach eine Kette von Monos waren. Alle Kanalpulse wurden nacheinander erzeugt, und dann kam noch eine feste Pause. Die Periodenlänge ist dabei grundsätzlich nicht konstant.

    Aber mit meinem Vorschlag kannst du auch eine konstante Periode haben, wenn du die Pausenzeit aus der Summe der Pulse ausrechnest.

    Und es scheint ja zu gehen (mittlerweile seit zwanzig Minuten störungsfrei). Und wenn ich den Vorteiler für den Timer von 64 auf 8 runtersetze, dann könnte ich sogar eine Feinheit der Rampen von knappen fünftausend Strichen schaffen - aber dass meine Servos so eine Genauigkeit schaffen glaub ich nicht.
    Je feiner du steuern willst, desto schneller sollten die Servos reagieren. Wenn du also, mal unabhängig von der Genauigkeit der Servos, 5000 Positionen ansteuern willst, brauchst du 100 sec (1 neuer Positionswert alle 20ms).

    Ich würde sogar versuchen, die Periodendauer soweit als möglich zu reduzieren. So etwas machen auch die Kopterbauer. Also mal dein einkanaliges Testprogramm auf eines deiner Servos arbeiten lassen und die Periodendauer verkürzen, bis es gerade noch geht. Das dann mal mit allen Servos testen, und um eine Reserve erhöhen.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Ich denke, du gibst dir da an der falschen Stelle Mühe ...
    Hallo Klebwax,

    Du hast Recht und ich hoffe, dass Du nicht denkst, dass ich gute und freundliche Ratschläge ablehne oder einfach nicht befolge. Das mit der falschen Stelle klingt nicht nur so, aber ... Ich wollte dieses Vorhaben schon vor vielen Monaten bei meinem Servotester durchgehen, hatte mir aber nicht die Zeit dazu genommen - und auch die Sache mit den Timern völlig ungenügend verstanden. Nun brauche ich eine Baugruppe "sechs bis sieben Servos" und will dabei auch gleich meine Kenntnisse im Umgang mit den Timern verbessern. Auch die Kenntnisse in C. Und in dieser alte Absicht steckt sicher auch noch mein damaliges Unwissen über Servos (und das Unwissen gabs noch immer - hattest Du ja auch sauber aus meinem Posting rausgelesen).

    ... Bei einem Servo ist, in Grenzen natürlich, das Puls/Pause Verhältnis unerheblich ...
    Ja, da gabs z.B. mal eine hübsche Untersuchung von lokirobotiks, nach der ich auch im RNWissen im Servoartikel auf diese Toleranz der Servos und lokirobotiks Arbeit hingewiesen hatte. Aber danke, dass Du mir das durch eigene Erfahrungen bestätigst.

    ... 5000 Positionen ... 100 sec (1 neuer Positionswert alle 20ms) ... Periodendauer soweit als möglich zu reduzieren ...
    Genau. Da habe ich auch ein Auge drauf. Derzeit habe ich in meinem Aufbau billige 5Euro-Teile und war überrascht, wie weit runter die noch sauber laufen . . . Insgesamt bin ich auch verblüfft darüber, wie weich man sogar die billigen Servos selbst bei langsamen Schwenks fahren kann (satte 20 ms für 1 Pulsincrement das theoretisch einem Drittel Winkelgrad entspricht). Natürlich freut mich auch, dass das ursprüngliche Vorhaben mit Eurer Hilfe so funktioniert wie ich es mir vorgestellt hatte.

    Nochmal danke für Deine Mühe und bitte nicht krumm nehmen, dass ich manchmal nicht alle Ratschläge befolge (aber meistens trotzdem einsehe - früher oder später).
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von oberallgeier Beitrag anzeigen
    Nochmal danke für Deine Mühe und bitte nicht krumm nehmen, dass ich manchmal nicht alle Ratschläge befolge (aber meistens trotzdem einsehe - früher oder später).
    Kein Problem. Hauptsache die Idee ist rübergekommen. Vielleicht kannst du noch mal woanders einsetzen, Ideen kann man nie genug auf Vorrat haben.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Hallo zusammen.

    Hier nur eine Haarspalterei am Rande, die auch nichts mit der grundsätzlichen Funktionalität zu tun hat. (oberallgeier bitte verzeih mir!)

    In deiner Test-Funktion benutzt du folgenden Code:
    Code:
        for (ilng = PWMmin; ilng <= PWMmax; ilng++)
         {                           //
           cli();                    // ###
           OCR1B       = ilng;       //
           sei();                    // ###
           waitms (  srvwt);         //
         }           // ### Ende for (ilng = ...
    Hier beim Schreiben in das OCRnx-Register kannst du getrost auf das cli() und sei() verzichten. Diese Register sind gepuffert und vertragen eine Unterbrechung durch Interrupts. (Mit der Ausnahme, wenn du in einer beliebigen INT-FNC auf das Register schreibst! Was du in deinen Code-Ausschnitten aber nicht machst.)
    Klar, es bleibt, dass beim Lesen leider doch mit INT-sei(n)-oder-nicht-sei(n) gewerkelt werden muss.

    Im dicken PDF zu den AVRs (angefangen beim atmega8 bis zum atmega644) ist das so beschrieben:
    When the High byte I/O location is written by the CPU, the TEMP Register will be updated by the value written. Then when the Low byte (OCR1xL) is written to the lower eight bits, the High byte will be copied into the upper 8-bits of either the OCR1x buffer or OCR1x Compare Register in the same system clock cycle.


    Aber wie gesagt: Hat nichts mit der eigentlichen Funktion zu tun. (Soll nur Bytes sparen)

    Gruß Sternthaler
    Lieber Asuro programieren als arbeiten gehen.

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Zitat Zitat von Sternthaler Beitrag anzeigen
    ... Haarspalterei ... (Soll nur Bytes sparen) ...
    Ich liebe Haarspaltereien - ich meine Codezeileneinsparungen.

    Zuerst hatte ich diese cli();/sei();-Geschichte nicht verwendet. Hatte mich dabei schon gewundert, dass es sozusagen trotzdem funktionierte . . . und die Zeilen nachgetragen. Nun weiß ich, warum es funktionierte, denn ich habs im Datenblatt gesucht und gefunden. Habe aber noch nicht in der *.lls nachgesehen, ob der Compiler das richtig macht(e) *ggg*. In der aktuellen Version wird nämlich OCR1B sowieso erst in der ISR (TIMER1_COMPA_vect) mit Daten aus dem Feld für die maximal möglichen zehn Servos beschrieben/geladen. Und da ich keine nested Interrupts verwende . . habe ich aktuell auch die cli();/sei();-Geschichte eingespart. Trotzdem

    Danke.
    Ciao sagt der JoeamBerg

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694

    Zehn Servos auf einen Streich

    Hallo Alle,

    nochmal danke für eure Hilfen. Das Servoprogramm läuft bei der Erprobung einwandfrei mit den zehn Servos (Anm.: teils getestet mit realen Servos, teils mit Oszilloskop - es fehlt seit Tagen eine Hardwarelieferung). Die aktuell erzielbare Auflösung ist hoch und ...
    Zitat Zitat von Klebwax Beitrag anzeigen
    ... Bei einem Servo ist, in Grenzen natürlich, das Puls/Pause Verhältnis unerheblich ...
    ... im aktuell geschalteten Fall sieht es so aus, dass eine Periodenzeit von 22 ms im Vergleich mit einer Periode von 20 ms bei gleicher Rampenzeit die gleiche Servostellung bewirkt. Geprüft einfach durch Augenschein mit Peilung über den Servohebel gegen markierten Untergrund.

    Mal ein paar Eckpunkte:
    Timer1 auf 312,5 kHz (20 MHz mit Prescaler 64)
    ISR (TIMER1_COMPA_vect) durch OCR1A = 800 alle 2,56 ms. Ein umlaufender Servopointer {1 bis 10} setzt den entsprechenden Servopin.
    ISR (TIMER1_COMPB_vect) wird in TC1_CMPA mit OCR1B gestartet und erzeugt die Rampe, der Servopointer dient zum Löschen der Rampe.
    Die zuständigen Rampenwerte liegen in einem Feld Srv_tm [12] (*ggg* ich weiß, das sind zu viele Elemente, aber ich nehme der Übersichtlichkeit halber nur die Elemente ~[1] bis ~[10] für Servo1 bis Servo10 und habe das zwölfte für "sonstige" Zwecke" frei).
    Der Schwenkbereich liegt bei (m)einem Billigservo bei fast 180° - mit OCR1B-Werten zwischen 120 und 780. Für die "allgemeine" Anwendung wirds auf 200 bis 700 beschränkt. Das entspricht einer theoretischen Auflösung von weniger als einem Drittel Grad (rund 17 Gradminuten).

    Zitat Zitat von Klebwax Beitrag anzeigen
    ... Ich würde sogar versuchen, die Periodendauer soweit als möglich zu reduzieren ...
    Nun habe ich ja ein reproduzierbar getaktetes/taktbares Modul, da kann ich mich demnächst damit spielen. Die ersten Ergebnisse mit 8 oder zehn Servos und entsprechend acht oder zehn TC1_CMPA-Schleifen sehen schon gut aus. Das "... demnächst damit spielen ..." wird etwas dauern, weil ich ziemlich hinter meinem Zeitplan herhinke.
    Ciao sagt der JoeamBerg

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    ... "... demnächst damit spielen ..." wird etwas dauern, ... ziemlich hinter meinem Zeitplan ...
    Trotzdem habe ich eine neue Platine gebaut (bauen müssen) - einige Funktionen fehlten mir. Ich glaube Projekte mit dem Flag "erledigt" halten sich manchmal besser als andere . . .

    ......Klicke auf die Grafik für eine größere Ansicht

Name:	m32plus_IMG_2275_mini.jpg
Hits:	319
Größe:	64,2 KB
ID:	24353

    Kurz ein paar Details zum Bild :

    1 Energieeinspeisung VBATT 8 V .. 20 V mit Verpolungschutz
    die grüne LED zeigt Spannung > ca. 2V auf Vcc
    SpannungsIC ist ein 78S05 mit etwas ELKO und KerKo
    2 PORTB mit GND (9) und Vcc (10)
    3 ISP, Vcc rechts oben über Jumper wählbar
    4 2x2 – GND (rechts) und Vcc (links)
    5 UART0 – nur RX, GND, TX
    6 ISP, links daneben Pegelanzeige mit LED, leuchtet wenn GND an /RES
    7 UART1 wie 5
    8 PORTA0 .. ~A3, dazu GND und Vcc
    9 Energieeinspeisung Servos Vs
    10 Jumper zur Strommessung von 9 zu Servosteckern (15)
    zur Verbindung von 9 zu den Servosteckern MUSS ein Jumper rechts
    sitzen, Jumper links verbindet die Controllerversorgung
    nach dem 78S05 mit Servo-Vcc
    11 Heartbeat (gnLED, Timer2, 1 Hz) und Info-LED rt
    12 Resettaster
    13 78S05
    14 2 Taster zur freien Verfügung, auch interruptfähig PD6, PD7
    15 10 Servostecker, von links: SIG, Vs, GND
    16 Spannungsanzeige > 2V auf Vs

    Die internen Leitungen sind meist Kupferlackdraht mit „lötbarer“ Beschichtung. Der Quarz und die 100nF-Abblockungen liegen unter dem Controller, L 10µH für AVcc liegt mit anderem SMD-Hühnerfutter – z.B. 1k für LED bei (1) – auf der Lötseite. Leer – ohne Controller – Stromaufnahme mit LED (1) und gnLED (für Heartbeat) auf (4) 20,7 mA, ohne „Heartbeat“ etwas über 10 mA. Mit m1284 ungeflasht ca. 35 mA, Anfahr-Anzeige auf dem DMM >> 70 mA.

    Nach Setzen der Fuses und disablen der JTAGEN-Fuses wurden ca. 48 mA gezogen.

    Nun sieht die Hardware (für mich) praxisgerecht aus - und mit den zwei, drei Details, die eine breite Spielwiese bieten (na ja, der Baustil l heißt eher Plattenbau und nicht Platinenherstellung. Rein vom Stil und der Fertigungstechnologie her).
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. Pulsgenerator für servosignal
    Von Horstel im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 10.06.2007, 12:58
  2. Servosignal erzeugen
    Von Sukilin im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 30.05.2007, 16:04
  3. Servosignal schaltet nicht ab
    Von Andree-HB im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 28.01.2005, 21:38
  4. PCM-Servosignal-Erkennung
    Von odlanir im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 4
    Letzter Beitrag: 27.04.2004, 18:47

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress