Forum: Mikrocontroller und Digitale Elektronik Schaltfrequenz eines Sensors


von Sari (Gast)


Lesenswert?

hallo Leute,

Ich bin mit der elektronik nicht so bewandert.

Wenn ich einen Sensor habe der eine Schaltfrequenz von 800Hz hat. 
Bedeuet das dann, das dieser mir 800 mal in der Sekunde einen Wert 
liefern könnte ?......


z.B bei einem drehenden Objekt bei dem man pro Umdrehung einen Impuls 
misst. Würde das dann bedeueten das dieser Sensor theoretisch mir 800 
mal in der Sekunde diesen Impuls abtasten könnte wenn das Objekt sich 
auch dementsprechend schnell drehen würde ????



Wäre nett von euch wenn ihr mich aufklären könntet :)

von Timmo H. (masterfx)


Lesenswert?

Schaltfrequenz ist für ein SENSOR eigentlich der falsche Begriff. Bei 
Sensor würde ich eher sowas erwarten wie Samplerate, Abtastrate, 
Abtastfrequenz oder sowas. Und dann ja, er würde dir bei einer 
Abtastrate von 800Hz eben max. 800 mal pro Sekunde einen neuen Wert 
liefern

von Sari (Gast)


Lesenswert?

Dankeschön ;)

von Sari (Gast)


Lesenswert?

Kannst du mir auch sagen wieviel Hz so ein Arduino Uno R3 am Pin 2 also 
PWM Eingang als Frequenz so verarbeiten kann ??

Der Quarz ist 16 MHz groß.....

Aber schafft er z.b auch diese 800 mal pro Sekunde zu verarbeiten ?




Mein Problem ist folgendes....

Ich will die Drehzahl / Geschwindigkeit eines Heimtrainerfahrrads 
mittels induktivem Näherungsschalter abfragen und mit dem Arduino 
ausrechnen/ ausgeben.
Nur wenn ich mal bischen mehr Gas gebe auf dem Fahrrad dann erkennt der 
Sensor einfach nicht mer das Signal....... und folglich gibt der Arduino 
mir nur noch schrott aus !

von Speedometer (Gast)


Lesenswert?

Sari schrieb:
> Kannst du mir auch sagen wieviel Hz so ein Arduino Uno R3 am Pin 2
> also
> PWM Eingang als Frequenz so verarbeiten kann ??
>
> Der Quarz ist 16 MHz groß.....
>
> Aber schafft er z.b auch diese 800 mal pro Sekunde zu verarbeiten ?
Das schafft er locker.
>
> Mein Problem ist folgendes....
>
> Ich will die Drehzahl / Geschwindigkeit eines Heimtrainerfahrrads
> mittels induktivem Näherungsschalter abfragen und mit dem Arduino
> ausrechnen/ ausgeben.
Kein Problem.
> Nur wenn ich mal bischen mehr Gas gebe auf dem Fahrrad dann erkennt der
> Sensor einfach nicht mer das Signal....... und folglich gibt der Arduino
> mir nur noch schrott aus !
Wie hast du den Sensor montiert? Erfaßt er die Umdrehungen eines Rades? 
Dann müßtest du ganz schön viel Gas geben, damit er bei 800 U/s aus dem 
Tritt kommt.

Kleine Beispielrechnung:
Radumfang bei 26" ist ca. 2,07m
Bei 800 U/s legst du dabei eine Strecke von 1659m/s zurück.
Das sind ca. 5972km/h!
Das finde ich schon ziemlich sportlich :-)

Also denke ich mal, daß du die Erfassung bestimmt anders machst, oder?
Beschreibe doch mal das ganze etwas näher.

Auf jeden Fall wären 800 Erfassungen/s kein Problem. Aber für das 
Fahrrad bzw. den Hometrainer brauchst du nicht so viel.

von Sari (Gast)


Lesenswert?

:D

ja klar !
Das war auch nur ein beispiel mit 800 Umdrehungen..


Mein Problem ist nur das ich wenn ich schneller drehe, einfach kein 
Signal mer bekomme ! So als wenn der Sensor das einfach nicht mehr 
schafft...


ich habe an einem Rad des Fahrrades eine Metallschraube befestigt..... 
un am der Stirnseite einen induktiven Sensor der diese Schraube bei 
jeder Umdrehung erfasst.....

Das funktioniert bei langsamer geschwindigkeit des Rades auch ganz 
gut.... Nur wenn ich mal Gas gebe dann erkennt er des einfach nicht mehr

von Speedometer (Gast)


Lesenswert?

Sari schrieb:
> ich habe an einem Rad des Fahrrades eine Metallschraube befestigt.....
> un am der Stirnseite einen induktiven Sensor der diese Schraube bei
> jeder Umdrehung erfasst.....
>
> Das funktioniert bei langsamer geschwindigkeit des Rades auch ganz
> gut.... Nur wenn ich mal Gas gebe dann erkennt er des einfach nicht mehr

Dann würde ich vorschlagen, du schaust dir erstmal die Signale des 
Sensors an, ob sie bei beliebiger Drehzahl sauber aus dem Sensor kommen. 
Wenn das ein Sensor mit OpenCollector-Ausgang ist, muß der einen 
Pullup-Widerstand am Ausgang bekommen.
Wenn die Impulse sauber anliegen, dann liegt es vermutlich an der 
Software. Du kannst ja mal deinen Quelltext und auch den Schaltplan 
reinstellen.

von m.n. (Gast)


Lesenswert?

