Arduinoベースの純正弦波インバータのプロトタイプ


APDahlen Applications Engineer

ArduinoマイクロコントローラとHブリッジを使用して、120V ACの「純正弦波」インバータを構築します。この最小限のDIY設計は、無停電電源装置(UPS)や蓄電システム(BESS)用の三相インバータなど、高度なアプリケーションの基礎となります。

安全上の警告: この装置は高電圧の交流信号を発生させます。高電圧の露出を防ぐために、適切な絶縁技術または制御技術を使用してください。この実験は、資格を有する指導者の直接の監督の下で行ってください。常に、地域、州、連邦、および各国の安全規格に従ってください。

以前の記事で紹介した、DCモータを使用した回路を組み立て、トラブルシューティングを行います。回路が正常に動作するようになってから、トランスを取り付けます。回路を再構成して個々のMOSFETと関連ドライバをテストできるため、モータを使用した回路のトラブルシューティングはより安全で比較的簡単です。

純正弦波インバータとは何でしょうか?

純正弦波インバータは、直流電圧を正弦波電圧に変換する電子デバイスです。一般的なインバータは、大型バッテリから120V AC 60Hz(米国)デバイスに電力を供給する移動用またはバックアップ用アプリケーションで使用されます。これとは対照的な技術が、矩形波インバータまたは修正矩形波インバータです。これらはより単純ですが、正弦波出力は得られません。これはモータやその他の精密電子機器には望ましくありません。モータはうなり、過熱する可能性もあります。また、矩形波インバータに関連する電磁妨害(EMI)は、オーディオ機器や無線機器などの精密電子機器に望ましくない干渉を引き起こす可能性があります。

この技術概要で紹介する設計は、15V DC電源から120V ACの正弦波信号を生成できるHブリッジを搭載しているため、優れた実証例となります。 ブレッドボードのシンプルな設計と特質により、出力は約10Wに制限されます。ただし、図1と図2に示されている7W 120Vの白熱電球のような抵抗性負荷であることが条件です。フィードバックがないと、波形が歪みます。これは、LED電球などの負荷をドライブする場合に特に顕著です。最後に、この設計には、図2に示すB&K Precision 1550ベンチ電源が備える保護回路以外には、保護回路がありません。

図1: 120V ACインバータのベンチセットアップ。トランスの 120 VAC 端子が露出しているため、これはデモンストレーション目的のみです。高電圧にさらされないように、適切な絶縁技術または制御技術を使用してください。

安全対策: 15V DC電源が作動しているときは、常にコンピュータのUSBポートを切り離して、PCを保護してください。これにより、15V DC電源とArduinoピンが誤って接続されることを防ぎます。

この警告に従わない場合、PCのUSBポート、プロセッサ、またはマザーボードが破壊される可能性があります。

代わりに、低価格の携帯電話用充電器などの独立した電源からArduinoに電力を供給してください。また、PC を保護するためにUSBアイソレータを購入することもできます。

この記事はシリーズの第5回目です。インバータの基礎となる内容が紹介されていますので、それ以前の記事もご覧ください。最後の記事は、インバータが同じMOSFETドライバを共有しているため、特に重要です。実際、唯一の違いは、図1と図2に示されているように、DCモータがトランスと白熱電球に置き換えられていることです。

図2: B&Kの電源、Arduinoマイクロコントローラ、およびDigilentのミックスドシグナルアナライザを搭載したベンチセットアップ

回路設計

この回路は、Breadboard an Arduino-based H-bridge Motor Controllerで紹介したものと同じです。参考までに、回路図を図3に示します。DCモータは、Signal Transformer A41-25-24と7W 120V白熱電球に置き換えてあります。図1で示されているように、トランスの12V AC巻線の1つがHブリッジの出力に接続されています。115V ACの二次巻線は直列に接続されています。したがって、トランスは12:230の昇圧構成で配線されています。12V AC の巻線は並列に接続することも可能ですが、ブレッドボードはすでに1Aの限界近くで動作しているため、これは必要ないと考えています。

図3のポテンショメータは信号発生器に置き換えられていることに注意してください。これにより、正弦波の生成が外部で行われるため、設計が簡素化されます。

技術的なヒント: Arduinoマイクロコントローラは正弦波を生成することができます。一般的な方法は、ダイレクトデジタルシンセシス(DDS)として知られています。これには、正弦波データ値を格納するルックアップテーブルと、インデックス変数、加算器、およびタイマが含まれます。インデックスが正弦波ルックアップテーブル内のアドレスを指すというアイデアは優れています。加算器のジャンプ量(インクリメント)に加えてタイマが周波数を決定します。

図3: 2つのIR2110ドライバとArduino Nano Everyを搭載したHブリッジの回路図。ArduinoはUSBポート(図示せず)から電源供給されています。

ソフトウェア設計

