Go Down

Topic: Intensité et temps minimums en analogique ? (Read 12873 times) previous topic - next topic

Carolyne

Bonjour à tous,
- Quelqu'un connaîtrait-il l'intensité minimale à faire circuler dans les entrées analogiques, pour les faire "décoincer" ?
Tout en conservant une bonne "probabilité" de lecture. (disons: 100%)
Le but étant de faire des ponts diviseurs à faible consommation.
- Quel sont les temps: moyen et minimum que l'on doit allouer à une lecture de broche ananlogique ?
Question subsidiaire: Existe t-il un éditeur+compilateur; qui contiendrait dans son "help" (ou dans sa doc) l'ensemble (ou une bonne partie) des mots clé utilisés en: "C" (avec leur emploi; syntaxe, exemples...) ?
Comme cela existe dans les éditeurs "Basic".
Merci d'avance

68tjs


Quelqu'un connaîtrait-il l'intensité minimale à faire circuler dans les entrées analogiques, pour les faire "décoincer" ?
Tout en conservant une bonne "probabilité" de lecture. (disons: 100%)
Le but étant de faire des ponts diviseurs à faible consommation.

Résumé succint :
Le signal appliqué sur l'entrée analogique ne doit pas avoir une impédance supérieure à 10 kohms même si coté microcontroleur l'impédence est de l'ordre du Megohms.
Ce n'est pas une question de courant mais de temps de charge d'un condensateur interne au micro.
Arduino a fixé la  fréquence de mesure pour que analogRead() satisfasse les besoins courants.

Détails :
Il y a bien d'autres paramètres et configurations pour la mesure analogique. Plutôt que de (mal) réciter la datasheet il est préférable que tu lise le chapitre correspondant.
Tu y touvera toutes les réponses a tes questions. Si ton application ne se satisfait pas de la configuration par défaut d'analogRead() tu y trouvera aussi comment faire une mesure "aux petits oignons" en écrivant directement dans les registres du micro-controleur.

Je ne me rappelle plus qu'elle est la carte que tu utilise. Pour améliorer la qualité de mesure j'ai une proposition qui ne colle que sur une UNO (avec un fer à souder et un condo).

fdufnews

Le mieux c'est de jeter un oeil à la documentation de l'ATmega que tu utilises sur le site Atmel.
Voilà ce qui est dit pour l'ATmega 328:
The ADC is optimized for analog signals with an output impedance of approximately 10 k? or
less. If such a source is used, the sampling time will be negligible. If a source with higher imped-
ance is used, the sampling time will depend on how long time the source needs to charge the
S/H capacitor, with can vary widely. The user is recommended to only use low impedance
sources with slowly varying signals, since this minimizes the required charge transfer to the S/H
capacitor.

L'entrée de l'ADC est équivalente à une résistance de 100kOhms suivie d'une capacité de 14pF à la masse.
Il faut que la capacité soit chargée à la tension que tu veux convertir pour que la mesure soit bonne.

Quote
- Quel sont les temps: moyen et minimum que l'on doit allouer à une lecture de broche analogique ?

Justement le temps en question va dépendre de l'impédance de ta source. Si son impédance est plus élevée que 10kOhms comme préconisé, il faudra augmenter le temps d'intégration.

Il faut aussi prendre en compte le fait que tu commutes ou non les entrées analogiques.
Si tu changes tes entrées analogiques entre chaque mesure il faut alors attendre que la tension se stabilise.
Si tu "lis" toujours la même entrée analogique tu n'as pas cette contrainte.

Concernant la documentation. La plupart des éditeurs de code dignes de ce nom proposent généralement une fonction qui permet de chercher un mot sous le curseur dans un fichier (pdf, html, chm généralement) que l'on spécifie en fonction du langage de développement.
Maintenant, il facile de garder ouverte une fenêtre avec un fichier d'aide à coté de la fenêtre d'édition. On trouve pas mal de refcard sur le net avec les principaux mots clés de tous les langages de programmation courants et c'est une aide simple et rapide.
http://www.digilife.be/quickreferences/quickrefs.htm
http://whatis.techtarget.com/reference/Our-Favorite-Cheat-Sheets#programming
Autrement pour les questions plus difficiles, j'utilise souvent le Kernighan et Ritchie (on le trouve sous forme de .pdf ou de .chm)

Super_Cinci

