■ 波数制御を使った電力制御回路(電子スライダック)

 [2007/02/27]

 トライアックを利用した調光器(電子スライダック)は一般的です。動作原理はAC電源の1波長 内を 図1のようにONになる位相をずらし電力を制御するものです。図を見て解るよう波形を強制的にONにしているため、例えば50%時にはゼロボルトから 141ボルトまで急激に電圧が立ち上がります。明らかに突入電流が大きいように見えます。また電圧の急激な立ち上がりのため相当量のノイズが放出されるよ うです。実際、電子スライダックを使うとAMラジオは雑音でうるさくて使えない状態になります。

tmpPicture.jpg

図1:電子スライダックの動作原理?


 半田ごてや白熱電灯のような純粋な抵抗の場合はこれで十分ですがドリルモータのような動力用の 電力制御では50%位まで下げるとモーターが回りません(唸るだけ、また回ったとしても力が弱く使い物になりません)。


● なんとかしよう


 モーターの制御、何とかならないか、そんな思いがずーっとありました。何故に電子スライダック でモーターの力が弱いのか。問題は1波長内でON,OFFするから半分を超えると電圧が 低くなる。そのため回らなくなったり力が弱くなったり。ひょっとして1波長内ではなく波数(単位時間当りにONになるサイクル数)で制御したらモーターも 力強く回るのではないだろうかと思いました。でもそんな製品、聞いた事がありません。ひょっとして意味がないため製品として売っていないのか。動作的に問 題があるため売っていないのか。もっと別のすばらしい方法があるので波数制御の製品が無いのか。単に私が知らないだけなのか。

tmpPicture_1.jpg

図2:ゼロクロス・スイッチ

 そうこう思案するより実際に作ってみようと思い立ちました。使用したのはゼロクロス式のソリッ ドステートリレー(SSR)です。動作原理は上記図2のようにAC電源がゼロボルトを通過するときスイッチが入るものです。このSSRをコンピュータで 制御すると考えている波数制御ができるのではないかと思いました。例えば10サイクルで5サイクルがオンになれば50%出力という感じです。


● 回路図

tmpPicture_2.jpg

 さっそくですが上記が今回作った回路です。制御にはPIC16F84Aを使っています(今なら PIC16F88でしょうね)。PIC16F88ならセラロックもリセット回路も不要なのでもう少し簡単になるでしょう。私の場合、まだ PIC16F84Aが数個残っているので使ってみました(まだPIC16C84も何個か残っている、はやく使わなくてはF88に移れない)。表示にはカ ソード.コモンの7セグメントLED を使ってみました。ゼロクロス・スイッチには秋月電子のSSRキットを使っています。AC電源の波数を数えるためフォトカップラーを使っています。トラン スを使った方が良いかなと思ったのですがトランスは場所をとるのでフォトカップラーにしました。フォトカップラーの入力は 1mA 程度でも十分にONになるので抵抗でも良いかとなった訳です。AC電圧を抵抗で電圧降下させ、定電圧ダイオードで異常電圧に対処し ています。これに安定化抵抗を直列に接続しフォトカップラーに接続しています。このフォトカップラー出力をPIN_B0に接続し割り込みで波数をカウ ントします。


● 波数制御


 電力制御に必要な波数をどのように入れるかが思案のしどころです。例えば10サイクル (0.2sec)を基本にしたとき50%制御では5サイクル分を0.2秒の中に入れ込みます。この5サイクルをどのように入れるかが問題になる訳です。最 初の5サイクルをONに残り5サイクルをOFFにするパルス幅変調(Pulse-Width Modulation : PWM)方式。もうひとつは1サイクル毎にONとOFFを切り替える方式(これ何と言う名前なんだろう? 周期が変化するので周波数変調か?とりあえずここでは疑似周波数変調 Quasi-Frequency Modulation QFM ということにしようと思います)。はたしてどちらの方法がドリルモータの制御に有効なのでしょうか。で、私が達した結論は両方できるようにすれば良い、と いうことでした。


 パルス幅変調(PWM)では何も考えず10サイクルの中で指定した波数を連続に設定した 数だけ連続で出力するだけでOKです。問題は後者の疑似周波数変調(QFM)で、10サイクルの時間に如何に奇麗に指定した数だけまんべんなく入れ込むか です。そこで次のよ うなプログラムで波数を入れ込む事にしました。mを基本サイクル数、nを入れ込む波数とします。このときzを出力とした時の状態です。

m = 10;

n = 3;

b = 0;

for(i=1;i<=10;i++){

y = n/10*i;

yy = int(y);

z = yy-b;

if(z <> 0) b = yy;

|i,y,int(y),z|;

}

    1.0000     0.3000     0.0000     0.0000

    2.0000     0.6000     0.0000     0.0000

    3.0000     0.9000     0.0000     0.0000

    4.0000     1.2000     1.0000     1.0000

    5.0000     1.5000     1.0000     0.0000

    6.0000     1.8000     1.0000     0.0000

    7.0000     2.1000     2.0000     1.0000

    8.0000     2.4000     2.0000     0.0000

    9.0000     2.7000     2.0000     0.0000

   10.0000     3.0000     3.0000     1.0000

.OK.

 30%(基本10サイクルに3サイクルの波を入れる)では上記のように 0001001001 となります。このように、上記プログラムに従うとまんべんなく波を入れ込む事ができました。


● プログラム


 CCS-C で作った制御ソフトです。

--------<ここから>--------

//

// ゼロクロス式AC電力コントロール Ver 1.0.2

//     Nishimura Hiromi 2007/02/26

//

//

#include <16F84A.h>

#FUSES NOWDT
//No Watch Dog Timer

#FUSES HS
//High speed Osc (> 4mhz)

#FUSES NOPUT    //No Power Up Timer

#FUSES NOPROTECT//Code not protected from reading

#use delay(clock=20000000)

//

#byte    DISPLAY = 6

//

#define    Amode 0b00000011 //port A initial mode

#define    Bmode 0x00000001 //port B initial mode

#define    UpKey PIN_A0 // input

#define    DownKey PIN_A1 // input

#define    Gate PIN_A2 // output

#define    LEDDot PIN_A3 // output

//

#define    Gate_ON output_high(Gate)

#define    Gate_OFF output_low(Gate)

#define    LEDDot_ON output_high(LEDDot)

#define    LEDDot_OFF output_low(LEDDot)

//

unsigned int    dispNumber[11] = {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE4,0xFE,0xF6,0x6E};

signed long    count; // current counter

signed long    now_num; // now control number

signed long    b_out;

int pmode; //

int modeCount; //

//

// AC電源の周期(20msec)で発生する割り込み

//

#int_EXT

void EXT_isr()

{

// QFM モード

if(pmode==0){

if(now_num>0){

signed long z,y;

y = (count+1)*now_num/10;

z = y - b_out;

if(z!=0) { Gate_ON; LEDDot_ON; b_out = y; }

else { Gate_OFF; LEDDot_OFF; }

}

else { Gate_OFF; LEDDot_OFF; }

}

// PWM モード

else if(pmode==1){

if(now_num>0){

if(count<now_num) { Gate_ON; LEDDot_ON; }

else { Gate_OFF; LEDDot_OFF; }

}

else { Gate_OFF; LEDDot_ON; }

}

//

count++;

if(count>9){

count = 0;

b_out = 0;

}

}

//

//

void powerUp()

{

now_num++;

if(now_num>10) now_num = 10;

modeCount = 0;

DISPLAY = dispNumber[now_num];

}

//

//

void powerDown()

{

now_num--;

if(now_num<0){

now_num = 0;

modeCount++;

// ゼロで三回DownKeyを押すとPWMQFMモードが切り替わる

if(modeCount>2){

if(pmode == 0) pmode = 1;

else pmode = 0;

modeCount = 0;

}

}

DISPLAY = dispNumber[now_num];

}

//

//

void initialize()

{

//

set_tris_a(Amode);

set_tris_b(Bmode);

//

count = 0;

now_num = 0;

b_out = 0;

pmode = 0;

modeCount = 0;

}

//

//

//

void main()

{

//

initialize();

//

DISPLAY = dispNumber[now_num];

Gate_OFF; LEDDot_OFF;

//

enable_interrupts(INT_EXT);

enable_interrupts(GLOBAL);

//

while(true){

if(input(UpKey)==0){

delay_ms(5);

if(input(UpKey)==0){

powerUp();

while(input(UpKey)==0) delay_ms(5);

}

}

else if(input(DownKey)==0){

delay_ms(5);

if(input(DownKey)==0){

powerDown();

while(input(DownKey)==0) delay_ms(5);

}

}

}

}

--------<ここまで>--------


● 結果1:白熱電球に使ってみる


 まずは純粋な抵抗想定し100Wの白熱電球に使った時の波形を紹介します。これは疑似周波数変 調(QFM)の場 合です。

tmpPicture_3.jpgtmpPicture_4.jpg

100%                                        90%

tmpPicture_5.jpgtmpPicture_6.jpg

80% 70%

tmpPicture_7.jpgtmpPicture_8.jpg

60% 50%

tmpPicture_9.jpgtmpPicture_10.jpg

40%                                            30%

tmpPicture_11.jpgtmpPicture_12.jpg

