Geschwindigkeitsermittlung

C

Christian Gudrian

Guest
Hallo, zusammen!

Ich habe einen analogen Wegsensor, der mir ein Signal von 0 bis 5 Volt
ausgibt. Ich möchte mit einem Controller nun auch nach Möglichkeit die
Geschwindigkeit auswerten, mit der sich der Wegsensor bewegt.

Echte Geschwindigkeitssensoren kommen aus Platz- und Geldgründen erst einmal
nicht infrage.

Eine numerische Differentiation liefert nur bei relative hohen
Geschwindigkeiten leidlich zuverlässige Werte.

Jetzt habe ich mich gefragt, ob es vielleicht schaltungstechnisch möglich
ist, aus dem Signal des Wegsensors auf dessen Geschwindigkeit zu kommen. Das
Geschwindigkeitssignal sollte dabei ebenfalls von 0 bis 5 Volt reichen mit
dem Nullpunkt bei ca. 2,5 Volt.

Welche Möglichkeiten/Alternativen gibt es?

Dank im Voraus,

Christian
 
"Matthias Weingart" <mwnews@pentax.boerde.de> schrieb

Die Auflösung und Abtastrate deines AD-Wandlers erhöhen.
Vorsicht Falle! Je höher die Abtastrate ist, umso geringer fallen die
Änderungen im Eingangssignal aus. Das führt zwangsweise zu mehr oder weniger
stark ausfallenden Diskretisierungseffekten.

Beispiel:

Wegaufnehmer, 10.24mm Weg, 10 Bit Auflösung -> 0.01mm/Inkrement

Geschwindigkeit: 1mm/s -> 100 Inkremente/s

Bei einer Abtastrate von 1kHz würde ich nur jedes 10 Mal eine Änderung um
jeweils ein Inkrement messen -- und diese Änderung fälschlicherweise für
eine Geschwindigkeit von 1000 Inkrementen pro Sekunde halten, die nur
kurzzeitig anhält (1ms). Das gilt natürlich nur bei einfachster Ermittlung
der Geschwindigkeit unter Berücksichtigung des unmittelbar vorangehenden
Wertes. Durch entsprechende Glättungsmechanismen, bei denen man nicht nur
den letzten sondern die letzten n Werte berücksichtigt, lässt sich dieser
Effekt abschwächen aber nicht ganz abschalten.

In meinem Fall müsste ich schon (übern Daumen) die letzten 100 Werte
interpretieren (also Werte, die über 0.1s anfallen), was doch recht
rechenaufwändig wird.

Hm. Mal sehen, ob mir da noch was Brauchbares einfällt.

Gruß und Dank,

Christian
 
"Christian Gudrian" <Christian.Gudrian@gmx.de> wrote in
news:bmpan2$av7$06$1@news.t-online.com:

Hallo, zusammen!

Ich habe einen analogen Wegsensor, der mir ein Signal von 0 bis 5
Volt ausgibt. Ich möchte mit einem Controller nun auch nach
Möglichkeit die Geschwindigkeit auswerten, mit der sich der
Wegsensor bewegt.

Eine numerische Differentiation liefert nur bei relative hohen
Geschwindigkeiten leidlich zuverlässige Werte.

Jetzt habe ich mich gefragt, ob es vielleicht schaltungstechnisch
möglich ist, aus dem Signal des Wegsensors auf dessen
Geschwindigkeit zu kommen.
Ein Differnzierglied (C-R) hat leider immer eine gewisse
Frequenzabhängigkeit, da ist das schon besser, wenn du das digital
machst.

Welche Möglichkeiten/Alternativen gibt es?
Die Auflösung und Abtastrate deines AD-Wandlers erhöhen.

M.
--
Bitte auf mwnews2@pentax.boerde.de antworten.
 
"Christian Gudrian" <Christian.Gudrian@gmx.de> wrote in
news:bmpcif$sne$03$1@news.t-online.com:

"Matthias Weingart" <mwnews@pentax.boerde.de> schrieb

Die Auflösung und Abtastrate deines AD-Wandlers erhöhen.

Vorsicht Falle! Je höher die Abtastrate ist, umso geringer fallen die
Änderungen im Eingangssignal aus. Das führt zwangsweise zu mehr oder
weniger stark ausfallenden Diskretisierungseffekten.
Weshalb man die Meßdaten entsprechend den Vorgaben des Projektes
bearbeitet: Interpolation, Mittelung, usw.

