Warning: Undefined array key "HTTP_ACCEPT_LANGUAGE" in /home/clients/db62a7f73729021974202bbfe60264f9/sites/hfelec.ch/models/UsersManager.php on line 18
Blog de Conception Électronique - Tutoriels et Astuces
Logo Central

Réalisation d'un Wattmètre

Je cherche à mesurer avec précision la consommation d'appareils connectés au réseau 230V, notamment les ampoules LED utilisées avec un variateur.

Pour la mesure de la tension, j'utilise un transformateur avec un rapport d’environ 20:1, ce qui permet d'obtenir 12V efficaces ou ± 17V crête au secondaire. À l’aide d’un amplificateur opérationnel, je vais réduire cette tension à ± 1,5V.

Rappel sur la notion de puissance

Voici une clarification des différents types de puissance en systèmes AC :

Mesure du courant

Je souhaite mesurer des puissances alternatives de faibles valeurs. Pour cette mesure, je vais utiliser un transformateur de courant. En supposant que celui-ci est parfait, je peux appliquer la formule suivante :

Ip ⋅ np = Is ⋅ ns

Le courant au primaire multiplié par le nombre de spires au primaire doit être égal au courant au secondaire multiplié par le nombre de spires au secondaire.

Pour obtenir une valeur suffisante au secondaire, je choisis un transformateur avec un rapport np/ns le plus grand possible.

Le secondaire du transformateur est mis en charge sur une résistance de 100 ohms. L'expression du courant dans la résistance est :

UR / R = IR

Prenons comme exemple une ampoule de 25W. Le courant au primaire est d'environ 100mA. Avec un rapport de transformation équivalent à 500, le courant au secondaire atteint 0,2mA. La tension mesurée aux bornes de la résistance de charge est alors :

0,2 × 10-3 A × 100 Ω = 20 mV

schema sommateur

La tension mesurée à la sortie de mon ampli (TP10) UM "MAX9939" vaut:

UM = UR . Gain      UM = tension mesurée      UR = tension aux bornes de R5

Le courant à la sortie de secondaire:    IS = UR / R
Le courant au primaire:    Ip = IS . Nspires      =>      IP = UR / R . N Spires UR = U M / Gain

Finalement j'utilise un convertisseur ADC avec une définition de 12bits et la tension de référence et de 3,3V.

IP = UM . NSpires / R . Gain UM = Sample . 3.3 / 4096     =>     IP= Sample . 3,3 . NSpires / 4096 . R . Gain

Mesure de la tension

Calcul du sommateur pour la mise en forme de la mesure de tension :
schema sommateur

i1 = VDD - V+ / R1      i2 = V+ / R2      i3 = VAC - V+ / R3
i1 + i3 = i2
VDD - V+ / R1   +   VAC - V+ / R3 = V+ / R2    
R3 VDD - R3 V+ R1 VAC - R1 V+ / R1 R3 = V+ / R2    
A partir de l'équation ci-dessus on peut ressortir l'expression de la tension V+
V+ =   R3 R2 VDD + R2 R1 VAC / R1 R3 + R2 R3 + R1 R2

Lorsque la tension alternative est nulle la tension de sortie V+ doit-être à VDD/ 2

1er cas:
VAC = 0   /   V+ = VDD / 2

 VDD /  2  =  R2 R3 VDD / R1 R3 + R2 R3 + R1 R2

R1 = R2 // R3=   R2 R3 / R2 + R3

Lorsque la tension alternative est maximale "tension crête", dans cette application elle vaut env. 15V soit 4.54 VDD et la tension de sortie à 3V soit 9/10 de VDD

2ème cas:
VAC = 4.54 VDD  /  V+ =   9 VDD /  10 

9 VDD /  10  = R2 R3 VDD +  4.54 R1 R2 / R1 R3 + R2 R3 + R1 R2

R1 =  R2 R3 / 9 R3 - 36.4 R2


Je choisi une des trois résistance par exemple R2 = 2.7K, à partir des deux cas mentionné ci-dessus on peut déterminer les deux autres valeurs.

R3 = 4.675 R2    =>    R1 = 0.8238 R2

La vérification avec PSpice est présentée ci-dessous avec le tracé de la tension VAC et de la tension de sortie de l'AOP VS. Je ne cherche pas à mesurer la tension réseau de cette manière ; mon objectif est de la représenter graphiquement et, surtout, de déterminer le déphasage entre le courant et la tension. On peut considérer que la tension réseau fluctue très peu et la considérer comme stable à 240[V]rms.

Tracé 1 Tracé 2

Schémas blocs

J'ai placé un module Wi-Fi d'ATMEL pour la communication et j'ai divisé mon schéma en trois blocs.



Schéma bloc


Bloc Microprocessor, j'ai choisi Le STM32F722 est un microcontrôleur de la famille STM32, développée par STMicroelectronics. Voici les caractéristiques principales du microcontrôleur STM32F722 :


Microprocessor bloc


