Kirchenglocke per Knopfdruck steuern

Uebersicht

Online Rechner

Chronik

Dauerkalender





Kontaktlose Drehzahlmessung mit ESP32


Drehzahlmessung


Diese Schaltung macht es möglich, ohne die rotierenden Teile eines Motors, einer Achse oder einer Maschine zu berühren, ihre Drehzahl zu ermitteln. Die Drehzahlmessung basiert auf dem Prinzip eines Stroboskops. Je nach Begebenheit wird an der rotierenden Einrichtung ein Element gewählt oder eine Markierung angebracht und mit kurzen, regelmäßigen Lichtblitzen beleuchtet. Wenn die Frequenz der Blitze genau der Rotationsgeschwindigkeit des Objekts oder der Markierung entspricht, scheint es für das menschliche Auge stillzustehen. Es handelt sich dabei um eine Illusion, die suggeriert, dass sich das drehende Objekt nicht bewegt und einfach stillsteht. Sobald der angebliche „Stillstand“ des Objektes oder Markierung erreicht ist, entspricht die Frequenz der Blitze der gesuchten Drehzahl.
An der Schaltung beteiligen sich neben dem Mikrocontroller ESP32 eine umgebaute Taschenlampe, fünf Touchsensoren, zwei Spannungsregler, ein Transistor und eine 7-Segmentanzeige. Gesucht werden die Drehzahlen von zwei 12 V-Lüftern.

Spannungsregler

Spannungsregler


Die Hauptversorgungsspannung der Schaltung, die von extern geliefert wird, beträgt 12 VDC. Diese Spannung wird mit dem Spannungsregler A2 auf 5 VDC heruntergeregelt. Mit dieser Spannung werden der Mikrocontroller und die 7-Segmentanzeige versorgt. Mit dem Spannungsregler A1 wird eine passende Spannung für die präparierte Taschenlampe zur Verfügung gestellt. Bei den Spannungsreglern handelt es sich um fertige Module, die auf dem IC-Bauteil LM2596 basieren. Im Handel sind diese Module weit verbreitet. Grundsätzlich können sie in zwei Versionen geliefert werden: mit und ohne Spannungsanzeige. Unter anderem verfügen die Module über einen Trimmer, mit dem die Ausgangsspannung eingestellt werden kann. Die Spannungsregler arbeiten in einem Spannungsbereich von 3-40V.

Anzeige

Anzeige


Für die Anzeige der aktuell ermittelten Drehzahl ist eine aus vier Digits bestehende 7-Segmentanzeige zuständig. Auch hier handelt es sich um ein fertiges Modul, das auf dem Anzeigetreiber TM1637 basiert. Der Treiber übernimmt alle notwendigen Funktionen der Steuerung der Anzeige. Die benötigten Informationen von dem Mikrocontroller werden über zwei Leitungen übermittelt. Der Aufsatz des Moduls trägt die Bezeichnung 3642BH. Die Versorgungsspannung des Moduls beträgt 3,3 V bis 5 VDC, die Stromaufnahme pendelt zwischen 30 und 80 mA.
Um die Anzeige anzusprechen, wird an das Programm die Bibliothek „TM1637Display.h“ eingebunden.

Touchsensoren

Touchsensor