Wegaufnehmer, 10.24mm Weg, 10 Bit Auflösung -> 0.01mm/Inkrement
Geschwindigkeit: 1mm/s -> 100 Inkremente/s
Bei einer Abtastrate von 1kHz würde ich nur jedes 10 Mal eine Änderung
um jeweils ein Inkrement messen
oder mal zwei oder keins. Bist Du sicher das das letzte Bit stabil steht?
ADC im ľC? dann sicher nicht = > mehr Bearbeitung der Meßdaten

letzten sondern die letzten n Werte berücksichtigt, lässt sich dieser
Effekt abschwächen aber nicht ganz abschalten.
Du mußt an Hand der Anforderungen des Projektes die Specs definieren und
dann entscheiden welcher Aufwand nötig ist. Welche Genauigkeit hat der
Sensor? Wenn Du die Effekte unter diesen Wert drückst bist, Du auf der
sicheren Seite.

Eine Analoglösung ist ja nicht fehlerfrei! Die Fehler sind viel schwieriger
abzuschätzen.

In meinem Fall müsste ich schon (übern Daumen) die letzten 100 Werte
interpretieren (also Werte, die über 0.1s anfallen), was doch recht
rechenaufwändig wird.
AVR haben doch leicht 10 MIPS => 10.000 Befehle pro Meßwert, was willst Du
mehr?

Gruß
Martin
 
"Martin Clausen" <XnoiseXAT@XrotgradpsiXDOTX.de> schrieb:

oder mal zwei oder keins. Bist Du sicher das das letzte Bit stabil steht?
Nicht immer. Aber oft. Trotzdem wird das Flattern des letzten Bit
herausgefiltert.

Du mußt an Hand der Anforderungen des Projektes die Specs definieren und
dann entscheiden welcher Aufwand nötig ist.
Ich bin gerade dabei. Schon gemerkt? :)

Ich bin mir durchaus bewusst, welchen Aufwand es macht, ein digitales Signal
so zu differenzieren, dass man damit noch etwas anfangen kann. Digitale
Differenziation neigt stark dazu, hässliche Peaks auszubilden. Die müsste
ich dann am Ende wieder rausbügeln.

Welche Genauigkeit hat der
Sensor? Wenn Du die Effekte unter diesen Wert drückst bist, Du auf der
sicheren Seite.
Was verstehst Du in dem Kontext unter "Genauigkeit"? Die Werte, die in
meinem Beispiel aus dem letzten Posting standen, entsprechen so ziemlich der
gegenwärtigen Konfiguration: 12mm Weg, 10 Bit.

Eine Analoglösung ist ja nicht fehlerfrei! Die Fehler sind viel
schwieriger abzuschätzen.
Fehler macht man ja prinzipbedingt immer. Die Art der Fehler, die sich bei
der digitalen Differentiation einschleichen, bedeuten für eine
nachgeschaltete Regelung oftmals den Todesstoß, da Unstetigkeiten ohne
Gleichen produziert werden. Diese Unstetigkeiten erwarte ich nicht bei einer
analogen Lösung.

In meinem Fall müsste ich schon (übern Daumen) die letzten 100 Werte
interpretieren (also Werte, die über 0.1s anfallen), was doch recht
rechenaufwändig wird.
AVR haben doch leicht 10 MIPS => 10.000 Befehle pro Meßwert,
was willst Du mehr?
Ich arbeite mit einem C504 von Infineon (8052-Derivat). Getaktet mit 24MHz,
2 Millionen Prozessorzyklen pro Sekunde. Ich lese 1000 Mal pro Sekunde drei
analoge Messwerte ein, berechne die Regelabweichung und schalte sechs
Ventile.

Wenn ich jetzt noch 300 Fließkommamultiplikationen ausführen müsste
(wohlgemerkt: pro Millisekunde), wird es doch schon recht eng.

Auch beim AVR, oder?

Gruß,

Christian
 
Christian Gudrian wrote:
"Martin Clausen" <XnoiseXAT@XrotgradpsiXDOTX.de> schrieb:

[digitalen Differentiation]

Ich arbeite mit einem C504 von Infineon (8052-Derivat). Getaktet mit 24MHz,
2 Millionen Prozessorzyklen pro Sekunde. Ich lese 1000 Mal pro Sekunde drei
analoge Messwerte ein, berechne die Regelabweichung und schalte sechs
Ventile.

