IR2110の独り言

ゲートドライバーICが独り言をつぶやくだけです

ArduinoMegaくんでVVVFの同期モード・非同期モードの実装③ -同期PWMの生成-

前置き(いらない)

そういえばArduinoIDEが新しくなったみたいですね〜知らんけど

同期PWMとは?

非同期PWMのまま基本波周波数を上げていくと、基本波とキャリア波の位相が不連続的に変化するため電圧の動揺とともに分数調波の問題が出てきます。そこで基本波周波数が高い領域では、基本波とキャリア波の位相を同期させ基本波とキャリア波の周波数比を一定に保つことで運転を安定させることが一般的です。このようなPWM方式を同期PWMと言います。同期PWMは線間電圧の半周期に現れるパルス数を添えて同期xxパルスと呼ばれたりもします。

(図1-a)(図1-b)に同期9パルスの基本波・キャリア・相電圧、また(図1-c)に線間電圧の波形例を示します。過変調ではない場合、線間電圧の半周期にはキャリア周波数:基本波周波数の比と同じ9つのパルスが現れています。過変調になると変調されない部分が現れてパルス数が減少します。

(図1-a) 同期9パルスのV相電圧・基本波・キャリア波形例

(図1-b) 同期9パルスのU相電圧・基本波・キャリア波形例

(図1-c) 同期9パルスの線間電圧波形例

また注意点として、3相インバーターにおいては相電圧波形の合同性を保ち偶次高調波を除去するためにキャリア周波数は基本波周波数に対して(3+6n)倍(nは0以上の整数)の比に設定する必要があります。

過変調ではないのに5パルス・12パルスなどの(3+6n)ではないパルス数の場合、この図に示す三角波比較方式の正弦波PWMとは違う方式で生成しているPWMであるということになります。

タイマーと割り込みを駆使して同期PWMを生成

タイマーと割り込み処理を駆使して上記の条件を達成するようなPWMを生成することを考えます。

そこで今回は三角波の折り返し地点(つまりTOPとBOTTOM)で割り込み処理を行いOCRnxを更新することでキャリア波と基本波の位相を強制的に同期させます。(図2)に3パルス時の例を示します。

(図2) 3パルスモード時のマイコン内部の処理の様子と相電圧例

ここで注意なのは割り込みが発生した時に基本波を更新するという処理方法だと灰色で示した理想的な基本波で生成されるPWMと大きく異なる波形になることです。そのため区間ごとのsinの平均値を求めそれを基本波とすることでPWMを生成します。この平均値はルックアップテーブルに納めます。

また変調率に対する基本波成分の振幅は過変調まではほぼ線形(正確には非線形)に変化するのでついでにテーブルの最大値を1としてゲインをかけておき、過変調ではない状態において電圧跳躍やPWMの誤差ができるだけ生じないようにしておきます。

しかしArduinoの場合、TOPとBOTTOMで値を変更しても位相基準PWMモードの場合はTOPで、周波数基準PWMモードの場合BOTTOMのみでしかOCRnxの値は更新されず、正しくPWMが生成できません。(詳しくはデータシートのp.102を参照)そこで位相基準PWMモードと周波数基準PWMモードを両方うまく使ってTOPとBOTTOM両方で値が更新されるようにします。第一回で秘密にしていた位相基準PWMモードと周波数基準PWMモードの違いはまさにこれです。

具体的にはTOP側の割り込み処理中でタイマーの設定を周波数基準PWMに切り替え、またBOTTOM側の割り込み処理中で位相基準PWMに無理やり設定を切り替えることで実現できます。

あ、ソースコードは載せませんよ?ソースコードなくした

特殊PWMの生成①…よく見かける5パルスの生成

よく上記に示したPWM法のまま無理やりキャリア周波数を基本波周波数の5倍にして偶次高調波ぁだらけの5パルスを生成して喜んでる輩がいますがそれは違います。

文献(インバータ制御電車概論: 飯田秀樹・加我敦 著)を漁ると実際はこんな変な猫耳みたいなキャリア(以後猫耳キャリア)を用いて5パルスを生成してるとのことです(図3-a)(図3-b)(図3-c)。

(図3-a) 同期5パルスのU相電圧・基本波・キャリア波形例

(図3-b) 同期5パルスのV相電圧・基本波・キャリア波形例

(図3-c) 同期5パルスの線間電圧波形例

こんな猫耳キャリアArduinoのタイマーで生成できねえよ!!!は?????

…呼んだ…?

と思うかもしれませんがまあ色々いじれば生成できるんですよねこれが。

手順はたった一つ…、キャリアを力任せに変形させて無理やり三角波にするだけです。猫耳キャリアリョナです。またArduinoには出力するPWM波形を反転できる設定もあるのでそれも問答無用で駆使して同じPWMが出力できるようにします(図4)。

(図4) キャリアを三角波に変形させた5パルス

反転と非反転を繰り返しているのが印象的ですね。

ということでこれならちょっと歪ですけどArduinoでも生成できそうです。

ね、簡単でしょ。

特殊PWMの生成②…広域3パルスの生成法

広域3パルスについてはggると日立評論のやつがなんか出てくるのでご存じかと思います。ということで知っている前提で進めます。いちいち図描くのめんどくちぃ

今度はノコギリ波に変形させます(図5)。三角波にも変形できるしその方が良いのですが、反転・非反転PWMか否かの更新はTOPでのみ行われるという理由があって不可能でした。

(図5) キャリアをノコギリ波に変形させた広域3パルス

…正直ちょっと気持ち悪いですねこれは。

ちなみに少し見やすくなるように変調率が大きくなると基本波が動く方向を示しています。

これはちょっと曲者で他のPWM法と違い、過変調になるまで変調率に対する基本波成分はほぼ線形にはなっていません。スイッチング角度 \alphaを基本波成分の振幅 Vから求めると

 \alpha=\dfrac{2}{3}cos^{-1} (\dfrac{\pi}{4}V)

となります。過程は省略します。(図6)を見ればいかにこの式が非線形かが理解できると思います。

(図6) 広域3パルスのスイッチング角度

このスイッチング角度から変調率を求め、ルックアップテーブルに保存することで電圧跳躍を最小限に抑えます。

ね、簡単でしょ。

おわり

さてみなさんArduinoで同期PWM・非同期PWMを出すことはできましたか?\はーい/

拙い記事ですが少しでも参考になればと思います。

あとVVVFは沼です。

ではでは