- Labornetzteil AliExpress         
Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 60

Thema: Mehrere Servo-Signale einlesen, ggf. manipulieren, ausgeben

  1. #21
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    Anzeige

    Praxistest und DIY Projekte
    Auch die größeren AVR Controller haben nicht genug einzelne Interrupt Eingänge um 6 bzw. 7 Servosignale einlesen zu können.
    Ich würde mir mal die Pinchange Interups zu Gemüte führen, die fast alle neueren AVR Controller haben.
    Man muss dann nur in der Software rauskriegen welcher Eingang den Interupt mit welcher Flanke ausgelöst hat.
    Die Zeitmessung könnte dann über das auslesen des TCNT Registers eines 16Bit Timers stattfinden.
    Dazu vom TCNT Wert der fallenden Flanke den abgespeicherten TCNT Wert der steigenden Flanke bei jedem Kanal abziehen.
    Dieser 16Bit Timer kann dann auch gleich die Impulsgenerierung für das Summensignal übernehmen.
    Ein Problem könnte noch sein, das auf die Fallende Flanke sofort eine steigende des nächsten Kanals folgt.
    Wie sich das auswirkt wird man wohl nur experimentell rauskriegen.

  2. #22
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.687
    ... Die Zeiterfassung mit Interrupt hat immer das Problem mit Jitter. Kommt natürlich auf die nötige Genauigkeit an, ob das stört ...
    Genau das. In der Zeiterfassung steckt das Problem der Genauigkeit. Daher muss die Abtastung so schnell wie möglich erfolgen, meine skizzierter Vorschlag dazu siehe oben. Die zeitlich gerasterte Erfassung ist mit Verlusten in der Eingangsauflösung verbunden, ist mir klar (und oben angemerkt). Da macht es sicher Sinn, die sechs Eingangskanäle mit einem Logikbaustein zu überwachen (1 || 2 || 3 || 4 || 5 || 6) *) und das Ergebnis auf einen externen Interrupt zu geben (nach /RES die höchste Priorisierung). Getriggert wird hier natürlich auf beide Flanken (und ich weiß leider nicht, wie das mit Logikbausteinen realisiert wird oder ob es überhaupt realisiert werden kann). Die Portkonfiguration (siehe mein Posting oben) aller sechs Eingänge gleichzeitig (Zustand_alle = PINB ... gibts sowas in Bascom?) NUR in der extINT-ISR einlesen und mit Zeitmarke versehen ist dann an ein - oder mehrere gleichzeitige oder fast gleichzeitige - Signalereigniss/e gebunden. Spart unnötige Abfragen und wenn die restlichen ISR mit nested Interrupt gefahren werden wird das Jitterproblem noch geringer.

    Der Signalausgang nach all den Überarbeitungen ist wenig zeitkritisch, da es analoge Servos sind.

    *) Anmerkung: in C ist "||" ein "oder".

    PS: ja ich habe die anders gelagerten Vorschläge auch gelesen ;.-.)
    Geändert von oberallgeier (17.12.2014 um 23:28 Uhr)
    Ciao sagt der JoeamBerg

  3. #23
    @ Bomberpilot:
    Zitat Zitat von Peter(TOO) Beitrag anzeigen
    Hallo Basti,
    ...
    Der Servo-Impuls ist maximal 3ms breit. Ursprünglich wurde im Zeitmultiplex gesendet. So in der Art:
    0ms Kanal1
    5ms Kanal2
    ...

    MfG Peter(TOO)
    Hier wurde das geschrieben ^^.


    Bei dem Rest kann ich dir dann so leider nicht mehr weiterhelfen. Ich habe zwar schon ein paar Steuerungen aufgebaut, bei denen mehrere PWM-Kanäle einer 2,4GHz-Anlage von den einzelnen Empfängerports abgegriffen und ausgewertet wurden, das aber meist nur als direkte Schaltoption, also nur einen Ausgang toggeln (beispielsweise Blinker oder Bremsleuchten). Direkte Signalweitergabe - das kann ich leider auch noch nicht.


    LG - Maik

  4. #24
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    Beiträge
    2.435
    Hallo Geier,
    Zitat Zitat von oberallgeier Beitrag anzeigen
    Getriggert wird hier natürlich auf beide Flanken (und ich weiß leider nicht, wie das mit Logikbausteinen realisiert wird oder ob es überhaupt realisiert werden kann).
    Beide Flanken sind in diesem Fall gar nicht nötig. Die fallende Flanke des einen Kanals entspricht zeitlich der Steigenden des nächsten.

    Einfach geht es mit einem RC-Glied als Differenzierer, dann bekommt man aus der Flanke einen Impuls.
    Dann bekommt man so etwas:
    http://pi.physik.uni-bonn.de/~kortma...renzierer.html
    Die negativen Impulse kann man dann absägen, indem man noch eine Diode parallel zum Widerstand einbaut.

    Dahinter sollte dann noch ein Schmitt Trigger und ein ODER-Gatter.

    Eine andere Möglichkeit ist diese hier (Absatz: Taktflankengesteuerte Flipflops):
    http://www.netzmafia.de/skripten/dig.../flipflop.html
    Allerdings ist dann der Impuls nur so breit, wie die Gatterlaufzeit des Inverters.
    Damit müsste man dann erst noch Monoflop ansteuern, welches eine vernünftige Impulslänge erzeugt. Wie z.B. so etwas:
    http://www.nxp.com/documents/data_sh...HCT221_CNV.pdf


    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  5. #25
    Neuer Benutzer Öfters hier
    Registriert seit
    25.10.2010
    Beiträge
    26
    Morgen zusammen,

    also Flip-Flop mit Mono-Flop und Oder-Glied geht mir Hardware mäßig schon fast etwas zu weit :-D
    Eingänge zu Pollen wollte ich eigentlich auch soweit als möglich vermeiden. Gerade bei Zeitkritischen Sachen empfinde ich Polling als sinnlose Rechenzeitverschwendung, in Zeiten von Interrupt gesteuerten Abläufen ^^

    Aber halten wir mal fest:
    -2 Dioden Matrixen
    -Signale kommen exakt abwechselnd an den beiden Kanälen (LOW Flanke auf dem einen = HIGH Flanke auf dem anderen)

    Somit stehen ja nur noch 2 Kanäle zur Auswertung.

    Idee:
    Beide Diodenmatrixen bekommen ein RC-Glied (Impulsgenerierung) negative Flanke natürlich weggeschnitten mit Diode.
    Diese beiden Signale könnte man dann ODER'n. Somit sollte sich doch ein Signal aus 6 kurzen Impulsen ergeben?
    Der Abstand von Puls zu Puls entspricht dann der Signal Dauer.
    Problem besteht nur beim letzten Kanal, der ließe sich nur mit einer follgenden negativen Flanke messen... *hmmm*

    Gruß Basti

  6. #26
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Zitat Zitat von Bomberpilot Beitrag anzeigen
    Idee:
    ... mit 2 bzw. mehr kleinsten µC auswerten.
    Geändert von PICture (18.12.2014 um 08:59 Uhr)
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  7. #27
    Neuer Benutzer Öfters hier
    Registriert seit
    25.10.2010
    Beiträge
    26
    Zitat Zitat von PICture Beitrag anzeigen
    ... mit 2 kleinsten µC auswerten.
    Ein- und Ausgabe zu trennen würde ich noch mitmachen.
    Die Eingabe sollte dann aber schon einer alleine machen. Sonst verschwende ich ja mehr Rechenzeit am Daten synchronisieren als an allem anderen

  8. #28
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Sorry, aber für mich ist heutzutage ein kleinster 8-pinner in SMD, wie ein "pull up". Ausserdem könnten sie gleich die Signale manipulieren und ausgeben.
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  9. #29
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    Beide Flanken sind in diesem Fall gar nicht nötig. Die fallende Flanke des einen Kanals entspricht zeitlich der Steigenden des nächsten.
    Das stimmt so nicht ganz.
    Nach dem letzten Kanal und am Anfang des ersten Kanal ist eine Pause von mindestens 4ms.
    Aus dieser Pause heraus wird im Empfänger der Start eines neuen Pulspaketes ermittelt.

    Du kannst alle InterruptQuellen eines AVR Controllers nutzen die von einem externen Pin aus angesteuert werden können.
    Also INT0, INT1, ICP, Comperator. Wenn Du einen Controller findest der 8 solcher Interruptquellen hat, kannst Du die verwenden.
    Wenn nicht bleibt Dir noch die Möglichkeit mit den Pin Change Interrupts wie oben beschrieben.
    Ein möglicher Kandidat wäre hier der ATMEGA88. Guck mal ins Datenblatt ab Seite 69.
    Um überschneidungen bei den Interrupt Flags zu vermeiden würde ich für die geraden Kanäle den PCINT1 und für die ungeraden Kanäle den PCINT2 verwenden.
    Somit wird der gleiche Interrupt maximal 1mal pro Millisekunde aufgerufen.
    Das sind 20000 Taktzyklen. Da in dieser Zeit ja 2mal der Pinchange aufgerufen wird hat jeder dieser Interrupts 10000 mögliche Taktzyklen. Das sollte auch für umfangreichere Auswertungen ausreichen.
    Der TCNT Wert, sowie die Zustände der Ports sollten ganz am Anfang der Interruptroutine eingelesen werden.
    Das sollte den Jitter verringern.
    Die Impulsausgabe selber könnte man mit Comparematch Interrupts machen.
    Man zählt in den Comparematch Interrupts eine Variable hoch und lädt in das Comparematch Register den Wert für den nächsten Potentialwechsel ( TCNT + gewünschter Änderungspunkt ).
    Dann brauchst Du nur noch per Swich Case Anweisung abhängig von der Zähl Variable das Ausgangssignal nach 1 oder 0 zu setzen.
    Um die Reaktionszeiten möglichst kurz zu halten müsste man einen 20MHz Quarz verwenden und eventuell auch die Interruptroutinen in Assembler schreiben und die Register Sicherung im Interrupt optimieren.

    Das wäre meine Lösung des Problems, wie das Timing hinhaut kannst Du mit dem Simulator vom AVR Studio 6.xx austesten.
    Geändert von wkrug (18.12.2014 um 11:23 Uhr)

  10. #30
    Neuer Benutzer Öfters hier
    Registriert seit
    25.10.2010
    Beiträge
    26
    Zitat Zitat von wkrug Beitrag anzeigen
    Du kannst alle InterruptQuellen eines AVR Controllers nutzen die von einem externen Pin aus angesteuert werden können.
    Also INT0, INT1, ICP, Comperator. Wenn Du einen Controller findest der 8 solcher Interruptquellen hat, kannst Du die verwenden.
    Wenn nicht bleibt Dir noch die Möglichkeit mit den Pin Change Interrupts wie oben beschrieben.
    Wenn ich mir die 6 Eingänge über 2 Diodenmatrixen auf nur noch 2 Kanäle reduziere, wird es doch gar nicht nötig so viele Interrupts zu nutzen. Dann reichen mir ja 2. Dann muss nur in der Software mitgezählt werden bei welchem Kanal wir sind, und bei der langen Pause alles zurückgesetzt werden.

    Außerdem reicht es bis auf den letzten Impuls, die positive Flanke zu triggern. Und durch den Zähler weis ich ja, wann ich bei der letzten angelangt bin, und kann den INT ganz einfach auf fallen umstellend.

Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte

Ähnliche Themen

  1. Mehrere RC Signale einlesen und mehrere Servos ausgeben
    Von R2D2 Bastler im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 74
    Letzter Beitrag: 10.01.2022, 09:35
  2. RC-Signal einlesen verändern und wieder ausgeben.
    Von DanielSan im Forum Arduino -Plattform
    Antworten: 1
    Letzter Beitrag: 21.03.2013, 12:58
  3. Atmel128 Spannungen einlesen und Ausgeben (Display3000)
    Von Gantenbein im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 31.08.2007, 22:41
  4. Mehrere Signale umschalten
    Von flexxo im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 25.02.2007, 14:56
  5. Servoimpulse einlesen und ausgeben
    Von moelski im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 21.08.2006, 08:24

Berechtigungen

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

12V Akku bauen