float sine_r;
float sine_s;
float sine_t;
int sine_ir;
int sine_is;
int sine_it;
float f = 100.0;
float rad_i;
boolean semiciclo = true; // Flag para indicar o semiciclo positivo/negativo
void setup(){
Serial.begin(9600);
pinMode(25, OUTPUT);
pinMode(26, OUTPUT);
pinMode(27, OUTPUT);
pinMode(14, OUTPUT);
pinMode(12, OUTPUT);
ledcAttachPin(26, 1);//Atribuimos o GPIO 26 ao canal 1 - monofásico 1
ledcAttachPin(27, 2);//Atribuimos o GPIO 27 ao canal 2 - monofásico 2
ledcAttachPin(14, 3);//Atribuimos o GPIO 14 ao canal 3 - trifásico r
ledcAttachPin(12, 3);//Atribuimos o GPIO 12 ao canal 3 - trifásico s
ledcAttachPin(13, 3);//Atribuimos o GPIO 13 ao canal 3 - trifásico r
ledcSetup(0, 5000, 10); // Configuração do PWM0: canal 0, Frequência 5000Hz, resolução de 10 bits
ledcSetup(1, 5000, 10); // Configuração do PWM1: canal 1, Frequência 5000Hz, resolução de 10 bits
ledcSetup(2, 5000, 10); // Configuração do PWM2: canal 2, Frequência 5000Hz, resolução de 10 bits
ledcSetup(3, 5000, 10); // Configuração do PWM2: canal 3, Frequência 5000Hz, resolução de 10 bits
ledcSetup(4, 5000, 10); // Configuração do PWM2: canal 4, Frequência 5000Hz, resolução de 10 bits
}
void loop (){
for (int i = -180; i <= 180; i++){
if (i >= 0) {
semiciclo = true;
}
else {
semiciclo = false;
}
// Cálculo dos valores instantâneos das senóides
sine_r = sin((i*(3.1415/180.0)*f));
sine_s = sin((i*(3.1415/180.0)*f)+120*(3.1415/180.0));
sine_t = sin((i*(3.1415/180.0)*f)+240*(3.1415/180.0));
// Converte valores instantâneos para escala de 0 1023
sine_ir = 512 + int(sine_r*512.0); //Ajusta a variação de 0 a 1023 com média em 512
sine_is = 512 + int(sine_s*512.0);
sine_it = 512 + int(sine_t*512.0);
Serial.print ("i = ");
Serial.println (i);
Serial.print ("Semiciclo = ");
Serial.println (semiciclo);
Serial.println("Seno r Seno s Seno t");
Serial.println((String)sine_r + " " + (String)sine_s + " " + (String)sine_t);
Serial.println("Seno ir Seno is Seno it");
Serial.println((String)sine_ir + " " + (String)sine_is + " " + (String)sine_it);
// Geração do PWM para inversor monofásico
if (semiciclo == true){ // Semiciclo positivo
ledcWrite(0, sine_ir); // Escreve valor do seno calculado no canal 0 do PWM
ledcWrite(1, 1023); // Zera o canal 1 para desabilitar os MOSFETs do braço esquerdo da ponte durante o semicliclo negativo
}
else{ // Semiciclo negativo
ledcWrite(1, sine_ir); // Escreve valor do seno calculado no cnanal 1 do PWM
ledcWrite(0, 1023); // Seta o canal 0 para desabilitar os MOSFETs do braço direito daponte durante o semiciclo positivo
}
// Geração do PWM para inversor trifásico
ledcWrite(2, sine_ir);
ledcWrite(3, sine_is);
ledcWrite(4, sine_it);
} // for (int i = -180;i<= 180; i++)
}