Sari schrieb:
> Mein Problem ist folgendes....
>
> Ich will die Drehzahl / Geschwindigkeit eines Heimtrainerfahrrads
> mittels induktivem Näherungsschalter abfragen und mit dem Arduino
> ausrechnen/ ausgeben.
> Nur wenn ich mal bischen mehr Gas gebe auf dem Fahrrad dann erkennt der
> Sensor einfach nicht mer das Signal....... und folglich gibt der Arduino
> mir nur noch schrott aus !

Eine grobe Rechnung: Dein Objekt, was detektiert werden soll ist 10mm im 
Durchmesser und ist so am Rad angeordnet, dass es bei einer vollen 
Raddrehung 2000mm zurücklegt (liegt somit fast an der Felge). Bei einer 
Umdrehung pro Sekunde erzeugt es einen Impuls von 1/200s. Bei vier 
Umdrehungen/s ist der Impuls nur noch 1/800s lang. Damit ist für den 
Sensor die obere Schaltfrequenz erreicht.
Bei einem 28" Rad sind das rund 30km/h, wenn ich nicht irre.

Sari schrieb:
> ich habe an einem Rad des Fahrrades eine Metallschraube befestigt.....

Nimm ein größeres Objekt, was den Sensor länger eingeschaltet läßt.
Mein Tipp für Frequenz/Drehzahl bei einem Arduino UNO R3: 
http://www.mino-elektronik.de/fmeter/fm_software.htm#bsp7

von Speedometer (Gast)


Lesenswert?

m.n. schrieb:
> Nimm ein größeres Objekt, was den Sensor länger eingeschaltet läßt.

Oder montiere es näher in Richtung Nabe, dann ist die 
Umfangsgeschwindigkeit auch kleiner und der Impuls damit länger.

@m.n.: Danke für den Tip, auf die Impulslänge hatte ich gar kein 
Augenmerk gelegt.

von Sari (Gast)


Lesenswert?

Also Leute,

Danke schonmal für die Super Tipps !!

Kann nun alles Impulse aufnehmen, auch bei hoher Geschwindigkeit.

Habe nun noch ein Problem....

Ich muss nun anhand dieser Umdrehungszahl die Drehzahl errechnen.
Dazu wollte ich einen Timer bauen der jede Sekunde mir die Umdrehungen 
aus meiner Variabeln rausliest.
Dann hätte ich ja eigentlich Umdrehungen pro sek.


Aber wie kann ich denn von meinem Timer Interrupt der mir alle Sekunde 
etwas ausführt, nun aus einem anderen Interrupt der mir die Umdrehungen 
Zählt die Variable rausziehen ?

von Ähem (Gast)


Lesenswert?

gibt Dein Sensor immernoch nur 8 Volt am Ausgang ab wie Du in einem 
anderen
Beitrag geschrieben hast? Dann solltest Du doch mal das Sensor- 
Datenblatt lesen. Dort müßte auch die max. Schaltfrequenz des Sensors 
angegeben sein,
die aber auch nur dann erreicht wird, wenn die Sensors- 
Versorgungsspannung im erlaubten Bereich liegt...

von Sari (Gast)


Lesenswert?

das Problem is ja schon lange behoben.

Es geht nun lediglich um die Berechnung der Drehzahl.
Ich bekomms programm technisch einfach nicht hin ..... Bitte um Hilfe !

von H.Joachim S. (crazyhorse)


Lesenswert?

Indem du die Zeit zwischen 2 Impulsen misst und dann nach der bekannten 
Formel f=1/T rechnest.

von Sari (Gast)


Lesenswert?

Ich habe jetzt soweit mal Programmiert das ich Drehzahl und 
Geschwindigkeit berechnen kann......

Das ganze hab ich mir mit einem Timer realisiert der jede Sekunde 
schaut, wieviel Umdrehungen er gemacht hat in dieser Sekunde.

Leider benutz ich für Drehzahl() und Geschwindigkeit() den selben 
Timer1. Bei der Ausgabe bekomm ich immer nur die Geschwindigkeit 
ausgegeben.

Ich möchte aber beides ausgegeben bekommen !!!


Brauche ich da einen 2 Timer oder geht das mit 1 timer ?
Wenn ja wie geht denn sowas :)


Anbei mal mein Programm !!!

--------------------------------------------------------------

#include "TimerOne.h"

const int inputPin = 2;
const int outputPin = 13;
int alle_x_sekunden=1;
int Umdrehungen_min;
const long Umfang_cm = 94.24777;
double Umfang_km = 0.000942477;
double Geschwindigkeit_sek;
double Geschwindigkeit_stunde;


volatile int Umdrehungen;


void setup()
{
  pinMode(outputPin, OUTPUT);
  pinMode(inputPin, INPUT);
  Serial.begin(9600);
  Timer1.initialize(alle_x_sekunden*1000000);
  Timer1.attachInterrupt(Drehzahl);
  Timer1.attachInterrupt(Geschwindigkeit);

  attachInterrupt(0, keyPressed, RISING);       // 0 ist der Interrupt 
für Pin 2, bei jeder steigenden Flanke wird keyPressed() aufgerufen
}

void keyPressed()                  // state hochzählen, falls mindestens 
50ms seit der letzten Flanke vergangen sind
{

    Umdrehungen++;


}


void Drehzahl()
{
  Umdrehungen_min = Umdrehungen * 60;
  Serial.println("Umdrehungen/min");
  Serial.println(Umdrehungen_min);
  Umdrehungen = 0;

}

void Geschwindigkeit()
{
  Geschwindigkeit_stunde = Umfang_km  Umdrehungen  3600;
  Serial.println("Geschwindigkeit in km/h");
  Serial.println(Geschwindigkeit_stunde);
  Umdrehungen = 0;
}





void loop()
{

}

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.