Étape 4: Conversion numérique analogique
Si vous êtes curieux, ou des problèmes analogiques, ou qui cherchent à concevoir des circuits analogiques, cela peut être utile.
L’ATmega328 a six broches d’entrée analogiques (voir la cartographie de la broche). Je suis en supposant que la puce a un seul convertisseur (analogique/numérique) puce dedans. Il est appelé un convertisseur 10 bits car il utilise dix bits, 210 ou 1024. Le dessin suivant est une assez bonne représentation du fonctionne du convertisseur. La description est assez technique et pas si important pour la plupart des utilisateurs de Arduino. Mais regardez le signal analogique, représenté par le signal doucement incurvée en haut à gauche. L’image d’étape d’escalier sur la partie inférieure gauche est représentative de la sortie numérique. Notez qu’au lieu d’une ligne incurvée en douceur comme le signal analogique, la sortie numérique est très irréguliers, souvent appelé un escalier pas. Pour l’Arduino, l’entrée numérique va de 0000000000 à 1111111111 1023 pas sous forme décimale.
Cette sortie numérique ne sort l’ATmega directement. Elle est uniquement utilisée en interne par le logiciel.
Pour la norme Arduino si vous avez 5V sur la broche analogique, le analogRead() sera 1023. Puisqu’il n’y a seulement 1023 différentes possibilités, ce qui signifie que chaque étape est 0.004888 V. Ce que cela signifie, c’est que si vous avez analogRead() de 1023, il pourrait signifier 5.000V ou 4.996V ou quelque part entre les deux. Donc chaque escalier pas signifie que la tension réelle peut être décalé de 0.004888 V.
En pratique : Pour beaucoup d'entre vous vont dire qui s’en soucie, et dans la plupart des cas, vous avez raison. La précision de cette lecture dépend de l’exactitude des SCR. Si l’Arduino utilise un régulateur de tension 7805, puis le 5V est de +/-1,5 %, qui est 0.075V. La tension réelle pourrait être n’importe où pour 5.075V à 4.925V, qui est beaucoup plus grande que la tolérance d’une étape. Bruit sur Vcc et le signal analogique est un autre facteur. Avec un port USB du PC, la tolérance 5V est généralement pire. La mienne mesure 4.84V.
Pratique avec l’Arduino standard, votre précision analogique est limitée à +/-1,5 % de la 7805 en tout cas.
Remarque : Je ne suis pas sûr de que ce qui suit est précis à 100 %.
Advanced information : Le 5V est égal à 1023 n’est pas toujours vrai pour l’Arduino. La valeur de 1023 est la tension sur la broche AVcc (pin 20 de l’ATmega) dans la plupart des conditions. Habituellement, AVcc est liée à la SCR et est de 5V. Toutefois, si le dessin contient la fonction AnalogReference(INTERNAL), puis une référence interne de 1.1V (pour l’ATmega 168 et 328) est utilisée. Je suis assez certain ce que cela signifie, c’est que si vous avez un 1.1V signal sur une broche analogique, puis l’analogRead sera 1023. Cela signifie qu’à chaque étape est égal à 0.001075V, ce qui signifie que vous pouvez obtenir plus de précision, mais cela signifie aussi votre entrée analogique maximale ne peut être que 1.1V. Maintenant AnalogReference() peuvent également être définies à l’extérieur. Ce qui veut dire la référence analogique est égale à la tension que vous mettez sur la broche AREF.
Avertissement: Soyez prudent si vous utilisez externe et une source de tension externe ; Cela pourrait gêner et endommager l’ATmega. Si vous exécutez un croquis différent, qui n’a pas AnalogReference(EXTERNAL) ensemble, puis la référence de tension externe va se battre à la tension de défaut sur AVcc. C’est comme les connecter ensemble les deux batteries de différentes tensions. Vous avez un circuit complet avec une tension mais résistance nulle alors beaucoup de courant. Je pense qu’il y a un moyen de contourner cela en le connectant à travers une résistance mais ne suis pas sûr.
La raison pour laquelle que j’ai mentionné AVcc et référence analogique, c’est que j’ai été mise mon Arduino-clone jusqu'à utiliser l’écran LCD Nokia. J’ai remarqué que LCD assez bien fonctionné quand j’utilisais la puissance de l’USB, mais il faisait très sombre quand j’ai branché un adaptateur de batterie Adafruit 9 v. Alors j’ai attrapé mon fidèle peu DMM et a fait quelques dépannage. Avec la puissance de l’USB, la SCR et la broche Aref sur l’ATmega étaient 4.84V. Avec la pile de 9 volts reliée au régulateur 7805 les deux broches sont à 5.03V. J’ai eu aussi un capteur de température fixé et autres essais vérifié que le relevé de température varie en fonction de ce que la tension AVcc était.
Donc si vous voulez améliorer l’exactitude de l’Arduino « standard », il y a façons de le faire.
Si vous définissez AnalogReference(INTERNAL), l’ATmega utilise 1.1V comme référence, ajuster vos calculs en conséquence.
Astuce : Une fois que vous changez AnalogReference(), jeter la première lecture analogique tel qu’il sera vide de sens.
Si vous définissez AnalogReference(EXTERNAL), vous pouvez vous fournir une référence propre, supposé il a une tolérance plus serrée.
Voir l' Avertissement ci-dessus.
Astuce : Une fois que vous changez AnalogReference(), jeter la première lecture analogique tel qu’il sera vide de sens.
Ces mêmes six broches analogiques utilisent une méthode différente pour la sortie.
N/A (numérique à analogique): L’Arduino n’utilise pas un D/A (numérique à analogique) convertisseur. Il utilise à la place, ce qu’on appelle :
Modulation de largeur d’impulsions (PWM). PWM n’est pas un signal analogique. C’est un signal pulsé numérique. Le dessin est de http://arduino.cc/en/Tutorial/PWM.
Ce qui envoie l’Arduino est un signal numérique qui marche des impulsions à des rythmes différents.
Sortie de l’instruction
analogWrite(0) 0 Volt sur
analogWrite(64) Voir le dessin
analogWrite(127) Voir le dessin
analogWrite(255) 5 volts sur
Le dessin représente la sortie sur une période de temps. Comme le montre le dessin que la valeur d’analogWrite va plus loin supérieur à 0, la largeur de l’impulsion positive obtient plus large. En d’autres termes, le temps que la sortie reste à 5 volts est plus long. Maintenant, c’est difficile à expliquer mais si vous pensez en termes de moyenne tension lorsque analogWrite est 0, alors la tension moyenne est 0 et quand c’est 255, puis la tension moyenne est de 5V. Maintenant quand il s’élève à 127, vous pouvez voir que c’est sur ½ le temps et hors ½ le temps, donc la tension moyenne est de 2,5 volts. Maintenant que la valeur est supérieure à 127, vous devriez voir que la tension moyenne augmente.
Pour ceux d'entre vous qui aiment le monde réel « proof », voici une façon de démontrer cela. Un condensateur lisse des tensions continues. C’est pourquoi vous les verrez toujours sur Vcc et sorties d’alimentation. Maintenant, si vous prenez un condensateur (je suppose une 1ufd ou peut-être .5ufd) d’une broche analogique au sol. Si vous écrivez vos croquis pour mettre en place la broche analogique en sortie et envoyer un analogWrite(127), votre DMM devrait montrer la tension à 2.5V. Par ailleurs, les mathématiques de PWM est au-delà de moi, mais je sais qu'elle pénètre dans un circuit AC qui est bien au-delà de ce que veut entrer dans ce Paresseux vieux Geek .
Pour dire les choses simplement, PWM met un signal qui simule un signal analogique pour la plupart des cas.
Astuce : Une chose à retenir, tandis que l’analogRead va de 0 à 1023, l’analogWrite seulement va de 0 à 255, un octet soit dit en passant.
Non essentiels Info : Plus adéquatement conçu Arduinos et clones ont un 0.01ufd condensateur de Vcc, GND et à côté de la puce ATmega. La raison est de filtrer le bruit de l’ATmega numérique. Lorsque vous exécutez un croquis, la plupart des circuits internes essaie de passer de 0 à 5 volts presque instantanément. Cela engendre beaucoup de bruit, beaucoup de qui est haute fréquence. Le condensateur va absorber la plupart de ces et lissez-la, tout comme il l’a fait dans notre petite expérience.