このコードは、以前に説明したDCモータコントローラとも関連しています。しかし、修正した回路を見るとわかるように、いくつかの変更が必要となります。最も重要な変更点は、電球のちらつきを防ぐために点滅速度を調整することです。
設定値は外部信号発生器により生成されることを思い出してください。最初のステップはアナログ値を読み取り、その結果をスケーリングすることです。これにより、正の半サイクルと負の半サイクルのドライブを行います。コードは、Arduino環境の制約内で、 Microchip (Atmel)の ATmega4809上で、できるだけ高速に動作するように設計されています。これには、cli( )ステートメントを使用して割り込みを無効にする処理も含まれます。

/**** CAUTION ****  **** CAUTION ****  **** CAUTION ****  **** CAUTION ****  **** CAUTION ****
 *
 * This code is written specifically for an Arduino Nano Every. It will NOT work on other Arduino
 * microcontrollers, as it depends on direct SFR manipulation to operate in a Fast PWM mode.
 * For fast PWM technique refer to https://forum.digikey.com/t/fast-pwm-for-the-arduino-nano-every/40023
 *
 */

#define LL_PIN 7
#define LH_PIN 6  // Fast PWM
#define RL_PIN 4
#define RH_PIN 3  // Fast PWM
#define VREF_PIN A7

#define MAX_PWM_VAL 250
enum Direction {
  CW = true,
  CCW = false
};

Direction direction;

void setup( ) {
  pinMode(LL_PIN, OUTPUT);
  pinMode(LH_PIN, OUTPUT);
  pinMode(RL_PIN, OUTPUT);
  pinMode(RH_PIN, OUTPUT);

  TCB0_CTRLA = 0b00000011;  // Fast PWM for pin D6
  TCB1_CTRLA = 0b00000011;  // Fast PWM for pin D3
}

void loop( ) {

  bool last_direction;

  cli( );                              // Disable the Arduino ISRs for maximum speed e.g., disable millis( )

  while (1) {

    uint16_t setpoint = analogRead(VREF_PIN);

    // Potentiometer set to middle turns off the motor. Middle and above yields CW, while below middle yields CCW.
    // Recall that analogRead( ) return a value from 0 to 1023 while analogWrite( ) accepts a value between 0 and 255. 

    if (setpoint > 512) {
      direction = CW;
      setpoint = (setpoint - 512) >> 1;
    } else {
      direction = CCW;
      setpoint = (512 - setpoint) >> 1;
    }

    if (setpoint > MAX_PWM_VAL) {
      setpoint = MAX_PWM_VAL;
    }

    if (direction != last_direction) { //Stay out unless needed

      last_direction = direction;

      digitalWrite(LL_PIN, LOW);       // Turn everything off
      digitalWrite(RL_PIN, LOW);
      analogWrite(RH_PIN, 0);
      analogWrite(LH_PIN, 0);

      if (direction == CW) {
        digitalWrite(RL_PIN, HIGH);    // Enable the appropriate low side driver
      } else {
        digitalWrite(LL_PIN, HIGH);
      }
    }

    if (direction == CW) {
      analogWrite(LH_PIN, setpoint);   // Always set the appropriate PWM
    } else {
      analogWrite(RH_PIN, setpoint);
    }
  }
}

技術的なヒント: Arduinoコードは、Arduinoマイクロコントローラ全体でコーディングを簡単かつ一貫性のあるものにするために設計されたハードウェアを抽象化したものです。millis( )関数や関連するルーチンなど、割り込みサービスルーチン(ISR)に付随する隠れたバックグラウンドのタスクがあります。これらは、高速回路において予期せぬタイミングのずれを引き起こす可能性があります。このアプリケーションでは、cli( );ステートメントを実行することでISRを無効にしています。また、Arduinoがloop( )関数から抜け出さないように、while(1)ループを実装しました。

これらの手法は、ユーザーフレンドリーなArduinoの機能を一部無効にするため、注意して使用してください。

結果

図4は、7W白熱電球を点灯させた際のこのインバータが生成する波形を示しています。このシンプルな回路は、最大値170ボルト(実効値120ボルト)の認識可能な正弦波を生成します。電圧のゼロクロス点を通過する際には、歪みが見られます。これは、Hブリッジの極性切り替えによるクロスオーバー歪みであることが分かります。また、Hブリッジや出力のトランスにフィルタリングが施されていないため、高周波ノイズも発生しています。

総合的に考えると、これはシンプルな回路から発せられる妥当な電気信号です。フィードバックとフィルタリングを施せば、さらに良くなるでしょう。次のステップのセクションで説明するように、これは私たちに期待をさせてくれます。

図4: 基本的なインバータは、認識可能な正弦波を生成します。Hブリッジが極性を切り替える際に、クロスオーバー歪みが発生します。

転流シーケンス

Hブリッジの転流シーケンスは、図5と図6に示されています。各MOSFETのドライブ波形は、左右の位置、上下の位置によって異なります。例えば、上部の波形(ピンク色)は右ハイサイド(RH)のMOSFETのものです。図5では、正弦波の正の半サイクルと負の半サイクルを生成するために使用されるRH/LLドライブペアと、LH/RLのドライブペアが示されています。

技術的なヒント: このプロジェクトは、Arduinoを変調器として視覚化すると理解しやすくなります。Arduinoは2.5Vを中心に0~5V DCの入力を受け入れます。その後、入力電圧を近似的な線形に変換し、PWM ドライブ信号に変換してHブリッジに送ります。理論的には、Hブリッジの出力は入力電圧を線形に再現したものとなります。Arduinoに三角波を入力電圧として与えると、三角波の出力波形が得られます。正弦波を入力すると、正弦波が出力されます。

図6は、左ハイサイド(LH)MOSFETのクローズアップ波形を示しています。これは正弦波を生成するために使用される重要な波形です。波形は最小のデューティサイクルから始まります。デューティサイクルは、約4.17msで最大値まで増加し、これは半サイクルのピーク電圧に相当します。60Hzの波形は、周期が16.67msで、ピークは約4.17msと12.5msであることを思い出してください。

図5: Hブリッジの転流シーケンスのデモンストレーション。ハイサイドのMOFETS(右ハイサイドと左ハイサイド)がPWM信号を受信します。

図6: 左ハイサイド(LH)MOSFETのPWMデューティサイクルの変化を示す拡大図

効率

回路の効率は約64%です。この入力電力は、15V DCの電源から0.73Aを流した場合、約11Wとなります。実効値120Vの純正弦波で点灯させた場合の電球の消費電力が7Wであると想定すると、出力は、7Wと推定されます。この概算値は改善の余地があることを示唆しています。しかし、MOSFETに触っても熱くないため、楽観的な推定値です。

次のステップ

今回紹介している設計回路は教育用です。性能はハードウェアとソフトウェアによって制限されます。回路を改善する方法は以下のようにたくさんあります。

  • EMIへの対策として、フィルタを追加します。

  • ベアメタルプログラミング、FPGA、または専用PWMドライブペリフェラルを備え、「モータ制御」に特化したマイクロコントローラを使用して、PWM生成の滑らかさを向上させます。

  • 故障解析に習熟し、電流監視と自動シャットダウンを組み込みます。

  • ダイレクトデジタルシンセシス(DDS)を導入して、正弦波を生成します。

  • 最新のMOSFETドライバを中心とした回路設計により、より大きな電流を処理できるPCBを設計します。

  • 三相回路とIGBT(ディスクリートまたはモジュール)を活用して大規模に展開します。

  • フィードバックを導入して、出力信号の監視と制御を行います。

  • インバータを監視できるように遠隔測定を追加します。

  • インバータのCOTS(市販品)のリバースエンジニアリングを行い、信頼性の高い設計を低コストで実現する方法を検討します。

  • お楽しみください!

おわりに

Hブリッジは汎用性の高い回路であり、DCモータや純正弦波インバータのドライブにも同様に有用です。ここで紹介した回路は、この2つの技術が同じ領域を共有していることを示しています。電子機器を探究していくと、より小型の電源装置や、より大型の三相ドライブにもこのよく知られたパターンが認められます。

このインバータはおもちゃではありません。安全に留意してください。340Vp-pの出力の、電源機器と同様にどの点から見ても危険です。あなたが取り組んでいることにチャレンジし、サポートしてくれる指導者を見つけてください。

いつものように、ご意見、ご提案は下記までお寄せください。このコミュニティには、お手伝いを惜しまない優秀な人たちがいます。

この記事がお役に立ちましたら、「いいね!」をお願いします。

ご健闘をお祈りします。

APDahlen

関連情報

関連する有用な情報については、以下のリンクをご参照ください。

著者について

Aaron Dahlen氏、LCDR USCG(退役)は、DigiKeyでアプリケーションエンジニアを務めています。彼は、技術者およびエンジニアとしての27年間の軍役を通じて構築されたユニークなエレクトロニクスおよびオートメーションのベースを持っており、これは12年間(一部、軍での経験を織り交ぜて)教鞭をとったことによってさらに強化されました。ミネソタ州立大学Mankato校でMSEEの学位を取得したDahlen氏は、ABET認定EEプログラムで教鞭をとり、EETプログラムのプログラムコーディネーターを務め、軍の電子技術者にコンポーネントレベルの修理を教えてきました。彼はミネソタ州北部の自宅に戻り、このような記事のリサーチやエレクトロニクスとオートメーションに関する啓蒙記事の執筆を楽しんでいます。

注目すべき経験

Dahlen氏は、DigiKey TechForumに積極的に貢献しています。この記事を書いている時点で、彼は200以上のユニークな記事を作成し、さらにTechForumへ600にものぼる投稿を提供しています。Dahlen氏は、マイクロコントローラ、VerilogによるFPGAプログラミング、膨大な産業用制御に関する研究など、さまざまなトピックに関する見識を共有しています。




オリジナル・ソース(English)