Bloc Display, j'ai choisi un display TFT avec une résolution de 320x240 pixels et une diagonal de 3.5 inch, pour le piloter le FT800 (Embedded Video Engine).

Display bloc


Bloc Alimentation, Pour simplifier le montage j'utilise un module AC-DC de 3W.

Alimentation bloc

Construction

J'ai choisi un boîtier pupitre de Boplat (figure ci-dessous).
Afin d'éviter de souder mon circuit dans un four à refusion (reflow oven) et pour faciliter le brasage du FT800Q, j'ai augmenté la taille des pads et ajouté une large pastille avec un trou traversant, ce qui permet de souder le pad situé sous le composant (FT800Q). La forme du boîtier nous oblige à positionner tous les composants relativement haut vers l'arrière du PCB.

Image du boitier
Circuit Imprimé

Calcul des puissances

Lorsque le courant est impulsionnel et non sinusoïdal, le calcul des puissances et du cosφ nécessite une approche légèrement différente car les hypothèses sur la sinusoïdalité ne tiennent plus. Voici comment adapter les calculs pour ce type de signal :

En utilisant ces fonctions, on pout obtenir le cosφ, la puissance active, la puissance réactive et la puissance apparente à partir des tableaux de valeurs de courant et de tension, même si le courant est impulsionnel. Cette méthode n'utilise pas d'hypothèses de sinusoïdalité et devrait fonctionner pour divers types de signaux périodiques.

Néanmoins pour obtenir un calcul plus précis il serait nécessaire de décomposer les signaux en série de fourier DFT ou FFT, mais la mise en oeuvre est beaucoup plus complexe et le temps de traitement beaucoup plus long.


Le programme

Les fonctions pour le calcul des puissances.

// Fonctions d'utilité pour calculer la moyenne, le RMS et le produit scalaire
float calculate_mean(const uint16_t *samples, size_t length) {
    uint32_t sum = 0;  // Utiliser uint32_t pour éviter le dépassement
    for (size_t i = 0; i < length; i++) {
        sum += samples[i];
    }
    return (float)sum / length;
}

float calculate_rms(const float *samples, size_t length) {
    float sum_squares = 0;
    for (size_t i = 0; i < length; i++) {
        sum_squares += samples[i] * samples[i];
    }
    return sqrt(sum_squares / length);
}

float calculate_dot_product(const float *samples1, const float *samples2, size_t length) {
    float dot_product = 0;
    for (size_t i = 0; i < length; i++) {
        dot_product += samples1[i] * samples2[i];
    }
    return dot_product;
}


void calculate_power_and_cos_phi(const uint16_t *voltage_samples, 
								 const uint16_t *current_samples, 
								 size_t length, float *cos_phi, 
								 float *P, float *Q, float *S) {
								 
    float voltage_mean = calculate_mean(voltage_samples, length);
    float current_mean = calculate_mean(current_samples, length);

    // Centrer les signaux (soustraire la moyenne)
    float voltage_centered[length];
    float current_centered[length];
    for (size_t i = 0; i < length; i++) {
        voltage_centered[i] = voltage_samples[i] - voltage_mean;
        current_centered[i] = current_samples[i] - current_mean;
    }

    // Calculer les valeurs RMS
    float voltage_rms = calculate_rms(voltage_centered, length);
    float current_rms = calculate_rms(current_centered, length);

    // Calculer le produit scalaire centré
    float dot_product_centered = calculate_dot_product(voltage_centered, current_centered, length);

    // Calculer la puissance active (P)
    *P = dot_product_centered / length;

    // Calculer la puissance apparente (S)
    *S = voltage_rms * current_rms;

    // Calculer le cos phi (facteur de puissance)
    *cos_phi = *P / *S;

    // Calculer la puissance réactive (Q)
    *Q = sqrt((*S * *S) - (*P * *P));
}


Conclusion

Comme vous pouvez le constater sur les captures d'écran ci-dessous, les résultats ne sont pas satisfaisants. En effet, la mesure de la tension manque de stabilité, et la forme de l'onde est déformée, ne ressemblant pas à une sinusoïde.

En revanche, la mesure du courant semble plus réaliste. En comparant avec les mesures effectuées à l'aide d'un ampèremètre sur des charges purement ohmiques, elles s'avèrent similaires.

Je vais m'arrêter ici pour le moment et utiliser ce montage pour expérimenter une connexion WLAN.

Je pense qu'une nouvelle version sera nécessaire afin d'obtenir de meilleurs résultats.

Image 1

Ampoule Halogène 50W

Image 2

Ampoule Halogène 200W

Image 3

Ampoule LED 5W

Image 4

Ampoule LED 3W

Commentaires

Avatar
Raymond
2025-01-28

Pourquoi réinventer la roue alors qu'il existe des circuits qui mesurent la tension, le courant et même le déphasage, comme l'ATM90E32AS ?


Warning: Undefined array key "HTTP_ACCEPT_LANGUAGE" in /home/clients/db62a7f73729021974202bbfe60264f9/sites/hfelec.ch/models/UsersManager.php on line 18