
Bevor ich fortfahre, möchte ich einen eifrigen Leser warnen.
- Was ich beschreibe, kann aus vielen Gründen nicht getan werden. Diese Gründe werden Ihnen in den Kommentaren freudig mitgeteilt, und ich fordere Sie in keiner Weise dazu auf. Und in keinem Fall behaupte ich, dass das unten beschriebene Gerät eine echte SPS ersetzen kann. Alles, was beschrieben wurde, wurde nur getan, um mir selbst zu beweisen, dass dies technisch möglich ist und nicht für echte Geräte gilt.
- Wenn Sie sich nur krank fühlen, wenn Sie das Wort "Arduino" erwähnen, lesen Sie besser nicht. Ich habe alle Aktionen mit dem Controller in der Arduino IDE ausgeführt. Das ist für mich einfacher. Aber nichts hindert daran, dasselbe zu tun, ohne es zu benutzen.
Lange wollte ich einen Artikel über meine Experimente mit ATtiny13 schreiben, aber es war in erster Linie beängstigend für die Einstellung zum Arduino-Team auf der Website. Außerdem arbeite ich erst seit ein paar Jahren mit Controllern (nochmals vielen Dank an Arduino, oh, wo warst du vorher!). Kommentare zum Artikel
Drei Augen hängen am Beitrag ... zeigten, dass das Thema für eine ausreichende Anzahl von Nutzern immer noch interessant ist. Der Titel des Artikels sollte übrigens "PLC on ATtiny13" lauten, aber in den gleichen Kommentaren erklärten sie mir höflich
auf dem Tisch, dass das beschriebene Gerät nicht "PLC" genannt werden könne. Nun nein, nein.
Was brauchen wir von der SPS?
Es begann mit der Tatsache, dass ich ein funktionales Analogon der in meinem Unternehmen verwendeten SPSen unter Berücksichtigung ihrer Verwendung erstellen wollte. Die meisten Steuerkreise haben wir Relais mit allen daraus resultierenden Mängeln. Ab den 90er Jahren werden auch stellenweise SPS verschiedener Typen eingesetzt. Grundsätzlich erfüllen sie die logische Aufgabe des Steuerkreises ausgehend vom Zustand der Endschalter und Näherungssensoren.
Keine komplexen Schnittstellen, keine analogen Signale. Ein / Aus. Das ist alles. Zum größten Teil wird sogar die Last für die SPS-Ausgänge von denselben Relais bereitgestellt, die sie unbedingt loswerden wollten. (Das Lustige ist, dass fast überall SPS-Relaisausgänge verwendet werden, die externe Relais schalten, die Elektromagnete von Hydraulikverteilern schalten ... Manchmal wird eine weitere Verbindung vom Anlasser hinzugefügt.) Was brauche ich also von der SPS:
- Digitaleingänge für einen Signalpegel von 24 Volt.
- Diskrete Ausgänge mit einer Spannung von 24 Volt.
- Testen des internen Algorithmus nach einem bestimmten Schema, das bei Bedarf geändert werden kann (hauptsächlich während des Debuggens).
- Geschwindigkeit von ca. 50 ms, nicht mehr erforderlich, um Relaisstromkreise auszutauschen.
Und alle. Keine Schnittstellen. Keine Unterbrechungen. Keine Bildschirme. Ah, ja, die Bildschirme ... Es wird nicht schaden, den Status der Ein- und Ausgänge anzuzeigen. Hier haben LEDs noch keine zuverlässigeren LEDs. Vergessen Sie nicht, dass alles aus sportlichen Gründen erfolgt und das Budget auf die Schultern des Entwicklers fällt. Übrigens ein sehr guter Anreiz.
Wenn Sie den Signalpegel von 24 Volt nicht berücksichtigen, kann absolut jeder Mikrocontroller mit einer Anzahl von E / A (Ein- / Ausgängen), die nicht geringer als die erforderliche ist, die Aufgabe problemlos bewältigen.
Wir beschäftigen uns mit den Ebenen
Anfangs wollte ich Optokoppler an den Eingängen verwenden. Jeder, der sich mehr oder weniger mit Elektronik auskennt, insbesondere mit Industrie, weiß, dass es nicht viele Optokoppler gibt. In den Kommentaren erfahren Sie ausführlich, warum dies ohne Optokoppler nicht möglich ist. Aber ich wog die Vor- und Nachteile ab und beschloss, mich zu weigern. Einige lesen möglicherweise nicht weiter und schreiben sofort einen Kommentar.
Wir haben also ein Eingangssignal von 24 Volt oder 0 Volt, wenn kein Signal vorhanden ist. Dies ermöglicht die Verwendung eines berührungslosen induktiven Positionssensors oder eines herkömmlichen Kontaktendschalters. Ab 24 Volt muss die Spannung der logischen Einheit für die Steuerung sicher sein. Der gute alte Spannungsteiler kommt damit so gut wie möglich zurecht.

