In dem Versuch wird ein einfacher Zweipunktregler zusammengestellt. Die Versorgungsspannung kann zwischen 7 und 30 V liegen. Der große Bereich ist
dem Spannungsregler MC78L05A zu verdanken, der der Schaltung vorgeschaltet wird. Die Eingangsspannung wird auf 5VDC runtergeregelt, die Betriebsspannung unserer Schaltung.
Bei einer direkten Einspeisung mit 5VDC kann auf den Regler verzichtet werden.
Die Schaltung überwacht den aktuellen Wert eines externen Signals, das im Bereich 0-10V liegt. Das Signal stammt von einem beliebigen Sensor, der die aktuelle
Situation im Regelkreis überwacht. Das Signal wird mit zwei Widerständen (R1+R2) halbiert und so an die Betriebsspannung des Mikrocontrollers angepasst. Das Signal
wird über die Klemmen X3/X4 der Schaltung zugeführt. Im Fall, dass das untersuchte Signal max. nur 5V erreichen kann, kann auf den Spannungsteiler verzichtet werden.
Mit zwei Potentiometern P1 und P2 werden die gewünschte Schaltschwelle (P1) und Hysterese (P2) eingestellt. Mit diesen zwei Werten werden zwei Grenzwerte: untere
und obere Schaltschwelle festgelegt.
Wenn der Wert des externen Signals die eingestellte untere Schaltschwelle unterschreitet (z.B. Heizungssteuerung, Temperatur zu niedrig), wird das Relais
K1 eingeschaltet (Heizung EIN). Sobald dagegen die obere Schaltschwelle überschritten wird (Temperatur zu hoch), wird das Relais wieder abgeschaltet (Heizung AUS).
Die Schaltschwelle, für derer Einstellung P1 zuständig ist, wird skaliert, bis sie im Bereich 0,5V - 4,5V liegt. Die Einstellung der Hysterese erfolgt im Bereich
5%-75% (Bereich 0-2,5V). Damit die Schaltvorgänge unabhängig von Einstellungen immer möglich sind, beträgt die unterste Schwelle 0,25V. Die oberste Schaltschwelle
beträgt dagegen 4,75V.
Schaltplan
Spannungsregler
Damit die Schaltung nicht von einer bestimmten Spannungsversorgung abhängig wird, wird der Schaltung ein Spannungsregler vorgeschaltet. Dank dessen kann als
Spannungsversorgung eine Spannung im Wert von bis zu 30V verwendet werden. Bei dem MC78L05AC handelt es sich um einen linearen Spannungsregler, der einen Strom bis zu
100 mA liefern kann. Der Regler verfügt über eine interne Strombegrenzung und eine thermische Abschaltung. Am Ausgang herrscht eine Spannung
von 5VDC.
Transistor
Um den digitalen Ausgang des Mikrocontrollers nicht zu überlasten, wird ein angeschlossenes Relais mithilfe eines NPN-Transistors geschaltet.
Der Transistor, der hier als ein gewöhnlicher Ein/Aus-Schalter fungiert, muss natürlich in der Lage sein, den benötigten Strom auch problemlos bereitzustellen.
In unserem Fall ist ein Relais-Strom von ca. 40 mA zu erwarten. Das können sowohl der eingesetzte Spannungsregler (100 mA) als auch der Transistor BC172 (100 mA)
problemlos bewerkstelligen.
Relais
Das eingesetzte Relais verfügt über einen Wechsler-Kontakt. So kann man den Endverbraucher beim Unterschreiten bzw. Überschreiten des eingestellten
Schwellenwertes je nach Bedarf ein- oder ausschalten. Mit dem Relais (HJR-4102E-L-05V) können Lasten bis zu 3A geschaltet werden. Völlig ausreichend für z.B.
Heizventile oder kleine bis mittlere Lüfter, um einfache Regelaufgaben zu realisieren. Der Endverbraucher kann mit einer Fremdspannung, von z.B. 230V
versorgt werden.
Zwar hat der ATtiny85 lediglich acht Beinchen, dies müsste jedoch, um die Aufgabe zu realisieren, ausreichen. Ein Anschluss bleibt sogar frei, um eventuelle
Erweiterungen des Reglers durchzuführen. Der Mikrocontroller arbeitet mit einer Spannung von 5VDC. Drei seiner Anschlüsse werden für die Auswertung von analogen
Signalen verwendet. Der Mikrocontroller stellt uns mit ADC1, ADC2 und ADC3 drei analoge Eingänge zur Verfügung, die für die Lösung der Aufgabe benötigt werden.
Mit einem digitalen Ausgang wird ein Relais geschaltet.
Die Hauptaufgabe des Mikrocontrollers besteht darin, die analogen Werte auszulesen, sie entsprechend zu skalieren und zu vergleichen.
Das externe analoge Signal 0-10V wird mit einem Poti, das auf dem Schaltplan nicht vermerkt ist, simuliert. Laut Schaltplan ist das Signal an die Klemmen X3/X4
anzuschließen. Die Spannungsversorgung beim Testen beträgt 10V. Am Ausgang der Schaltung wird eine Leuchtdiode mit einem Vorwiderstand angeschlossen. Sie simuliert das
Stellglied. Je nach Bedarf kann für den Schaltvorgang ein Schließer oder Öffner des Relais benutzt werden. In unserem Beispiel wird das Relais beim Unterschreiten der
unteren Grenze eingeschaltet, beim Überschreiten der oberen Grenze wird das Relais abgeschaltet. Es wird ein Schließer verwendet.
Programm
// *******************************************************************************************
// Zweipunktregler mit ATtiny
// Eine Schaltung mit ATtiny85
// Arduino IDE 2.3.5
// *******************************************************************************************
int Pin3_Externes_Signal = 2; // ADC2
int Pin2_Schaltschwelle = 3; // ADC3
int Pin7_Hysterese = 1; // ADC1
int Pin5_Relais = 0; // PB0
int Externes_Signal; // Regelkreis Rückmeldung 0-10V
int Schaltschwelle; // Schaltschwelle 1V-9V
int Hysterese; // Hysterese 5%-75%
// *******************************************************************************************
void setup() {
pinMode(Pin5_Relais, OUTPUT); // Pin 5 als Ausgang definiert
}
// *******************************************************************************************
void loop() {
// Wert des externen Signals 0-10V ermitteln ---------------
// Signal halbiert auf 0-5V
// Max interner Wert 5V = 1023
Externes_Signal = analogRead(Pin3_Externes_Signal);
// Wert eingestellte Schaltschwelle ermitteln --------------
Schaltschwelle = analogRead(Pin2_Schaltschwelle);
// Wert skalieren auf Bereich 0,5 bis 4,5 V
// 0,5V = 102 / 4,5V = 920
int x = Wert_skalieren (Schaltschwelle, 102, 920);
Schaltschwelle = x;
// Wert eingestellte Hysterese ermitteln -------------------
Hysterese = analogRead(Pin7_Hysterese);
// Wert skalieren Bereich 5% bis 75% Bereich 0 - 2,5V
// 5% = 25 / 75% = 383
x = Wert_skalieren (Hysterese, 25, 383);
Hysterese = x;
// Relais EIN (Untergrenze unterschritten) -----------------
int Untere_Grenze = Schaltschwelle - Hysterese;
if (Untere_Grenze < 51) {
Untere_Grenze = 51; // Unterste Grenze (Schaltschwelle - Hysterese = 0,25V)
}
if (Externes_Signal < Untere_Grenze) {
digitalWrite(Pin5_Relais, HIGH);
}
// Relais AUS (Obergrenze überschritten) -------------------
int Obere_Grenze = Schaltschwelle + Hysterese;
if (Obere_Grenze > 971) {
Obere_Grenze = 971; // Oberste Grenze (Schaltschwelle + Hysterese = 4,75V)
}
if (Externes_Signal > Obere_Grenze) {
digitalWrite(Pin5_Relais, LOW);
}
}
// *******************************************************************************************
int Wert_skalieren (int Wert, int Grenze_Unten, int Grenze_Oben) {
float a = float(Wert) / 1023;
a = a * (Grenze_Oben - Grenze_Unten);
a = a + Grenze_Unten;
int Neuer_Wert = int(a);
return Neuer_Wert;
}
// *******************************************************************************************