Frage von MrRayman, 33

Mikrocontroller: Welche Taktrate sollte man bei einer Drezahlmessung von maximal 30 Hz nehmen?

Ich wollte einen Tacho mit einer Mikrocontroller bauen. Dafür wird die Drehzahl mit einen Hallsensor erfasst. Ich rechne mit einer maximalen Drehzahl von 30 Hz.. Zur Messung wollte ich einen Atmega328 nutzen. Der Mikrocontroller wird auch noch andere Tätigkeiten ausführen.

Die Messung sollte nicht mehr als 2% von der realen Drehzahl abweichen. Eine wesentliche höhere Genauigkeit wird nicht benötigt. Der Stromverbrauch sollte relativ klein gehalten werden.

Welcher Quarz ist hier am sinnvollsten? Reicht eventuell schon der Internern Oscillator aus?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von kuku27, 8

wenn du 30Hz messen willst und 1% genau sein willst dann brauchst meiner Meinung nach 30*100 = 3kHz. für 2% die Hälfte

Antwort
von ETechnikerfx, 24

Ich würde dir das Nequist-Shannon-Theorem empfehlen. Mindestens mehr als doppelt so hoch wie die zu messende Frequenz.

Expertenantwort
von TeeTier, Community-Experte für programmieren, 14

Neben den bisherigen Antworten noch eine kleine Anmerkung: Je nachdem wie dein Sensor aufgebaut ist, achte unbedingt darauf, dass keine allzu großen Induktionsspannungen / -ströme entstehen. Sonst grillst du dir evtl. das eine oder andere Bauteil. :)

Kommentar von MrRayman ,

Danke für den Hinweis.

Antwort
von Borgler94, 17

der Arduino taktet mit 16Mhz, 

da so eine Messung kontinuierlich stattfindet ist der interne Oszillator vollkommen ausreichend

bin aber kein Experte

hier ein guter Sketch für diesen Zweck vom Arduino Forum




// Frequency counter sketch, for measuring frequencies low enough to execute an interrupt for each cycle
// Connect the frequency source to the INT0 pin (digital pin 2 on an Arduino Uno)

volatile unsigned long firstPulseTime;
volatile unsigned long lastPulseTime;
volatile unsigned long numPulses;

void isr()
{
 unsigned long now = micros();
 if (numPulses == 1)
 {
   firstPulseTime = now;
 }
 else
 {
   lastPulseTime = now;
 }
 ++numPulses;
}

void setup()
{
 Serial.begin(19200);    // this is here so that we can print the result
 pinMode(3, OUTPUT);     // put a PWM signal on pin 3, then we can connect pin 3 to pin 2 to test the counter
 analogWrite(3, 128);
}

// Measure the frequency over the specified sample time in milliseconds, returning the frequency in Hz
float readFrequency(unsigned int sampleTime)
{
 numPulses = 0;                      // prime the system to start a new reading
 attachInterrupt(0, isr, RISING);    // enable the interrupt
 delay(sampleTime);
 detachInterrupt(0);
 return (numPulses < 3) ? 0 : (1000000.0 * (float)(numPulses - 2))/(float)(lastPulseTime - firstPulseTime);
}

void loop()
{
 float freq = readFrequency(1000);
 Serial.println(freq);
 delay(1000);
}

Quelle: https://forum.arduino.cc/index.php?topic=64219.30

Kommentar von MrRayman ,

Danke für die Hilfe.

Ich werde wohl das Programm erst einmal mit einen Arduino testen. Später wollte ich es leicht modifizieren und mir eine eigene Platine löten.

Kommentar von Borgler94 ,

wenn du auf Nummer sicher gehen willst (wobei das glaube ich wirklich unnötig is), kannst du einen Teensy verwenden

http://www.ebay.at/itm/Teensy-3-2-v3-1-Improved-from-European-Distributor-/17230...

ich würd mir aber vorher einen billigen 4€ Arduino Nano Klon bei ebay kaufen,
das ganze System zusammenbauen und dann mit einem Navi vergleichen (das müsste ziemlich genau sein)

ich persönlich glaube ja dass die größte abweichung vom umrechnen Drehzahl/Geschwindigkeit kommen wird 

Keine passende Antwort gefunden?

Fragen Sie die Community