Das Multifunktions-Zeitrelais, das wir jetzt mit der folgenden Schaltung kreieren werden, soll insgesamt vier
Zeitfunktionen zur Verfügung stellen. Je nachdem wie die Parameter eingestellt werden, sollen die Funktionen Einschaltverzögerung
oder Ausschaltverzögerung benutzt werden können. In drittem Modus sollen die beiden Funktionen gleichzeitig einstellbar sein.
Und schließlich soll es möglich sein, dass die Schaltung als Impulsgeber fungiert.
Die Parametrierung erfolgt extern. Die zentrale Rolle der Schaltung übernimmt der Mini-Mikrocontroller PIC10F200. Der Chip
stellt vier „Beinchen“ zur Verfügung. Drei von ihnen werden in der Schaltung als Eingänge in Anspruch genommen. Das vierte „Beinchen“
definieren wir als Ausgang.
Zwei Eingänge sind Parameter-Eingänge. Je nachdem, wie die beiden Eingänge verdrahtet sind, steht eine bestimmte Zeitfunktion
zur Verfügung. Die Parameter bestimmen folgende möglichen Modi der Schaltung:
– Einschaltverzögerung
– Ausschaltverzögerung
– Ein- und Ausschaltverzögerung
– Impulsgeber.
Mit dem Ausgang wird ein Transistor geschaltet, an dem ein Relais angeschlossen wird. Das Relais stellt einen potenzialfreien
Wechsler-Kontakt zur Verfügung. Mit dem Relais kann man dann beliebige Abnehmer, die auch andere Spannungen benötigen,
schalten. In unserer Testschaltung übernimmt die Rolle eines Abnehmers eine Leuchtdiode, der zur Strombegrenzung ein Vorwiderstand
vorgeschaltet wird.
PIC10F200
Der Mikrocontroller PIC10F200 verfügt über sechs aktive Pins. Davon stehen uns vier als Eingänge oder Ausgänge zur
Verfügung. In dieser Schaltung werden alle vier Pins verwendet. Von den acht Pins des Bausteins sind zwei
ohne Funktion.
Das Printrelais JS5N-K ist ein monostabiles Relais mit einem Wechsler-Kontakt. Die Spulenspannung
beträgt 5VDC.
Technische Daten: Nennspannung Spule: 5 VDC
Widerstand der Spule: 112 Ω
Kontaktart: 1 Wechsler
Schaltspannung: 150 VDC, 400 VAC
Schaltstrom (max.): 10 A
Min. Temperatur: -40 °C
Max. Temperatur: +85 °C
Länge: 29 mm
Breite: 10 mm
Höhe: 12.5 mm
Pinbelegung, Ansicht von unten
Transistor BD135-16
Für die hier gestellte Aufgabe ist der Transistor BD135-16 stark überdimensioniert. Er kann Abnehmer bis zu 1,5 A schalten.
Möchte man tatsächlich solche Ströme mit dem Transistor bedienen, wäre ein Kühlkörper notwendig.
// ***************************************************************************
// Multifunktions-Zeitrelais mit PIC10F200
// MPLAB X IDE v6.00
// XC8-Compiler 2.4
// ***************************************************************************
#include <xc.h>
#include <stdbool.h>// PIC10F200 Konfiguration
#pragma config WDTE = OFF // Watchdog Timer
#pragma config CP = OFF // Code Protect
#pragma config MCLRE = OFF // Master Clear (GP3/MCLR)
#define CLEAR_BIT(Var,BitNr) ((Var) &= ~(1 << BitNr))
#define _XTAL_FREQ 4000000 // Taktfrequenz
#define Relais_Ausgang GPIObits.GP0 // GP0 ist Relais-Ausgang
#define Schalter_Ein_Aus GPIObits.GP1 // GP1 ist Ein-Aus-Schalter
#define Codierschalter_1 GPIObits.GP2 // GP2 ist Codierschalter 1
#define Codierschalter_2 GPIObits.GP3 // GP2 ist Codierschalter 2
_Bool Schaltung_Aktiv; // Hilfsmerker Schaltung wurde aktiviert
unsigned char Modus; // gewählter Modus (Codierschalter) // 00, Modus=0 --> Einschaltverzöegerung // 01, Modus=1 --> Ausschaltverzögerung // 10, Modus=2 --> Ein- und Ausschaltverzögerung // 11, Modus=3 --> Impulsgeber
void main(void) {
Relais_Ausgang = 0; // Relais AUS
TRIS = 0b00001110; // GP0=Ausgang, GP1=GP2=GP3=Eingang
Modus = 3; // Modus vorbelegen
if (Codierschalter_1 == false) CLEAR_BIT(Modus,0); // Modus bestimmen, Bit 0 löschen
if (Codierschalter_2 == false) CLEAR_BIT(Modus,1); // Modus bestimmen, Bit 1 löschen
Start: // Sprungziel für goto Anweisung
if (Schaltung_Aktiv == 0) { // Programm-Ablauf inaktiv?
if (Schalter_Ein_Aus == 0) { // Schaltung mit Ein-Aus-Schalter aktiviert ?
Schaltung_Aktiv = 1; // Programm läuft
if (Modus == 1) { // Ausschaltverzögerung eingestellt ?
Relais_Ausgang = true; // Relais unverzögert einschalten
goto Schritt_2; } // Sprung zum Schritt_2 (ohne Verzögerung)
__delay_ms(2500); // Einschaltverzögerung
Relais_Ausgang = true; // Relais Ein
}
}
Schritt_2: // Sprungziel Schritt_2
if (Schaltung_Aktiv == true) { // Programm-Ablauf aktiv?
if (Schalter_Ein_Aus == 1) { // Ein-Aus-Schalter abgeschaltet?
Schaltung_Aktiv = 0; // Programmablauf auf beendet vorbelegen
if (Modus == 0) { // Einschaltverzöegerung eingestellt?
Relais_Ausgang = false; // dann, Relais sofort Aus
goto Start; // Zurück, auf Neustart warten
}
__delay_ms(5000); // Ausschaltverzögerung abwarten
Relais_Ausgang = false; // relais Aus
}
if (Schalter_Ein_Aus == 0) { // Ein-Aus-Schalter An? (Impulsgeber)
if (Modus == 3) { // Impulsgeber Modus eingestellt ?
Schaltung_Aktiv = 0; // Merker vorbelegen
__delay_ms(5000); // Zeit (in diesem Fall Ein-Zustand)
Relais_Ausgang = false; // Relais Aus
}
}
}
goto Start; // Abfragen und Schritte wiederholen
}
Die Testschaltung
Multifunktions-Zeitrelais mit PIC10F200 - Testschaltung
Die wichtigste Variable, die im Programm berücksichtigt werden muss, ist die Variable „Modus“. Sie bestimmt, was die Schaltung
machen soll. Die Variable kann vier Werte (0 bis 3) annehmen. Der gewünschte Modus, also auch der Wert der Variable „Modus“, wird mit
den beiden Codierschalter S2 und S3 festgelegt. Im nicht betätigten Zustand stehen die Eingänge, an die die Schalter angeschlossen
sind, dank der Pull-Up-Widerständen auf HIGH. Sobald ein Schalter betätigt wird, ändert sich der Zustand des jeweiligen Eingangs auf LOW. In
diesem Moment wird im Programm auch das entsprechende Bit der Variable „Modus“ genullt und so ihr Wert verändert.
Die Variable „Modus“ wird beim Start des Programms mit dem Wert 3 vorbelegt. Binär betrachtend stehen die zwei ersten Bits der
Variable (von rechts nach links betrachtend) auf 1 (0b11). Wenn der Schalter S2 eingeschaltet wird, geht das erste Bit der Variable
auf 0. Jetzt hat sie den Wert 2 (0b10).
Usw. Die möglichen Modi, die mit den Schaltern S2 und S3 eingestellt werden können, sind:
00 – Einschaltverzögerung (Modus = 0)
01 – Ausschaltverzögerung (Modus = 1)
10 – Ein- und Ausschaltverzögerung (Modus = 2)
11 – Impulsgeber (Modus = 3)
Weitere Variable „Schaltung_Aktiv“ hilft, den Ablauf zu steuern und verhindert, dass die gleichen Schritte im ungewünschten
Moment wiederholt werden. Die Ein- und Ausschaltverzögerungszeiten werden via Software eingestellt. Ein Merkmal der Schaltung ist
zu beachten: Im aktivierten Modus „Impulsgeber“ (Variable Modus = 3) steht die Einschaltverzögerung-Zeit für Relais-AUS, die
Ausschaltverzögerung-Zeit für Relais-AN.