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


von Sebastian B (Gast)


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

von jack (Gast)


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.




von Sebastian B (Gast)


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.

von jack (Gast)


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.

von Sebastian B (Gast)


Lesenswert?

jack:

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

von jack (Gast)


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?

von Sebastian B (Gast)


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?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.