Forum: Mikrocontroller und Digitale Elektronik Impulsverlängerung von [2-40 ms] auf > 20ms


von inina (Gast)


Lesenswert?

Hallo,

als kleine Bastelei habe ich einen Geschwindigkeitsmesser gebaut.

Er besteht aus 2 Lichtschranken, die an eine USB-Maus angeschlossen 
sind. Lichtschranke 1 löst einen Klick der linken und Lichtschranke 2 
einen der rechten Maustaste aus.

Mit einer Software messe ich die Zeit zwischen Links- und Rechtsklick 
und berechne das Tempo.

Soweit funktioniert alles.

Das Problem ist, dass ab ca. 30 km/h der Impuls der Lichtschranke zu 
kurz ist, um einen Mausklick auszulösen.
Grob überschlagen sind es nur 2-6 ms.
USB arbeitet mit einer Polling-Rate von 125 MHz. Signale die kürzer als 
8 ms, gehen deshalb vermutlich verloren.
Ich suche also eine Möglichkeit den Impuls zu verlängern. Der variable 
Eingangsimpuls von etwa 2 bis 40 ms soll mindestens 20 ms lang schalten.

Über Hilfe und Tipps, wie ich dies am Einfachsten anstellen kann, wäre 
ich sehr dankbar.

Gruß
inina

PS: Dass der Impuls für die USB Maus zu kurz ist, ist nur eine starke 
Vermutung.
Die Optokoppler (4N35), die ich zwischen Lichtschranke und Maustasten 
gesetzt habe, schalten im Nanosekunden-bereich, oder?
Dann bliebe keine andere Fehlerquelle übrig, Status LEDs (parallel 
geschaltet zu den Optokopplern) bestätigen, dass die Lichtschranke auch 
schnelle Objekte erfasst.

von Ingo L. (corrtexx)


Lesenswert?

inina schrieb:
> Signale die kürzer als
> 8 ms, gehen deshalb vermutlich verloren.
1/125MHz => 8ns

von Max H. (hartl192)


Lesenswert?

inina schrieb:
> Über Hilfe und Tipps, wie ich dies am Einfachsten anstellen kann, wäre
> ich sehr dankbar.
Mit einem Monoflop z.B. aus einem NE555

von ich (Gast)


Lesenswert?

Ein nicht retrigerbares Monoflop sucht du.
Bald kommen die leute die sich mit dem NE555 auskennen nicht so wie ich.
Vll. langt ja auch ein Transistor mit 2  Widerständen + C
S------|
+------T---R1----|------|->Auswertung
                 C      R2
-----------------|------|

Müsste aber genauer betrachtet werden, da R1 und R2 und C so liegen 
müssen, dass wärend Transistor leitend ist genügend Ladung auf den C 
gebracht werden, dass erst nach den mindest 20ms entladen über R2 und 
der Auswertung unter die Schaltschwelle liegt.
MfG
ich

von OldMan (Gast)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

inina schrieb:

> USB arbeitet mit einer Polling-Rate von 125 MHz. Signale die kürzer als
> 8 ms, gehen deshalb vermutlich verloren.

Nope.
Was du bemerkst, ist die Tastenentprellung, die dafür sorgt, dass alle 
Pulse kleiner als 8ms unterdrückt werden. Das ist so gewollt, weil kein 
Mensch in der Lage ist, eine Maustaste so schnell zu drücken. Auf der 
anderen Seite Prellen aber mechanische Tasten, d.h. bei einmaligem 
Drücken kann es sein, dass der Computer in der Maus mehrere kurze 
schliessen-öffnen-schliessen Ereignisse registriert. Mit der Annahme, 
das alles was kürzer als (offenbar bei dir) 8ms ist, kein reguläres 
Tastendrücken sein kann, filtert der diese kurzen Pulse aus.

Mit USB hat das nicht wirklich was zu tun, sondern damit einen 
zuverlässigen mechanischen Tastendruck zu bekommen, bei der der Benutzer 
nicht nach einiger Zeit wahnsinnig wird, wenn er einmal drückt und das 
Programm sich so verhält, als hätte er ein paar mal gedrückt.

von inina (Gast)


Lesenswert?

Karl Heinz schrieb:
> Was du bemerkst, ist die Tastenentprellung, die dafür sorgt, dass alle
> Pulse kleiner als 8ms unterdrückt werden.

Danke für die gute Erklärung! Das macht natürlich Sinn.

Das heißt, das Problem bleibt, auch wenn ich eine eine falsche Ursache 
vermutet hatte.


Ein Monoflop hilft also.
Im Datenblatt des genannten NE555 finde ich als Zeitangaben nur 
"Output-pulse rise time" (und ...fall time) mit jeweils max 300 ns.
Gibt das die Länge des Impulses an? Wie komme ich dann auf 10-20ms?

Bitte habt Verständnis dafür, dass ich nur Laie bin. Könnte mir bitte 
jemand genau nennen, wie ich das Intervall des Monoflops bestimmen kann.

Die Lichtschranke arbeitet mit 12 V, die Maustasten mit etwa 3,2 V.
Den Monoflop sollte ich dann vor den Optokoppler setzen, oder?

von Fabian H. (hdr)


Lesenswert?

Ich denke nicht, dass eine Maus so oft gepollt wird, das eine Software 
die Zeit zwischen rechts & links klicken genau bestimmen kann.
Meiner Meinung nach ist die Umsetzung zum scheitern verurteilt.

von Max H. (hartl192)


Lesenswert?


von R H (Gast)


Lesenswert?

inina schrieb:
> Er besteht aus 2 Lichtschranken, die an eine USB-Maus angeschlossen
> sind. Lichtschranke 1 löst einen Klick der linken und Lichtschranke 2
> einen der rechten Maustaste aus.

ich würde die beiden Lichtschranken weiter auseinander setzen, somit 
können höhere Geschwindigkeiten gemessen werden.

oder eine alte nichtoptische Maus mit Kugel verwenden -> einen 
Drehencoder davon nehmen und in der Software den "onMouseMove" 
dedektieren. Wobei hier evtl. Ungenauigkeiten durch das Timing 
entstehen.

Besser eine eigenständige Hardware mit Mikrocontroller, der dann das 
Ergebnis nach der Messung per USB an den Rechner schickt. Hierbei können 
vielleicht dann noch gleich 3 Lichtschranken für 2 Messungen verwendet 
werden, um Fehler zu minimieren.

von inina (Gast)


Lesenswert?

Max H. schrieb:
> Schau dir mal das an:
> http://www.elektronik-kompendium.de/sites/slt/0310121.htm

Danke, das könnte ich gerade so verstehen. Wenn ich herausgefunden habe, 
welche Teile ich brauche, werde ich mich mit Bitte um Bestätigung 
melden.



R H schrieb:
> ich würde die beiden Lichtschranken weiter auseinander setzen, somit
> können höhere Geschwindigkeiten gemessen werden.
Der Abstand zwischen den Lichtschranken ist nicht das Problem. Jede 
Lichtschranke für sich schaltet zu kurz, da  das Objekt den Lichtstrahl 
nur für wenige Millisekunden unterbricht.

von J.J. (Gast)


Lesenswert?

Das Prinzip mit dem 555 klappt!
Hatten wir Anfang der 90ziger auch gemacht,
war alles recht teuer.

Jetzt wäre ein Controller besser.
Dann reicht die PC Software aber nicht alleine.

von c-hater (Gast)


Lesenswert?

inina schrieb:

> Ein Monoflop hilft also.

Ja.

> Im Datenblatt des genannten NE555 finde ich als Zeitangaben nur
> "Output-pulse rise time" (und ...fall time) mit jeweils max 300 ns.
> Gibt das die Länge des Impulses an?

Nein. Das gibt die Steilheit der Flanken des Signals an. Hier ist kürzer 
in aller Regel besser. 300ns-Flanken können schnelle Folgelogik schonmal 
während der Flanke zum Schwingen bringen. Da wird dann aus einer Flanke 
ein Burst hochfrequenter Signale. So ein Effekt sollte aber in deiner 
konkreten Anwendung keinerlei Problem darstellen, denn wir wissen ja 
bereits, daß die Folgeschaltung zu flinke Signale super unterdrückt...

 Wie komme ich dann auf 10-20ms?

Indem du den 555 mit Widerständen und Kondensatoren als entsprechender 
Zeitkonstante beschaltest. Wie man deren Werte festlegt, steht im 
Datenblatt.

von inina (Gast)


Lesenswert?

Auf einer anderen Seite wurde mir eine einfachere Lösung vorgeschlagen 
(Dank an "derschwarzepeter"):

Mit einer Diode und einem Kondensator kann man den Impulsverlängern, die 
Kapazität bestimmt die Verlängerung.

Dass der Impuls immer verlängert wird, ist einem meinem Fall egal.

Mir leuchtet das ein und es lässt sich leicht umsetzen. Spricht etwas 
dagegen?

von m.n. (Gast)


Lesenswert?

Fabian H. schrieb:
> Ich denke nicht, dass eine Maus so oft gepollt wird, das eine Software
> die Zeit zwischen rechts & links klicken genau bestimmen kann.

Das sehe ich auch so. Die Ergebnisse werden nicht stabil sein.
Ich weiß ja nicht, welche Objekte und welche Geschwindigkeiten erfaßt 
werden sollen, hätte aber zwei Vorschläge für Dich.
Beitrag "Stoppuhr – Geschwindigkeit – Pulsweite mit Atmega88"
http://www.mino-elektronik.de/7-Segment-Variationen/LCD.htm#lcd6

von c-hater (Gast)


Lesenswert?

inina schrieb:

> Mit einer Diode und einem Kondensator kann man den Impulsverlängern, die
> Kapazität bestimmt die Verlängerung.

Nein, zumindest nicht alleine. Da ist immer mindestens noch eine zweite 
Größe im Spiel, nämlich die Impedanz der Quelle des Stromes, die die 
Kapazität des Kondensators lädt bzw. entlädt.

Das beides zusammen ergibt erst eine Zeitkonstante. Genau deswegen 
braucht man auch beim 555 mindestens zwei zeitbestimmende Bauelemente, 
einen Widerstand und einen Kondensator. Der Vorteil der Anwendung eines 
555 ist: du kannst beides selbst bestimmen und wirst deshalb recht genau 
das erwartete Ergebnis bezüglich des Zeitverhaltens bekommen.

Der Nachteil der Bastellösung des Scheitans: Du kennst eine Hälfte der 
relevanten Größen garnicht. Erfahrene Elektroniker kennen sie 
wenigstens näherungsweise und können deshalb solche Bastellösungen ggf. 
benutzen, aber für Noobs wie dich ist es sicher sinnvoller, auf 
Bastellösungen zu verzichten. Zumindest bis das eigene Wissen reicht, um 
deren Möglichkeiten und Grenzen korrekt einschätzen zu können...

von inina (Gast)


Lesenswert?

Auch wenn es schwer fällt, da ich schon einige Zeit investiert habe, 
muss ich wohl eingestehen, dass ihr Recht habt und es mit Maus und PC 
nicht funktioniert.

m.n. schrieb:
> Ich weiß ja nicht, welche Objekte und welche Geschwindigkeiten erfaßt
> werden sollen, hätte aber zwei Vorschläge für Dich.
> Beitrag "Stoppuhr – Geschwindigkeit – Pulsweite mit Atmega88"
> http://www.mino-elektronik.de/7-Segment-Variatione...

Das scheint genau das zu sein, was ich suche!
Mal ganz naiv gefragt: Den Schaltplan kann ich 1:1 nachbauen, ohne 
großes Hintergrundwissen, und der Geschwindigkeitsmesser würde 
funktionieren?

Den stumpfen Nachbau und das Aufspielen des Programms auf den 
Controller, traue ich mir zu.

von m.n. (Gast)


Angehängte Dateien:

Lesenswert?

Die Schaltung mit dem ATmega kann man auf Lochraster aufbauen; die paar 
Leitungen sind schnelle verlegt.

Ferner kann man das Programm auch auf einem Arduino UNO anpassen und 
aufspielen. Sofern man kein Display braucht, braucht man außer den 
Signaleingängen nichts weiter zu verdrahten. Die Ergebnisse kann man per 
RS232->USB an einen PC senden. Bei Bedarf könnte ich das Programm 
anpassen.

Für die Schaltung mit ATtiny44 + 4x7-Segment-LCD habe ich noch eine 
unbestückte Leerplatine, könnte nachfertigen lassen oder Du machst die 
Platine selber (eagle-.brd-Datei kann ich Dir zuschicken). Die Schaltung 
eignet sich für Batteriebetrieb ggf. auch mit autom. Abschaltung.

Dann habe ich noch eine Schaltung mit STM32F407, wofür auch eine 
Leerplatine verfügbar ist und die 2x16 -> 4x20 LC-Anzeigen ansteuert. 
Damit kann man Zeiten mit ca. 6 ns Auflösung messen. Bislang habe ich 
nur ein Programm für einen 4-kanaligen 8-stell. reziproken 
Frequenzzähler. Aber die Umstellung auf Zeitmessung ist recht einfach. 
Irgendwann stelle ich Programm + Schaltung in die Codesammlung.
Dies nur, falls aus der 'kleinen Bastelei' mal etwas richtig 'Großes' 
werden soll.
Aus Spaß zeig ich mal ein Foto der Anzeige, wie sie gerade auf dem Tisch 
liegt :-)

von inina (Gast)


Lesenswert?

m.n. schrieb:
> Für die Schaltung mit ATtiny44 + 4x7-Segment-LCD habe ich noch eine
> unbestückte Leerplatine, könnte nachfertigen lassen oder Du machst die
> Platine selber (eagle-.brd-Datei kann ich Dir zuschicken). Die Schaltung
> eignet sich für Batteriebetrieb ggf. auch mit autom. Abschaltung.

Vielen Dank für dein Engagement!


Vielleicht sollte ich erstmal erklären, was der Einsatzzweck ist.

Ich organisiere mit Freunden ab und zu ein Juxturnier für Kegelclubs aus 
meinem Dorf aus. Nun wollte ich fürs nächste Turnier den 
Geschwindigkeitsmesser als Gimmick basteln.
Da wir über einen Laptop 3 Kameralivebilder in den Schankraum 
übertragen, wollte ich die Tempo Anzeige ursprünglich nur mit Software 
ins Fernsehbild einblenden. Die Lösung mit 7-Segment LED hätte den 
Vorteil, dass sie dauerhaft auf der Bahn bleiben könnte.

Wenn man zusätzlich die Messungen an den PC übertragen könnte, wäre es 
perfekt. So ließe sich eine Bestenlisten erstellen und zu jeder Messung 
ein Foto speichern.

Würdest du uns die Leerplatine für diesen Zweck überlassen? Für die 
Kosten würde ich natürlich aufkommen.

von m.n. (Gast)


Lesenswert?

inina schrieb:
> Die Lösung mit 7-Segment LED hätte den
> Vorteil, dass sie dauerhaft auf der Bahn bleiben könnte.
>
> Wenn man zusätzlich die Messungen an den PC übertragen könnte, wäre es
> perfekt.

Die Schaltung mit ATtiny44 hat keinen Datenausgang zum PC!

> Würdest du uns die Leerplatine für diesen Zweck überlassen? Für die
> Kosten würde ich natürlich aufkommen.

