パワエレコラム

2023年04月11日(火)

    ChatGPTが作ったPI制御ソフトを動かしてみました

    株式会社プリンシパルテクノロジー
    大羽規夫

     

    最近「ChatGPT」という人工知能チャットボットが話題となっていますが、そのChatGPTはソフトウェアの作成も得意のようです。そこで、このChatGPTが作成した制御ソフトが、パワーエレクトロニクスの制御にも応用できるかを検証しました。具体的には、系統連系インバータの電流制御を対象として、すでにPSIMのCブロックを使って制御ソフト(C言語)の動作を検証し、その結果を下のYouTubeに投稿していますので、ぜひこちらもご覧ください。

    今回のパワエレコラムでは、無料で使える Typhoon HIL の Virtual HIL というツールを使ってChatGPTが作成した制御ソフトを動かしてみました。その結果をご紹介します。

    ChatGPTのプロンプトと応答

    以下は、ChatGPTへのプロンプトとそれに対する応答の画面キャプチャです。今回使用する Virtual HIL の C function では構造体が使えないので、構造体を使わずにコードを作成するように指示しました。(Advanced C function という構造体を使えるブロックもあります)

    chatGPTの画面キャプチャ

    ChatGPTの画面キャプチャ

    このようにソースコードだけでなく、ソースコードの解説と実際に使用する場合のアドバイスまで提供してもらえました。

    検証ツール:Virtual HIL

    今回の制御ソフトの動作検証に使うのはVirtual HILというツールです。本来は、パワエレ用のリアルタイムシミュレータである Typhoon HIL をパソコン上で動かすためのエミュレータとして使うものですが、これを回路シミュレータの様に使用することもできます。ご興味ある方はこちらで詳細をご確認ください。

    対象システム:三相系統連系インバータ

    ここでは、ChatGPTが作成したPI制御のソフトを組み込む対象であるVirtual HILで動作する系統連系インバータについて説明します。
    ※回路図は「Typhoon HIL Schematic Editor」で作成したものです。

    下の図は対象となる三相系統連系インバータの主回路です。三相フルブリッジインバータ(Three Phase Inverte1)と系統電源(Vs)との間に接続された三相リアクトル(Lu,Lv,Lw)に流れる電流(Ia,Ib,Ic)を制御するシステムです。

    検証に使用する三相系統連系インバータの主回路(Typhoon HIL Schematic Editor)

     

    制御回路は下の図のようになっており、三相交流をdq軸座標に変換して、d軸電流指令(Id_ref)q軸電流指令(Iq_ref)とリアクトル電流(Id,Iq)が一致するように動作するように構成されています。
    図中の青枠で示した電流制御部がChatGPTが作成したC言語の制御ソフトと置き換える部分です。

    制御回路

    C言語に置き換える前に、このシステムの動作波形を確認しておきます。
    下図の上段には、d軸の電流指令と実際の電流制御結果が示されており、中段にはq軸の電流指令と実際の電流制御結果が示されています。d軸、q軸ともに指令値をステップ変化させ、制御結果はそのステップ変化に良好に追従していることがわかります。
    なお、下段には参考としてU相電流と系統電源のU相電圧を示しています。

    動作波形

     

    ChatGPTの生成コード

    ChatGPTが生成したコードを以下に示します。

    #include <stdio.h>
    
    // PI制御器のパラメータ
    float kp = 0.5;  // 比例ゲイン
    float ki = 0.2;  // 積分ゲイン
    
    // PI制御器の変数
    float integral = 0.0;  // 積分項
    float error_prev = 0.0;  // 前回の誤差
    
    int main() {
      // 目標値
      float setpoint = 50.0;
    
      // 制御対象の初期値
      float process_variable = 0.0;
    
      // 制御周期
      float dt = 0.1;
    
      // 制御対象の変化量
      float process_variable_delta = 0.0;
    
      // 制御を100回繰り返す
      for (int i = 0; i < 100; i++) {
        // 誤差を計算する
        float error = setpoint - process_variable;
    
        // 積分項を計算する
        integral += error * dt;
    
        // 比例項と積分項を足して、制御量を求める
        float control_variable = kp * error + ki * integral;
    
        // 制御量を使って、制御対象を更新する
        process_variable_delta = control_variable * dt;
        process_variable += process_variable_delta;
    
        // 結果を出力する
        printf("制御対象: %f, 制御量: %f\n", process_variable, control_variable);
    
        // 前回の誤差を更新する
        error_prev = error;
      }
    
      return 0;
    }

    このコードほとんどは変数の宣言と初期化になっています。そして、実質的にPI制御の演算をしているのは、main関数内の forループで回っている最初の3行だけです。

        // 誤差を計算する
        float error = setpoint - process_variable;
    
        // 積分項を計算する
        integral += error * dt;
    
        // 比例項と積分項を足して、制御量を求める
        float control_variable = kp * error + ki * integral;

    これ以降は、制御対象が積分特性の場合の制御結果算出、結果の表示、微分演算に必要となる誤差の保存、戻り値の設定であり、今回は必要のないコードとなります。

    次に電流制御のPI制御演算が実現するように、このコードを Virtual HILの C function へ実装していきます。

    C functionへの実装

    Typhoon HILには、C言語を使用するためのブロックとして「C function」と「Advanced C function」の2つがあります。今回は、簡単に使える C function を使用し、C言語の演算を実行します。
    制御回路は、下図のように、電流指令および実際の電流を入力とし、電圧指令が出力となるC functionをd軸用とq軸用の2つを用いる構成とします。

    C functionに変更した制御回路

    次に C function の設定ですが、まずGeneralタブで変数を定義します。
    変数名はChatGPTが生成した変数名をそのまま使用します。
    (ChatGPTは積分項の変数名を「integral」として生成しましたが、Typhoon HILでは「int」で始まる変数名は使用できないため「_integral」に変更しました)

    Inputsタブに C functionの入力変数を設定します。
     目標値:setpoint
     制御対象の初期値:process_variable

    Outputsタブに C functionの出力変数を設定します。
     制御量:control_variable

    Variablesタブに演算に必要となるその他の変数を設定します。
     誤差:error
     積分項:_integral
     比例ゲイン:kp
     積分ゲイン:ki
     制御周期:dt


    実際に演算を実行するためのC言語コードはFunctionsタブに実装します。
    処理周期(シミュレーション・ステップ)で呼び出される output_fnc にChatGPTが生成したPI制御演算を記述します。init_funcはシミュレーション開始時に呼び出され、ここに変数の初期化コードを記述します。

    C functionによる制御結果

    ChatGPTが生成した制御ソフトによる制御結果は下の図のようになり、良好に制御できていることがわかります。
    しかし、C function に変更する前の波形と比較すると、指令値と制御結果のズレが大きくなっています。
    これは、ChatGPTが生成した制御ソフトではdq軸間の干渉項および系統電圧のフィードフォワードが無くなったためです。これでも要求性能を満たしていればフィードフォワードは無くても問題ありませんが、制御ゲインを調整しても要求性能を満足できない場合にはフィードフォワードが性能改善に有効です。

    C functionに変更した場合の動作波形

    このように、Virtual HILの C function で、C言語で作成した制御ソフトウェアの動作確認ができます。
    回路シミュレータとは少し使い勝手が異なりますが、無料でC言語が使えるのでお勧めです。

    まとめ

    まとめ文章の画像

    ChatGPTと対話をすることで、以上のようなまとめ文章を作成できました!
    すごいですよね。文章の作成が苦手な私にとって、救世主が現れたような気分です。

    プログラムや文章の作成以外にも、制御設計など技術者としての仕事でAIを有効活用するために、ますますパワーエレクトロニクス技術を高め、AIには真似できないクリエイティブな仕事ができる技術者を目指しましょう!

    パワエレコラム一覧

    興味を持った方は、
    ご相談を!
    • お見積もり依頼
      各製品のお見積もり依頼は
      こちらです。
    • 資料ダウンロード
      各製品のカタログはこちらです

    • アフターサポート
      各製品のアフターサポート
      についてはこちらです。
    • お問い合わせ
      24時間365日受付
      約2営業日以内に返信します。
    お電話でのお問い合わせはこちら 045-548-8836 営業時間/9:00~18:00(平日)