
Avant de poursuivre, je voudrais avertir un lecteur zélé.
- Ce que je décris ne peut pas être fait pour de nombreuses raisons, ces raisons seront joyeusement indiquées dans les commentaires, et je ne vous invite en aucun cas à le faire. Et en aucun cas je ne prétends que le dispositif décrit ci-dessous peut remplacer un véritable automate. Tout ce qui a été décrit n'a été fait que pour me prouver que cela est techniquement possible et ne s'applique pas aux équipements réels.
- Si vous ne vous sentez malade qu'en mentionnant le mot "Arduino", vous feriez mieux de ne pas lire. J'ai effectué toutes les actions avec le contrôleur dans l'IDE Arduino, c'est plus facile pour moi. Mais rien n'empêche de faire de même sans l'utiliser.
Pendant longtemps, j'ai voulu écrire un article sur mes expériences avec ATtiny13, mais c'était surtout effrayant pour l'attitude envers l'équipe Arduino sur le site. De plus, je ne travaille avec les contrôleurs que depuis quelques années (merci encore à Arduino, oh, où étiez-vous avant!). Commentaires sur l'article
Trois yeux accrochés au post ... ont montré que le sujet est toujours intéressant pour un nombre suffisant d'utilisateurs. Soit dit en passant, le titre de l'article était censé être «PLC on ATtiny13», mais dans les mêmes commentaires, ils m'ont poliment expliqué
sur la table que l'appareil décrit ne pouvait pas être appelé «PLC». Et bien non, non.
De quoi avons-nous besoin de l'automate?
Cela a commencé par le fait que je voulais faire un analogue fonctionnel des automates utilisés dans mon entreprise, en tenant compte de leur utilisation. La plupart des circuits de contrôle que nous avons relais avec toutes les lacunes qui en découlent. Des automates de différents types sont également utilisés par endroits, à partir des années 90. Fondamentalement, ils effectuent la tâche logique du circuit de commande, à partir de l'état des interrupteurs de fin de course et des capteurs de proximité.
Pas d'interfaces complexes, pas de signaux analogiques. On / Off. C’est tout. Pour la plupart, même la charge pour les sorties de l'automate est fournie par les mêmes relais dont ils étaient si désireux de se débarrasser. (Ce qui est amusant, c'est que presque partout les sorties de relais PLC sont utilisées, qui commutent les relais externes, qui commutent les électroaimants des distributeurs hydrauliques ... Parfois, une liaison supplémentaire du démarreur est ajoutée.) Alors, de quoi ai-je besoin de la part de l'automate:
- Entrées discrètes pour un niveau de signal de 24 volts.
- Sorties discrètes avec une tension de 24 volts.
- Test de l'algorithme interne selon un schéma donné, qui peut être modifié si nécessaire (principalement lors du débogage).
- Vitesse d'environ 50 ms, plus nécessaire pour remplacer les circuits de relais.
Et c'est tout. Pas d'interfaces. Aucune interruption. Pas d'écrans. Ah, oui, les écrans ... Cela ne fera pas de mal d'afficher l'état des entrées et sorties; ici, les LED n'ont pas encore de LED plus fiables. Eh bien, n'oubliez pas que tout est fait par intérêt sportif, respectivement, le budget tombe sur les épaules du développeur. Soit dit en passant, une très bonne incitation.
Si vous ne tenez pas compte du niveau de signal de 24 volts, alors n'importe quel microcontrôleur avec le nombre d'E / S (entrées / sorties) non inférieur à celui requis peut facilement faire face à la tâche.
Nous nous occupons des niveaux
Au départ, je voulais utiliser des optocoupleurs aux entrées. Quiconque est plus ou moins familiarisé avec l'électronique, notamment industrielle, sait qu'il n'y a pas beaucoup d'optocoupleurs. Les commentaires vous expliqueront en détail pourquoi cela est impossible sans optocoupleurs. Mais j'ai pesé le pour et le contre et j'ai décidé de refuser. Ainsi, certains ne liront peut-être pas plus loin et passeront immédiatement à écrire un commentaire.
Donc, nous avons un signal d'entrée de 24 volts, ou 0 volts en l'absence de signal. Cela permettra l'utilisation d'un capteur de position inductif sans contact ou d'un interrupteur de fin de course conventionnel. À partir de 24 volts, vous devez obtenir la tension de l'unité logique en toute sécurité pour le contrôleur. Le bon vieux diviseur de tension y fait face aussi bien que possible.

Les résistances sont calculées en tenant compte du fait que pour tout écart de la tension d'entrée de plus ou moins 20% de la tension nominale à l'entrée du microcontrôleur, il devrait y avoir plus que la tension de commutation (généralement la moitié de la tension du contrôleur), mais pas plus que la tension du contrôleur, nous la considérons égale à 5 V. Convient à tout contrôleur de la famille AVR. De plus, le courant estimé à travers le diviseur est d'environ 7 mA, ce qui réduit la probabilité d'interférence et, en même temps, ne charge pas fortement la sortie du capteur et la source d'alimentation. Une diode zener de 4,7 V sert à protéger contre les surtensions à la même interférence. Il y a encore un rebond de contacts, on peut se battre avec lui par programmation ou pas du tout, c'est juste une maquette. Maintenant, je devrais encore indiquer l'état de l'entrée. Et ici, vous pouvez appliquer lifehack, tuant deux oiseaux avec une pierre:

La LED sur le circuit remplit deux fonctions - elle fonctionne comme une diode zener, limitant la tension à 2,8 ... 2,9 volts (uniquement pour les LED bleues et blanches!), Et elle brille également. Je dois vous avertir que dans certains cas, la tension sur la LED n'est pas suffisante pour commuter l'entrée du contrôleur! Lorsque vous utilisez plusieurs entrées de contrôleur, nous simplifions ainsi l'installation et économisons plusieurs diodes zener. En augmentant en douceur la tension d'entrée, vous pouvez remarquer que le moment d'allumage de la LED et le moment de commutation de l'entrée ne coïncident pas un peu. Mais cela ne nous dérange pas beaucoup, car il ne devrait pas y avoir de niveaux intermédiaires à l'entrée, seulement 0 V ou 24 V. Naturellement, à ce moment, vous devriez avoir au moins le firmware de test minimum pour une entrée et une sortie dans le contrôleur.
Maintenant, le signal de sortie du contrôleur doit également être adapté pour 24 V, et en tenant compte du fait que le fil commun, qui est également un moins, est commun à tous les relais de sortie. Ici, vous avez besoin d'au moins 2 transistors et 2 résistances:
En fait, une autre résistance serait nécessaire, et une diode de protection parallèle au relais, mais ce n'est pas tout. Au début, j'ai utilisé ce circuit. Mais à un moment donné, j'ai attiré l'attention sur les optocoupleurs, ce que j'ai refusé au début.
Celui qui nous dérange nous aidera
Nous regardons les paramètres des optocoupleurs par fiches techniques: le PC817C par sortie le moins cher et le plus abordable vous permet de commuter U o: 35 V: I o: 50 mA. Les relais qui sont connectés à l'automate chez nous (dans l'entreprise) prennent jusqu'à 45 mA. Sans stock, mais tout à fait approprié. La plupart des relais de petite taille à 24 V tirent jusqu'à 15 ... 20 mA. En fin de compte, vous pouvez acheter un optocoupleur plus cher, si vous en avez vraiment besoin, il existe à la fois un courant jusqu'à 80 mA et une tension jusqu'à 60 V. Nous sommes adaptés à la disposition et au 817. Afin de ne pas tirer de leçons de vos erreurs, je vous préviens que pour un courant de sortie maximal via la LED optocoupleur, vous devez passer plus de 7 mA.
Eh bien, encore une fois, rappelez-vous l'indication. Pour afficher l'état de la sortie, nous ajoutons une LED en série avec la LED de l'optocoupleur, il nous reste encore plus de 3 volts au ralenti. Et il est temps de dessiner une diode de protection avant de brûler l'optocoupleur. Soit dit en passant, je n'ai pas trouvé de méthode pour choisir une diode de protection, en fonction des paramètres du relais. D'une part, il doit être pulsé, d'autre part, à haute tension. De plus, il peut être placé parallèlement au transistor, quoi de mieux? La pratique montre qu'une diode IN4148 suffisamment faible puissance dans ce cas, mais je voudrais une justification théorique.
Une résistance de 220 ohms est indiquée avec le calcul à nouveau sur une LED bleue ou blanche, si vous mettez du rouge, le courant dans le circuit de 3,5 mA passera à 9 mA, cela doit être pris en compte.
Un peu sur la programmation
Eh bien, il y a tellement de lettres, mais je ne suis toujours pas allé au bas du titre, ni à ATtiny13. Pour programmer mon contrôleur, j'ai utilisé
le projet FLProg , un environnement de programmation visuel qui rapproche le plus possible la programmation du contrôleur de la programmation PLC en CONT et LOG. Le circuit créé dans cet environnement, qui est également un projet, est compilé dans un croquis Arduino, que j'ai déjà téléchargé d'Arduino vers ATtiny13 ou un autre contrôleur de la famille AVR. Par exemple, un schéma aussi simple

compile en code comme ceci:
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. , : « ?»