Die Einstellung der aktuellen Frequenz wird mit drei Touchsensoren (Berührungsschaltern) realisiert. Mit den Sensoren S4 und S5 wird die gesuchte Frequenz im Schnellverfahren eingestellt, mit dem Sensor S3 wird die Feineinstellung der Frequenz aktiviert. Bei der Feineinstellung wird die Frequenz bei jeder Betätigung um 0,1 Hz erhöht. In diesem Modus wird der Touchsensor auf positive Flanke abgefragt. Weitere Änderung der Frequenz ist in diesem Fall nur dann möglich, wenn der Taster losgelassen und anschließend wieder betätigt wird.
Mit zwei weiteren Touchsensoren S1 und S2 wird das Tastverhältnis eingestellt. Mit dieser Einstellung wird die Pulsweite, d. h. die Blitzlänge, bestimmt. Diese Einstellung ist fürs Experimentieren gedacht. Sie veranschaulicht, wie sich das Tastverhältnis auf die Blitze und damit auf das beobachtete Objekt auswirkt.
Bei den Sensoren handelt es sich um kapazitive Berührungsmodule. Bei Betätigung senden die Module HIGH-Signale. Neben dem Hauptchip TTP223 befinden sich auf der Rückseite der Module drei Lötstellen, die es ermöglichen, das Modul zusätzlich zu parametrieren. Mit einem Kondensator von 0 bis 50 pF ist es möglich, die Empfindlichkeit des Sensors zu beeinflussen. Mit einer Brücke ist es möglich, die Taster-Funktion in eine Schalter-Funktion umzuwandeln. Der Sensor S3 fungiert in der Schaltung z. B. als ein rastender Schalter. Mit einer weiteren Brücke kann der Signalpegel am Ausgang eingestellt werden.

Transistor

Transistor


Je nachdem, welche Leistung das Leuchtmittel für die Stroboskopblitze benötigt, muss eine Leistungsanpassung am Mikrocontrollerausgang erfolgen. Ein zu hoher Strom kann den Mikrocontroller beschädigen. Diese Aufgabe übernimmt in der Schaltung ein Transistor. Der zwischen dem Mikrocontroller und dem Verbraucher geschaltete Transistor BD437 kann einen Strom bis zu 6 A schalten. BD437 ist ein NPN-Transistor und verträgt Spannungen bis zu 45V.

Mikrocontroller

Mikrocontroller


Der ESP32 übernimmt in der Schaltung die Bildung der Signale, die anschließend die aktuell gemessene Drehzahl verraten sollen. Bei den Signalen handelt es sich um die PWM-Signale, die sich für die Bildung von Stroboskopblitzen sehr gut eignen. Zwei Größen bei einem PWM-Signal haben entscheidende Bedeutung: Frequenz und Impulsdauer. Die Frequenz, die mit Touchsensoren eingestellt wird, pendelt in unserem Beispiel im Bereich von 0 bis 160 Hz. Damit können Drehzahlen bis zu 9600 U/min untersucht werden. Bei höheren Drehzahlen müsste die aus vier Digits bestehende 7-Segmentanzeige mit einer anderen ersetzt werden. Bei der Bildung des Impulsdauer (Pulsweite), die oft durch das Tastverhältnis ausgedrückt wird und für die Dauer des Blitzes zuständig ist, müssen wir darauf achten, dass sie bei verändernder Frequenz konstant bleibt. So muss das Tastverhältnis für jede Frequenz neu berechnet werden. Z. B.
Bei einer Frequenz von 1 Hz und einem Tastverhältnis von 50% beträgt die Pulsweite 500 ms.
Bei einer Frequenz von 100 Hz und gleichem Tastverhältnis von 50% beträgt die Pulsweite 5 ms.
Um in beiden Fällen die gleiche Pulsweite von z. B. 5 ms zu erhalten, müsste man bei der Frequenz von 1 Hz ein Tastverhältnis von 0,5 % wählen.

Schaltplan

Schaltplan


Testschaltung

Testschaltung


Taschenlampe

Umgebaute LED-Taschenlampe mit untersuchtem Lüfter


Programm

// **************************************************************************************
// Kontaktlose Drehzahlmessung mit ESP32
// Stroboskopische Methode mit PWM-Signal und einstellbaren Pulsbreite
// Mit Microcontroller ESP32
// Arduino IDE v2.3.10
// **************************************************************************************

#include <TM1637Display.h>              // Bibliothek für Anzeige einbinden
#define CLK 27                           // CLK Pin Nr. 26
#define DIO 26                           // DIO Pin Nr. 25
TM1637Display display(CLK, DIO);         // Erstellt Objekt display

