mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Codierung mit Lichtschranke auslesen


Autor: Martin B. (methusalem)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bei den digitalen Slotcarbahnen (Carrerabahn) werden bei manchen 
Systemen die Autos an codierten Leitkielen und Lichtschranken im Slot 
erkannt. Das ganze wird ja vermutlich auch über µC gelöst sein. Hier mal 
ein Link zu einer Grafik, die diese Codierten Leitkiele symbolhaft zeigt 
(http://home.pages.at/slotcar/userfiles/GuideBladeCodes.gif).

Kann mir mal jemand erklären wie man unterschiedliche Leitkiele mit 
jeweils gleicher Anzahl an Löchern erkennt. Wird da die Zeit gemessen 
(Beginn Leitkiel - erstes Loch - zweites Loch - ... - Leitkiel Ende)?

Da sowas ja Geschwindigkeitsabhängig ist, müsste man da ja mit Faktoren 
arbeiten.
Irgendwie kann ich mir noch nicht vorstellen, das dieses System bei den 
Geschwindigkeiten funktioniert. Schließlich ist ein solcher Leitkiel nur 
2 oder 3 cm lang. Schafft das ein µC?

Gruß
Martin

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sofern die Kerben gleich breit sind, muss man ja nur die Zeit zwischen 
den Kanten messen.
Anhand der einzelnen Zeiten kann man dann die Position der Kodiermarken 
erkennen.
Durch die konstante Lochbreite kann man dann sogar noch die 
Geschwindigkeit messen...

>Schafft das ein µC?
Der wird damit garantiert nicht überfordert sein.
Wer soll das sonst schaffen?

Wie schnell sind denn die Autos maximal?
Daraus liesse sich dann auf die notwendige Abtastfrequenz schliessen.

Autor: Uwe Nagel (ulegan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timer mit Capture-Funktion sollten damit keine Probleme haben. Sagen wir 
mal, das Auto fährt 2000mm/s und wir messen immer 'wenn es dunkel wird'.
Da liegt der kleinste Abstand so bei 5mm, das dauert dann 1/400s oder 
2,5ms. Ein mit nur 1MHz getakteter Timer zählt in der Zeit immerhin bis 
2500.

Autor: Martin B. (methusalem)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

OK, nur damit ich das richtig verstehe. Man würde in einem solchen Fall 
tatsächlich die Zeiten messen, die der Lichtstrahl unterbrochen ist. An 
diesen Zeiten, kann man dann die Codierung erkennen?

Damit die Geschwindigkeit egal ist, wird das Verhältniss von Licht zu 
Unterbrechung benutzt. Das ist ja immer gleich, oder?

Martin

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde das in etwa so machen:
Im ersten Schritt werte ich mal überhaupt nichts aus, sondern
beschäftige mich nur mit der Datenaufzeichnung:
  Sobald die Lichtschranke dunkel wird, ist offensichtlich
  der Kiel in die Lichtschranke eingetreten. Ab da gehts los.
  Mit einer bestimmten Frequenz wird regelmässig die Lichtschranke
  abgetastet, bis entweder
  * eine vordefinierte Zeit abgelaufen ist
     Dann steht das Auto zufällig in der Lichtschranke und ich
     kann keinen Wert auslesen
  * Die Lichtschranke eine bestimmte Mindestzeit wieder hell war.
    Dadurch weiss ich, dass der Kiel jetzt komplett durch ist.

Interessant ist jetzt nur der 2. Fall.
Die Datenaufzeichnung würde ich mal postulieren, mache ich so:
Ich weiss ja, dass da regelmässige Lichtwechsel kommen müssen.
Ich messe also die Zeit bis zum ersten Dunkel/Hell Übergang,
dann bis zum nächsten Hell/Dunkel Übergang, etc. Wie gesagt:
Wenn beim Warten auf den Übergang Hell/Dunkel ein Timeout
auftritt, dann ist der Kiel durch.
Wie auch immer die Summe aller Zeitmessungen sagt mir wie lang
der Kiel insgesammt gebraucht hat um durch die Lichtschranke zu
flitzen. Damit kann ich die gemessenen Zeiten auf die Kiellänge
normieren, habe damit also die unterschiedlichen Geschwindigkeiten
schon mal rausgerechnet.
Der Rest ist dann einfach: Je nachdem wo die Dunkel/Hell Übrgänge
in normierter Form liegen, kann ich dann die Bits detektieren.

Das ist jetzt alles aus dem Bauch raus niedergeschrieben. Aber
so oder so ähnlich würde ich das angehen.

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie Uwe schon schrieb: Dafür sollte man die Input-Capture-Funktion des 
Controllers verwenden (also einen Controller auswählen, der diese 
Funktion interstützt - das machen AFAIK die meisten ATmega, um bei AVR 
zu bleiben...)

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.