Go Down

Topic: Charge et décharge du condensateur (Read 3483 times) previous topic - next topic

J-M-L

#15
Mar 26, 2017, 07:10 pm Last Edit: Mar 26, 2017, 07:22 pm by J-M-L
Pour le 1023 ou 1024 c'est une Question de convention puisque de toutes façons vous faites un échantillonnage, donc la valeur lue sur la pin analogique représente un intervalle. Soit vous décidez de toujours prendre la borne basse de l'intervalle (division par 1024), soit vous affinez un peu arbitrairement pour en valeur basse prendre le début de l'intervalle, en valeur médiane, le milieu de lintervalle et en valeur haute le haut de l'intervalle (division par 1023); vraiment c'est une question de choix personnel je pense et je préfère 1023 ici 

Si Vous faites
Code: [Select]
vnum = analogRead(A0); // une valeur ente [0 .. 1023]
vana = 5.0* (vnum/1024.0); // une valeur entre [0 .. 5[ (mais pas 5)
--> En divisant par 1024 vous n'aurez jamais 5v atteint, même si vous branchez la Pin a0 sur 5v. Moi ça m'énerve :)

en faisant
Code: [Select]
vnum = analogRead(A0); // une valeur ente [0 .. 1023]
vana = 5.0* (vnum/1023.0); // une valeur entre [0 .. 5]
Là vous aurez bien 5V tout rond quand vous lisez 1023 et  si vous branchez A0 sur GND vous aurez bien 0V. Je trouve ça plus Sympa.
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

J-M-L

Je ne suis pas d'accord - vous n'avez rien de plus rigoureux à représenter par un nombre unique un intervalle avec 1024 plutôt que 1023. Prendre toujours la borne inférieure revient à toujours sous estimer la mesure, prendre toujours la borne supérieure à toujours la surestimer.

comme vous le dites la valeur correspond réellement à un intervalle et donc choisir arbitrairement (par une bijection) une valeur dans cet intervalle est un choix pas plus faux qu'un autre pour une mesure unitaire.

Comme je l'explique dans le cas présent considérerer une interpolation linéaire de la valeur  à retenir dans cet intervalle est une décision mathématique tout aussi respectable qu'une autre qui a l'avantage pour moi de donner 0v et 5v en sortie quand vous avez 0V et 5v en entrée, d'où ma préférence.

(On est d'accord  sur l'efficacité avec 1024 versus 1023)
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

68tjs

Dans le cas présent je suis d'accord avec _pepe_ parce qu'à mon avis le choix a déjà été fait par le concepteur de l'ADC du micro.

Vous vous battez pour 1 pas, c'est à dire du 1 pour 1000.
Si on voulait être rigoureux et tenir de toutes les erreurs telles qu'elles sont décrites dans la datasheet on se retrouve avec une précision au mieux  de +/-  5 pas.

La principale difficulté avec les indications de la datasheet est de distinguer les erreurs systématiques pour un exemplaire donné, qui se somment directement, des erreurs aléatoires qui se somment sous forme quadratique (racine de la somme des carrés).

Ma conclusion : si j'avais à faire des mesures précises où un pas compte je n'utiliserai surrement pas le module ADC intégré à un microcontrôleur.
L'ADC du microcontrôleur est bien pratique mais il ne faut pas lui demander plus qu'il ne peut donner.

J-M-L

Quote
on se retrouve avec une précision au mieux  de +/-  5 pas.
C'est un peu mon point.... ici il ne s'agit pas de cumuler des valeurs et de dérive donc de la précision / accumulation de l'erreur. il s'agit d'un affichage instantané.

Tout ce que je dis c'est qu'afficher 0V quand vous branchez sur GND et 5V quand vous branchez sur la référence 5V c'est quand même plus gratifiant et pas plus faux que d'afficher 0V et 4,995...

