Indracontrol von Rexroth


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


Drehzahlmessung mit ATtiny44

IR-Dioden


In dem Versuch wir die Drehzahl eines Motors gemessen und mithilfe einer 7-Segmentanzeige visualisiert. Untersucht wird ein kleiner 12VDC Gleichstrommotor mit Getriebe. Die maximale Drehzahl, die die Welle des Motors bei voller Spannung erreichen kann, beträgt laut Herstellerangaben 200 Umdrehungen pro Minute.
Als Messinstrument setzen wir zwei IR-Dioden, die in der Schaltung als IR-Sender und IR-Empfänger fungieren. Der Empfänger gemeinsam mit einem Widerstand bildet einen Spannungsteiler. Die Spannung an dem Spannungsteiler ändert sich abhängig von der Bestrahlung durch den IR-Sender. Wenn die Bestrahlung unterbrochen wird, sperrt der IR-Empfänger, wodurch die Spannung an dem Spannungsteiler ansteigt. Diese Eigenschaft machen wir uns bei Aufbau der Schaltung zunutze. Das Signal von dem Spannungsteiler wird zu dem Mikrocontroller (hier ATtiny44) geführt und ausgewertet. Damit das möglich ist, wird an der Welle des Motors eine kleine Metallplatte, die sich wie eine Nocke mitdreht, angebracht. Bei jeder Drehung des Motors wird die Bestrahlung des IR-Empfängers durch die Metallplatte für einen kurzen Moment unterbrochen. Der Mikrocontroller misst die Zeit, die zwischen zwei Unterbrechungen vergeht, und errechnet daraus die aktuelle Drehzahl des Motors. Sie wird anschließend auf einer 7-Segmentanzeige angezeigt.

Motor

Motor mit Getriebe

Bei dem Motor handelt es sich um einen Gleichstrommotor mit 12V Nominalspannung. Das vormontierte Getriebe verlangsamt die Drehzahl der Welle auf 200 Umdrehungen pro Minute. Für Testzwecke (Bild unten) wird an der Welle des Motors ähnlich einer Nocke eine Metallplatte angebracht, um die Bestrahlung des IR-Empfängers mit Infrarotlicht bei jeder Umdrehung sicher zu unterbrechen. Die Stromaufnahme des Motors liegt bei 500 mA.

IR-Licht Unterbrechung


Gleichstrommotor JGB37


Motortreiber

Motortreiber

Die Messungen der Drehzahl werden wir bei unterschiedlichen Drehgeschwindigkeiten des Motors durchführen. Die Regelung der Geschwindigkeit übernimmt für uns ein „No Name“ Motortreiber mit einem externen Potentiometer. Mit dem Poti kann die Geschwindigkeit bequem eingestellt werden. Der Treiber kann Motoren mit einer Stromaufnahme bis zu 20A ansteuern. Die Einstellung der Geschwindigkeit wird hier mithilfe der PWM-Technik realisiert.


IR-Dioden

IR-Dioden


Eine sehr wichtige Aufgabe in der Schaltung haben zwei Komponenten, die wie gewöhnliche Leuchtdioden aussehen. Es handelt sich hier um einen IR-Sender und einen IR-Empfänger. Sie generieren die Signale, die dann zur Berechnung der aktuellen Drehzahl verwendet werden. Beide Komponenten arbeiten im Bereich des Infrarotlichts, das für menschliche Auge unsichtbar ist. Die Wellenlänge in dem Lichtbereich liegt zwischen 700 bis 1000 nm. Die hier eingesetzten Bauteile arbeiten im Bereich von 940 nm.

Bei dem ersten Bauteil (hell, links auf dem Bild) handelt es sich um eine IR-Licht emittierende Leuchtdiode. Sie übernimmt in der Schaltung die Rolle eines IR-Emitters. Die IR-LEDs werden identisch wie gewöhnliche Leuchtdioden verschaltet, besitzen jedoch andere Eigenschaften. Abgesehen davon, dass sie IR-Licht emittieren, verbrauchen sie auch mehr Strom. In unsere Schaltung bekommt die IR-LED einen Vorwiderstand von 68 Ohm. Der gemessene Strom liegt bei 50 mA. Die IR-LED kann mit bis zu 100 mA belastet werden.

Der zweite Bauteil (dunkel, rechts auf dem Bild) ist ein IR-Empfänger. In diesem Fall ist das eine Fotodiode, die auf IR-Licht reagiert. Sie wird in Sperrrichtung angeschlossen. In der Schaltung bekommt sie einen Vorwiderstand von 10 kOhm. Je mehr Licht auf die Fotodiode fällt, umso durchlässiger wird sie. Das führt dazu, dass der Strom, der über den Vorwiderstand fließt, ansteigt. Der Spannungsabfall an dem Vorwiderstand ändert sich somit abhängig von der Strahlungsintensität. Dieser Spannungsabfall bildet unsere Messgröße. Sie wird mit einem analogen Eingang des Mikrocontrollers erfasst und ausgewertet.


Anzeige

Anzeige

Die errechnete aktuelle Drehzahl des Motors wird mithilfe einer 7-Segmentanzeige visualisiert. Bei der Anzeige handelt es sich um ein fertiges Modul, das u.a. mit dem Treiber TM1637 ausgestattet ist. Dank dessen wird die enorme Anzahl an Anschlüssen, die notwendig wären, um jedes LED-Element der Anzeige zu schalten, auf vier reduziert. Zwei Anschlüsse sind für die Spannungsversorgung vorgesehen. Mit den zwei weiteren wird die komplette Anzeige gesteuert.