Wenn ich jetzt noch 300 Fließkommamultiplikationen ausführen müsste
(wohlgemerkt: pro Millisekunde), wird es doch schon recht eng.
Warum willst du mit Fließkomma rechnen, wo deine Eingangswerte
Festkommazahlen sind?

Probier mal, dein Weg-Signal durch zwei Tiefpässe unterschiedlicher
Grenzfrequenzen zu schicken, die Differenz der Ausgänge liefert
angenähert die Geschwindigkeit.

+
-+--->[TP1]---->o------> TP1 schneller als TP2
| | -
L--->[TP2]-----J


alternativ:


--->[TP1]--+--->[TP2]----+ TP1 = TP2
| | -
L------------>o----->
+

Den Tiefpaß kannst du mit kleinem Rechenaufwand z.B. so annähern:

tp=(3/4)*tp+in; bzw. tp=((3*tp)>>2)+in;
out=tp/4; bzw. out=tp>>2;

für andere Zeitkonstanten nimmst halt 1/2, 3/4, 7/8, 15/16, ...
Mußt nur darauf achten, daß kein Überlauf eintreten kann.
Du müßtest eigentlich mit 16Bit-Integer-Arithmetik auskommen.


Hendrik vdH
 
Wenn der Geschwindigkeitssensor immer denselben Weg durchläuft, läßt sich
das auch mit zwei Komparatoren und einem Zähler realisieren.

Die Ausgangsspannung wird einfach auf die + Eingänge zweier Komparatoren
geschaltet. Die - Eingänge der Komparatoren gehen auf jeweils einen Trimmer
oder einen Spannungsteiler aus Festwiderständen.

Die Schaltschwellen müssen sich unterscheiden. Dies ist abhängig vom Ort, an
dem die Geschwindigkeit gemessen werden soll und der Länge Stecke, auf der
die Geschwindigkeit konstant ist.

Der Ausgang des ersten Komparators startet einen Zähler, z.B. Counter im
Mikroprozessor. Der zweite Kompartor stoppt den Zähler bzw. sorgt für das
Auslesen des Zählers. Dafür eignen sich besonders Mikroprozessoren mit
Compare/Capture-Einheit, z.B. 80C535 oder 80C537.

Es wird dann kein AD-Wandler benötigt. Die Geschwindigkeit ist umgekehrt
proportional zum Zählergebnis.

Wenn man die Geschwindigkeit als Funktion der Zeit bestimmen will, geht
diese Methode natürlich nicht, weil für jeden Messpunkt ein neuer Komparator
benötigt wird. In diesem Fall würde ich das Eingangssignal auf zwei
SH-Schalter legen und das Signal zeitversetzt zweimal abtasten.
Die Ausgangssignale der SH-Schalter auf einen Differenzverstärker geben und
das verstärkte Differenzsignal über einen AD-Wandler einlesen. So erhält man
mit jedem Auslesen des AD-Wandlers einen Wert, der proportional zur
Geschwindigkeit ist.

Gruß

Stefan
 
Nachtrag:

Wenn man die Geschwindigkeit als Funktion der Zeit bestimmen will, geht
diese Methode natürlich nicht, weil für jeden Messpunkt ein neuer
Komparator
benötigt wird. In diesem Fall würde ich das Eingangssignal auf zwei
SH-Schalter legen und das Signal zeitversetzt zweimal abtasten.
Die Ausgangssignale der SH-Schalter auf einen Differenzverstärker geben
und
das verstärkte Differenzsignal über einen AD-Wandler einlesen. So erhält
man
mit jedem Auslesen des AD-Wandlers einen Wert, der proportional zur
Geschwindigkeit ist.
Wenn man an den Ausgang des Differenzverstärkers dann einen dritten
SH-Schalter anschließt und die drei SH-Schalter nacheinander triggert erhält
man am Ausgang des dritten SH-Schalters ein analoges Signal, das
proportional zur Geschwindigkeit ist. Das ganze dann ohne ADU und Mikroproz.

Gruß

Stefan
 
"Hendrik van der Heijden" <hendrik.heijden@tu-harburg.de> schrieb:

Warum willst du mit Fließkomma rechnen, wo deine Eingangswerte
Festkommazahlen sind?
Weiß nicht mehr. Geistige Umnachtung versteht sich. :)