20%                                        10%


 各%で想定した通りの出力波形になっています。出力波形には非常に満足できる結果でした。でも 制御 中はランプが点滅(毎秒5回)し調光器としてはまったく使い物になりません。最初の試験に白熱電灯を使ったのは失敗でした。電球の調光器として使うなら図 1の制御方式が一番でしょう。


● 結果2:ドリルモータに使ってみる


 さて当初の目的のドリルモータの制御に使ってみました。結論から言えば10%にしてもドリモー ター制御は力強く回りました。これは図1の制御(一般的な電子スライダック)では不可能な事です。ただし10サイクルの時間に1サイクルがONなので断続 的に回ります。

tmpPicture_15.jpg

50%制御の時の波形

 白熱電球の時には奇麗に制御できていたのですがモータの時は少々異なるようです。電源がONに なる時の波形は奇麗なのですが、ONからOFFになった後に汚いノイズが出現しています。これはモーターのコイルの影響で電圧はゼロになっても電流はまだ ゼロになっていないため突然にOFFになるとコイルに溜まっていたエネルギーのいき場所が無くなってしまう。そのため発生するノイズと思います。これが大 きいとトライアックの最大電圧を超え素子が破損してしまう可能性があります。やはり抵抗とコンデンサーを直列に接続したスナバー回路を入れる必要がありそ うです。そんな訳でスナバー回路を追加してみました。


 下記図の左がスナバー回路を入れる前で右がスナバー回路を入れた後の波形です。劇的とは言え ないまでも高周波ノイズが消えています。

tmpPicture_13.jpgtmpPicture_14.jpg

 ゼロクロススイッチは突入電流が無いので理想的なスイッチだと言われています。でも、これは ONの 時だけでOFFの時は逆起電力というか誘導電流が流れます。怖いですね。ちなみに下記波形は赤が電圧で黄が電流を示しています。ONになった時の電流は滑 らかに増加するに対してOFFになった時の電流はゼロではありません(電流波形が想像していたより奇麗なのには驚きました)。変な事に電圧のピークと電流 の ピークの位相がずれているのに中央の電圧がゼロになるときでは電流もほとんどゼロになっています。位相がずれていると思っていたのですが違うようです ね。どう理解したら良いのでしょうか。

 いずれにしろOFF時のスパイクの原因は誘導電流であることが判っただけでも良かったと思わな くては。


赤:電圧、 黄:電流

● 結果3:PWMとQFMのどちらが良いのか


 さて肝心のドリルモータの制御にはパルス幅を変えるPWMが良いのか、それとも疑似周波数変調 (QFM)みたいな方法が良いのか。色々と試してみたのですがどちらも捨てがたい、が結論でした。


 アクリル板に穴を空けるとき結構な頻度でヒビが発生します。またドリル貫通直後、ドリル自体が ネジのようになり材料を上に持ち上げ結果的に斜めの穴が空いてしまったりします。今回、この装置でドリルモータ制御を行うと比較的低速の回転でも力強く ゆっくり掘削が可能でドリル先端があまり熱くなりません。PWMの方は力強く穴を空け、QFMの方は滑らかな回転で穴を空けます。どちらも捨てがたい機能 です。強いて選択するならPWMが力強い感じ、あくまでも感じです、が好きです。


● 感想


 当初の目的であるドリルモータの回転制御ですが波数制御で実現できたと思います。誘導性の負荷 で使うと理想的な波形にはならない事が改めて確認できました。これまで回路図に書かれているから付けよう、そんな気持ち程度で使っていたスナバー回路、こ れが有効である事も再認識しました。

● 雑談

 インターネットでゼロクロス・スイッチを検索するとヒットするのは音響関連機器が多く、どうも 電源スイッチのようです。で も価格が数万円、どんなすばらしい機能が付いているのでしょうか。まさか単なるゼロクロス・スイッチということは無いでしょう。単なるゼロクロス・スイッチなら部品代 だけで数百円、ケースを付けても千円台。この数十倍の価格なんですから私には想像もできない奥深い機能が音響関連機器の電源スイッチには付いているので しょう。そういえばスピーカーの突入電流を防止するアダプタも数千円の価格で一緒に載っていました。まさか抵抗とコンデンサーのスナバー回路じゃないです よね!

 もう30年以上前、自動車の免許とりたての頃ですが、カー用品店にバッテリー端子に付けるだけで燃費が向上する装置がおいてありました。友人が購入し 使ったら本当に燃費は良くなったと言うのすで、私の購入したのですが、どうも変、何にも変化せず。気になり中を開いてみたらカーボン抵抗が一個入っているだ け。これにはがっくりしました。そんな訳でこの手の商品は最初から信用しない事にしています。前記、数万円のゼロクロス・スイッチやスピーカーの突入電流 防止アダプタもはなから信用していません。