« 【 NE555 】高精度タイマーIC ~いつまでも斬新さを失わない | メイン | 心こもった手作りの餅菓子 »

2017年5月 9日

三相モーターコントロール 1 ~LEDで三相交流をイメージしてみる

三相交流といえば全世界において当たり前に使われている発電・送電方式の標準ですが
その昔、130年前に初めて発電・送電が始まったのは、実は直流でした。
エジソンが始めました。
直流で回るモーターなどに合う電圧、すなわち受電側も発電・送電側も同じ電圧でなければならないという
縛りがありますから、一方的に電圧を上げることもできず、必然的に低い電圧となります。
ところが需要家の方はどんどん電力を欲しがります。
その結果、大需要に応えるにはより太い電線を使って発電し送電することになりますが
需要が増えれば増えるほど電線を太くしなければならないことになります。
必然的にその限界は見えていました。


【電力=電圧×電流】
これは中学の理科の時間に習ったような覚えがあるようなないような・・・

ようは電圧が同じなら電力を増やすには電流を大きくするほかなく
大きな電流を流すにはより太い銅線が必要になるという理屈です。
 (※銅線にもわずかに抵抗があり、そこで発熱して電力が損失。大電流では無視できなくなる)
ということは、
同じ電力を送るには電圧を上げれば電線の太さを同じでも、より大きな電力を送れます。
直流でそれをやろとしても簡単にいきません。限界があります。
というのは、交流発電・送電なら送り手側は変圧器を使って需要に対応してどんどん高圧に上げられます。
(※いまでは100万ボルト送電)
受けての方は変圧器を使って欲しい電圧まで落とせばいいだけですが
直流送電では、そうはいきません。
 通常、送り手と受けては同じ電圧となるので
送り手の都合だけで電圧を上げられないからです。

ニコラテスラは発明した二相交流モータをさらに発展させて
より効率がいい三相交流に進化させたのは自然の流れだったといえます。
 その昔、直流送電と交流送電の一騎打ちがありました。
エジソンとテスラの対決でしたが、交流送電、すなわちテスラに軍配が上がり
その後は交流による発送配電がスタンダードとなった歴史です。
テスラが二相交流モーターを発明し、交流送電が直流送電より優れていることを実証し
三相交流送電が全世界で使われることとなりました。

 というような三相交流ですが、ほんとなら電力会社の三相交流をそのまま使いたいところです。
が、あいにく動力線とは無縁の環境ですので
仕方ないのでDC電源を使って疑似三相波を生成して、それでモーターを回してみようという実験です。
そこで、三相モーターが手に入る前に、LEDを光らせて三相波のイメージを光で見てみます。
6つのLEDが位相順に規則正しくジワジワ明るくなり、ジワジワ暗くなる動作を繰り返します。

3-phase motor controller on Arduino board.  クリックで原寸大
3phaseMotor_s.jpg

【スケッチ】
3-phase motor controller on Arduino board.
https://www.youtube.com/watch?v=yJEBdPKUVIo

Uploaded on Mar 13, 2010

According to (my memory of) "who killed the electric car" the GM EV-1 was powered by a three-phase wave generator that was then pushed through a massive three-channel amp.

It would be nice to one day convert the Merc to battery power, probably around the time the engine blows and battery prices come down.

So I thought I would start by doing a 3-phase controller on an Arduino board. I can't see why it would not work. I'll start small with a test-bench before shelling out on any serious hardware.

/*

3-phase controller.

This circuit fades 6 LED's in sequence,
in a 3-phase diamond wave - a sine wave
is a little difficult to accomplish in
the digital domain. But a few capacitors
will probably smooth things out.

I think it will still make a decent motor
controller though. Just need to build
some seriously high power amps now.

Each LED is wired thus:
pin out
LED
resistor
ground

- lay out your green LED's along the top
and the red ones along the bottom.
channels:
top row: 3, 5, 6
botom: 9, 10, 11

*/