300.000 Multiplikationen, 299.000 Additionen und 3.000 Divisionen (alles in
mindestens 16-Bit) pro Sekunde sind aber auch nicht ohne.

Wohlgemerkt: diese Zahlen kommen zusammen, wenn man die Geschwindigkeit über
die letzten 100 Messwerte ermittelt (im wahrsten Sinne des Wortes). Ich
hoffe, dass ich auch mit zehn oder gar nur fünf Werten zu brauchbaren
Ergebnissen komme. Dann wird der Spaß schon handhabbarer.

Christian
 
"Stefan Broering" <Stefan@_nospam_Broering.de> schrieb:

Wenn der Geschwindigkeitssensor immer denselben Weg durchläuft, läßt sich
das auch mit zwei Komparatoren und einem Zähler realisieren.
Nette Idee, leider ist die Prämisse nicht erfüllt. :(

Trotzdem danke und noch ein schönes Wochenende,

Christian
 
"Christian Gudrian" <Christian.Gudrian@gmx.de> schrieb

Echte Geschwindigkeitssensoren kommen aus Platz- und Geldgründen
erst einmal nicht infrage.
Angenommen ich hätte nun doch irgendwo noch Platz. Könnte ich dann durch
eine einfache Tauchspule o.ä. einen einfachen (aber für meine Zwecke
vielleicht brauchbaren) Geschwindigkeitssensor zusammenstricken?

Christian
 
"Hendrik van der Heijden" <hendrik.heijden@tu-harburg.de> schrieb

Probier mal, dein Weg-Signal durch zwei Tiefpässe unterschiedlicher
Grenzfrequenzen zu schicken, die Differenz der Ausgänge liefert
angenähert die Geschwindigkeit.
Das hört sich interessant an. Werde ich mir mal ansehen. Vielen Dank für den
Tipp!

Schönes Wochenende,

Christian
 
Hallo,

Ein Differnzierglied (C-R) hat leider immer eine gewisse
Frequenzabhängigkeit, da ist das schon besser, wenn du das digital
machst.
Der Restfehler bem Differenziergied ist vernachlässigbar
wenn der Widerstand hinreichend klein ist.
Der Strom im Kondensator ist exakt proportional zur Änderung
der Eingangsspannung (dU/dt), wenn der Eingang niederohmig
ist. Also Impedanzwandler zwischen Poti und
Differenzierglied vorsehen.

Gruss
Michael
 
Christian Gudrian wrote:

300.000 Multiplikationen, 299.000 Additionen und 3.000 Divisionen (alles in
mindestens 16-Bit) pro Sekunde sind aber auch nicht ohne.

Wohlgemerkt: diese Zahlen kommen zusammen, wenn man die Geschwindigkeit über
die letzten 100 Messwerte ermittelt (im wahrsten Sinne des Wortes). Ich
hoffe, dass ich auch mit zehn oder gar nur fünf Werten zu brauchbaren
Ergebnissen komme. Dann wird der Spaß schon handhabbarer.
Ich verstehe dein Problem nicht. Um die mittlere Geschwindigkeit über
einen Zeitraum delta t zu ermitteln, braucht man exakt zwei
Weg-Meßwerte, nämlich den vom Zeitpunkt t0 und den vom Zeitpunkt t1.
Alle dazwischenliegenden Werte sind zur Errechnung der mittleren
Geschwindigkeit im betreffenden Zeitintervall absolut überflüssig.

(s1-s0)
v=-------
(t1-t0)

Da sehe ich zwei Subtraktionen und eine Division. Mehr nicht.

Zu einfach?
 
(s1-s0)
v=-------
(t1-t0)

Da sehe ich zwei Subtraktionen und eine Division. Mehr nicht.
und wenn t1-t0 konstant ist, dann ist v proportional zu (s1-s0)

ich seh auch nicht, wo das Problem liegen soll :)

Gruß

Stefan
 
Michael Koch <astroelectronic@gmx.net> schrieb im Beitrag <3F910168.2AAB82E1@gmx.net>...
Der Restfehler bem Differenziergied ist vernachlässigbar
wenn der Widerstand hinreichend klein ist.
Der Restfehler des digitalen Differenziers ist vernachlaessigbar,
wenn das Eingangssignal ausreichend verrauscht ist.
--
Manfred Winterhoff, reply-to invalid, use mawin at despammed.com
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
 
"Christian Gudrian" <Christian.Gudrian@gmx.de> wrote in
news:bmpo7n$82j$03$1@news.t-online.com:

