Go Down

Topic: La mesure d'une facteur de puissance (Read 41 times) previous topic - next topic

khadim_mbengue

Bonjour,
Désolé je suis un début sur l'arduino et voici mon nouveau programme qui fonctionne.
Code: [Select]

#include <Wire.h>
///#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal.h>
#include <SoftwareSerial.h>
#include <TimerOne.h>
#include <math.h>

#define A1 20   // transformateur de tension
#define A2 21   //transformateur de courent
#define LED13    13     

LiquidCrystal lcd(9, 8, 4, 5, 6, 7);   // LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

              float T1,T0; 
              float pi;
              float temps;           //
              float Time0, Time1;   // peridiode des signaux
              float dephasage, dephasagerad,fp;
              float fe;                         //frequence d'entrée
 

void setup()
{
  pinMode(LED13, OUTPUT);
  pinMode(A1, INPUT);
  pinMode(A2,INPUT);
 
  Timer1.initialize(1000);           // initialize timer1, and set a 0,1 second period =>  100 000  pour 0.01s  10 000
  lcd.begin(20, 4);                   //modifier pour un afficheur 16x2
 
  Serial.begin(9600);

  attachInterrupt(0, func_k, RISING);   // broche2

  T0 = millis();
  attachInterrupt(1, powerfactor, RISING);   // broche3
 
 // TCCR2B = (TCCR2B & 0b11111000) | 0x01;         //pin 3  32khz    http://playground.arduino.cc/Main/TimerPWMCheatsheet
}

// faisons deux interruotion pour pouvoir calculer le temps

void func_k() // la fonction appelée par l'interruption externe n°0
{
Time0=(micros()-T0);  //pour mesurer la perriode du signal broche 2
T0= micros();
T1= T0;
}

void powerfactor() // la fonction appelée par l'interruption externe n°1
{
temps=Time0-micros()+T1;  //pour mesurer l'ecart du temps
}

void callback()     
{
digitalWrite(LED13,HIGH);  //permet de mesurer à l'oscillo, le temps du calcul du filtre et le temps de la routine d'interruption                                     
digitalWrite(LED13,LOW); 
}//fin routine

 

void loop()

   
 fe=1000000/Time0;                       
dephasage=((360*temps)/Time0);

dephasagerad=((dephasage*PI)/180);
fp = cos(dephasagerad);// factor power

lcd.setCursor(0,0);
lcd.print("Frequence=");     //
lcd.print(fe);
lcd.print("   ");

lcd.setCursor(0,1);
lcd.print("Delta T=");
lcd.print(temps,0);
lcd.print("      ");

lcd.setCursor(0,2);
lcd.print("Dephasage=");
lcd.print(dephasage);
lcd.print("   ");



lcd.setCursor(0,3);
lcd.print("Factor Power=");
lcd.print(fp,3);
lcd.print("   ");

} // fin loop


La simulation avec ISIS:



J'ai fais quels test pour vérifier le bon fonctionnement du programme.

Pour une fréquence d'entrée de 50hz, avec des phasages imposés entres les 2 signaux, le programme mesure les valeurs suivantes:



Pour une fréquence d'entrée de 500Hz, avec des phasages imposés entres les 2 signaux, le programme mesure les valeurs suivantes:

Go Up