Kannst Du haben; schreib mir eine Nachricht.

von bingo (Gast)


Lesenswert?

Für Dich wäre der CD4538 interessant, das ist ein Dual Monoflop in CMOS, 
den kannst Du direkt mit den 12V Deiner Lichtschranke betreiben. Die 
Optokoppler dann davor.

von M. N. (Gast)


Lesenswert?

m.n. schrieb:
> Ferner kann man das Programm auch auf einem Arduino UNO anpassen und
> aufspielen. Sofern man kein Display braucht, braucht man außer den
> Signaleingängen nichts weiter zu verdrahten. Die Ergebnisse kann man per
> RS232->USB an einen PC senden. Bei Bedarf könnte ich das Programm
> anpassen.

Dies habe ich jetzt gemacht.
Beitrag "Re: Stoppuhr – Geschwindigkeit – Pulsweite mit Atmega88"
Monoflops braucht die Schaltung dann nicht mehr ;-)

von Emanrov N. (inina)


Lesenswert?

Vielen Dank!

Ich habe den Arduino UNO direkt bestellt und werde berichten, ob es 
funktioniert.

Eine Frage hätte ich noch zum Anschluss der Lichtschranken.
Die Spannung der Signalleitung beträgt 11,2 V. Sollte ich die Spannung 
über einen Spannungsteiler reduzieren oder kann ich beim Optokoppler 
bleiben?
Dann würde ich Arduinos 5V mit einem 1kOhm Widerstand an Pin 5 des 4N35 
schalten und AD2 an Pin 6.

von Karl H. (kbuchegg)


Lesenswert?

Dennis V. schrieb:

> Eine Frage hätte ich noch zum Anschluss der Lichtschranken.
> Die Spannung der Signalleitung beträgt 11,2 V. Sollte ich die Spannung
> über einen Spannungsteiler reduzieren oder kann ich beim Optokoppler
> bleiben?

wenn du die Optokoppler schon hast, kannst du sie natürlich benutzen. 
Technisch brauchen würdest du sie nicht.

Die Schaltzeiten der Optokoppler sind sicherlich schnell genug, um dir 
die Messung nicht zu versauen.

Was hast du eigentlich für Lichtschranken?
Sehr oft haben die ja einen Open Collector Ausgang, so dass man 
eigentlich überhaupt nichts braucht, um die an einen AVR anzuschliessen.

: Bearbeitet durch User
von Emanrov N. (inina)


Lesenswert?

Die Lichtschranken sind SICK WL160. Im Datenblatt steht "PNP: Open 
Collector: Q".
Heißt das, ich kann Q direkt an den Eingang des Arduino anschließen?

(Datenblatt der Lichtschranke: 
https://www.mysick.com/PDF/Create.aspx?ProductID=56228&Culture=de-DE )

von M. N. (Gast)


Lesenswert?

Dennis V. schrieb:
> Die Spannung der Signalleitung beträgt 11,2 V. Sollte ich die Spannung
> über einen Spannungsteiler reduzieren oder kann ich beim Optokoppler
> bleiben?

Bau die Optokoppler mit ein!
Zum einen liefern Industrie-Lichtschranken keinen guten '0'-Pegel und 
zum anderen hast Du eine sichere Entkopplung der 12V-Versorgungsspannung 
vom µC-Eingang. Ein versehentlicher "Feinschluß" schießt Dir sonst das 
ganze Arduino-Board ab, wenn nicht sogar noch den PC über die 
USB-Schnittstelle.

von Emanrov N. (inina)


Lesenswert?

Der Arduino UNO ist heute schon angekommen.

Ich habe ihn gleich angeschlossen, das Programm übertragen und getestet:
Es funktioniert perfekt! (Nur die Ausgabe der Einheit muss ich noch aus 
dem Code entfernen, für mein Projekt.)

Vielen Dank, m.n., du hast mir wirklich sehr geholfen!

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.