Du mußt an Hand der Anforderungen des Projektes die Specs definieren
und dann entscheiden welcher Aufwand nötig ist.

Ich bin gerade dabei. Schon gemerkt? :)
Aha, interaktiv in der Diskussion mit anderen, auch okay

Ich bin mir durchaus bewusst, welchen Aufwand es macht, ein digitales
Signal so zu differenzieren, dass man damit noch etwas anfangen kann.
Digitale Differenziation neigt stark dazu, hässliche Peaks
auszubilden. Die müsste ich dann am Ende wieder rausbügeln.
Genau wie analog Differenzierer mit OP auch: schwingen gerne. Es liegt halt
in der Natur der Sache.

Was verstehst Du in dem Kontext unter "Genauigkeit"?
beim Sensor z.B. Wiederholgenauigkeit, Drift mit Temperatur, Zeit,
(nichtlinearer) Verschleiß über erwartete Nutzungsdauer, Linearität, mehr
fällt mir gerade nicht ein.

[Rechenleistung]
Ich arbeite mit einem C504 von Infineon (8052-Derivat). Getaktet mit
24MHz, 2 Millionen Prozessorzyklen pro Sekunde. Ich lese 1000 Mal pro
Sekunde drei analoge Messwerte ein, berechne die Regelabweichung und
schalte sechs Ventile.

Wenn ich jetzt noch 300 Fließkommamultiplikationen ausführen müsste
(wohlgemerkt: pro Millisekunde), wird es doch schon recht eng.
Fließkomma will man auf ľC nur wenn es wirklich sein muß (wie Hendrik
schon bemerkte). Wenn man sich das Hirn ein wenig verrenkt, kann man die
nötige Breite abschätzen und Über- und Unterläufe vermeiden. Sehr kleine
und sehr große Koeffizienten sind auch mit Fießkomma nicht gut.
Beim 8051 bietet sich bei zeitkritischen Opertionen die Möglichkeit zum
Umschalten zwischen den 4 Registersätzen an, aber das weist Du sicher. Auch
300.000 Festkomma Berechnungen mit 2MIPS sind sehr eng. Bist Du auf den MCU
fest genagelt? Cygnal könnte einiges an Luft schaffen, aber Fließkomma
schreit wohl nach einer ganz anderen Größenklasse von MCU.

Gruß
Martin
 
"Heiko Nocon" <Heiko.Nocon@gmx.net> schrieb:

Ich verstehe dein Problem nicht. Um die mittlere Geschwindigkeit über
einen Zeitraum delta t zu ermitteln, braucht man exakt zwei
Weg-Meßwerte, nämlich den vom Zeitpunkt t0 und den vom Zeitpunkt t1.
Richtig. Dann ermittelt man die Sekantensteigung. Es gibt aber auch die
Möglichkeit, per Taylor eine genauere Ermittlung zu erzielen:

v(t) = (x(t)-4*x(t-deltaT)+3*(t-2*deltaT))/(2*deltaT)

Zum Beispiel.

Christian
 
On Sat, 18 Oct 2003 12:42:36 +0000 (UTC), Matthias Weingart
<mwnews@pentax.boerde.de> wrote:

Moin!

Im einfachsten Falle einfach eine Mittelwertbildung (summiere 128 Werte
und teile die dann durch 128) damit hast du dann [...] 128stel Auflösung.
Nein, damit hast Du Wurzel(128)stel Auflösung.

Gruß,
Michael.
 
Matthias Weingart wrote:
"Christian Gudrian" <Christian.Gudrian@gmx.de> wrote in
news:bmpo7n$82j$03$1@news.t-online.com:

Im einfachsten Falle einfach eine Mittelwertbildung (summiere 128 Werte
und teile die dann durch 128) damit hast du dann wieder 1000Sps aber
128stel Auflösung. Das muesste Dein Controller eigentlich schaffen
(reine Integeraddition).
Der Controller schafft in 1ms gerademal 300 16Bit-unsigned-Additionen
(6 Clocks). Er hat drei Ableitungen zu berechnen, bei 100 Additionen
pro Kanal ist also schon 100% CPU-Last erreicht. Bei Faktor 64 wär
eh schon Ende, wenn man 16 Bit auskommen will (10bit-ADC).


Hendrik
 

Welcome to EDABoard.com

Sponsor

Back
Top