// set the start positions of the various waves
int blueup = 255;
int bluedown = 0;
int blackup = 0;
int blackdown = 85;
int redup = 0;
int reddown = 85;

/*
Set the directions of travel
You can change these values to 1 if
you want a smoother wave - but you will
also need to change them lower down,
otherwise you will break the program.

x's are for the upper half of the wave,
y's are for the lower half of the wave
*/
int x1 = 5;
int x2 = 0;
int x3 = 0;
int y1 = 0;
int y2 =-5;
int y3 = 5;

//set the LED's to the various PWM channels
int ledPin3 = 3; // LED connected to digital pin 3
int ledPin5 = 5; // ...etc
int ledPin6 = 6;
int ledPin9 = 9;
int ledPin10 = 10;
int ledPin11 = 11;

void setup()
{
// Serial.begin(9600);
}

void loop()
{
/*
These lines are for if you want to monitor
the output on the various values, check that
your waves are runnning the right way and to
the correct values
*/

// Serial.print("blueup, ");
// Serial.println(blueup);
// Serial.print("bluedown, ");
// Serial.println(bluedown);
// Serial.print(",x1, ");
// Serial.print(x1);
// Serial.print(",y1, ");
// Serial.print(y1);

// Serial.print("blackup, ");
// Serial.println(blackup);
// Serial.print("blackdown, ");
// Serial.println(blackdown);
// Serial.print(",x2, ");
// Serial.print(x2);
// Serial.print(",y2, ");
// Serial.print(y2);


// Serial.print("redup, ");
// Serial.println(redup);
// Serial.print("reddown, ");
// Serial.println(reddown);
// Serial.println("");
// Serial.print(",x3, ");
// Serial.print(x3);
// Serial.print(",y3, ");
// Serial.print(y3);

/*
assign the various integers (above)
to the various pins.
*/
analogWrite(ledPin3, blueup);
analogWrite(ledPin9, bluedown);
analogWrite(ledPin5, blackup);
analogWrite(ledPin10, blackdown);
analogWrite(ledPin6, redup);
analogWrite(ledPin11, reddown);

/*
this section checks whether you have
reached the top or bottom of this half
of the phase. If you have, it then
causes the other half of the phase to
ramp up
*/

if ((blueup == 255) & (x1 == 5)) { x1 = -5; }

if ((blueup == 0) & (x1 == -5)) { x1 = 0; y1 = +5; } if ((blackup == 255) & (x2 == 5)) { x2 = -5; }

if ((blackup == 0) & (x2 == -5)) { x2 = 0; y2 = + 5; } if ((redup == 255) & (x3 == 5)) { x3 = -5; }

if ((redup == 0) & (x3 == -5)) { x3 = 0; y3 = +5; } if ((bluedown == 255) & (y1 == 5)) { y1 = -5; }

if ((bluedown == 0) & (y1 == -5)) { y1 = 0; x1 = 5; } if ((blackdown == 255) & (y2 == 5)) { y2 = -5; }

if ((blackdown == 0) & (y2 == -5)) { y2 = 0; x2 = 5; } if ((reddown == 255) & (y3 == 5)) { y3 = -5; }

if ((reddown == 0) & (y3 == -5)) { y3 = 0; x3 = 5; }

/*
This section is where the waves are powered up or down.
If you add a positive value to a number, it increments.
But if you add a negative number it /de/crements.

In this way, the pos/neg flipping above makes the waves
travel in the right direction when we do the addition
down here.
*/
blueup = blueup + x1;
blackup = blackup + x2;
redup = redup + x3;

bluedown = bluedown + y1;
blackdown = blackdown + y2;
reddown = reddown + y3;

/*
This delay is only here so that you can see your waves
flowing across the board. It runs /way/ faster without
the delay instruction.

Later iterations will have a variable resistor controlling
the speed.
*/
delay (40);
}

■ FC2ブログへバックアップしています。 
三相モーターコントロール 1 ~LEDで三相交流をイメージしてみる
backupSite.gif

投稿者 hal : 2017年5月 9日 23:57