Messages : 8
Sujets : 2
Inscription : Feb 2026
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;
}
Messages : 85
Sujets : 4
Inscription : Nov 2024
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.
Messages : 1,000
Sujets : 6
Inscription : Sep 2024
Hier, 06:31 PM
(Modification du message : Hier, 06:32 PM par Lolo69.)
(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
Messages : 1,467
Sujets : 45
Inscription : May 2024
(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é
Messages : 867
Sujets : 6
Inscription : Aug 2024
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 ?
Messages : 1,000
Sujets : 6
Inscription : Sep 2024
Hier, 09:57 PM
(Modification du message : Hier, 09:57 PM par Lolo69.)
(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%
Messages : 867
Sujets : 6
Inscription : Aug 2024
(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.
Messages : 85
Sujets : 4
Inscription : Nov 2024
(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.
Messages : 1,000
Sujets : 6
Inscription : Sep 2024
Il y a 49 minutes
(Modification du message : Il y a moins de 1 minute par Lolo69.)
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)