PSIMの自動コード生成機能を用いてPWM信号を生成する


本投稿はPSIMのビデオチュートリアル

Get Started with Embedded Code Generation Using the F2837x Target

を日本語化したものです。

 

概要

本チュートリアルでは、PSIMの自動コード生成機能を用いて、PWM信号を生成するコードを生成し、そのコードをマイクロコントローラ上で動作させる方法を紹介します。

また生成波形をオシロスコープで確認する方法を紹介します。

PSIMからの自動コード生成機能とCCSを用いたマイクロコントローラへの実装手順につきましては、事前にPSIM SimCoderプロジェクトをCCSにインポートする方法をご確認ください。

 

事前準備

下記を購入しました。

元のビデオチュートリアルはF2837xを使用していますが、本記事ではF28069Mを使用します。

 

PSIMモデルの確認

PSIMにはコード生成に対応した各種サンプルモデルがプリインストールされています。

今回は下記フォルダのサンプルを使用します。

C:\Altair\Altair_PSIM_2023.1\examples\Code Generation\F2806x Target\1-ph PWM

を作業フォルダにコピーしてご利用ください。

PSIMで 1-ph PWM with dc input.psimschを開きます。 

F2806x用の1相PWM生成ブロックが配置されています。

PSIMのシミュレーションを実行すると、SimViewにて生成されるPWM信号などを確認できます。

下記は、PWM_A、PWM_Bと指令値Vinをプロットしました。

キャリア波の振幅が0~1で、指令値Vin=0.6なので、デューティー比0.6のPWM波形がPWM_Aとして出力されています。反転したものがPWM_Bとして出力されています。

 

PSIMのコード生成

Simulation ControlにてCPUバージョンをご購入のマイクロコントローラに合わせてください。

また、InstaSPIN対応のマイクロコントローラの場合は、チェックを付けます。InstaSPIN機能の使用有無にかかわらず、対応マイクロコントローラの場合はチェックを付けてください。

シミュレートのコード生成をクリックしてコードを生成します。

 

ハードウェアの接続

マイクロコントローラを付属のUSBケーブルを用いてPCと接続します。

PCにPicoScopeのソフトウェアをインストールし、PicoScopeをOCにUSBで接続します。

PicoScope2205Aにはプローブが2本付属しているので、AとBのポートに接続します。

次にプローブをマイコンに接続します。

まずは、PSIM回路のPWMブロックの設定を確認します。PWM SourceがPWM 1に設定されています。

マイコンのquick start guideを確認し、PWM 1がが出力されるピン(PWM1AとPWM1B)を確認します。

プローブAをPWM1Aに、プローブBをPWM1Bに接続しました。

また、プローブAにグラウンド用のケーブルをつなぎ、マイコンのGNDにグラウンドしました。

PicoScope1つに対し、1つグラウンドする必要があります。プローブBのグラウンドは必要ありません。

 

CCSTUDIOによるマイクロコントローラへのコードの書き込み

Code Composer Studioを起動します。

Project -> Import Legacy CCSv3.3 Projectsより、PSIMで生成されたプロジェクトを読み込みます。

また、Target Configurationにて今回使用するマイクロコントローラの設定が設定されていることを確認します。

Projectの右クリックよりPropertiesを開き、GeneralのProductsにてXDAISをRemoveします。 

Debugをクリックすると、コードがマイクロコントローラへ転送され、Resumeをクリックすると、マイクロコントローラ上でコードが実行され、PWM信号が生成されます。

PicoScopeの画面でPWM信号を確認できます。

各プローブA,Bのレンジやスコープのレンジを調整し、下記のように表示させます。

信号は右から左へ流れていきますが、トリガーを用いることで、画面上に固定させて表示させることができます。

 

PWM信号波形の確認

PicoScopeのグラフの左下端にルーラーがあります。これをスクロールさせ、波形のエッジ位置に合わせることで、ルーラー間の時間を測定できます。

まずは、プローブAのPWM_Aの波形のみ表示し、エッジ立上がり間の時間を測定します。約100 μsecでした。

これは、PWMブロックのSampling Frequency = 10Kに対応します。

10K Hz = 1/10 e-3 sec = 1e-4 sec = 100 μsec

次にPWM_Aの立上がりエッジから立下りエッジまでの時間を測定します。約56 μsecでした。

現在、PWMへの指令値を0.6としていますので、デューティー比0.6のPWM信号が生成しているはずです。そのため、立上がりエッジから立下りエッジまでの時間は100 μsec x 0.6 = 60 μsecとなるべきです。

実際にはDead Timeというものがあり(4 μsec)、その値を差し引いた値に対応します。56 μsec = 60 μsec - 4 μsec。

では、そのDeat Timeを見てみます。

プローブBのPWM_Bの波形も表示し、両波形の谷の時間を測定します。約4 μsecです。これがDeat Timeです。

PWMブロックのDead Time = 4 μsecに対応します。

ちなみに、Dead Timeを10 μsecに変更し、コード化、コードの実行を行うと、両波形の谷の時間が10 μsecに変化します。

 

指令値の変更

現在のモデル・コードは指令値が0.6で固定されており、生成されるPWM信号のデューティー比も0.6に固定されています。デューティー比を変更するために、わざわざモデル・コードを修正するのは面倒ですので、マイクロコントローラへの入力信号でデューティー比が変更できるようモデル・コードを修正します。

F2806X用のSCI ConfigurationとSCI inputを配置、接続し、SCI inputブロックの名前と初期値を設定しました。

再度コード化し、コードの実行を行います。

PSIMより、DSPオシロスコープを開くと、入力変数設定として、Vinが追加されています。

この値を変更することで、即座にPWM信号のデューティー比を変更できます。

Vin=0.8とすると、デューティー比0.8のPWM信号が生成します(80-4=76 μsec)。

Vin=0.2とすると、デューティー比0.2のPWM信号が生成します(20-4=16 μsec)。

 

モータードライブへの準備

永久磁石同期モータ(PMSM)では、ローターの回転角に対応したPWM信号を生成することで、ローターを回転させています。

ここでは、回路を修正してサイン波を入力電圧とした場合のPWM信号を生成しています。

次のような回路を準備しました。振幅0.8のサイン波を指令値としてPWM信号を生成しています。

キャリア波はPeak-to-Peak Value=2、Offset Value=-1として、-1~1の振幅としました。

(-0.8+1)/2=0.1 ~ (0.8+1)/2=0.9のデューティー比のPWM信号が生成されるはずです。

ファイル:1-ph PWM with dc input_motor_control_demo.psimsch

振幅0.8のサイン波を入力電圧に対し、デューティー比が0.5から始まり、0.9まで増加し、0.1へ減少していることがわかります。

再度コード化し、コードの実行を行うと、マイクロコントローラ上でデューティー比が変化するPWM信号が生成されていることがわかります。

永久磁石同期モータ(PMSM)は3種類の位相のずれたPWM信号を用いてコントロールされます。

 

使用製品:Altair PSIM