PWM・ADC・割り込みタイミングのアニメーション

変換器のデジタル制御は、PWM の周期ごとに起こるイベントの連鎖です。タイマが ADC をトリガし、ADC がサンプリングして変換し、割り込みが制御則を計算し、新しいデューティはタイマがロードするまでシャドウレジスタで待ちます。各イベントをどこに置くかで、制御器が何を測るか、ループにどれだけ遅れが入るかが決まります。アニメーションはセンターアラインドのカウンタで動かすハーフブリッジの 3 周期をたどります。

ADC トリガ
比較値のシャドウロード
電流センサ
PWM 3 周期(T_s = 50.0 µs):カウンタと比較値、ゲート、電流、イベント
0 µs50 µs100 µs150 µsCTRCMPHLiISRSOC新デューティ反映
サンプリング 変換 割り込み インダクタ電流 ADC 入力信号

トリガイベントに向けてカウント中です。前のデューティが有効です。

イベントの時刻

SOC
50.00 µs
ホールド(サンプル時点)
50.50 µs
変換完了
50.80 µs
ISR の比較値書き込み
58.80 µs
新デューティ反映
100.00 µs
サンプルから新デューティまで
49.50 µs (0.99 Ts)

ADC が読んだ値

サンプル値
9.90 A
その周期の実際の平均
10.00 A
誤差
-0.10 A

一般的なモデル:降圧形ハーフブリッジ、平均 10 A、p-p リップル 4 A、サンプル値はサンプリング窓の終わりの値です。実際のリンギングは図よりずっと速く、計算には整定時間だけを使います。デバイス固有の動作は下の本文にまとめています。

センターアラインド PWM とサンプル位置

アップダウンカウントではカウンタがゼロから周期値まで上がって再び下がるので、PWM の 1 周期に自然なイベントが 2 つあります。カウンタがゼロになる谷と、周期値に等しくなる山です。カウンタが比較値より大きいときにハイサイドをオンにすると、オン時間は山を、オフ時間は谷を中心に置かれます。

インダクタ電流は三角波で、その中間値はちょうどオン時間とオフ時間の中央に来ます。そのため谷か山でサンプリングすれば、フィルタなしでその周期の平均電流が得られ、この 2 つのイベントが ADC トリガとしてよく使われます。トリガ遅延をゼロからずらすとサンプルにリップルの一部が混じります。初期値では、谷で 1 µs 遅れるごとに 4 A リップルのうち 0.2 A の誤差が出ます。

サンプリング時間、リンギング、ローサイドシャント

ADC のサンプルホールドにはサンプリング窓が必要で、その間ずっと信号が整定していなければなりません。デッドタイム後の相補スイッチのエッジも含め、スイッチングエッジのたびにパワーループと電流センサにリンギングが起きます。窓がそのリンギングの中に入ると、変換値は振動のどこに当たったかで変わります。アニメーションではリンギングが見えるよう実際より遅く描き、判定には整定時間だけを使います。

ローサイドのソースに置いたシャントは、ハイサイドがオフの間だけ相電流を流します。そのため谷でのサンプリングは、オフ時間の中にデッドタイム、整定、サンプリング時間が収まるときだけ有効で、これがデューティを制限します:D_max = 1 − 2·(t_dead + max(t_settle − t_delay, t_delay + t_acq))/T_s。初期値(20 kHz、デッドタイム 0.5 µs、整定 1.5 µs、サンプリング 0.5 µs)では D_max は 92 % です。3 シャントのドライブでは、窓が最も短い相を飛ばして残り 2 相から復元する方法がよく使われます。

変換から新デューティまで:遅れの出どころ

変換が終わると ADC が変換完了割り込みを出し、制御則が実行され、新しい比較値が書き込まれます。タイマはこの値をすぐには使いません。比較レジスタはシャドウ構造で、選んだカウンタイベントでのみアクティブレジスタにコピーされます。そうすることで周期の途中で書き込んでもグリッチやパルス抜けが起きません。

谷でサンプリングし、シャドウを谷でのみロードすると、新しいデューティはサンプルから 1 周期後に反映されます。初期値では 49.5 µs、つまり 0.99 T_s です。谷と山の両方でロードすれば、割り込みが山の前に終わる限りおよそ半周期に縮まり、間に合わなければ次の谷にずれ込みます。次のサンプル時点まで割り込みが終わらなければループはオーバーランしており、このタイミングはもう成り立ちません。

ループ設計では、この経路を計算遅れ(ここでは最大 1 周期)に PWM 更新そのもののおよそ半周期を加えたものとしてモデル化するのが一般的です。デジタル電流ループのクロスオーバーを制限するのは、たいてい変換器ではなくこの遅れです。

代表的な 2 つの MCU ファミリでの表し方

TI C2000 ePWM:タイムベースが CTR = Zero と CTR = PRD のイベントを生成し、アップダウンカウントモードの周期は 2·TBPRD·T_TBCLK です。イベントトリガサブモジュールが選んだイベントを ADC の変換開始信号 SOCA または SOCB に変え、ETSEL[SOCASEL] の選択肢には CTR = Zero と CTR = PRD があります。比較レジスタはシャドウ構造で、シャドウからアクティブへのロードは CTR = Zero、CTR = PRD、またはその両方で行えます(CMPCTL[LOADAMODE])。出典:TMS320F2837xD テクニカルリファレンスマニュアル(SPRUHM8)の ePWM の章、および TMS320x28xx/28xxx ePWM モジュールリファレンスガイド(SPRU791)。個々のデバイスがどの選択肢を持つかは、その TRM に記載されています。

STM32 タイマ:センターアラインドモードではオーバーフローとアンダーフローの両方で更新イベントが発生し、ARR、PSC、CCRx などのバッファ付きレジスタは更新イベントでプリロード値がロードされます。リピティションカウンタで更新頻度を下げられます。トリガ出力 TRGO は TIMx_CR2 の MMS ビットで更新イベントや OCxREF 信号などから選び、STM32G4 などのシリーズのアドバンストコントロールタイマには、タイマと ADC の同期用に TRGO2 が追加されています。出典:ST アプリケーションノート AN4013「Introduction to timers for STM32 MCUs」。ADC がレギュラー変換とインジェクテッド変換用のタイマトリガを選ぶ方法は ADC のバージョンによって異なり、全シリーズのフィールド名は確認できていないので、使用するデバイスのリファレンスマニュアルの ADC の章で確認してください。

実機での確認

空いている GPIO を割り込みの先頭で High、最後で Low にし、PWM 出力と電流センサ信号と一緒にオシロスコープで観測してください。1 回の取り込みで実際のサンプル時点、割り込みの長さ、次のサンプルまでの余裕が見え、設定がタイミング図どおりに動いているかを確かめる最も速い方法です。

アニメーションはこのページに示した式どおりに描いています。教科書やソフトウェアライブラリによって規約が異なるので、数値を比べる前に使っているコードの規約を確認してください。