Bon... c'est pas des questions simples, surtout la première. je te laisse réfléchir un peu, en tirant le meilleur de la réponse de Fdufnews et ci-dessous :

La lecture analogique (enfin la conversion) se fait toute seule et prend très peu de temps (de l'ordre de 13/200000 = 70µs environ). mais la fonction analogRead() rajoute pas mal de bazar, et la durée de l'appel de cette fonction n'est pas bien définie.

Pour faire la conversion, un "interrupteur" connecte l'entrée à un condensateur de 14pF pendant 5µs à travers une résistance de 1K à 100K (c'est précis, hein?). il convient donc que le pont diviseur que tu mets ait une impédance de sortie assez petite pour que T < 5.R.C... avec C = 14.10-12, R = résistance équivalente vue du condensateur. un schéma simplifié est dispo page 258 du datasheet de l'ATMEGA328. les deux sources de courant IH et IL viennent bien sûr mettre le bazar dans le montage.
Pour une précision optimale, une impédance la plus faible possible est à prévoir, donc pont diviseur qui consomme.

J'ai démonté un thermomètre digital (genre lidl), et ça fait 15 ans qu'il tourne sur une petite pile 1,5V... en fait, la mesure analogique se fait par un pont diviseur, mais le pont n'est alimenté que lors de la mesure, ce qui fait qu'entre deux mesures, il ne consomme absoulment rien ;)

capit'ché?  :smiley-mr-green:

Mais au fait, ce pont diviseur que tu veux faire, il sert à quoi? car peut-être que ça peut nous donner des idées pour t'aiguiller dans ton choix...

Pour la seconde question (plus simple), il y a une traduction en français des principales fonctions arduino (et "C" ). : http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.ReferenceEtendue


Carolyne

Super_Cinci say:
Quote
Mais au fait, ce pont diviseur que tu veux faire, il sert à quoi

En gros: Faire une lecture de consommation (I * U)
-U par un pont diviseur, et I avec un bricolage à base d'effet Hall.
http://paulfjujo.free.fr/Hall_DC_mesure/Hall_DC_Mesure.htm
Je compte établir une tension (niveau) de référence avec un commutateur 8 ou 10 positions et des résistances.
Fonctionnement:
- Reset des valeurs.
- Réglage du commut sur un niveau + top départ.
- Lecture du niveau + stockage de la valeur
- Boucle: (lecture; cumul; comparaison au niveau de réference; si niveau atteint--> agir)
L'idéal serait de pouvoir faire tout ça en numérique avec  un ship qui fasse la conversion analog/num avec une entrée haute impédance; pas trop "gourmand"; pas trop compliqué; assez "fin".....Et avec des dents en or.
Mais bon, ce n'est que le tout début, je rassemble de la doc.

Carolyne

Hey! qué passa ?
J'ai répondu à: 68tjs et à: fdufnews, que je remercie pour ses liens.
Et les deux réponses sont parties dans l"espace". Il semblerait que quand on poste en même temps que quelqu'un; le mien ne passe pas... Y'a du favoritisme ici Loool !

Super_Cinci


Y'a du favoritisme ici Loool !
ouaip ;) hi hi hi. Bonch, tu veux créer un niveau (une tension) de référence avec un commutateur et des résistances? tu vas mesurer ça par analog... Ca va te donner une valeur numérique. Pourquoi ne pas simplement définir directement une valeur numérique de seuil ou comparaison? ça consomme aucun courant, une variable...

Pour mesurer U, j'imagine que la valeur que tu vas mesurer se situera dans une plage entre Vmin et Vmax, genre de 10 à 15V pour une batterie de 12V... donc inutile de mesurer tout ce qu'il y a entre 0 et 10, il faudrait abaisser ta tension (avec une zener pour faire simple mais c'est pas le plus précis) de 10V, tu te retrouverais alors avec une tension de 0 à 5V, soit pleine échelle sur la plage de mesure. Ce n'est qu'une idée, à prendre ou à laisser.

Par exemple, dans ma voiture, le calculateur d'injection me donne une valeur numérique sur un octet pour la tension de baterie. et pour trouver la valeur en volts, je dois appliquer la formule U = 8 + octet / 32. donc j'obtiens une tension qui peut varier entre 8 et 15,97V avec une précision de 31,25mV. il y a peu de chances pour que la tension de ma batterie sorte de cette plage de valeurs, une alerte / protection serait déjà exécutée bien avant ça...

Carolyne

Quote
Pourquoi ne pas simplement définir directement une valeur numérique de seuil ou comparaison? ça consomme aucun courant, une variable

A chaque mise en service du basar le niveau sera différent. Comment je fais pour entrer la variable quand je demarre ?
Avec un mic-mac en TTL je mets le niveau sur les entrées num, et quand je lance le prog, il stocke la valeur et libère les pins.
Ou alors, je mets des contacts secs sur les pins num et je mets la valeur en binaire (10 valeurs dont j'aurais les codes sur un papier.)
(à l'ancienne Lol!) Y'a ti mieux ?
C'est pas bête le coup du créneau (24-27 V); je vais creuser le sujet. C'est le point le plus délicat de l'histoire pour garder de la précision.

Super_Cinci

Dans ton cas, il faudrait jouer avec des ampli-op. ces bébêtes permettent de faire pas mal d'opérations mathématiques sur les signaux analogiques (S = Ax + By par exemple). mais le problème, c'est que pour faire cracher du 0V à un ampli-op, c'est qu'il lui faut une alim de -3V, et pareil côté + (8V min pour 5V en sortie)... Mais la sortie d'un AOP a une résistance nulle par rapport aux besoins de l'entrée analogique, ce qui lui confère un bon point, voire une image. si tu as un peu de jus pour alimenter ton système, l'arduino peut permettre de générer facilement ces tensions (-4V et +9V à partir du 5V), avec, si tu connais, les circuits à pompe de charge... ;)

Carolyne

Boudiou! Les ampli op, s'ils leur faut du plus, du moins, y ajouter une usine de pompage de charge à gaz et prendre le gaz sur l'Arduino ! Es trrropp coumplicatt aquo.
y doit y avoir moyen de contourner....Je retourne réfléchir.   ......à+.

Carolyne

Et ben j'ai pas réfléchi; j'ai fait mes comptes:
1 0k pour 5 V; ça fait: 50K pour 25 V
ce qui fait: 0,5 mA ; qui font: 12,5 mW; et pour 6 heures: 75 mWh.
C'est à dire: Peanuts. Vive les ponts résistifs! ]:D ! Je teste de ce pas les réactions de la bête.
Merci quand même pour m'avoir forcée à réfléchir sur l'entrée du niveau en numérique.
Tu n'en a rien dit...C'est que c'est bon.

Super_Cinci

En fait, je croyais (mais où ai-je la tête) que tu mettais un LCD (donc avec un bouton +/- pour modifier le niveau par exemple).

sinon, un potar tout c*n sur une entrée analog, ça marche très bien (reste quand même à savoir quelle valeur on a entré dans le bidule).

j'en ai rien dit parce que j'avais rien à dire, il m'arrive parfois de savoir fermer ma grande gu**le...

Carolyne

Nan, je parlais d'entrer en binaire avec des contacts secs sur les broches numériques.
Hé, au fait le pont diviseur est nickel; j'ai mis 5,6K+27K pour 25V. La conversion est bien plus stable qu'avec le LM35.
Comment tu ferais pour que la carte, une fois branchée se mette en attente d'une fermeture de contact, qui serait le lancement du prog ?
je fais une boucle infinie dans laquelle je teste le contact, et si contact : Alors: Sortie de la boucle. ?
Il ne va pas y avoir un problème pour sortir de la boucle ? Genre procédure/syntaxe particulière ?
Pardonne les questions de newbee, mais vu le monument de la doc de réference "C", et le "pratique" de la fonction "recherche" dans les pdf, ça me scie un peu les bras. (j'aurais jamais dû la demander la doc de réference !!! p....n, c'est l'enfer ce langage.)

Super_Cinci


Comment tu ferais pour que la carte, une fois branchée se mette en attente d'une fermeture de contact, qui serait le lancement du prog ?
je fais une boucle infinie dans laquelle je teste le contact, et si contact : Alors: Sortie de la boucle. ?
c'est bien, ça! il y a d'autres façon de le faire, mais je vais attendre que tu en sois aux interruptions et gestion d'évennements dans ta bible...  :smiley-mr-green:

Carolyne

Et tu crois que j'ai que ça à faire; d'interrupter, de gérer les évèvenements et de déchiffrer les hyérogliphes ...
Tant pis, je vais y aller à l'intuite. Le débuggeur...Il va fûûmer!!!

Go Up