VVVFインバーターの設計製作3

記事数だけいたずらに増えていくのがよろしくないが、前回に引き続きプログラムを掲載しておきたい。

これは矩形波駆動させたときのプログラムである。

変数 i についてはA0でAD変換して変数として利用すれば外部入力で速度可変できる。

このプログラムはオープンループになっていて位置検出がないため急激な操作量を入力すると脱調してしまう。

各相(もしくは1相だけ)にシャント抵抗を入れてゼロクロス検出をするなどの工夫が必要である。

 

const int IN_U = 3;
const int SD_U = 2;
const int IN_V = 5;
const int SD_V = 4;
const int IN_W = 6;
const int SD_W = 8;
volatile int val = LOW;      //inputpinの値を格納する代数

int delayTime;

 

//各ピンの設定

void setup() {
  pinMode(IN_U, OUTPUT);
  pinMode(IN_V, OUTPUT);
  pinMode(IN_W, OUTPUT);
  pinMode(SD_U, OUTPUT);
  pinMode(SD_V, OUTPUT);
  pinMode(SD_W, OUTPUT);

  analogWrite(IN_U, 0);
  analogWrite(IN_V, 0);
  analogWrite(IN_W, 0);
  digitalWrite(SD_U, HIGH);
  digitalWrite(SD_V, HIGH);
  digitalWrite(SD_W, HIGH);
}

 

//初期位置固定
for(int i=1000; i >= 0; i--){
  digitalWrite(IN_U, HIGH);
  digitalWrite(IN_V, 0);
  digitalWrite(IN_W, 0);
  digitalWrite(SD_U, HIGH);
  digitalWrite(SD_V, LOW);
  digitalWrite(SD_W, HIGH);
    delay(5);
  digitalWrite(IN_U, 0);
  digitalWrite(IN_V, 0);
  digitalWrite(IN_W, 0);
  digitalWrite(SD_U, HIGH);
  digitalWrite(SD_V, LOW);
  digitalWrite(SD_W, HIGH);
    delay(5);
    }

  if (millis() < 8000) {
    delayTime = 5 - millis() / 2000;
  }

 


