mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Servosignal einlesen


Autor: El (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!!

Ich zerbreche mir über folgendes Problem den Kopf:

Ich sollte sechs verschiedene PWM-Servosignale präzise auf meinem ATmega 
einlesen können.

Problem: bei einem Sigmal klappt das gut mit einem Timer und einem 
externen Interrupt der die Flanken detektiert. Jetzt habe ich aber nicht 
acht externe Interrupts zu verfügung.
Ich könnte aber zum Beispiel ein IC vorschalten das nach einer 
Veränderung an den Eingeängen seinen Ausgang wechselt und das auf den 
Interruptport schalten.
So ähnlich einem XOR. Nur ist da das Problem, wenn zwei Zustände 
gleichzeitig wechseln gehts nicht.


Gibt es so ein IC? oder gibt es noch eine andere Lösung?



Lösungen sind herzlich willkommen!!
Gruss El

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um welchen ATmega geht es denn? Die meisten haben auch einen PCINT. Das 
ist ein Interrupt, dem nicht nur ein Pin, sondern (z.B.) 8 auf einmal 
zugeordnet sind.

Autor: El (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha! Habe an einen ATmega16 gedacht. Ich konsultiere gleich mal das 
Datenblatt!

Autor: Dirk Schmidt (disc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo El,
versuch doch mal mit einem 644p o.ä. Die haben Pin-Change-Interupts an 
jedem Eingang. Ich hab´s auch damit gemacht.

Gruß

Dirk

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Dirk Schmidt (disc)

>versuch doch mal mit einem 644p o.ä. Die haben Pin-Change-Interupts an
>jedem Eingang. Ich hab´s auch damit gemacht.

Dann sollte man aber mal berechnen wie gross der Fehler im schlimmsten 
Fall wird, wenn alle Servos im gleichen Moment ne Flanke auslösen und 
der AVR das einzeln abarbeiten muss. Bei 1..2ms Pulsdauer mit 1% 
aufgelöst sind gerade mal noch 10us, bei 16 MHz sind das gerade mal noch 
160 Takte!

MfG
Falk

Autor: JanB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
wenn die Servosignal alle vom dem selben Empfänger
(und damit auch vom selben Sender) kommen,
dann sind die aktiven Teile der Servosignale (die 1-2 ms Pulse)
alle hübsch hintereinander angeordnet und überlappen sich nicht.
Sie werden ja alle hintereinander in dem 20ms-"Frame" das RC-Signales 
übertragen.
Das sollte die Auswertung erheblich vereinfachen.
N.B. Ich würde hier nicht mit flankengetriggerten Interrupts arbeiten,
sondern ich würde das Signal mit mögl. hoher Frequenz pollen.


Gruß Jan

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Würde auch nicht mit Interrupts arbeiten. Besser so: Die 20 ms 
'stoppen', z.B. per Timerinterrupt und danach relativ oft pollen. 
Allenfalls könntest du die Signale auch auf eine einzige Leitung 
schalten und diese dann per Interrupt verfolgen. (Geht natürlich alles 
nur, wenn die Signale vom gleichen Empfänger kommen.)

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...vom gleichen Sender... :-)

Autor: Dirk Schmidt (disc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Falk Brunner (falk)
Wenn alle Signale gleichzeitig kommen, hat man natürlich Pech. Ist aber 
sehr unwahrscheinlich (siehe auch unten zu PCM und PPM) und bei 
geschickter Programmierung nicht zu tragisch.
Ich habe bei mir eine Auflösung von mehr als 2500 Schritten realisiert 
(Servosignal von -100% bis 100%, Mega 644 mit 20MHz, Prescaler vom 16bit 
Timer für das Ermitteln der Zeitpunkte auf 8).
Wenn ich die Signale mit dem gleichen Prozessor nach weiterer 
Verarbeitung wieder ausgebe, ist an einem angeschlossenen schnellen 
Digitalservo kaum ein Zittern bemerkbar. Feld, Wald und Wiesen 
Analogservos stehen still.

@  mr.chip (Gast)
Um die gleiche Auflösung wie oben mit einem Timer und pollen der 
Leitungen hinzubekommen, müsstest du alle 8 Takte die Eingänge 
überprüfen. Bei mir kommen alle 20ms nur je 2 Interrupts pro Servo. Also 
ein erheblich geringerer Rechenaufwand.

@  JanB (Gast)
Dass die Signele für die Servos von einem Empfänger nacheinander kommen 
müssen, ist nirgenwo spezifiziert. Bei alten PPM Empfängern ist das 
vielleicht so. Sobald diese aber eine interne Digitale Verarbeitung der 
Signale haben oder bei PCM Empfängern kann das ganz anders aussehen. 
Einige Projekte im Internet, die sich darauf verlassen (Quadrocopter 
z.B.), laufen deshalb dann nur mit bestimmten Empfängern.

Gruß

Dirk

PS: Wie schreibt man hier im Forum eigentlich einem bestimmten Benutzer 
eine PM. Muss man da die ganze Benutzerliste durchblättern, bis man den 
gefunden hat, oder gibt es da eine elegantere Möglichkeit?

@ klausleidinger: Den Mega 644p gibt´s bei Reichelt

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Dirk Schmidt (disc)

>Ich habe bei mir eine Auflösung von mehr als 2500 Schritten realisiert
>(Servosignal von -100% bis 100%, Mega 644 mit 20MHz, Prescaler vom 16bit
>Timer für das Ermitteln der Zeitpunkte auf 8).

Wieviel Kanäle?

>Einige Projekte im Internet, die sich darauf verlassen (Quadrocopter
>z.B.), laufen deshalb dann nur mit bestimmten Empfängern.

Eben. Deshalb sollte man ggf. das Konzept überdenken. Wie wäre es, jedem 
Servosignal einen eigenen kleinen AVR zu spendieren? 8 Piner reichen 
locker. Der misst das Signal per ICP und schickt das Ergebniss per 
I2C/SPI/UART an einen Master. Das ist dann wasserdicht! Und man braucht 
auch keine 20 MHz.

MfG
Falk

Autor: El (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey vielen Dank für eure Anregungen!

Die Signale kommen alle von einem Empfänger. Ist somit tatsächlich nicht 
so schwierig wenn sie alle hintereinander kommen.
Ich werde es mal mit den Interupts probieren weil der uC noch andere 
zeitkritische Aufgaben zu erledigen hat.

Gruss El

Autor: Karl-j. B. (_matrixman_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Dirk Schmidt

Wenn du hinter dem Name von einer Antwort des Benutzers dem du eine PM 
schreiben willst auf den Link klickst kommst du direkt drauf :)

mfg Karl

Autor: Klaus L. (kllei)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OT @Dirk:
danke für die Info, aber bist Du sicher dass es sich um einen 644P 
handelt (keinen 644 im PU Gehäuse?)

Ich finde den 644P nicht bei Reichelt...

Der 644P (der neue mit 2 seriellen Schnittstellen) ist derzeit bei 
keinem Distri, nicht mal Spoerle und DigiKey, lieferbar.

CU,
Klaus

P.S. da OT, kannst Du gerne auf meinen Namen klicken und die PM mal 
ausprobieren ;-)

Autor: MNR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ATMega88 und verwandte haben auch PCINTs.

Autor: Dirk Schmidt (disc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Falk Brunner (falk)
Ich hab momentan 5 Eingänge und 5 Ausgänge. Das auf jeweils 8 zu 
erweitern ist kein Problem (im Prinzip ein define ändern, einmal neu 
übersetzen).

Ich hab das Konzept ja überdacht, daher die angesprochene Lösung. Mit 
Deiner Variante bräuchte ich da ja jede Menge Prozessoren. Mit etwas 
geringerer Auflösung würde es sicher mit weniger als 20 MHz laufen, ich 
brauche es aber möglichst genau. Ausserdem muss der Prozessor noch ein 
paar andere Aufgaben erledigen.

@ Karl-j. B. (matrixman)
Das hab ich auch schon bemerkt ;-). Was ist aber, wenn derjenige keinen 
Beitrag im aktuellen Thread hat? Nach bestimmten Benutzernamen (falls er 
irgendwo anders schon mal was geschrieben hat) kann man ja weder im 
Forum, noch in der Benutzerliste suchen?!?

Gruß

Dirk

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Dirk Schmidt (disc)

>geringerer Auflösung würde es sicher mit weniger als 20 MHz laufen, ich
>brauche es aber möglichst genau. Ausserdem muss der Prozessor noch ein
>paar andere Aufgaben erledigen.

Ja eben! Du willst es sehr genau mit wenig CPU-Belastung. Das geht nur 
dann, wenn SICHERGESTELLT ist, dass die Servopulse alle schön versetzt 
sind. Ist es das? So ein Tiny kostet keine 1,50. Vielleicht kan man auch 
mit einem tiny zwei oder drei Sigale erfassen, der muss sich ja um nix 
anderes kümmern.

MfG
Falk

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.