-
-
RC Car Geschwindigkeit und Lenkwinkel auslesen mit Atmel
Hallo zusammen. Ich will mein RC Car grade ein wenig aufmotzten, und zwar würde ich gerne die aktuelle Geschwindigkeit und den Lenkwinkel des Fahrzeugs auslesen wollen. Hat jemand eine Idee wie ich das am einfachsten machen könnte? Ich würde dazu gerne einen Atmel benutzen. Ich dachte daran mir einfach einen analogen potiwert o.ä. einzulesen... ginge das bei dem lenkwinkel nicht auch, dass man sich das pwm signal einliest? wenn ja wie? bin dankbar für alle vorschläge.
-
Erfahrener Benutzer
Robotik Einstein
Du meinst das PWM-Signal zum Ansteuern des Servos 'belauschen'?
Da hätt ich nur 2 Ideen:
- Das PWM-Signal über Impedanzwandler o. Schmitt-Trigger (zum Entkoppeln) auf ein RC-Glied und die Spannung zum A/D-Wandler.
- Das PWM-Signal über einen digitalen IN-Eingang analysieren.
Zu 2) dann
- Mit Timer1 kann man die Dauer eines externen Pulses messen.
Der Timer wird gestartet und im Input Capture Mode betrieben. Auf ein Ereignis (AnaComp oder Pin ICP1) wird der aktuelle Wert von Timer1 ins Input Capture Register (ICR1) gesichert, auf Wunsch ein Interrupt ausgelöst (SIG_INPUT_CAPTURE1). Timer1 muss wohl mit Prescaler betrieben werden, um die langen Zeiten einer Servo-PWM messen zu können ohne überzulaufen. - In regelmässigen abständen (TimerInterrupt) auf das Signal schauen, ob es sich geändert hat.
Bei b) hat man eine deutlich kleinere Auflösung als mit a) erreichbar ist, dafür ist Timer1 nicht ausschliesslich auf diese Aufgabe gebunden. Die Interrupt-Last ist höher als bei b)
Bei a) kann man die Auflösung evtl dadurch steigern, daß man den Timer erst vorlaufen lässt, zb 10ms, und erst danach startet mit dem InputCapture. Auch müsste es möglich sein, die Auflösung von Timer1 duch Aktivierung des Overflow-Interrupts (SIG_OVERFLOW1) zu erhöhen. Wird ab der Startflanke gezählt, dann ist die verstrichene Zeit proportional zu ICR1+2^{16}*#Timer1Overflows. Wobei es schwierig werden dürfte, wenn der Capture-Event währen der Erhöhung der Zählvariablen in der Overflow-ISR auftritt. *grübel* --> Geschachtelte Interrupts zulassen und Zugriff auf die Zählvariable atomar machen.
Wenn du den ganzen DutyCycle brauchst, dann danach die LOW-Phase ausmessen.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen