Forum: Mikrocontroller und Digitale Elektronik Zeitmessung mit Lichtschranken, Einplatinen-Rechner


von raspberry (Gast)


Lesenswert?

Hallo, im Prinzip muss ich etwas ähnlich wie in diesem Thread lösen:
"Zeitmessung mit zweier Lichtschranken" 
Beitrag "Zeitmessung mit zweier Lichtschranken"

Nur brauche ich eine Genauigkeit von +/- 1µs.

Später sollen mithilfe der gemessenen Werte gewisse Berechnung statt 
finden, dies wird entweder auf PC oder einem Single-Board-Computer 
(bspw. Raspberry Pi) durchgeführt.
Die ganze Geschichte nur mit dem Single-Board-Computer zu machen hab ich 
ad acta gelegt, da Betriebssystem wie Linux wohl zu ungenau sind 
aufgrund Multi-Tasking.

Eine Idee war einen Arduino Uno als Messknecht zu verwenden, aber der 
ist wohl auch zu ungenau und das Projekt hier ist mir etwas suspekt:
http://www.electricrcaircraftguy.com/2014/02/Timer2Counter-more-precise-Arduino-micros-function.html

Es wird wohl daher auf einen Hardware-Timer-Baustein ala DP8670a 
rauslaufen:
http://www.ti.com/general/docs/lit/getliterature.tsp?genericPartNumber=dp8570a&fileType=pdf

Habt ihr noch andere Ideen?

von Joe F. (easylife)


Lesenswert?

Wie lang ist denn die zu messende Zeitspanne maximal?

Ein 1 MHz Oszillator und ein SN74LV8154 könnten helfen.

Die erste Lichtschranke resettet den Counter, die 2. übernimmt den 
Counterwert ins Ausgaberegister (aufpassen mit der jeweils benötigten 
Flanken-Polarität).

Wenn man keinen 8-Bit Port zum Auslesen frei hat, könnte man noch ein 
Schieberegister dahinter schalten, um das Byte seriell auszulesen.

Wenn man nur einen der beiden 16-bit counter benutzt, reicht das für 
65ms Zeitspanne, kaskadiert kann man Zeitspannen bis 71 Minuten messen.

http://www.ti.com/lit/ds/symlink/sn74lv8154.pdf

: Bearbeitet durch User
von raspberry (Gast)


Lesenswert?

"Wie lang ist denn die zu messende Zeitspanne maximal?"

Größenordnung 1200µs.

von fop (Gast)


Lesenswert?

Hm, die AVRs haben eigentlich sogenanntes Input Capture. 1 µs Auflösung 
bedeutet, dass der Timer mit 1 MHz laufen muss. Auch noch kein Unding. 
Hardwaremässig waren das 16-Bit-Timer. Macht ca. alle 65,5 ms einen 
Timerüberlauf. Ich habe das aber auch schon mal per Software auf 32 Bit 
aufgestockt. Dann bist Du so bei etwa 71,5 Minuten. Beachte, dass der 
von Dir genutzte AVR 2 ICP Einheiten haben sollte (für Deine 2 
Lichtschranken).
Wenn beide den selben Timer benutzen um so besser. Aber 16-bittig sollte 
er schon sein. Da ich bisher noch keine Aktien in USB auf 
Mikrokontrollern hatte, würde ich die Daten per SPI zum RasPi 
übertragen.
Wichtig für die Genauigkeit ist dann noch der Takt des AVR. Schön wenn 
Quarzgenauigkeit ausreicht. Gut ist auch eine Zweierpotenz als 
Vielfaches des gewünschten Timertakts von 1 MHz. Dann noch mal schauen, 
ob der manchmal zuschaltbare Glitch-Filter Deine Genauigkeit nicht 
stört. Der Rest wird dann vermutlich im Analogteil verschusselt.
Hoffe ja nicht, dass Du Deinen Quarz temperaturgeregelt betreiben musst, 
wobei per GPS Empfänger die Abweichung des Quarzes gemessen wird und so 
der Temperatursollwert ermittelt wird. Aber dann musst Du wohl auch die 
Lichtschranken mit der Mikrometerschraube aufstellen. ;-)

von m.n. (Gast)


Lesenswert?

Beitrag "Stoppuhr – Geschwindigkeit – Pulsweite mit Atmega88"

Etwas weiter unten ist eine Version für Arduino UNO. Datenausgabe per 
LCD und/oder USB-Anschluß. Platinen für den ATmega88 habe ich nicht mehr 
und würde heute einen STM32F4xx mit angepasstem Programm verwenden: 
http://mino-elektronik.de/FM_407/fmeter_407.htm
Damit lassen sich dann 6 ns Auflösung/Genauigkeit erreichen, wenn man es 
braucht.

von fop (Gast)


Lesenswert?

Ich würde einen ATtiny441 probieren. Aber nur, weil ich Atmels gewohnt 
bin und keine IDE für ST auf dem Rechner habe.

von raspberry (Gast)


Lesenswert?

hey,
danke für Tipps. Dass könnte doch schon mal ein gangbarer Weg sein.

Was ich gerade auch noch ein bisschen am Recherchieren bin, BeagleBone.

Kennt sich jemand mit dem BeagleBone Black aus?
Da gibt es wohl OnBoard 2x 32bit microcontroller die als "PRU" 
(Programmable Realtime Unit) bezeichnet werden.

Und wohl frei ansprechbar/programmierbar sind:
" By using a PRU, you can achieve fast, deterministic, real-time control 
of I/O pins and devices", Quelle: 
http://www.righto.com/2016/08/pru-tips-understanding-beaglebones.html

von m.n. (Gast)


Lesenswert?

raspberry schrieb:
> " By using a PRU, you can achieve fast, deterministic, real-time control
> of I/O pins and devices"

Was für den einen Echtzeit ist, ist für den anderen echt Zeit.
In dem genannten Umfeld ist Echtzeit schon erreicht, wenn etwas 
innerhalb von 1-10 ms stattfindet.

von Johannes S. (Gast)


Lesenswert?

Als Rechenknecht ginge auch ein LPC Cortex-M, z.B. LPC812 oder 824. Die 
haben 32 Bit Timer/Counter und können damit auch lange Zeiten mit einer 
Auflösung von 0,1 µs oder kleiner messen.
Mit der PRU kriegt man das vielleicht auch hin, damit legtst du dich 
aber auf die speziellen TI fest. Mit dem Rechenknecht kannst du nahezu 
alles nutzen was es in der Raspberry Klasse gibt.

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.