const int PWM_Kanal = 0;                 // PWM Kanal
const int PWM_Aufloesung = 10;           // PWM Auflösung (1024)
double PWM_Soll_Frequenz = 10;           // PWM Soll Frequenz
double PWM_Alte_Frequenz;                // PWM alte Frequenz
int PWM_Pulse_Pin = 4;                   // PWM Ausgang
long int Tastverhaeltnis;                // PWM Tastverhältnis Soll
long int Tastverhaeltnis_Alt;            // PWM Tastverhältnis altwert

int Taster_F_Plus = 25;                  // Taster Frequenzeinstellung erhöhen
int Taster_F_Minus = 33;                 // Taster Frequenzeinstellung reduzieren
int Taster_F_Feineinstellung = 32;       // Taster Feineinstellung aktivieren

int Taster_T_Plus = 35;                  // Taster Tastverhältnis erhöhen
int Taster_T_Minus = 34;                 // Taster Tastverhältnis reduzieren
int Eingabe_Tastverhaeltnis = 500;

bool Taster_Positive_Flanke;
unsigned long Millis_Alt;
int Eingabe_min_Zeit = 35;               // Eingabe Verzögerung in Millisekunden

// **************************************************************************************
void setup() {

    display.setBrightness(10);                  // Anzeige Helligkeit
    display.clear();                            // Anzeige löschen
    pinMode(Taster_F_Plus, INPUT);              // Touchsensor Frequenz rauf
    pinMode(Taster_F_Minus, INPUT);             // Touchsensor Frequenz runter
    pinMode(Taster_F_Feineinstellung, INPUT);   // Touchsensor Feineinstellung aktivieren
    ledcSetup(PWM_Kanal, PWM_Soll_Frequenz, PWM_Aufloesung);   // PWM Ausgabe Startwerte
    pinMode(Taster_T_Plus, INPUT);              // Touchsensor Tastverhältnis rauf
    pinMode(Taster_T_Minus, INPUT);             // Touchsensor Tastverhältnis runter
    ledcAttachPin(PWM_Pulse_Pin, PWM_Kanal);    // PWM Ausgabe Start
}

// **************************************************************************************
void loop() {

    unsigned long Millis_Aktuell = millis();
    if (Millis_Aktuell > (Millis_Alt + Eingabe_min_Zeit)) {
        Millis_Alt = Millis_Aktuell;
        Sollfrequenz_festlegen ();
        Tastverhaeltnis_festlegen ();
    }

    if (PWM_Soll_Frequenz != PWM_Alte_Frequenz) {       // PWM Ausgabe nur bei Änderung
        PWM_Alte_Frequenz = PWM_Soll_Frequenz;
        ledcChangeFrequency(PWM_Kanal, PWM_Soll_Frequenz, PWM_Aufloesung);
        int Drehzahl = PWM_Soll_Frequenz * 60;          // Drehzahl in U / Min
        String Ausgabe = String (Drehzahl);
        display.showNumberDecEx(Ausgabe.toInt(), 0b00000000, false, 4, 4);
    }
            
    if (Tastverhaeltnis != Tastverhaeltnis_Alt) {       // Tastverhältnis nur bei Änderung
        Tastverhaeltnis_Alt = Tastverhaeltnis;
        ledcWrite(PWM_Kanal, Tastverhaeltnis);
    }

    if ((digitalRead (Taster_F_Plus) == LOW) && (digitalRead (Taster_F_Minus) == LOW)) {
        Taster_Positive_Flanke = LOW;
    } 
}