D'un point de vue pratique, il faut différencier ce que l'on fait en affichage (conversion en flottant) versus les calculs numériques où mon approche est de rester avec les entiers entre 0 et 1023 (ou d'utiliser de CAN de meilleure facture)

Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

68tjs

Je n'en ai pas grand chose à faire de l'affichage instantané, je n'ai jamais fait de  mesure avec un affichage instantané !

Ce qui compte quand on fait des mesures c'est bien la valeur "probable" avec sa marge d'erreur.

Je sais que dans les écoles on n'apprend plus à faire un calcul d'erreur et que tout ce qui est affiché avec des valeurs numériques est maintenant pris pour argent comptant.

L'important est de bien d'ouvrir les yeux de ceux qui croient que l'ADC d'un micro avr est juste à un pas près.
Je me fiche de lire 0 ou 1 car je sais que les deux sont très probablement faux ->je suis un électronicien de terrain donc avec les pieds sur terre.

Le reste me parrait secondaire surtout que je suis persuadé que tout a déjà figé par Atmel.

J-M-L

#20
Mar 27, 2017, 11:06 am Last Edit: Mar 27, 2017, 11:06 am by J-M-L
Oui OK c'est une façon de voir (je suis de la vieille école et j'ai fait bcp de maths :) )

Mais la question posée ci dessus est
Quote
le programme acquière la tension aux bornes du condensateur qu'il envoie vers le port série avec la valeur de la tension de la broche D7 (5V ou 0V). L'envoi des données sur le port série se fera pendant 5 s (2,5 s pour la charge et 2,5 s pour la décharge).
nécessite cet affichage.

je ne faisais donc que répondre à la question d'affichage d'une mesure instantanée et exprimer ma préférence toute personnelle d'avoir 0 à GND et 5 à 5V sur l'affichage.

Oui on sait que c'est approximatif - donc pas plus juste ou faux qu'une autre valeur - c'est juste plus gratifiant

Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

khrgd

Bonjour,
J'ai exactement le même sujet que la personne qui a partagé son sujet.
Je suis toujours bloquée au niveau du programme. Est-ce que quelqu'un pourrait me guider pour faire le programme en insérant le bouton poussoir ? Je dois rendre tout mon travail demain, j'espère que vous pourrez m'aider...

dfgh

hello

si tu avais lu les différents intervenants, tu aurais ta solution

J-M-L

#23
Mar 27, 2017, 07:00 pm Last Edit: Mar 27, 2017, 07:46 pm by J-M-L
Mais dans le cas présent cette convention est déjà imposée par l'élément du système qui produit le nombre correspondant à la mesure, à savoir le convertisseur analogique-numérique
...

Changer par la suite de convention introduit forcément une erreur supplémentaire (puisqu'on ne sait pas dans quelle moitié de l'intervalle unitaire se trouve la valeur mesurée). Or, a priori on réalise des mesures, non pas pour se faire plaisir, mais dans le but d'obtenir une information sur une grandeur physique avec le minimum d'erreur.
On ne peut donc pas énoncer par principe qu'on peut faire « comme on veut ».
Je suis d'accord avec votre conclusion "Pour le convertisseur 10 bits, les seuils sont donc bien espacés de Vréf/1024" mais je ne suis pas d'accord avec votre lecture.

La littérature ne définit que l'affectation des bits pour un intervalle. On a bien 1024 intervalles possibles sur 10 bits donc il est tout à fait normal qu'ils découpent en 1024. la formule avec le 1024 qu'ils représentent c'est la courbe théorique idéale, avant processus de "quantization".

ils confirment que la représentation binaire 0x00 et pour l'ensemble du premier step, et que 0x3FF pour l'ensemble du dernier step.

Mais si vous lisez la doc, ils expliquent d'ailleurs que l'erreur par rapport à Vin varie de 0 à 1 LSB suivant la valeur réelle de Vin



et disent bien
Quote
This maximum quantization error of 1LSB can be reduced to ±0.5LSBby shifting the transfer function towards left through 0.5LSB
L'approche que je mentionne en divisant par 1023 au lieu de 1024 revient simplement à effectuer une fonction de transfert variable --> décaler de 0 LSB quand vous êtes à GND et de 1 LSB quand vous êtes VREF et entre les deux d'une valeur plus ou moins forte suivant où vous êtes; en milieu de course vous serez exactement au décalage de 0.5LSB qu'ils mentionnent.

Sur la lecture d'une valeur, on n'introduit donc pas un plus grande erreur ce faisant, comme ils le disent vous la minimisez même (pas à GND ni à VREF elle reste identique à celle normative) mais entre les deux, vous réduisez bien l'erreur de "quantization" (qui n'est pas la seule erreur de toutes façons).

--> c'est pour cela que je dis que je préfère cette approche, elle a l'avantage sur une lecture unitaire de vous donner 0V à GND et 5V  à 5V dans le calcul flottant sous arduino, sans pénaliser l'erreur de "quantization" qui reste dans leur intervalle global de confiance.

Pour illustrer plus précisément ce que fait la division par 1024 ou par 1023, voilà un exemple (pas pris avec 10 bits mais 3 bit pour illustrer, donc division par 8 ou par 7)



On voit bien que quand on divise par 2n on obtient toujours la valeur basse alors que quand on divise par (2n-1) la fonction inverse (celle qui donne la tension en fonction du code) reste toujours au sein de l'intervalle indicatif de la mesure (c'est à dire dans le facteur d'erreur étant donné un code) mais aligne le code 0 sur GND et le code 2n-1 sur VREF

Ce faisant la précision d'une mesure n'est pas plus mauvaise qu'en divisant pas 1024 vous pouvez toujours annoncer que vous avez une "maximum quantization error of 1LSB" ce Qui est vrai aux extrêmes mais vous avez mieux en milieu de course

Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

baszoe

Code: [Select]
[quote author=khrgd link=msg=3194947 date=1490613310]
Bonjour,
J'ai exactement le même sujet que la personne qui a partagé son sujet.
Je suis toujours bloquée au niveau du programme. Est-ce que quelqu'un pourrait me guider pour faire le programme en insérant le bouton poussoir ? Je dois rendre tout mon travail demain, j'espère que vous pourrez m'aider...
[/quote]


int etatCourant = LOW;
int temps_charge = 2500;
unsigned long depart_charge = 0;
unsigned long fin_charge = 0;
int temps_decharge = 2500;
unsigned long depart_decharge = 0;
unsigned long fin_decharge = 0;
unsigned long ms = 0;
float charge = 0.0;
float decharge = 0.0;
void setup() {
  Serial.begin(115200);
  pinMode (7, OUTPUT); digitalWrite(7, LOW);
  pinMode (2, INPUT);
  pinMode (A0, INPUT);
}

void loop()
{
  if (!digitalRead(2))
  {
    etatCourant = HIGH;
    digitalWrite(7, etatCourant);
    depart_charge = millis();
    ms= millis();
    do
    {
      fin_charge = millis();
      if((millis()-ms)>1000){ms= millis();Serial.println(1023);}
      charge = (analogRead(A0));
      Serial.println(charge);
      delay(10);
    } while ((fin_charge - depart_charge) < temps_charge);
 
    etatCourant = LOW;
    digitalWrite(7, etatCourant);
    depart_decharge = millis();
    ms= millis();
    do
    {
      fin_decharge = millis();
      if((millis()-ms)>1000){ms= millis();Serial.println(1023);}
      decharge = (analogRead(A0));
      Serial.println(decharge);
      delay(10);
    } while ((fin_decharge - depart_decharge) < temps_decharge);
    while(1);
  }
}
[/code]

J-M-L

#25
Mar 27, 2017, 10:41 pm Last Edit: Mar 27, 2017, 10:45 pm by J-M-L
Non.

Je rappelle qu'ici la question ne porte pas sur la tension d'offset, mais sur la justification du coefficient 1024, au lieu de 1023.

Le fait de diviser par 1023 au lieu de 1024 ne réalise pas une translation, mais une homothétie : on augmente la taille de tous les intervalles compris entre deux valeurs successives sur l'échelle verticale du graphe. L'opération n'impacte que les valeurs élevées, sans toucher le premier palier (zéro), mais introduit au final une erreur de gain dans la conversion.

Les mesures sont forcément plus mauvaises que si l'on réalisait la correction adéquate.

Pour régler une tension d'offset, c'est une addition qu'on doit réaliser, soit analogiquement et a priori, soit numériquement et a posteriori, afin de translater la courbe dans le graphe.

Mais non....  le coefficient 1024 c'est juste pour compter le nombre d'intervalles. il n'a pas d'autre raison d'être. et il est logique d'appeler le premier intervalle avec le code 0, le second avec le code 1, le troisième avec le code 2, etc et le dernier donc avec le code 1023 --> ça fait 1024 intervalles.

Comme vous le voyez sur mon petit dessin, puisqu'on ne travaille pas sur une mesure linéaire continue (fonction affine d'un CAN idéal) le fait d'avoir une pente différente à la fonction inverse (celle qui affecte une tension à une valeur donnée entre 0 et 1023) ne fait que vous positionner ailleurs sur le palier horizontal pour trouver UNE tension possible correspondante à un code donné.

Ma droite bleue (celle divisant par 1023 ou 7 dans mon exemple) coupe chacun des intervalles au sein de ce même intervalle (c'est facilement démontrable mathématiquement ) et donc comme on ne travaille pas en fonction affine mais avec une fonction discontinue par morceaux, chacun des morceaux étant "horizontal", ma formule mathématique correspond donc bien à une translation dont vous parlez.

En divisant par 1024 vous avez une translation constante de 0 sur toute la mesure. En divisant par 1023 vous avez une translation variable, et qui dépend de là où vous voulez trouvez: elle est de 0 LSB pour GND et de +1 LSB pour Vref et de 1/2 LSB à Vref/2 mais dans tous les cas elle reste toujours dans l'intervalle possible.

--> Donc ça ne rend pas l'estimation d'une tension possible plus fausse qu'une autre puisque la tension délivrée reste TOUJOURS dans l'intervalle associé à ce "code". Mieux encore si vous êtes pas aux extrêmes avec la division par 1023, vous avez ne meilleure "maximum quantization error".


Dit autrement

si je vous donne une valeur de AnalogRead() à 511 sur 10 bits, vous êtes uniquement capable de dire que cela correspond à une tension mesurée entre 2,4951... volts et 2.5 volts. c'est tout ce que vous savez.

Tout ce que vous pouvez faire avec votre division par 1024, c'est  Afficher que la tension mesurée était de 2,4951 volt à 4,883mV (1 LSB) près dans le pire des cas.

Avec ma courbe (en divisant par 1023) vous pouvez dire -- et c'est tout aussi vrai -- que c'est 2,4975 à +/-2,441 mV (+/- 1/2 LSB) près. On s'est juste positionné par translation ailleurs au sein du segment.


OK? (sinon c'est pas grave :) )

Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

J-M-L

#26
Mar 28, 2017, 08:24 am Last Edit: Mar 28, 2017, 09:17 am by J-M-L
@pepe

Je pense que vous ne comprenez pas que la courbe que je propose est une courbe inverse

Une fonction inverse ne définit pas quelle valeur de tension génère quelle valeur codée (ce ne serait pas une fonction affine, ce serait une fonction discontinue par morceaux); elle définit pour un code donné quelle valeur de tension prendre comme valeur possible représentative. Avec une division par 1023 la valeur retournée est toujours dans l'intervalle de la spec, donc aucun biais sur la lecture et je reste dans une fourchette de 1 LSB d'amplitude d'approximation de la division brute par 1024 (mais non centrée comme je l'ai dit, on est d'accord là dessus et comme On le sait bien la précision est impactée par bien d'autres facteurs)

Quote
Conformément aux données constructeur (coefficient de 1024) :
- une valeur 1 indique que la tension d'entrée est comprise entre 0.00488 V et 0.00977 V, soit 0.00732 ±0.00244 V
Vous illustrez parfaitement donc que si vous avez lu le code 1 par un analogRead() vous ne voulez pas afficher 0.00488 V qui serait le résultat de la formule  5v x 1 / 1024 - donc division par 1024... vous voudriez afficher Le milieu du segment et donner une marge d'erreur Plus ou Moins un demi step (+/- 1/2 LSB comme ils disent dans la doc); La formule que vous proposez serait donc (5v x 1 + 0.5) / 1024 (pour faire la translation de 1/2 LSB) ==> Ce n'est pas la formule discutée ci dessus qui propose uniquement la division par 1024.

Cette formule donne UNE valeur possible en minimisant de manière constante tout au long des codes possible l'erreur de quantization, mais ne donne pas un joli affichage de 5V pour un code [tt[analogRead()[/tt] de 1023 ce qui est l'avantage (avec La variance de l'erreur de quantization que je détaille ci dessus) de la formule simple de division par 1023. En divisant par 1023 on translate plus ou moins en fonction du code, donc on a une erreur de quantization non symétrique mais on est dans la fourchette de valeur ce qui est acceptable dans la majorité des cas pour un affichage instantané unitaire comme demandé dans cet exercice
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

J-M-L

#27
Mar 28, 2017, 04:08 pm Last Edit: Mar 28, 2017, 04:10 pm by J-M-L
Je vous rejoins sur la théorie et quand le besoin de précision est là. Je ne pense pas (vu l'affichage demandé) que ce soit le cas ici


 je ne suis juste pas d'accord avec cette affirmation - qui est ce que j'essaye d'expliquer depuis le début:

Quote
S'il existe bien plusieurs conventions pour représenter une série d'intervalles de valeurs possibles, en revanche :
- cette série d'intervalles devrait être unique, puisqu'elle est fixée par construction
- la convention de représentation doit être la même pour tous ces intervalles. Notamment, on ne peut pas représenter dans le même temps certains intervalles possibles par la valeur de leur borne inférieure et  d'autres par celle de leur borne supérieure.
Je suis OK pour la partie en vert. Et en divisant par 1023, on ne modifie pas les intervalles, on en a toujours 1024 et à chaque valeur de code entre 0 et 1023, on est bien dans l'intervalle tel que défini par le constructeur: même min, même max de l'intervalle. On a une valeur possible.

Pour la partie en rouge, justement c'est là que je dis que c'est une question de convention et que rien n'empêche par choix et en toute connaissance de cause de prendre un point arbitraire variable AU SEIN DE L'INTERVALLE comme étant une valeur représentative possible de la tension à l'origine d'un code donné.

Le fait est que si vous n'avez qu'un code entre 0 et 1023, il vous est totalement impossible de savoir quelle était la bonne valeur à l'origine en lisant la spec constructeur, vous n'avez plus qu'un intervalle d'approximation. Si votre application demande (ce qui est le cas ici) de n'afficher qu'une valeur et pas une valeur + un intervalle de confiance alors prendre le min, le max ou au hasard dans l'intervalle reste un valeur possible.

celle qui minimise l'erreur de quantization, c'est effectivement la translation d'un demi LSB. je note que ce n'est pas ce qui a été recommandé en poste #16, vous ne proposiez que de diviser par 1024, donc vous proposiez de prendre toujours la borne inférieure et donc d'avoir toujours 1 LSB max d'erreur.

Tout ce que je dis plus haut - outre le fait que pour moi, dans ce cas précis d'affichage instantané (sans cumul et dérive) c'est plus gratifiant de voir 0 et 5V aux bornes (ça vous énerve pas vous? :) )  - c'est qu'en divisant par 1023 vous obtenez aussi une valeur représentative dont  l'ampleur de l'erreur est aussi de 1 LSB. l'amplitude n'est pas centrée, mais mathématiquement ça ne pose aucun problème puisqu'elle est déterministe. Vous pouvez même tracer l'enveloppe de confiance qui vous ramène au Min et Max de l'intervalle.



Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

J-M-L

#28
Mar 28, 2017, 08:31 pm Last Edit: Mar 29, 2017, 01:58 pm by J-M-L
Quote
C'est la convention de représentation qui définit l'intervalle d'incertitude à partir des seules valeurs données.
Effectivement - comme vous le dites il y a une convention à choisir - c'est ce que je dis ci dessus.

En mathématiques il y a plusieurs façons de représenter un intervalle de confiance.

L'usage du signe ± pour une approximation centrée - Par exemple, « 3 ± 0,2 » indique une quantité qui est à moins de 0,2 unité de 3 ; c'est-à-dire entre 3 - 0,2 et 3 + 0,2, donc entre 2,8 et 3,2. Cette approximation peut également se noter -0,23+0,2 (ou avec les chiffres à droite généralement mais je ne peux pas le faire sur le forum)

Par exemple quand vous prenez toujours la valeur MIN de votre intervalle vous n'allez pas dire que c'est ±1 LSB de précision. Ce n'est pas le cas, vous n'êtes pas centré. Vous êtes juste à +1 LSB (vous sous estimez en permanence la vraie valeur il n'y' a pas de ±) vous dites que l'intervalle d'erreur est [0..1] LSB et donc vous êtes à -0X+1LSB

Si vous preniez la valeur Max au lieu de la valeur min de l'intervalle, alors vous direz que vous avez -1 LSB d'approximation, pour dire qu'au pire vous êtes 1 LSB au dessus de la vraie valeur. Là encore il n'y a pas de ± vous dites que l'intervalle est [-1..0] et donc vous êtes à -1LSBX+0


si vous effectuez une translation de 1/2 LSB alors votre -1 LSB de précision est modifiée. Vous vous trouvez au centre de l'intervalle et donc one écrit ±0.5 LSB. la valeur que vous affichez peut être 0.5 LSB trop grande ou trop petite. C'est l'intervalle traditionnel que l'on rencontre le plus fréquemment qui exprime que l'erreur est répartie de manière équilibrée autour de votre affichage. et donc vous êtes à -0.5LSBX+0.5LSB ou simplement X±0.5 LSB

( c'est le choix le plus commun et supporté par tous les travaux de la fonction d'erreur de Gauss, utilisée en analyse et dans le domaine des probabilités et statistiques et des travaux d'expression de la fonction de répartition de la loi normale liée à la fonction d'erreur).

Mais rien ne vous empêche de dire -- et c'est une question de convention et de choix personnel raisonné, qui tient mathématiquement la route tant que vous savez ce que vous faites -- d'avoir un + et un - différents (comme dans le cas d'un choix du min, formule proposée en #16 de division par 1024 sans translation ou du max), exprimé mathématiquement par 2 fonctions de modélisation des bornes de l'erreur. Dans les 3 cas précédents ces fonctions sont constantes mais dans le cas d'une division par 1023, alors les fonctions de modélisation des bornes de l'erreur sont variables et données simplement par la distance euclidienne de la valeur obtenue aux bornes de l'intervalle défini par le constructeur.

avec ma fonction de transfert inverse en divisant par 1023, quand je suis aux codes:

code 0 --> tension -00 V+1LSB
code 511 --> tension -0.5LSB2,497556 V+0.5LSB
code 1023 --> tension -1LSB5 V+0LSB

je suis capable de faire un affichage unitaire correct d'une mesure probable de ma tension et donner un intervalle de confiance qui est totalement en ligne avec la spec.

Je conviens que ce n'est pas la façon la plus commune, mais comme je l'ai dit elle est gratifiante pour voir 0 et 5V, même si je comprends très bien pourquoi cela vous gêne, question de préférence personnelle

Je respecte votre point de vue bien entendu. Tout ce que je dis c'est que mon approche n'est ni plus juste ni plus fausse que la votre sur un affichage unitaire. elles sont mathématiquement équivalentes mais mon approche bien sûr ne suit pas des lois statistiques communes  si vous vous en serviez pour tirer des statistiques sur des grands nombres de "tirages" sans tenir compte de la modélisation assiciée des fonctions des bornes d'erreur (loi de Gauss et travaux de Laplace - la loi normale est apparue comme la loi limite dans le théorème central limite à l'aide de sa fonction de répartition).




Quote
L'explication de la documentation est pourtant très claire. Le nombre entier « ADC » issue du convertisseur est déterminé par la formule :

ADC = VIN·1024/VREF

Il s'agit d'une division entière, qui équivaut à dire que :

ADC·VREF/1024 ≤ VIN < (ADC+1)·VREF/1024

Il apparaît donc que chaque nombre « ADC » est le représentant unique d'un intervalle d'incertitude dans la convention de représentation se basant sur la borne inférieure que j'évoquais juste au-dessus. Les bornes inférieures valent ADC·VREF/1024 et la largeur des intervalles vaut VREF/1024.

Il n'est pas nécessaire d'ajouter 0,5 LSB dans cette convention de représentation pour obtenir le résultat de la formule.
je suis désolé mais vous revenez à la confusion dont je parlais. la première formule vise à définir un code (entre 0 et 1023) représentant une tension d'entrée. la translation et ajouter 0.5LSB n'a rien à voir avec cette formule, c'est utilisé dans la formule inverse, celle qui permet de passer d'un code à une tension minimisant l'erreur de "quantization".




bref on a "pollué" le fil d'origine avec ce débat et  j'suis pour la paix des ménages :)

Tout ce que vous dites n'est pas faux, je vois juste que j'ai du mal à vous convaincre que ce que j'écris n'est pas faux non plus, qu'il s'agit simplement d'un outil mathématique - modélisable - différent à manipuler.
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Go Up