| Drehzahlmessung mit ATtiny44
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.
MotorBei 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.
|
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.
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.
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.
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.
#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.
Kurzvideo
Google-Suche auf MEINE-SCHALTUNG.de : |