Simulation d’entrées numériques et analogiques sur un automate

longjohnmcgee

Simulation d’entrées numériques et analogiques sur un automate


Quelle serait la manière la plus simple d’interfacer les entrées numériques et analogiques d’un API aux sorties d’un AVR ATmega328? Tout ce que je dois faire est de simuler différentes valeurs analogiques et états numériques.

Réponses


 AngryEE

Tout d’abord, votre ATMega328 n’a pas de convertisseur numérique-analogique, vous avez donc besoin de circuits supplémentaires pour générer des signaux analogiques. Il y a quelques options.

Ma première idée serait d’utiliser PWM et un filtre passe-bas pour générer des tensions analogiques. Avec cette méthode, vous utilisez le module PWM pour produire une onde carrée avec une largeur d’impulsion variable. Lorsque ce signal est filtré avec un filtre passe-bas, vous obtenez une tension analogique. L’amplitude de la tension est linéairement proportionnelle à la largeur d’impulsion de votre forme d’onde. Pour l’ATMega328, une largeur d’impulsion de 100% produit une tension analogique égale à la Vcc fournie à la puce (généralement 5 V ou 3,3 V) et une largeur d’impulsion de 0% produit 0 V. Vous pouvez ajouter des amplificateurs à ce signal pour étendre la plage, mais vous aurez bien sûr besoin d’une alimentation pour fournir la tension la plus élevée à l’amplificateur.

Le problème avec cette méthode est le filtre. À moins qu’il ne soit complètement filtré, le signal PWM provoquera une ondulation de votre tension analogique à la fréquence PWM. Cependant, le filtrage du signal réduit complètement la bande passante des signaux analogiques que vous pouvez générer. C’est le principal compromis dans la conception d’un D / A comme celui-ci. Discutons des filtres pendant une seconde.

Un filtre passe-bas unipolaire typique se compose d’une résistance et d’un condensateur. Les valeurs de ces deux composants déterminent la bande passante ou la fréquence de coupure du filtre. Un seul pôle réduit la force de tous les signaux au-dessus de sa fréquence de coupure à un taux de -20 dB / décennie. Une décennie est la différence entre des puissances de dix dans le domaine fréquentiel – 1 Hz à 10 Hz est une décennie, 10 Hz à 100 Hz est une décennie, etc. -20 dB signifie que l’amplitude d’un signal est réduite à 1/10 de ce qu’il était auparavant. Donc, pour rassembler tout cela dans un exemple: si vous avez un signal 1V, 10KHz que vous passez à travers un filtre unipolaire avec une bande passante de 1KHz, le signal qui sort sera un signal 0,1V 10KHz. Si vous avez un autre signal de 1 V à 500 Hz, il passe sans réduction de la force – vous obtenez un signal de 1 V à 500 Hz.

L’astuce consiste à réduire la puissance du signal PWM à un niveau beaucoup plus faible tout en maintenant la fréquence de coupure aussi élevée que possible. Garder la fréquence de coupure aussi élevée que possible augmente la fréquence des signaux que vous pouvez générer avec votre convertisseur PWM D / A. Si votre fréquence de coupure est de 1 kHz, l’onde sinusoïdale maximale que vous pouvez générer est de 1 kHz, et l’onde carrée maximale que vous pouvez générer est de 100 Hz (bien sûr, si vous avez uniquement besoin de générer des ondes carrées, vous n’avez pas besoin d’un convertisseur N / A – juste le module PWM sans filtre). Le signal PWM sortant de l’ATMega328 sera un signal 5V (crête à crête) avec une fréquence égale à la fréquence PWM que vous configurez pour avoir. Typiquement, ceci est choisi pour être dans la région des dizaines de KHz. 36KHz est une fréquence populaire, donc je vais y aller.Si le signal PWM est à une décennie de la fréquence de coupure, ce sera un signal de 0,5 Vpp qui ressemble à une ondulation rapide de votre tension analogique. Si cela est une ondulation acceptable dans le signal, cela vous laisse une bande passante de 3,6 kHz. Sinon, vous devrez peut-être revenir sur une autre décennie, ce qui vous laisserait une bande passante de 360 ​​Hz et une ondulation de 0,05 Vpp. Vous pouvez voir que pour un signal plus propre, vous sacrifiez la bande passante des signaux que vous pouvez générer.

Si cela ne vous plaît pas, vous pouvez toujours créer une échelle R2R . Fondamentalement, cela utilise des sorties numériques et des diviseurs de tension de résistance pour générer des tensions analogiques. L’avantage de ceci est une bande passante plus élevée – vous pouvez changer la tension analogique aussi vite que vous pouvez changer toutes les sorties numériques. Le principal inconvénient de cela est le nombre limité de tensions de sortie que vous pouvez créer. Vous avez besoin de beaucoup de résistances et de sorties numériques pour générer une variété de tensions. Jetez un oeil à la liaison, mais le plus long et le plus court est qu’avec une sortie numérique et deux résistances, vous pouvez générer deux tensions. Deux sorties numériques, quatre résistances, quatre tensions, etc.

Le numérique est au moins facile – tant que les tensions sont correctes et que toutes les spécifications actuelles sont respectées, les entrées doivent simplement fonctionner. Si l’API lit l’ATMega328, vous devez vous assurer que VOH pour l’ATMega328 est supérieur à VIH pour l’API et que l’ATMega328 VOL est inférieur à l’API VIL. Pour le courant, assurez-vous que la LIO de l’ATMega328 est supérieure à l’IIL de l’API et que l’IOH de l’ATMega328 est supérieure à l’IH de l’API. Pour toutes les lignes numériques pilotées par l’automate, changez les noms ATmega328 et PLC ci-dessus.

Et puis, en plus de tout cela, vous avez besoin d’une sorte d’interface sur l’ATMega328 pour vous permettre de déformer toutes les différentes tensions analogiques et numériques. Je recommanderais d’utiliser un UART pour parler à un PC via une puce adaptateur série FTDI <-> USB. Il y a de bons câbles à cet effet ici (j’aime le TTL-232RG-VSW5V-WE). Bien sûr, si vous utilisez la carte Arduino, vous obtenez gratuitement la série <-> USB, donc c’est bien. Vous pouvez écrire quelque chose comme une interface graphique Labview ou Python pour modifier toutes les différentes valeurs numériques et analogiques. Cela étant dit, je pense avoir vu une version de l’Arduino qui la rend facilement contrôlable à partir d’une interface Python – quelqu’un peut-il me rappeler comment cela s’appelle?


 magistral

Les microcontrôleurs sont normalement conçus pour pas plus de 5 V, mais les automates industriels ont une variété de plage de tension, du minimum de 12 V CC ou 24 V CC à 220 V CA. En supposant que pour un automate 12/24 VDC, vous avez d’abord besoin d’un convertisseur de niveau de tension, la meilleure option est de créer votre propre circuit opto-isolé en utilisant PC817 ou 4N25 ou tout ce que vous obtenez. Cette option est destinée aux sorties numériques de l’automate vers le micro.

Les tensions analogiques ont également une large plage, mais ont un maximum de 10 V, vous pouvez donc utiliser un circuit de division de tension à cet effet en utilisant des résistances de 1%.


 avra

Vous obtiendrez quelques idées si vous jetez un œil aux schémas de l’ automate mikroElektronika AVR et de l’ Arduino PLC .

 

#et, analogiques?, automate, d’entrées, numériques, simulation, sur, un

 

google

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *