Kinetisコミュニティの皆さん、こんにちは。
高精度のメータリングは、電子パワーメータアプリケーションの重要な機能です。メータリングの精度は、不正確なメータリングがかなりの収益の損失につながる可能性があるため、最も重要な属性です。さらに、不正確な計測は、顧客に過大請求することを望ましくない結果にもたらす可能性があります。
メータの不正確さ、またはメータの誤差源の一般的な原因には、センサデバイス、センサコンディショニング回路、アナログフロントエンド(AFE)、およびデジタル処理エンジンまたはマイクロコントローラで実行されるメータリングアルゴリズムが含まれます
この記事では 、フィルタ・ベース・アルゴリズムと呼ばれるメータ・アルゴリズムを使用したKinetis KM34デバイスを搭載した二相パワー・メータ・ファームウェアの実装について説明します。示されているファームウェアは、リファレンス マニュアル DRM149 で説明されているハードウェア設計に実装されています (DRM149 に示されているソフトウェア実装では、高速フーリエ変換と呼ばれるより複雑なメータリング アルゴリズムが使用されています)。
ファームウェアは、次のようなeメーターアプリケーションの基本機能を実装します。
キャリブレーションタスクは、キャリブレーションされていない電力計が主電源に接続されているたびに実行されます。まず、キャリブレーションフラグがすでにマイクロコントローラフラッシュに保存されているかどうかを確認し、保存されていない場合はキャリブレーションを実行します。キャリブレーションプロセスの詳細については、 DRM143 のドキュメントを参照してください。
関数:
int16 CONFIG_CalcCalibData (tCONFIG_FLASH_DATA *ptr)キャリブレーションデータの計算を担当し、キャリブレーションフラグをフラッシュに保存します。
完全な使用法と定義については、次のコード セクションを参照してください。
/* if calibration data were collected then calibration parameters are */
/* calculated and saved to flash */
if (CONFIG_CalcCalibData ((tCONFIG_FLASH_DATA *)&ramcfg) == TRUE)
CONFIG_SaveFlash ((tCONFIG_FLASH_DATA *)&ramcfg, ramcfg.flag);キャリブレーション・タスクは、キャリブレーション・ゲイン、オフセット、位相シフトをフラッシュに保存し、マイクロコントローラ・デバイスをリセットすることで終了します。
アナログ・フロントエンド(AFE)からの相電圧と相電流のサンプルの読み取りは、166.6μsごとに定期的に行われます。このタスクは、最も高い優先度レベル (レベル 0) で実行され、AFE 結果レジスタが新しいサンプルを受信すると非同期にトリガされます。このタスクは、AFE 結果レジスタから位相電圧と位相電流のサンプルを読み取り、サンプルを全小数範囲にスケーリングし、計算タスクで使用するための値を一時変数に書き込みます。
kWh の値は 6000 Hz ごとに計算されていますが、残りの量 kVARh、QAVG、PAVG、URMS、IRMS は 1500 Hz (666.6 μs) ごとに計算されています。これはデシメーション係数によるもので、これらの値はすべての AFE サンプルで必要ないため、CPU 使用率を減らすためです。
このアプリケーションで使用されるメーターの定義は、 meterlib2ph_cfg.h にあります。ファイルの場合、このファイルは Filter-Based Metering Algorithms Configuration Tool を使用して生成されており、ツールの使用方法の詳細については、 AN4265 ドキュメントを参照してください。
メーターの設定は次のとおりです。
ここでは、Frequency に対して予想されるエラー動作を確認できます。
AFE モジュールとチャネルの設定は次のとおりです。
/* Current Phase 1 */
AFE_ChInit (CH0,
AFE_CH_SWTRG_CCM_PGAOFF_CONFIG(DEC_OSR1024),
0,
PRI_LVL1,
(AFE_CH_CALLBACK)NULL);
/* Current Phase 2 */
AFE_ChInit (CH1,
AFE_CH_SWTRG_CCM_PGAOFF_CONFIG(DEC_OSR1024),
0,
PRI_LVL1,
(AFE_CH_CALLBACK)NULL);
/* Voltage Phase 1 */
AFE_ChInit (CH2,
AFE_CH_SWTRG_CCM_PGAOFF_CONFIG(DEC_OSR1024),
0,
PRI_LVL1,
(AFE_CH_CALLBACK)NULL);
/* Voltage Phase 2 */
AFE_ChInit (CH3,
AFE_CH_SWTRG_CCM_PGAOFF_CONFIG(DEC_OSR1024),
0,
PRI_LVL1,
(AFE_CH_CALLBACK)afech3_callback);
/* AFE Initialization @ 6 KHz */
AFE_Init (AFE_MODULE_RJFORMAT_CONFIG(AFE_PLL_CLK, AFE_DIV2, 12.288e6)); ご覧のとおり、電圧フェーズ2を測定しているCH3のみが割り込みで構成されています。CH3 コールバック中に、残りのチャネルがサンプリングされて 4 つの値が同時に取得され、スケーリングが実行されます。
/* measurements callback @ 6000 Hz */
static void afech3_callback (AFE_CH_CALLBACK_TYPE type, int32 result)
{
static int cnt_1 = 0;
if (type == COC_CALLBACK)
{
/* Current and Voltage reading */
u24_sample[0] = AFE_ChRead (CH2) << U_SCALE; /* Voltage 1 reading ... */
i24_sample[0] = AFE_ChRead (CH0) << I_SCALE; /* Current 1 reading ... */
u24_sample[1] = AFE_ChRead (CH3) << U_SCALE; /* Voltage 2 reading ... */
i24_sample[1] = AFE_ChRead (CH1) << I_SCALE; /* Current 2 reading ... */
.
.
.
.
}CH3割り込み内では、メータリングアルゴリズム関数が呼び出されてアクティブエネルギーのデータを処理し、計算タスクはキャリブレーションフェーズ中に取得されたキャリブレーションオフセットとキャリブレーションゲインを使用してサンプルをスケーリングします。
CH3 は、請求されていない数量が計算される auxcalc_callback 、次のソフトウェア割り込みを呼び出します。
フィルタベースアルゴリズム機能の詳細については、 AN4265 のドキュメントを参照してください。
display_callback タスクは、auxcalc_callbackによって 3 Hz ごとに呼び出され、最も低い優先度で実行されます。このアプリケーションでは、クロック データ構造を更新し、ウォッチドッグ タイマーを更新し、いくつかのメータリング アルゴリズム関数を呼び出して、請求数量と非請求数量の値を読み取ります。
タイマー割り込みは、1500ミリ秒ごとにLCDコンテンツを更新するために使用されます。
static void lptmr_callback (void)
{
lcd_all_off();
/* update menu index */
menu_fcn[menu_idx]();
if ((++menu_idx) >= DIM(menu_fcn))
{
menu_idx = 0;
}
}2 相ハードウェアは、テスト機器ELMA8303を使用して校正されています。精度のキャリブレーションとテスト中、パワーメータはテストベンチによって生成された電気量を測定し、有効エネルギーと無効エネルギーを計算し、出力LEDで生成されたパルスを測定しました。生成された各パルスは、有効エネルギー量と無効エネルギー量kWh(kVARh)/imp3に等しくなりました。パワーメータによって生成されたパルスとテスト機器によって生成された基準パルスとの間の偏差が、測定精度を定義しました。
次の図は、パワーメータのキャリブレーションプロトコルを示しています。このプロトコルは、25°Cで実施されたパワーメーターの校正結果を示しています。これらのグラフは、さまざまな相電流と相電流と相電圧の間の角度に対する測定の精度と再現性を示しています。
最初のグラフは、キャリブレーション後の有効エネルギーと無効エネルギーの測定の精度を示しています。x軸は相電流の変動を示し、y軸は5回の連続した測定から計算されたパワーメータの平均精度を示します
2番目のグラフ(下部)は、測定の再現性を示しています。つまり、特定の負荷ポイントでの測定値の誤差の標準偏差。
アプリケーションのIARソースコードを含むZIPファイルと、プロトコルの完全な結果を示すPDFファイルが添付されています。
情報がお役に立てば幸いです。
よろしくお願いします。
エイドリアン・カノ