Décalage tension en sortie DAC0 et DAC1 sur Arduino Due

Bonjour à tous,

En sortie des DAC0 et DAC1 sur mon Arduino Due , en 12bits, j'ai une plage de tension de sortie réduite.
Pour les valeurs de 0 à 4095 , elle s'étend de 0,55v à 2,72v soit une plage de tension de 2,17v

L'étendue de la plage ne me pose pas de questions.
Ce qui me déplait c'est cet offset de 0,55v (1/6 de la plage de valeurs)

Avez-vous réussi à décaler cette plage de sortie de 0v à 2,17v ?

Mon but étant ensuite d'amplifier avec un LM358 ou LM324 la tension de sortie afin d'obtenir du 0v à10v
Vous me direz que l'on peut utiliser un montage à ampli OP soustracteur de tension, il me gêne un peu car si la tension de décalage n'est pas appliquée pour une raison ou une autre et du fait de l'amplification de tension, la tension de sortie dépasse le seuil de 10v à ne pas dépasser.
Electroniquement , il y a certainement de pallier à cela mais cela complique le montage pour un novice.

Merci de votre aide !

Bonjour,

D'après ce fil:

La plage de sortie des DACs va de 1/6VADVREF à 5/6VADVREF, soit de 0,55v à 2,75v.
Je vois deux solutions:
1-Faire suivre par un AOP avec offset ajustable de 0,55v.
2-Si ton signal de sortie a une fréquence supérieure à quelques Hz, mettre un condensateur en série avec l'AOP suivant.

bilbo83:
Si ton signal de sortie a une fréquence supérieure à quelques Hz, mettre un condensateur en série avec l’AOP suivant.

Merci de ta réponse et de tes pistes

La fréquence en sortie de DAC , lors d’un petit programme test alternant des valeurs 0 et des valeurs 4095, je mesurais à l’oscilloscope DDS140 une fréquence de 230kHz entre chaque alternance 0 puis 4095

Quelle valeur de condensateur mettre ? As-tu une idée ?

Par le code Arduino , obtenir une tension partant de 0v est irréalisable ?

Bonjour,

Je ne connais pas le Due mais je m'autorise des remarques :

-1 Si le décalage de 0,55V est intrinsèque comme le signale Bilibo89, il faudra faire avec :

  • Concernant le risque de dépassement des 10V, ce pB me parait facile à régler en alimentant l'AOP vers 12V.
    Par exemple compte-tenu de la valeur de la tension de de saturation au niveau haut du LM358, (regarder le datasheet) la tension de sortie ne risque pas de trop dépasser les 10,5V environ dans tous les cas de figure de tension d'entrée.
  • Maintenant pour l'offset de 0,55V environ il reste plusieurs possibilités à envisager :
    --- A: on met un ajustement manuel d'offset à régler quand la sortie DAC reçoit la valeur numérique 0
    --- B: on essaie un calibrage automatique de zéro en générant un signal d'offset de façon numérique ( soit avec une autre sortie DAC soit avec un PWM de fréquence pas trop basse et une intégration par circuit RC pour obtenir une tension continue programmable).

Etc ....etc....

Serge .D

Tfou57:
Merci de ta réponse et de tes pistes

La fréquence en sortie de DAC , lors d'un petit programme test alternant des valeurs 0 et des valeurs 4095, je mesurais à l'oscilloscope DDS140 une fréquence de 230kHz

Quelle valeur de condensateur mettre ? As-tu une idée ?

Par le code Arduino , obtenir une tension partant de 0v est irréalisable ?

  • Pour le condensateur, on part de la période soit 4,3µs (1/0,23)
    Il faut un circuit RC d'intégration dont la constante de temps est supérieure à 4,3µs mais nettement inférieure à la période du signal que l'on doit produire s'il est périodique.
    Si on prend par exemple 20µs, cela nous fait R*C >20µs
    C, c'est la capacité du condensateur utilisé dans le circuit d'intégration, R correspond aux résistances des circuits associés au condensateur......

Serge .D

aligote:

  • Pour le condensateur, on part de la période soit 4,3µs (1/0,23)
    Il faut un circuit RC d'intégration dont la constante de temps est supérieure à 4,3µs mais nettement inférieure à la période du signal que l'on doit produire s'il est périodique.
    Si on prend par exemple 20µs, cela nous fait R*C >20µs
    C, c'est la capacité du condensateur utilisé dans le circuit d'intégration, R correspond aux résistances des circuits associés au condensateur......
    Serge .D

je pense que vous faites fausse route la sortie DAC du Due n'est pas un PWM il n'y a donc pas une "fréquence" de sortie, c'est une tension analogique

Je reprends ton premier post.
Si j'ai bien compris, tu veux en sortie de ton montage, quel qu'il soit, un tension pouvant varier de 0 à +10v.
Tu ne précise pas le domaine de fréquence, donc si je suppose qu'il s'agit d'un signal continue ou à très basse fréquence, pour moi LA solution c'est un ampli non inverseur de gain 10/(2,75-0,55)=4,545 avec un réglage d'offset sur l'entrée inverseuse.

aligote:

  • Pour le condensateur, on part de la période soit 4,3µs (1/230000)
    Il faut un circuit RC d'intégration dont la constante de temps est supérieure à 4,3µs mais nettement inférieure à la période du signal que l'on doit produire s'il est périodique.
    Si on prend par exemple 20µs, cela nous fait R*C >20µs
    C, c'est la capacité du condensateur utilisé dans le circuit d'intégration, R correspond aux résistances des circuits associés au condensateur......

Serge .D

Initialement , j'avais tenté d'utiliser des pins PWM + filtrage second ordre + ampli OP pour adapter la tension.

en PWM 10 bits je pouvais obtenir en fréquence de sortie 41,015 kHz maximum et en 12bits la fréquence maximum était de 10,254 kHz
J'avais observé un temps de réponse lié au filtrage RC efficace.
Suite à mon souhait d'avoir une consigne de tension 0v à 10v avec une résolution de 12 bits ainsi que une variation de consigne la plus réactive possible, sur le forum US, Magician m'avait conseillé d'utiliser les 2 DAC (DAC0 et DAC1) intégré à la carte Arduino Due.
Rajouter un filtre R/C en sortie DAC me semble pas intéressant car il va engendrer un temps de retard

Une simple résistance (résistance variable multi tours) consommant la tension d'offset n'est-elle pas suffisante ?

En cas de nécessité de l'utilisation d'un filtre RC, j'aurais peut-être intérêt à revenir à la solution PWM 12 bits plutôt que les DAC 12 bits.

Votre remarque précédente pour la limitation de la tension de sortie de l'ampli OP avec tension d'offset est très intéressante !
Je n'avais pas résonné "tension alimentation ampli OP" mais uniquement sur la formule en fonction des tensions Input / tension OutPut et des résistances employées

La gestion de l'offset des DAC en fonction de pin PWM , je ne voit pas comment tu proposes de réaliser un offset uniquement en soft .
A moins que ce soit uniquement un pilotage de l'offset en PWM. Je pense que cela nécessiterait en sortie PWM un R/C et un ampli OP suiveur de tension pour alimenter la tension Offset de l'ampli OP soustracteur de tension.

Merci de toutes vos remarques

rjnc38:
je pense que vous faites fausse route la sortie DAC du Due n'est pas un PWM il n'y a donc pas une "fréquence" de sortie, c'est une tension analogique

La fréquence en sortie de DAC , lors d'un petit programme test alternant des valeurs 0 et des valeurs 4095, je mesurais à l'oscilloscope DDS140 une fréquence de 230kHz

Il y a méprise, je reprenais l'exemple cité avec une alternance de 0 et de max on obtient bien un signal analogique périodique sur la sortie DAC.

Serge .D

@biblio83 et @aligote

bilbo83:
Je reprends ton premier post.
Si j'ai bien compris, tu veux en sortie de ton montage, quel qu'il soit, un tension pouvant varier de 0 à +10v.
Tu ne précise pas le domaine de fréquence, donc si je suppose qu'il s'agit d'un signal continue ou à très basse fréquence, pour moi LA solution c'est un ampli non inverseur de gain 10/(2,75-0,55)=4,545 avec un réglage d'offset sur l'entrée inverseuse.

Merci de ton intérêt
En sortie DAC0 et DAC1 dans mon utilisation réelle, je n'aurais qu'une tension continue . Cette tension sera la consigne de vitesse pour piloter des variateurs de fréquence Tri , d'où le besoin de tension finale de 0v à 10v avec une résolution de 12 bits afin de bénéficier de la précision de pilotage du variateur.

Nota: En sortie DAC , la fréquence de 230kHz, que l'oscilloscope me donnait, était générer par le code test que j'avais mis dans void loop() . Il faisait passer les DAC0 et DAC1 brusquement et alternativement de 0 à 4095. Ce code test générait un signal test périodique afin de tester sa réactivité.

aligote , m'a proposer de limiter à 12v la tension d'alimentation de l'ampli OP soustracteur de tension. Cette tension de 12v limiterait , les risques de tension output élevé en cas de panne sur la tension d'offset.

Que pensez-vous , de mettre uniquement une résistance (résistante variable multi tours) prenant 0,55v en série du + d'un montage ampli OP en montage avec gain de tension ?
N'est-ce pas le plus simple ?

pour moi LA solution c’est un ampli non inverseur de gain 10/(2,75-0,55)=4,545 avec un réglage d’offset sur l’entrée inverseuse.

Bien sûr, simplement la tension d’offset “correctrice” à injecter peut être générée de plusieurs façons :

  • Un simple diviseur de tension sur une tension de référence avec un ajustable 10 tours à régler manuellement.
  • Un “générateur de tension d’offset” règlable et pilotage par soft une seule fois dans un phase d’initialisation (ou de calibration) au démarrage du programme; par exemple :

---- Sur le DAC principal envoyer 0.
-Soit ----------- Envoyer par une sortie PWM un signal rectangulaire qui sera intégré proprement par un RC adapté en attendant le temps nécessaire. Ce signal est injecté sur l’entrée inverseuse du LM358 et sa sortie est lue par une entrée analogique du µC (je suppose qu’il y en a?)
pendant la calibration le rapport cyclique du signal PWM est modifié pour obtenir 0 en sortie du LM358.
Cette valeur sera conservée pour le fonctionnement du programme qui va suivre. (A noter qu’en utilisant une recherche dichotomique comme pour les convertisseurs D/A à approximations successives on peut effectuer ce réglage rapidement)
-Soit ----- sur un autre DAC produire le signal d’offset pour le LM158 ??? et faire l’ajustement comme précédemment.

Serge .D

Bon,

Pour te répondre de manière efficace il faudrait savoir plusieurs choses:

  • Tu veux attaquer quoi avec tes deux tensions (variateur tri, c'est quoi?), quelle est l'impédance d'entrée.
  • Quel est la bande passante dont tu as besoin?

Tfou57:
@biblio83 et @aligote

Merci de ton intérêt
En sortie DAC0 et DAC1 dans mon utilisation réelle, je n'aurais qu'une tension continue . Cette tension sera la consigne de vitesse pour piloter des variateurs de fréquence Tri , d'où le besoin de tension finale de 0v à 10v avec une résolution de 12 bits afin de bénéficier de la précision de pilotage du variateur.

bonjour
Connais pas le DUE (et pas de grosse envie de connaitre ... ) :grin:
si j'ai bien compris ton probleme , tu veux generer un 0/10V ?
si oui c'est un sujet relativement récurrent (la gestion de dispo par 0/10V est assez repandue)

A voir la resolution dont tu a vraiment effectivement besoin, solutions que j'utilise "régulièrement"

  • DAC externe + AOP en suiveur X2
  • Potentiometre numerique en version HV

bilbo83:
Bon,

Pour te répondre de manière efficace il faudrait savoir plusieurs choses:

  • Tu veux attaquer quoi avec tes deux tensions (variateur tri, c’est quoi?), quelle est l’impédance d’entrée.
  • Quel est la bande passante dont tu as besoin?

L’Arduino Due en 3,3v , toutes les 1 ms :

  • Reçoit une consigne de position d’un logiciel SimTools par la liaison série
  • Lit la position actuelle des axes de moto-réducteurs
  • Calcul l’écart position réelle et position de consigne
  • Calcul et commande les consignes de vitesse ← Sujet du post
  • Calcul et commande les sens de rotations à appliquer pour effectuer la correction

L’Arduino Due sort sur ces DAC0 et DAC1 ( intégrée à la Due) une tension analogique de 0,55v à 2,72v en 12bits
La tension analogique 12bits de 0,55v à 2,72v doit être transformée en une tension 0v à 10v de façon la plus linéaire possible
Cette tension amplifiée 0v à 10v dans commander la consigne de fréquence de variateurs de fréquences 220v Tri . La variation de fréquence en sortie variateur engendre une variation de vitesse des motoréducteurs
L’impédance d’entrée variateur est de 20kohms au niveau de la commande de fréquence

Mon problème est comment réaliser l’offset de 0,55v

  1. Peut-on par le code Arduino avoir directement sur les DAC0 et DAC1 interne de la Due les 0v à 2,17v ?

  2. En externe , puis-je simplement mettre une résistance variable multi tours entre la sortie DAC Arduino et l’entrée + de l’ampli OP et en appliquant à cet ampli OP un gain de 4,6 (2,17v x 4,6 = 9,98v)

  3. En externe, utilisation d’un ampli OP en soustraction de tension (offset 0,55v) et avec un gain de 4,6.
    En prenant la précaution de limiter la tension d’alimentation de l’ampli OP à 12v afin que limiter la tension de sortie (pas de risque de griller le variateur) en cas de rupture d’alimentation de la tension d’offset

La solution 1 serait TIP - TOP si cela était possible ! , ensuite la 2ème et la 3ème en dernier lieu.

Quand pensez-vous ?

Artouste:
bonjour
Connais pas le DUE (et pas de grosse envie de connaitre ... ) :grin:
si j'ai bien compris ton probleme , tu veux generer un 0/10V ?
si oui c'est un sujet relativement récurrent (la gestion de dispo par 0/10V est assez repandue)

A voir la resolution dont tu a vraiment effectivement besoin, solutions que j'utilise "régulièrement"

  • DAC externe + AOP en suiveur X2
  • Potentiometre numerique en version HV

L'Arduino Due est en 3,3v et possède 2 DAC en 12 bits ( résolution par défaut), pourquoi utiliser des DAC externes ?
L'AOP avec les DAC interne qui sortent une plage tension analogique de 2,17v. Cette plage est malheureusement située de 0,55v à 2,72v selon mes essais : AOP en suiveur X 4,6

Le problème c'est l'offset ... Comment le gérer au plus simple !

Le problème c'est l'offset ... Comment le gérer au plus simple !

Au plus simple, pour moi (si le DAC interne ne peut pas être modifié par soft et produit systématiquement de l'offset) :

Un diviseur de tension avec une résistance fixe et une résistance 10 tours ajustable pour produire un offset à soustraire au signal utile ....

A ce propos, attention le LM358 n'est pas très bon avec une seule alim en fonctionnement pour une tension de sortie proche de 0V (il faudrait prendre un AOP mieux adapté)
Un autre avantage à cette solution de résistance ajustable, c'est qu'elle intègre l'annulation de la tension d'offset de l'AOP.

Il s'agit généralement de quelques mV (quand même multiplié par le gain on arrive vers la Dz de mV possible)

Or sur un signal de 10V avec un convertisseur DAC de 12 bits, l'incertitude due à la résolution donne une erreur possible de 2,5mV environ (10.000/4000) .... donc faire une erreur supplémentaire proche de la dizaine de mV à cause de la tension d'offset de l'AOP, c'est dommage.

Serge .D

On ne sait pas trop quelle précision et quelles performances tu cherches mais, le réglage d'offset va être dépendant de l'appairement des résistances et de la qualité de l'ampli op utilisé. L'offset va être directement dépendant de la qualité de ADVREF qui (pas d'bol) est fait à partir du 3,3V de la carte. Là-dessus tu vas en plus ajouter du gain. Tout ça pour dire qui si tu cherches la précision c'est pas gagné.

Personnellement, pour faire quelque chose de sérieux, je partirais sur un DAC de ce genre là http://www.analog.com/en/products/digital-to-analog-converters/da-converters/ad5722r.html#product-overview. Il sort directement la dynamique que tu cherches sans réglage et sans l'ajout d'un amplificateur supplémentaire.
Enfin je propose Analog Devices mais tu peux trouver la même chose chez les concurrents.

Edit: La DUE possède des DAC, OK. Mais s'ils ne font pas l'affaire, il ne faut pas s'acharner.

L'électronicien que je suis n'hésite pas une seconde, pour moi seule la solution 3 est acceptable.
Avec un réglage d'offset et de gain pour tenir compte de l'offset de l'AOP et de la précision des résistances.

Pour limiter la tension de sortie à +10v, le plus simple c'est d'alimenter l'AOP avec une alim légèrement supérieure à +/- 10v.
Pour la limiter en négatif (~-0,6/0,7v), une résistance en série avec la sortie (disons qq Kohms) et un diode en // sur la sortie (Anode à la masse).

fdufnews:
... La DUE possède des DAC, OK. Mais s'ils ne font pas l'affaire, il ne faut pas s'acharner.

bonsoir fdufnews
+1
il faut etre pragmatique
Il y a peut etre plus simple que de vouloir absolument mettre une usine à gaz difficile à maitriser derriere .

bilbo83:
L'électronicien que je suis n'hésite pas une seconde, pour moi seule la solution 3 est acceptable.
Avec un réglage d'offset et de gain pour tenir compte de l'offset de l'AOP et de la précision des résistances.

Pour limiter la tension de sortie à +10v, le plus simple c'est d'alimenter l'AOP avec une alim légèrement supérieure à +/- 10v.
Pour la limiter en négatif (~-0,6/0,7v), une résistance en série avec la sortie (disons qq Kohms) et un diode en // sur la sortie (Anode à la masse).

Merci de votre avis d'électronicien
Je n'avais pas pensé à la possibilité d'avoir une tension négative en sortie ampli OP.
Je pense , maintenant que cela peut arriver si la tension d'offset légèrement trop importante et lorsque la tension en entrée ampli OP est proche du 0v.
Est-ce bien pour ce cas que vous me proposez de mettre une résistance et une diode en sortie ampli OP?

Précision sur le montage complémentaire que vous me proposez pour limiter en négatif (~-0,6/0,7v):
La résistance de 1 ou 2 k ohms est placée directement en sortie ampli OP et la sortie de tension 0v à 10v ?
Cette résistance a quel but ? Je comprends le rajout de la diode anode à la masse mais je ne comprend pas l'ajout de cette résistance de quelques K ohms
La diode anode à la masse est branchée en sortie de cette résistance ?

Je voulais déjà mettre une résistance de 1kohm en sortie ampli OP entre le 0v-10v et la masse dans le but de faciliter le 0v
Est-ce une bonne idée ?
Elle serait intégrable entre la masse et la sortie de la résistance et de la cathode de la diode que vous proposez de rajouter pour limiter en négatif (~-0,6/0,7v)