Hi everyone. I’v tried to running my 3 phase inverter circuit with this main_code below and it worked properly (I used Arduino UNO).
float port1 = 11;
float port2 = 10;
float port3 = 9;
int f = 50;
void setup() {
Serial.begin(9600);
pinMode(port1, OUTPUT);
pinMode(port2, OUTPUT);
pinMode(port3, OUTPUT);
}
void loop() {
//1st session
analogWrite(port1, 255);
analogWrite(port2, 0);
analogWrite(port3, 255);
Serial.println("1 0 1");
delay(1/(6*f));
//2nd session
analogWrite(port1, 255);
analogWrite(port2, 0);
analogWrite(port3, 0);
Serial.println("1 0 0");
delay(1/(6*f));
//3rd session
analogWrite(port1, 255);
analogWrite(port2, 255);
analogWrite(port3, 0);
Serial.println("1 1 0");
delay(1/(6*f));
//4th session
analogWrite(port1, 0);
analogWrite(port2, 255);
analogWrite(port3, 0);
Serial.println("0 1 0");
delay(1/(6*f));
//5th session
analogWrite(port1, 0);
analogWrite(port2, 255);
analogWrite(port3, 255);
Serial.println("0 1 1");
delay(1/(6*f));
//6th session
analogWrite(port1, 0);
analogWrite(port2, 0);
analogWrite(port3, 255);
Serial.println("0 0 1");
delay(1/(6*f));
}
The problem came when I tried to apply it with lcd and switch buttons for more frequencies variant (30Hz, 40Hz, and 50Hz). I modified my code and it didn’t work (my induction motor didn’t rotate). This is my modified code :
#include <LiquidCrystal.h>
float PWM1 = 11;
float PWM2 = 10;
float PWM3 = 9;
int f = 50;
const int PIN_A0 = A0;
const int PIN_A1 = A1;
const int PIN_A2 = A2;
const int PIN_RS = 2;
const int PIN_E = 3;
const int PIN_DB4 = 4;
const int PIN_DB5 = 5;
const int PIN_DB6 = 7;
const int PIN_DB7 = 8;
LiquidCrystal lcd(2, 3, 4, 5, 7, 8);
void setup() {
pinMode(PWM1, OUTPUT);
pinMode(PWM2, OUTPUT);
pinMode(PWM3, OUTPUT);
pinMode(PIN_A0, INPUT_PULLUP);
pinMode(PIN_A1, INPUT_PULLUP);
pinMode(PIN_A2, INPUT_PULLUP);
lcd.begin(16, 2);
Serial.begin(9600);
}
void loop() {
int TOMBOL1 = digitalRead(PIN_A0);
int TOMBOL2 = digitalRead(PIN_A1);
int TOMBOL3 = digitalRead(PIN_A2);
if(TOMBOL1 == LOW && TOMBOL2 == HIGH && TOMBOL3 == HIGH){
lcd.clear();
lcd.print("3_PHASE INVERTER");
lcd.setCursor(0, 1);
lcd.print("Freq = 50Hz");
frequency50();
}
else if(TOMBOL1 == HIGH && TOMBOL2 == LOW && TOMBOL3 == HIGH){
lcd.clear();
lcd.print("3_PHASE INVERTER");
lcd.setCursor(0, 1);
lcd.print("Freq = 40Hz");
frequency40();
}
else if(TOMBOL1 == HIGH && TOMBOL2 == HIGH && TOMBOL3 == LOW){
lcd.clear();
lcd.print("3_PHASE INVERTER");
lcd.setCursor(0, 1);
lcd.print("Freq = 30Hz");
frequency30();
}
else{
lcd.clear();
lcd.print("3_PHASE INVERTER");
lcd.setCursor(0, 1);
lcd.print("Standby Mode");
Serial.println("Standby");
delay(1000);
}
}
void frequency50() {
//1st session (101)
analogWrite(PWM1, 255);
analogWrite(PWM2, 0);
analogWrite(PWM3, 255);
delay(1/(6*f));
//2nd session (100)
analogWrite(PWM1, 255);
analogWrite(PWM2, 0);
analogWrite(PWM3, 0);
delay(1/(6*f));
//3rd session (110)
analogWrite(PWM1, 255);
analogWrite(PWM2, 255);
analogWrite(PWM3, 0);
delay(1/(6*f));
//4th session (010)
analogWrite(PWM1, 0);
analogWrite(PWM2, 255);
analogWrite(PWM3, 0);
delay(1/(6*f));
//5th session (011)
analogWrite(PWM1, 0);
analogWrite(PWM2, 255);
analogWrite(PWM3, 255);
delay(1/(6*f));
//6th session (001)
analogWrite(PWM1, 0);
analogWrite(PWM2, 0);
analogWrite(PWM3, 255);
delay(1/(6*f));
Serial.print("50Hz");
}
void frequency40() {
//1st session (101)
analogWrite(PWM1, 204);
analogWrite(PWM2, 0);
analogWrite(PWM3, 204);
delay(1/(6*f));
//2nd session (100)
analogWrite(PWM1, 204);
analogWrite(PWM2, 0);
analogWrite(PWM3, 0);
delay(1/(6*f));
//3rd session (110)
analogWrite(PWM1, 204);
analogWrite(PWM2, 204);
analogWrite(PWM3, 0);
delay(1/(6*f));
//4th session (010)
analogWrite(PWM1, 0);
analogWrite(PWM2, 204);
analogWrite(PWM3, 0);
delay(1/(6*f));
//5th session (011)
analogWrite(PWM1, 0);
analogWrite(PWM2, 204);
analogWrite(PWM3, 204);
delay(1/(6*f));
//6th session (001)
analogWrite(PWM1, 0);
analogWrite(PWM2, 0);
analogWrite(PWM3, 204);
delay(1/(6*f));
Serial.print("40Hz");
}
void frequency30() {
//1st session (101)
analogWrite(PWM1, 153);
analogWrite(PWM2, 0);
analogWrite(PWM3, 153);
delay(1/(6*f));
//2nd session (100)
analogWrite(PWM1, 153);
analogWrite(PWM2, 0);
analogWrite(PWM3, 0);
delay(1/(6*f));
//3rd session (110)
analogWrite(PWM1, 153);
analogWrite(PWM2, 153);
analogWrite(PWM3, 0);
delay(1/(6*f));
//4th session (010)
analogWrite(PWM1, 0);
analogWrite(PWM2, 153);
analogWrite(PWM3, 0);
delay(1/(6*f));
//5th session (011)
analogWrite(PWM1, 0);
analogWrite(PWM2, 153);
analogWrite(PWM3, 153);
delay(1/(6*f));
//6th session (001)
analogWrite(PWM1, 0);
analogWrite(PWM2, 0);
analogWrite(PWM3, 153);
delay(1/(6*f));
Serial.print("30Hz");
}
For more information I’v tried to running my project only with main_code + lcd and it also didn’t work. Shoud I lessen 6th session pwm with processing time for lcd listing? (I used lcd QC1602A v2.0). For anyone, please help me solve this problem. Thank you. Regards, Tiara.