Die Widerstände werden unter Berücksichtigung der Tatsache berechnet, dass für Abweichungen der Eingangsspannung um plus oder minus 20% der Nennspannung am Eingang des Mikrocontrollers mehr als die Schaltspannung vorhanden sein sollte (normalerweise ist dies die Hälfte der Spannung des Controllers), aber nicht mehr als die Reglerspannung, wir betrachten sie als 5 V. Geeignet für jeden Controller der AVR-Familie. Außerdem beträgt der geschätzte Strom durch den Teiler etwa 7 mA, was die Wahrscheinlichkeit von Interferenzen verringert und gleichzeitig den Sensorausgang und die Stromquelle nicht stark belastet. Eine 4,7-V-Zenerdiode dient zum Schutz vor Überspannungen bei gleicher Interferenz. Es gibt immer noch viele Kontakte, wir können programmatisch oder gar nicht damit kämpfen, es ist nur ein Modell. Jetzt müsste ich noch den Status der Eingabe angeben. Und hier können Sie Lifehack anwenden und zwei Fliegen mit einer Klappe schlagen:

Die LED auf der Schaltung erfüllt zwei Funktionen: Sie funktioniert wie eine Zenerdiode und begrenzt die Spannung auf 2,8 ... 2,9 Volt (nur für blaue und weiße LEDs!). Außerdem leuchtet sie. Ich muss Sie warnen, dass in einigen Fällen die Spannung an der LED nicht ausreicht, um den Controller-Eingang zu schalten! Bei Verwendung mehrerer Controller-Eingänge vereinfachen wir somit die Installation und sparen mehrere Zenerdioden. Durch sanftes Erhöhen der Eingangsspannung können Sie feststellen, dass das Moment der Zündung der LED und das Moment des Schaltens des Eingangs nicht ein wenig zusammenfallen. Dies stört uns jedoch nicht sehr, da es am Eingang keine Zwischenpegel geben sollte, nur 0 V oder 24 V. Natürlich sollten Sie zu diesem Zeitpunkt mindestens die minimale Test-Firmware für einen Eingang und einen Ausgang im Controller haben.
Jetzt muss das Ausgangssignal von der Steuerung auch für 24 V angepasst werden, wobei zu berücksichtigen ist, dass der gemeinsame Draht, der ebenfalls ein Minus ist, allen Ausgangsrelais gemeinsam ist. Hier benötigen Sie mindestens 2 Transistoren und 2 Widerstände:
Tatsächlich wäre ein weiterer Widerstand und eine Schutzdiode parallel zum Relais erforderlich, aber darum geht es nicht. Zuerst habe ich diese Schaltung benutzt. Aber irgendwann machte ich auf die Optokoppler aufmerksam, die ich am Anfang ablehnte.
Derjenige, der uns stört, wird uns helfen
Wir betrachten die Parameter der Optokoppler anhand von Datenblättern: Mit dem billigsten und kostengünstigsten PC817C am Ausgang können Sie U o: 35 V: I o: 50 mA umschalten. Die Relais, die bei uns (im Unternehmen) an die SPS angeschlossen sind, benötigen bis zu 45 mA. Ohne Lager, aber durchaus geeignet. Die meisten kleinen Relais mit 24 V ziehen überhaupt bis zu 15 ... 20 mA. Am Ende können Sie einen teureren Optokoppler kaufen, wenn Sie ihn wirklich brauchen, dort sowohl Strom bis 80 mA als auch Spannung bis 60 V. Wir sind für das Layout und 817 geeignet. Damit Sie nicht aus Ihren Fehlern lernen, warne ich Sie, dass Sie für einen maximalen Ausgangsstrom durch die Optokoppler-LED mehr als 7 mA durchlassen müssen.
Erinnern Sie sich noch einmal an die Anzeige. Um den Status des Ausgangs anzuzeigen, fügen wir eine LED in Reihe mit der LED des Optokopplers hinzu. Dort fallen immer noch mehr als 3 Volt im Leerlauf. Und es ist Zeit, eine Schutzdiode zu zeichnen, bevor Sie den Optokoppler verbrennen. Übrigens konnte ich keine Methode zur Auswahl einer Schutzdiode finden, die von den Parametern des Relais abhängt. Zum einen muss es gepulst sein, zum anderen Hochspannung. Darüber hinaus kann es parallel zum Transistor platziert werden, was ist besser? Die Praxis zeigt, dass in diesem Fall eine Diode IN4148 mit ausreichend geringer Leistung vorhanden ist, aber ich hätte gerne eine theoretische Begründung.
Ein 220-Ohm-Widerstand wird bei der Berechnung erneut auf einer blauen oder weißen LED angezeigt. Wenn Sie rot setzen, steigt der Strom im Stromkreis von 3,5 mA auf 9 mA. Dies muss berücksichtigt werden.
Ein bisschen über das Programmieren
Nun, es gibt so viele Buchstaben, aber ich bin immer noch nicht am Ende des Titels angelangt, noch bei ATtiny13. Zum Programmieren meiner Steuerung habe ich
das FLProg-Projekt verwendet , eine visuelle Programmierumgebung, die die Steuerungsprogrammierung der SPS-Programmierung in KOP und FUP so nahe wie möglich bringt. Die in dieser Umgebung erstellte Schaltung, die ebenfalls ein Projekt ist, wird zu einer Arduino-Skizze kompiliert, die ich bereits von Arduino auf ATtiny13 oder einen anderen Controller der AVR-Familie hochgeladen habe. Zum Beispiel ein so einfaches Schema

