www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Viele PWM Signale genau messen - wie?


Autor: Sebastian B (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

bin gerade am Ueberlegen wie ich die Elektronik fuer einen zukuenftigen 
autonomen Roboter anlegen koennte.

Ich moechte mehrere Ultraschall-Sensoren einsetzen, SRF05 oder aehnlich, 
dazu einen klassischen RC-Empfaenger aus einem Modellauto. Da koennten 
also leicht 6 bis 8 PWM Kannaele zusammen kommen, die ich recht genau 
messen muss.

Bei der Fernbedieung ist die Periodenzeit etwa 2ms bei denen ich gerne 
mind. 128 Schritte unterscheiden moechte. Beim Ultraschall 30ms, die 
aber in mind. 500 Schritte aufgeloest werden muessen um vernuenftige 
Genauigkeit zu erreichen.

Wie kann ich das anstellen?
Ich war am Ueberlegen einen der neuen AVRs (z.B. ATmega88 oder 
ATmega324P) mit Pin-Change Interrupts zu benutzen und einfach alle 
Signale an einen Port zu haengen und dann in der Interrupt-Routine 
abzufragen welches Signal sich gerade geaendert hat. Wenn aber z.B. 
mehrere Ultraschall-Sensoren das selbe Objekt erfassen sind nur sehr 
kleine Laufzeitunterschiede zu erwarten (die aber zur Lokalisierung 
enorm wichtig sind). Wenn der AVR dann noch in der Interrupt-Routine 
haengt werd ich die kaum messen koennen. Hat jemand nen bessern 
Vorschlag? FPGAs wuerde ich gern vermeiden, gibts vielleicht geeignete 
externe Timerbausteine?

Vielen Dank
Sebastian

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>bin gerade am Ueberlegen wie ich die Elektronik fuer einen zukuenftigen
>autonomen Roboter anlegen koennte.

Das Thema ist zu komplex, um es einfach so auf einmal abzuhandeln.

Erstmal mußt Du einen fahrbaren Untersatz haben: 2 Motoren sind mittels
PWM anzusteuern.
Wenn das funktioniert (3 Wochen) kannst Du Dich um die Ansteuerung
(und Auswertung) des SFR05 kümmern (wohlgemerkt eines SFR05! Mehrere
ist dann wieder ein Kapitel für sich).

Also, so eben mal einen µ auswählen und loslegen is nich.




Autor: Sebastian B (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jack:
Das man das nicht einfach so baut ist mir schon klar. Dewegen bin ich ja 
am planen und noch nicht am Loeten :-)

Das Chassis ist ja erstmal egal, das existiert schon. Es geht mir 
wirklich erstmal darum das ich mein CPU-Board schon so auslegen kann, 
dass ich irgendwann alle Sensoren anschliessen kann. Bauen und 
Programmieren anfangen werd ich natuerlich mit einer Minimalausstattung. 
Ich moechte aber nicht fuer jede Erweiterung eine neue Platine entwerfen 
muessen. (Ok, das wird sich wahrscheinlich sowieso ergeben, aber man 
kann ja zumindest versuchen vorausschauend zu arbeiten ;-).

Ich moechte sichergehen das ich auch bei maximales Sensorausstattung 
noch alle Daten genau genug erfassen kann.

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Das Chassis ist ja erstmal egal, das existiert schon.

Du hast also bereits zwei Motoren, die mit PWM gesteuert werden?
Mit welchem µ-Controller?

Es ist garnicht so schlecht, die Motorsteuerung mit einem eigenen 
kleinen
µC aufzubauen, der Hauptprozessor braucht dann nur mittels I2C
Befehle an die Motorsteuerung zu senden.

Autor: Sebastian B (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jack:

Es geht mir hier um die Auswertung der Sensoren, nicht um die Motoren.

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Es geht mir hier um die Auswertung der Sensoren, nicht um die Motoren.

Na gut, dann fangen wir mal mit dem SFR05 an:
Mit PWM hat das nämlich gar nichts zu tun. Du mußt den Baustein starten
und dann die Zeit messen, bis das Echo zurückkommt. Kannst Du das
programmieren?

Autor: Sebastian B (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jack:
Naja, fuer nur einen oder zwei Sensoren kann ich ja bei den MegaAVRs 
einfach direkt die Timer-Eingaenge vom 16-bit Timer verwenden oder 
meinentwegen auch die Interrupt-Eingaenge in denen ich einen laufenden 
Timer abfrage (der sinnigerweise beim Absender des Ultraschall-Pulses 
zurueckgesetzt wird).

Nun moechte ich aber mehr Sensoren anschliessen als ich direkt an INT0 
und INT1 anschliessen kann. Das wurde ich z.B. so bewerkstelligen, dass 
ich in einem Timer-Interrupt jeweils die Eingangspins polle. Oder eben 
bei den ganz neuen AVRs den Pin-Change Interrupt benutze. Meine Sorge 
war eben das ich waehrend der Laufzeit dieser Interrupt-Routine keine 
weiteren Signale von den Sensoren auswerten kann und mir damit die 
zeitliche Aufloesung in den Keller geht.

Hab mir das gerade nochmal durchgerechnet, fuer den Ultraschall-Kram 
sollten 50us Aufloesung reichen. Das ergibt bei 16Mhz 800 Zyklen und 
sollte dicke reichen fuer die Interrupt Routine und auch noch Rechenzeit 
fuer die Mainloop uebrig lassen. Wenn ich die Fernsteuersignale aber 
noch mit sinniger Aufloesung Erfassen will braeuchte ich schon 1/127 ms 
Aufloesung was nur 126 Zyklen uebrig laesst was mit Mainloop zu knapp 
ist. Da muss ich mur also wohl was anderes ausdenken oder mit weniger 
Aufloesung zufrieden sein.

Richtig gedacht soweit?

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.