void loop() {

 

//本文
for(int i=4000; i >= 1000; i--){
  digitalWrite(IN_U, 255);
  digitalWrite(IN_V, 0);
  digitalWrite(IN_W, 0);
  digitalWrite(SD_U, HIGH);
  digitalWrite(SD_V, LOW);
  digitalWrite(SD_W, HIGH);
    delayMicroseconds(i);

  digitalWrite(IN_U, 255);
  digitalWrite(IN_V, 0);
  digitalWrite(IN_W, 0);
  digitalWrite(SD_U, HIGH);
  digitalWrite(SD_V, HIGH);
  digitalWrite(SD_W, LOW);
    delayMicroseconds(i);

  digitalWrite(IN_U, 0);
  digitalWrite(IN_V, 0);
  digitalWrite(IN_W, 255);
  digitalWrite(SD_U, LOW);
  digitalWrite(SD_V, HIGH);
  digitalWrite(SD_W, HIGH);
    delayMicroseconds(i);

  digitalWrite(IN_U, 0);
  digitalWrite(IN_V, 0);
  digitalWrite(IN_W, 255);
  digitalWrite(SD_U, HIGH);
  digitalWrite(SD_V, LOW);
  digitalWrite(SD_W, HIGH);
    delayMicroseconds(i);

  digitalWrite(IN_U, 0);
  digitalWrite(IN_V, 255);
  digitalWrite(IN_W, 0);
  digitalWrite(SD_U, HIGH);
  digitalWrite(SD_V, HIGH);
  digitalWrite(SD_W, LOW);
    delayMicroseconds(i);

  digitalWrite(IN_U, 0);
  digitalWrite(IN_V, 255);
  digitalWrite(IN_W, 0);
  digitalWrite(SD_U, LOW);
  digitalWrite(SD_V, HIGH);
  digitalWrite(SD_W, HIGH);
    delayMicroseconds(i);
  }

 

 

for(int i=3000; i >= 0; i--){
  digitalWrite(IN_U, 255);
  digitalWrite(IN_V, 0);
  digitalWrite(IN_W, 0);
  digitalWrite(SD_U, HIGH);
  digitalWrite(SD_V, LOW);
  digitalWrite(SD_W, HIGH);
    delayMicroseconds(1020);

  digitalWrite(IN_U, 255);
  digitalWrite(IN_V, 0);
  digitalWrite(IN_W, 0);
  digitalWrite(SD_U, HIGH);
  digitalWrite(SD_V, HIGH);
  digitalWrite(SD_W, LOW);
    delayMicroseconds(1020);

  digitalWrite(IN_U, 0);
  digitalWrite(IN_V, 0);
  digitalWrite(IN_W, 255);
  digitalWrite(SD_U, LOW);
  digitalWrite(SD_V, HIGH);
  digitalWrite(SD_W, HIGH);
    delayMicroseconds(1020);

  digitalWrite(IN_U, 0);
  digitalWrite(IN_V, 0);
  digitalWrite(IN_W, 255);
  digitalWrite(SD_U, HIGH);
  digitalWrite(SD_V, LOW);
  digitalWrite(SD_W, HIGH);
    delayMicroseconds(1020);

  digitalWrite(IN_U, 0);
  digitalWrite(IN_V, 255);
  digitalWrite(IN_W, 0);
  digitalWrite(SD_U, HIGH);
  digitalWrite(SD_V, HIGH);
  digitalWrite(SD_W, LOW);
    delayMicroseconds(1020);

  digitalWrite(IN_U, 0);
  digitalWrite(IN_V, 255);
  digitalWrite(IN_W, 0);
  digitalWrite(SD_U, LOW);
  digitalWrite(SD_V, HIGH);
  digitalWrite(SD_W, HIGH);
    delayMicroseconds(1020);
  }

 

 

for(int i=1000; i <= 4000; i++){
  analogWrite(IN_U, 250);
  analogWrite(IN_V, 0);
  analogWrite(IN_W, 0);
  digitalWrite(SD_U, HIGH);
  digitalWrite(SD_V, LOW);
  digitalWrite(SD_W, HIGH);
    delayMicroseconds(i);

  analogWrite(IN_U, 250);
  analogWrite(IN_V, 0);
  analogWrite(IN_W, 0);
  digitalWrite(SD_U, HIGH);
  digitalWrite(SD_V, HIGH);
  digitalWrite(SD_W, LOW);
    delayMicroseconds(i);

  analogWrite(IN_U, 0);
  analogWrite(IN_V, 0);
  analogWrite(IN_W, 250);
  digitalWrite(SD_U, LOW);
  digitalWrite(SD_V, HIGH);
  digitalWrite(SD_W, HIGH);
     delayMicroseconds(i);

  analogWrite(IN_U, 0);
  analogWrite(IN_V, 0);
  analogWrite(IN_W, 250);
  digitalWrite(SD_U, HIGH);
  digitalWrite(SD_V, LOW);
  digitalWrite(SD_W, HIGH);
    delayMicroseconds(i);

  analogWrite(IN_U, 0);
  analogWrite(IN_V, 250);
  analogWrite(IN_W, 0);
  digitalWrite(SD_U, HIGH);
  digitalWrite(SD_V, HIGH);
  digitalWrite(SD_W, LOW);
    delayMicroseconds(i);

  analogWrite(IN_U, 0);
  analogWrite(IN_V, 250);
  analogWrite(IN_W, 0);
  digitalWrite(SD_U, LOW);
  digitalWrite(SD_V, HIGH);
  digitalWrite(SD_W, HIGH);
    delayMicroseconds(i);
  }
}