Kompiliert in Code wie folgt:
bool _k1 = 0;
void setup()
{
pinMode(1, INPUT);
pinMode(2, INPUT);
pinMode(3, OUTPUT);
}
void loop()
{
_k1 = (((((!(digitalRead (1)))) &&((digitalRead (2))))) || ((((!(digitalRead (1)))) &&(_k1))));
digitalWrite (3, _k1);
}
- - , . FLProg , «» . , . , pin – , . ATtiny13, :
Attiny13 Attiny13a Arduino IDE , : FLProg ATtiny13 ( ), , , ATmega168. FLProg , ATtiny13, . Arduino IDE , .
? ATtiny13, 5 , . , 6 , , , :
? RESET.
, 6, . ?
:
, . . , . .
, 50 . , 50 , , . , .
0 2,8 , , . , , 1,1 ( ) 2,9 , 4 . , .
. , , . , , 5 , -- , . 3 ( ) 680 . , . , , .
? 50 , 1 , 50 . , 1 , . , .
, . , .
6+6=12 -, 2?
, ? , ) 4 , , , . 0 , , 2,8 , ( ). 24, 0, , 2 – 0,93 1,87 . , . Arduino IDE , ATtiny, . , .
, , 6 10 (!) ATtiny13 ( ). , , . , «» ATtiny. , ATmega8, . :-)
, .
, , , . I/O . , (8/6) , , « ».
, , , «»,
. .
P.S. , : « ?»