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
>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.
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.
>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.
jack: Es geht mir hier um die Auswertung der Sensoren, nicht um die Motoren.
>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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.