// **************************************************************************************
void Sollfrequenz_festlegen () {

    if (digitalRead (Taster_F_Plus) == HIGH) {               // Sollfrequenz erhöhen
        if (digitalRead (Taster_F_Feineinstellung) == LOW) {
            PWM_Soll_Frequenz = PWM_Soll_Frequenz + 0.2;
        }
        if (Taster_Positive_Flanke == LOW) {                 // Feinabstimmung
            PWM_Soll_Frequenz = PWM_Soll_Frequenz + 0.1;
            Taster_Positive_Flanke = HIGH;
        }
    }

    if (digitalRead (Taster_F_Minus) == HIGH) {              // Sollfrequenz erniedrigen
        if (digitalRead (Taster_F_Feineinstellung) == LOW) {
            PWM_Soll_Frequenz = PWM_Soll_Frequenz - 0.2;
        }
        if (Taster_Positive_Flanke == LOW) {                 // Feinabstimmung
            PWM_Soll_Frequenz = PWM_Soll_Frequenz - 0.1;
            Taster_Positive_Flanke = HIGH;
        }
    }
 
    if (PWM_Soll_Frequenz > 160) {                  // Grenzwerte prüfen
        PWM_Soll_Frequenz = 160;
    }
    if (PWM_Soll_Frequenz < 1) {
        PWM_Soll_Frequenz = 1;
    }
}

// **************************************************************************************
void Tastverhaeltnis_festlegen () {

    if (digitalRead (Taster_T_Plus) == HIGH) {              // Tastverhältnis erhöhen
        Eingabe_Tastverhaeltnis++;
    }

    if (digitalRead (Taster_T_Minus) == HIGH) {             // Tastverhältnis erniedrigen
        Eingabe_Tastverhaeltnis--;
    }
 
    if (Eingabe_Tastverhaeltnis > 512) {          // Grenzwerte prüfen
        Eingabe_Tastverhaeltnis = 512;                      // Taster können mit Poti
    }                                                       // ersetzt werden.
    if (Eingabe_Tastverhaeltnis < 1) {
        Eingabe_Tastverhaeltnis = 1;
    }
    Tastverhaeltnis = (PWM_Soll_Frequenz * Eingabe_Tastverhaeltnis) / 160;  // Tastverhältnis
}

// **************************************************************************************       
         

Nachdem die Startsequenz setup() durchlaufen ist und alle Voreinstellungen abgearbeitet wurden, beginnt mit loop() das Hauptprogramm, das man als eine endlose Schleife, die immer wieder wiederholt wird, verstehen kann.
Die hier gestellte Aufgabe ist nicht kompliziert. Mit zwei Anweisungen: ledcChangeFrequency(PWM_Kanal, PWM_Soll_Frequenz, PWM_Aufloesung) und ledcWrite(PWM_Kanal,
Tastverhaeltnis) werden die aktuellen Parameter an die PWM-Ausgabe übermittelt. Wichtig dabei ist, dass die Parameter nur dann übergeben werden, wenn sie sich verändert haben. Eine kontinuierliche Übertragung würde zu Störverhalten führen, da der Mikrocontroller jedes Mal die PWM-Ausgabe neu einstellen muss.
Um die Verstellung der Werte bei konstant betätigtem Schalter etwas zu verlangsamen, werden die Touchsensoren alle 35 Millisekunden abgefragt. Für die Änderungen der Werte sind die Unterprogramme Sollfrequenz_festlegen () und Tastverhaeltnis_festlegen () zuständig. Sobald in der Hauptschleife loop() eine Änderung der Werte festgestellt wird, erfolgt die Übergabe der Werte an den gewählten PWM-Kanal.
In dem Unterprogramm Tastverhaeltnis_festlegen () erfolgt neben der Abfrage der Sensoren auch eine direkte Umrechnung der Eingabe in entsprechendes Tastverhältnis.
Diese Umrechnung muss bei jeder Eingabe neu durchgeführt werden. Sie ist notwendig, um die Impulsdauer bei sich veränderten Werten konstant zu halten. Da wir in unserem Beispiel Frequenzen bis zu 160 Hz (= 9600 Umdrehungen/Minute) untersuchen, lautet die Formel:

Tastverhältnis = (PWM_Soll_Frequenz * Eingabe_Tastverhältnis) / 160

Kurzvideo

Kurzvideo


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz