Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
vitesse lecture ADC pour UxI
#1
Bonjour,

 Dans le cadre UxI, 'il est possible d'accélérer de près du double la lecture des ports ADC dans la routine d'échantillonage U et I. en utilisant  adc1_get_raw  au lieu de analogRead().


Code :
int UxI::getSamples() {


  int iStore = 0;
  int valueI = adc1_get_raw(ADC1_CHANNEL_7);
  int valueV = valueI;
  unsigned long beginMicro = micros();
  unsigned long curMicro;
  samples = 0;

  while ((curMicro = micros()) - beginMicro <= LOOP_SAMPLES_DURATION_MICROS) { 
    iStore = (curMicro % SAMPLE_TIME_MICROS) / RATIO_COUNT;                   
    volt[iStore] = adc1_get_raw(ADC1_CHANNEL_4) - valueV;
    amp[iStore] = adc1_get_raw(ADC1_CHANNEL_5) - valueI;
    samples++;
  }
  return samples;
}
Répondre

#2
Il faut ajouter #include "driver/adc.h" en début de programme.
Il est aussi possible de calibrer les valeurs d'après la calibration usine de chaque ESP32 avec esp_adc_cal_raw_to_voltage(, ça nécessite un peu de paramétrage au début mais fonctionne bien.
Je crois que sur la 3.3.7 c'est encore changé, avec adc_oneshot_read() étant la méthode recommandée.
Répondre

#3
(Hier, 11:21 AM)H3rv3 a écrit : Il faut ajouter #include "driver/adc.h" en début de programme.
Il est aussi possible de calibrer les valeurs d'après la calibration usine de chaque ESP32 avec esp_adc_cal_raw_to_voltage(, ça nécessite un peu de paramétrage au début mais fonctionne bien.
Je crois que sur la 3.3.7 c'est encore changé, avec adc_oneshot_read() étant la méthode recommandée.

ce n est pas hyper utile car la vitesse d echantillonnage, n est pas limitée par l adc mais par le calcul du courant efficace qui ne peut se faire qu à minima sur une periode (20 ms) complète, deux periodes etant plus précis
Répondre

#4
(Hier, 06:31 PM)Lolo69 a écrit :
(Hier, 11:21 AM)H3rv3 a écrit : Il faut ajouter #include "driver/adc.h" en début de programme.
Il est aussi possible de calibrer les valeurs d'après la calibration usine de chaque ESP32 avec esp_adc_cal_raw_to_voltage(, ça nécessite un peu de paramétrage au début mais fonctionne bien.
Je crois que sur la 3.3.7 c'est encore changé, avec adc_oneshot_read() étant la méthode recommandée.

ce n est pas hyper utile car la vitesse d echantillonnage,  n est pas limitée par l adc mais par le calcul du courant efficace qui ne peut se faire qu à minima sur une periode (20 ms) complète, deux periodes etant plus précis

Accélérer n'apporte rien. Il faut 100 échantillons répartis sur 20ms. La structure actuelle le permet.

Cdlt

André
Répondre

#5
20ms = période d'une sinusoïde complète en 50hz, c'est bien cela ?

si on accélère l'échantillonnage (par exemple 200 mesure en 20ms), est ce que cela améliore la précision de mesure ?
Répondre

#6
(Hier, 08:43 PM)grostoto a écrit : 20ms =  période d'une sinusoïde complète en 50hz, c'est bien cela  ?

si on accélère l'échantillonnage (par exemple 200 mesure en 20ms), est ce que cela améliore la précision de mesure ?
 Dans l absolu OUI car les « escaliers » dus à l’échantillonnage sont moins larges

Mais encore une fois améliorer la précision de la mesure ne sert à rien , derrière la régulation est par pas entier de 1%
Répondre

#7
(Hier, 09:57 PM)Lolo69 a écrit :  Dans l absolu OUI car les « escaliers » dus à l’échantillonnage sont moins larges
merci, c'est la réponse à ma question.
Répondre

#8
(Hier, 08:37 PM)F1ATB a écrit :
(Hier, 06:31 PM)Lolo69 a écrit : ce n est pas hyper utile car la vitesse d echantillonnage,  n est pas limitée par l adc mais par le calcul du courant efficace qui ne peut se faire qu à minima sur une periode (20 ms) complète, deux periodes etant plus précis

Accélérer n'apporte rien. Il faut 100 échantillons répartis sur 20ms. La structure actuelle le permet.

Cdlt

André

Je suis d'accord mais je crois que le but du post était d'ajouter une voie de lecture supplémentaire.
Si c'est plus rapide ça devrait le permetre. De base on a déjà trois mesures dans le temps alloué U, I, Vref. Il "suffit" d'avoir le temps d'en rajouter une pour une entré I2 éventuelle, pas besoin de refaire U ni Vref donc 4 mesures à la place de 3 dans le même temps.
Pour qui a besoin de ça, ça me paraît bien.
Répondre

#9
Ha idée à creuser dans ce cas pour aller jusqu au triphasé
Attention toutefois aux calibrations
Avec get raw mesures brutes sans calibration donc rapide mais moins précises ( sauf si on refait des calibrations , pas si simples) avec analogread moins rapide mais mesures calibrées plus précises ( en théorie)
Répondre



Atteindre :


Utilisateur(s) parcourant ce sujet :
1 visiteur(s)

Moteur MyBB, © 2002-2026 Melroy van den Berg.