PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Drehzahlmesser mit CNY70 und atmega32



AlexJ
18.05.2008, 00:09
Guten Abend,
im Rahmen eines Schulprojekts bauen wir ein autonom-fahrendes spielzeug Auto, das einen Parkour auf Zeit durchfahren soll, im Rahmen eines Wettrennens.

Ein Feature, das ich gern hätte, wäre eine Drehzahlmessung der beiden Reifen hinteren Reifen. Diese drehen im allgemeinen nicht durch.


Die letzten 2 Stunden habe ich via Google und hier im Forum versucht, mir selbst die Grundlagen dafür klar zu machen, wie ich das Drehzahlmessen realisiere, aber all die Datasheets und Tutorials (die nur zum teil meiner Situation entsprechen) sind letztenendlich spanisch für mich.

Was ich bisher geplant hab:
http://img529.imageshack.us/img529/7039/reifennj8.th.jpg (http://img529.imageshack.us/img529/7039/reifennj8.jpg)
Das kleine blaue Kästchen stellt dabei den o.g. Sensor dar.
Auf der Innenseite der weißen "Felgen" (im bild rot dargestellt) sollen ein paar schwarze markierungsstreifen sein, die vom sensor registriert werden können.
Das ganze soll dann für beide Hinterreifen funktionieren.

Ich weiß, dass es irgendwie 2 Möglichkeiten zum auslesen gibt mit dem Atmega32(zumindest 2 hat mir mein Lehrer gesagt).
Einmal via Interrupt(versteh ich) und die 2. Möglichkeit war (irgendwie), dass der die Ausgabe(HIGH und LOW?) des Sensors von der Hardware mit einem Timer (oder so) hochgezählt wird und man das dann irgendwie anders macht.

Wie man merkt hab ich trotz meiner recherchen kaum etwas verstanden :)


Wo und Wie muss ich die beiden Sensoren an den Controller anschließen ?


Vielen Dank im Voraus

Besserwessi
18.05.2008, 10:28
Es gibt mehrere Möglickeiten, die sinnvollteren sind:
1) der ICP Pin : dort wird der Zeitpunkt der Steigenden oder fallenden Flanke gemessen und ggf, ein Interrupt ausgelöst. Dieses Verfahren ist gut, wenn man sehr schnell, d.h. nach jeder Umdrehung die Drehzahl messen will. Außerdem kreigt man eine hohe Auflösung.

2) die Timer pint T0,T1 (ggf. T2 ?): dort werde in Hardware vom Timer die Flanken gezählt. Dieser Weg ist gut wenn es um eine Einfache Wegmessung geht oder die Frequenz (Drehzahl) so hoch ist, das das erste Verfahren nicht mehr geht. Da das obere Verfahren bis etwa 1/100 der Taktfrequenz geht, wird die Frequenzgrenze für normale Drehzahlmessungen kaum erreicht.

Den CNY70 kann man über einen Pullup an einen Digitalen Eingang anschließen. Der Widerstandswert hängt vom Strom durch die Sendediode sowie Abstand und der Farbe der Markierungen ab.

oberallgeier
18.05.2008, 11:47
Hi, AlexJ,

... Einmal via Interrupt(versteh ich) und die 2. Möglichkeit war (irgendwie), dass der die Ausgabe(HIGH und LOW?) des Sensors von der Hardware mit einem Timer (oder so) hochgezählt wird und man das dann irgendwie anders macht.Ich hab aktuell eine Lösung, mit der ich direkt am Motor, vor dem Getriebe, mit einer Lichtschranke messe. Als Lichtschranke verwende ich ein Miniaturding, die Sharp GP1S096HCZ, weil ich nur recht beschränkt Platz habe. Die Hardware habe ich hier (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=344432#344432) vorgestellt. Damit bekomme ich gute, deutliche Signale (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=344795#344795) bei jeder Unterbrechung der Lichtschranke. Die Signale der beiden Motoren führe ich bei meinem mega168 an den INT0 und INT1 (bei Deinem mega32 wären das Pin16 und Pin17, bzw. PD2 und PD3) und zähle in der Interruptroutine meinen internen Zeittakt von 50 µs. Das gibt mir die Dauer zwischen zwei steigenden Flanken. Den Code könnt ich Dir ja posten. Der läuft auf dem mega168. Den müsstest Du selbst für den m32 umstricken (Registerinitialisierung des Timers etc).

Dies ist allerdings keine Version mit einer Reflexlichtschranke, die Du wohl geplant hast. Diese Version mit Reflexlichtschranke hatte ich nie getestet - hab also auch keine Ahnung davon.