Comment puis-je échantillonner un signal analogique de -2 V à +2 V avec un microcontrôleur PIC?

10

J'utilise un micro PIC avec un ADC 10 bits pour prendre des lectures à partir d'un signal analogique avec une fréquence inférieure à 300 Hz. Cependant, ce signal analogique est dans la plage de -2 V et +2 V. Comment puis-je conditionner le signal pour le mettre dans une plage utilisable (en supposant que l'entrée de l'ADC doit être positive) De plus, je n'ai pas de positif et alimentation négative.

user2200
la source
3
Duplicata possible: electronics.stackexchange.com/questions/3105/…
Thomas O
@Kellenjb - les questions que vous liez ne traitent pas des calculs pour ce cas particulier, où la tension d'entrée va dans les deux sens au-delà des rails.
stevenvh
Les questions suivantes ont été fermées en double de celle-ci et ont des réponses utiles: electronics.stackexchange.com/questions/15985/… , electronics.stackexchange.com/questions/15940/…
Kevin Vermeer

Réponses:

14

note importante:
cette réponse a été publiée pour résoudre le problème de l' entrée -20V à + 20V , car c'est ce qui a été demandé. C'est une méthode intelligente mais ne fonctionne pas si la limite de tension d'entrée reste entre les rails.

Vous devrez mettre à l'échelle la tension avec un diviseur de résistance afin d'obtenir une tension comprise entre -2,5 V et + 2,5 V, et ajouter 2,5 V. (Je présume une alimentation 5V pour votre PIC).

Le calcul suivant semble long, mais c'est uniquement parce que j'explique chaque étape en détail. En réalité, c'est si facile que vous pouvez le faire dans votre tête en un rien de temps.

D'abord ceci:

R1 est la résistance entre et V O U T , R2 est la résistance entre + 5 V et V O U T , et R3 est la résistance entre V O U T et G N D . VINVOUT
+5VVOUT
VOUTGND

Combien d'inconnues avons-nous? Trois, R1, R2 et R3. Pas tout à fait, nous pouvons choisir une valeur librement, et les deux autres dépendent de celle-ci. Choisissons R3 = 1k. La manière mathématique de trouver les autres valeurs consiste à créer un ensemble de deux équations simultanées à partir de deux paires ( , V O U T ) et à résoudre les valeurs de résistance inconnues. N'importe quelle paire ( V I N , V O U T ) fera l'affaire, mais nous verrons que nous pouvons énormément simplifier les choses en choisissant soigneusement ces paires, à savoir les valeurs extrêmes: ( + 20 V , + 5 V ) et ( -VINVOUTVINVOUT+20V+5V , 0 V ). -20V0V

Premier cas: , V O U T = + 5 V Notez que (et c'est la clé de la solution!) Les deux extrémités de R2 voient + 5 V , donc il n'y a pas de chute de tension, et donc pas courant à travers R2. Cela signifie que I R 1 doit être le même que I R 3 (KCL). I R 3 = + 5 V - 0 VVIN=+20VVOUT=+5V
+5VIR1IR3
. Nous connaissons le courant passant par R1, ainsi que la tension qui le traverse, nous pouvons donc calculer sa résistance:R1=+20V-5VIR3=+5V0V1kΩ=5mA=IR1
. Trouvé notre premier inconnu! R1=+20V5V5mA=3kΩ

Deuxième cas: , V O U T = 0 V La même chose qu'avec R2 se produit maintenant avec R3: pas de chute de tension, donc pas de courant. Toujours selon KCL, maintenant I R 1 = I R 2 . I R 1 = - 20 V - 0 VVIN=20VVOUT=0V
IR1IR2
. Nous connaissons le courant passant par R2, ainsi que la tension qui le traverse, nous pouvons donc calculer sa résistance:R2=+5V-0VIR1=20V0V3kΩ=6,67mUNE=jeR2
. Trouvé notre deuxième inconnu! R2=+5V-0V6,67mUNE=0,75kΩ

La solution est donc: . R1=3kΩ,R2=0,75kΩ,R3=1kΩ

Comme je l'ai dit, ce n'est que le rapport entre ces valeurs qui est important, alors je pourrais aussi bien choisir . Nous pouvons comparer cette solution à une autre paire ( V I N , V O U T ), par exemple ( 0 V , 2,5 V ). R1 et R3 sont maintenant parallèles (ils ont tous les deux + 2,5V-0V sur eux, donc quand nous calculons leur valeur combinée, nous trouvons 0,75R1=12kΩ,R2=3kΩ,R3=4kΩ
VINVOUT0V2.5V , exactement la valeur de R2, et la valeur dont nous avions besoin pour obtenir + 2,5 V de + 5 V ! Notre solution est donc bien correcte. [Le tampon QC va ici]0.75kΩ+2.5V+5V

La dernière chose à faire est de connecter au CAN du PIC. Les ADC ont souvent des résistances d'entrée plutôt faibles, ce qui peut perturber notre équilibre soigneusement calculé. Rien à craindre cependant, il suffit d'augmenter R3 pour que R 3 / / R A D C = 1 k Ω . Supposons que R A D C = 5 k Ω , puis 1VOUTR3//RADC=1kΩRADC=5kΩ On en déduit queR3=1,25kΩ. 11kΩ=1R3+1RADC=1R3+15kΩR3=1.25kΩ


modifier
OK, c'était intelligent et très simple, même si je le dis moi-même. ;-) Mais pourquoi cela ne fonctionnerait-il pas si la tension d'entrée reste entre les rails? Dans les situations ci-dessus, nous avions toujours une résistance qui n'avait pas de courant qui la traversait, de sorte que, après KCL, le courant entrant dans le nœud via une résistance partait via l'autre. Cela signifiait qu'une tension devait être supérieure à V O U T et l'autre inférieure. Si les deux tensions sont inférieures, le courant ne s'écoulerait que de ce nœud, et KCL l'interdit.VOUTVOUT

stevenvh
la source
Une entrée de -20 V entraînera une sortie légèrement inférieure à 0 V.
Olin Lathrop le
(et peut-être Olin Lathrop): J'essayais de savoir comment vous trouvez la valeur de la résistance 7k. J'ai remarqué que lorsque la tension d'entrée est de 2,5 V, il n'y aura pas de courant vers le nœud, quelle que soit la valeur de la résistance, car aucune différence de tension. Mais cette entrée 2,5 V n'est pas à mi-gamme, tandis que la sortie 2,5 V l'est aussi. Cela ne signifie-t-il pas que le diviseur doit avoir deux résistances différentes? Si tu vois ce que je veux dire.
Federico Russo
Peut-être que cela explique aussi le commentaire de @Olin Lathrop.
Federico Russo
@Frederico: Oui, ce ne sera pas complètement symétrique. J'en discute dans ma réponse. Il est possible d'ajuster les trois résistances pour mapper -20 à +20 volts à 0 à 5 volts, mais Steven et moi avons montré les cas les plus simples où vous obtenez une petite asymétrie.
Olin Lathrop
6

Le moyen le plus simple consiste à utiliser un "diviseur de résistance".

Vous n'avez pas dit à quelle tension ce PIC fonctionne et donc la plage d'entrée A / N est, utilisons donc 5V pour l'exemple. Votre plage de tension d'entrée est de 40 V et la sortie de 5 V, vous avez donc besoin de quelque chose qui s'atténue d'au moins 8. Vous devez également que le résultat soit centré sur 1/2 Vdd, qui est de 2,5 V, tandis que votre tension d'entrée est centrée sur 0 V .

Cela peut être accompli avec 3 résistances. Une extrémité des trois résistances est connectée ensemble et à la broche d'entrée PIC A / D. L'autre extrémité de R1 va au signal d'entrée, R2 va à Vdd et R3 va à la masse. Le diviseur de résistance est formé par le R1 et la combinaison parallèle de R2 et R3. Vous pouvez ajuster R2 et R3 pour centrer la plage résultante à 2,5 V, mais pour plus de simplicité, nous allons vivre avec un peu d'assymétrie et atténuer un peu plus pour vous assurer que les deux extrémités sont limitées à la plage Vss-Vdd.

Disons que le PIC veut que le signal analogique ait une impédance de 10 kΩ ou moins. Encore une fois pour plus de simplicité, faisons R2 et R3 20 kΩ. L'impédance alimentant le PIC ne sera plus que la combinaison parallèle de ceux-ci, qui est de 10 kΩ. Pour obtenir une atténuation de 8, R1 doit être 7 fois R2 // R3, qui est de 70 kΩ. Cependant, comme le résultat ne sera pas exactement symétrique, nous devons atténuer un peu plus pour nous assurer que -20V n'entraînera pas moins de 0V dans le PIC. Cela nécessite en fait une atténuation de 9, donc R1 doit être au moins 8 fois R2 // R3, qui est de 80 kΩ. La valeur standard de 82 kΩ permettra une certaine pente et marge, mais vous obtenez toujours la plupart de la plage A / N pour mesurer le signal d'origine.

Ajoutée:

Voici un exemple de recherche de la solution exacte à un problème similaire. Cela n'a pas d'asymétrie et a une impédance de sortie spécifiée particulière. Cette forme de solution peut toujours être utilisée lorsque la plage A / N est entièrement dans la plage de tension d'entrée.

Olin Lathrop
la source
+1 car en ce qui concerne le nombre de pièces, c'est le moyen le plus simple de créer ce qui est nécessaire. Quelques remarques: Il est possible de s'occuper de l'asymétrie dans le code de l'UC, et en ajoutant un condensateur en parallèle à la résistance qui va à GND, le signal peut être lissé (filtre passe-bas). Le coin fréq. est 1 / (2 * pi R C), où R est la valeur parallèle des trois résistances et C est la valeur du capuchon qui est ajouté (l'ADC a besoin d'un cap. de toute façon!). Veuillez calculer la précision de cette configuration en tenant compte de toutes les tolérances (R, erreur ADC en +/- max. LSB, erreur de réf., ...) - cela pourrait être pire que prévu.
zebonaut
@zebonaut - J'ai refait le calcul et expliqué chaque étape en détail dans ma réponse mise à jour (beaucoup moins compliquée que ça en a l'air!). Il vous donne un mappage exact de (-20V .. + 20V) à (0V .. + 5V)
stevenvh
@zebonaut: Le condensateur peut être utile comme filtre anti-aliasing, mais il ne fait rien sur l'assymétrie. Je ne pensais pas que la petite asymétrie était un gros problème. Il est assez facile de s'occuper du firmware comme vous l'avez dit.
Olin Lathrop
Si vous souhaitez compenser l'asymétrie dans le logiciel, vous devrez calculer la fonction de transfert exacte. Si vous devez le faire de toute façon, pourquoi ne pas utiliser les bonnes valeurs de résistance en premier lieu (pas celles de ma première réponse (erronée)!)
stevenvh
@stevenvh: Il n'y a rien de mal à utiliser les «bonnes» valeurs de résistance. J'ai réalisé qu'une cartographie exacte était possible (comme je l'ai mentionné dans ma réponse), mais j'ai décidé de ne pas entrer dans la complexité des calculs et de répondre au cas conceptuellement plus simple qui se traduit par un peu d'assymétrie. Dans tous les cas, vous devez atténuer un peu plus pour tenir compte de la pente, et vous devriez probablement calibrer le firmware de toute façon.
Olin Lathrop
2

C'est le circuit standard pour cela. Vous devez mettre à l'échelle les valeurs de résistance pour votre impédance requise.

Leon Heller
la source
Devez-vous vous assurer que l'impédance de votre source est relativement faible si vous l'utilisez?
Nick T
Leon, pourquoi ne pas utiliser un condensateur au lieu de la résistance 1k?
stevenvh
C'est une solution couplée DC. La résistance série est nécessaire pour un bon fonctionnement.
Leon Heller
3
@Leon Heller: Je pense que ce serait une meilleure réponse si vous expliquiez comment trouver les bonnes valeurs pour les résistances.
Federico Russo
2

Si le signal n'est pas CC ou si une référence CC n'est pas importante, le signal peut être couplé capacitivement à l'entrée de l'ADC.

Alternativement, si votre sol pour le PIC est flottant, vous pouvez lier votre terre de signal à 1/2 VDD du PIC.

W5VO
la source
Si vous utilisez un couplage capacitif, vous vous débarrassez de la composante continue, mais la partie négative du signal ira toujours sous la terre, sauf si vous fournissez une polarisation sur la broche d'entrée par un diviseur résistif, comme dans le circuit de Leon.
stevenvh
La tension d'alimentation n'était pas spécifiée - cela fonctionnerait avec un CAN 5V. Si vous utilisiez un Vdd plus petit, vous devrez mettre à l'échelle l'entrée. Il se transformerait en circuit de Leon avec un condensateur à ce point.
W5VO
2

Le circuit suivant devrait faire le travail:

3.3V
 +
 |
 \
 / 1k
 \
 |
 +-- ADC input
 |
 \
 /  1k
 \
 |
 +-- Signal input (-2V to +2V)

C'est un diviseur potentiel. À -2 V, la sortie sera de 0,65 V; à + 2V, 2,65V.

Tout le bruit sur le rail 3,3 V sera transféré à l'entrée, utilisez donc une bonne référence de tension pour réduire ce problème.

Cela fonctionnera également avec d'autres fournitures, mais le décalage changera.

Thomas O
la source
Oui, cela fonctionne, mais ce serait bien d'utiliser toute la gamme ADC :-)
stevenvh
@stevenh Vous pouvez le faire en utilisant des références 0.65V et 2.65V bien que vous puissiez également utiliser votre circuit.
Thomas O
VREF+VREFGND
@stevenh PIC24, dsPIC et PIC32 ont définitivement Vref-. Je pense que certains 18F le font aussi.
Thomas O
Ouais, OK, je ne les connais pas tous (il y en a beaucoup ). OP ne dit pas quelle partie il utilise et il semble avoir disparu, il est donc inutile de lui demander.
stevenvh
1

VADCREF
VADCVDDVADCVADCREF+

VDD2V3.3VVADC

stevenvh
la source