Mikrocontroller

Mikrocontroller


Als Mikrocontroller hat in unserer Schaltung der ATtiyny 44A seinen Auftritt. Der kleine Chip hat 14 Pins, 12 stehen als I/Os zur Verfügung. In der Schaltung werden lediglich vier Pins in Anspruch genommen. Zwei werden benötigt, um die 7-Segmentanzeige anzusprechen. Mit einem weiteren wird eine Leuchtdiode gesteuert, die bei jeder Umdrehung des Motors kurz aufleuchtet. Bei der Messung der Drehzahl hat sie keine Funktion. Zu dem vierten Pin, der intern im Programm als analoger Eingang fungiert, wird das Messsignal geführt.

Mikrocontroller


Spannungsregler

Spannungsregler

In der Testschaltung haben wir mit einem Spannungskonflikt zu tun. Die Hauptversorgung wird mit einer Spannung von 12 VDC realisiert. Die meisten Komponenten vertragen jedoch lediglich 5 VDC. Hier kommt ein Spannungsregler zum Einsatz. Der Regler, der auf dem Chip LM2596 basiert, regelt die hohe 12V-Spannung auf 5V runter.


Schaltplan

Schaltplan


Programm

// **************************************************************************************
// Drehzahlmessung mit ATtiny44A
// Eine Schaltung mit IR Sender und Empfänger
// Arduino IDE 2.3.2
// **************************************************************************************

#include <TM1637Display.h>                  // Bibliothek 7-Segmentanzeige mit TM1637

#define CLK 6                               // Display Pins CLK/DIO
#define DIO 7

TM1637Display display(CLK, DIO);            // Display initialisieren

int Pin_LED = 5;                            // Blaue Leuchtdiode
int Sensor = A0;                            // Analoger Eingang Pin 13
int Signal_Aktuell;                         // Wert am analogen Eingang
int Impulse_Zaehler;                        // Laufzähler
bool Flanke_Positiv;                        // Flanke
unsigned long Zeit_Start;                   // Zeit Messung start
unsigned long Zeit_Intervall;               // Gemessene Zeit in Mikrosekunden
unsigned long Drehzahl;                     // Aktuelle Drehzahl

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

    display.setBrightness(10);              // Display Helligkeit
    display.clear();                        // Display löschen
    pinMode(Pin_LED, OUTPUT);               // Pin 8 (Ausgang 5) als Ausgang
    pinMode(Sensor, INPUT);                 // Pin 13 (Eingang analog A0) als Eingang
}

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

    Signal_Aktuell = analogRead(Sensor);         // Analogen Eingang auslesen

    if (Signal_Aktuell > 500 and Flanke_Positiv == false) {       // Messung Start
        digitalWrite(Pin_LED, HIGH);             // Blaue LED Ein
        Flanke_Positiv = true;                   // Messung Start merken
        Impulse_Zaehler++;                       // Laufzähler erhöhen
        if (Impulse_Zaehler == 1) {              // Bei Zähler=1 Zeit festhalten
            Zeit_Start = micros();               // Zeit in Mikrosekunden festhalten
        }
    } 
    if (Signal_Aktuell < 200 and Flanke_Positiv == true) {        // Merker zurücksetzen
        Flanke_Positiv = false;
        digitalWrite(Pin_LED, LOW);              // Blaue LED Aus
    }

    if (Impulse_Zaehler == 2) {                  // Berechnung nach einer Umdrehung
        Zeit_Intervall = micros() - Zeit_Start;  // Dauer in Mikrosekunden berechnen
        Drehzahl = 60000000 / Zeit_Intervall;    // Drehzahl berechnen
        display.showNumberDecEx((int)Drehzahl, 0b00000000, false, 4, 4);  // Ausgabe
        Impulse_Zaehler = 0;                     // Zähler zurücksetzen
        Flanke_Positiv = false;                  // Flanke-Merker zurücksetzen
    }
}       
// **************************************************************************************      


Bei dem Signal, das hinter dem Widerstand R3 abgegriffen wird, handelt es sich um ein analoges Signal. Das Signal wird am analogen Eingang A0 (Pin 13) des Mikrocontrollers gemessen. Der Analog-Digital-Converter des ATtinys ist ein 10-Bit Converter. Demnach liefert er intern Zahlen im Bereich 0-1023. Das Signal pendelt abhängig davon, ob die Bestrahlung des IR-Empfängers unterbrochen wurde oder nicht, zwischen 0V und 5V. Eine starke Signalveränderung, die bei Unterbrechung entsteht, wird im Programm als Flanke interpretiert und entsprechend ausgewertet. Es wird die Zeit zwischen zwei Flanken in Mikrosekunden gemessen. Die so gemessene Zeit dient als Grundlage für die Berechnung der Drehzahl.
Um die Zeitmessung nicht zu verfälschen, werden während der Messung keine anderen Programmfunktionen ausgeführt. Dies geschieht erst dann, wenn die Zeit für eine Umdrehung feststeht.

Testschaltung

Testschaltung


Kurzvideo

Kurzvideo


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz