uCおよび電流シャントを使用した平均電流の測定


12

これは私の最初の投稿です。私はハードウェアをやろうとしているソフトウェアの男なので、優しくしてください:)

回路

マイクロコントローラから抵抗負荷(この場合は加熱パッド)を切り替えるように設計されたMOSFETとゲートドライバの集まりである小さな回路(写真を参照してください。発熱体の抵抗は非常に低いことが多く、電力を所望のレベルに保つために、MOSFETはPWMを使用して切り替えられます。

測定

純粋に機能的な側面に加えて、教育の焦点もあります。消費電流に関するフィードバックを取得できるようにしたいです。私の素朴なアプローチは、現在のシャントセンサーICを単に投入することでした。マルチメーターを使用してセンサーからの出力電圧を測定すると、実際には電流計の「遅さ」のために(PWMスイッチングを使用した)平均電流のように見えるものが得られます。しかし、同じ出力をatmega328p ADCに接続すると、いくつかの悪い測定値が得られます-ここでの速度は、PWM方形波のどこかに測定値を置きます。

だから、私の質問は、PWMでスイッチングするときに(平均)電流をどのように測定するのですか?

デザインは問題ないようですが、デザインとuC ADCをこのコンテキストで使用する方法の両方で何かを見逃している可能性があります。

回路図


PWMから平均電圧を与えるためにフィルターを使用できると思います。このようなフィルターとPWM周波数に基づいて使用される値を説明する興味深い記事がこれです。
alexan_e 14

この質問にはいくつかの関連する答えがあります。しかし、彼らは単に電流を測定するためにシャントとICを使用することに言及しています。ただし、PWMに関する言及はありません。
リカルド14

コメントをありがとう。@alexan_e:TIはINA197データシートに入力フィルターを示していますが、その使用方法はわかりませんでした。安定した電圧が得られない場合の対処法かもしれません。
ltj 14

私はそれがあなたの問題の解決策だと思いますが、これについてのより多くの経験が詳細な答えを提供してくれることを望みます。それが私がコメントとしてこれを投稿した理由です。
alexan_e 14

出力は可変デューティCucle PWMなので、ピーク検出回路を使用し、ADCでそれを測定できます。
マーティン14

回答:


6

単純に見えるのはそれほど単純ではない場合があります。非常に複雑な測定が必要ですが、単純な結果が必要です。測定するものは一定ではなく、時間によって異なります。要件のレベルに応じて、現在の消費の1つまたは複数のプロパティを計算できます。これらのプロパティは、システムをより適切に監視するのに役立ちます。複雑さの昇順で、3つの異なるソリューションを提案します。

解決策1:平均

1つの値の結果を取得したい->時間の平均を取得します。@akellyirlが既に提案したように、ローパスフィルターを使用します。float y = alpha*input + (1-alpha)*y各サンプルについて計算します。ここalphaで、は平滑化係数です。詳細については、ウィキペディアを参照してください。

解決策2:最大+平均

平均値と最大値を取得することに興味があります。最大値を監視することは、たとえばコンポーネントの寸法決定にとって興味深い場合があります。

if (y > max)
  max = y;

解決策3:標準偏差+最大+平均

どうして?

以下のチャートを参照してください。形状の異なる3つの信号があります。三角形正弦波、およびスパイク信号。それらはすべて同じ周期、同じ振幅、同じ平均で周期的です、同じminおよびmaxでです。しかし、それらはさまざまな形をしており、実際、まったく異なる物語を持っています...

信号とそのヒストグラム

違いの1つは標準偏差です。そのため、測定値を拡張し、標準偏差を含めることをお勧めします。問題は、それを計算する標準的な方法がCPUを消費することです。うまくいけば、1つの解決策があります。

どうやって?

ヒストグラム法を使用します。すべての測定値のヒストグラムを作成し、データセットの統計(最小、最大、平均、標準偏差)を効率的に抽出します。ヒストグラムは、同じ値または同じ値の範囲を持つ値をグループ化します。利点は、すべてのサンプルを保存することを避け(時間のカウントを増やす)、限られた数のデータで高速に計算できることです。

測定値の取得を開始する前に、ヒストグラムを保存する配列を作成します。これは、たとえばサイズ32の 1次元整数配列です。

int histo[32];

電流計の範囲に応じて、以下の機能を調整します。たとえば、範囲が256mAの場合、ヒストグラムのビン0は0〜8 mAの値で増加し、ビン1は8〜16 mAの値で増加することを意味します。ヒストグラムのビン番号:

short int index;

サンプルを取得するたびに、対応するビンインデックスを見つけます。

index = (short int) floor(yi);

そして、このビンを増やします:

histo[index] += 1;

平均を計算するには、次のループを実行します。

float mean = 0;
int N = 0;
for (i=0; i < 32 ; i++) {
  mean = i * histo[i]; // sum along the histogram
  N += i; // count of samples
}
mean /= N; // divide the sum by the count of samples.
mean *= 8; // multiply by the bin width, in mA: Range of 256 mA / 32 bins = 8 mA per bin.

標準偏差を計算するには、次のループを実行します。

float std_dev = 0;

for (i=0; i < 32 ; i++) {
  std_dev = (i - mean) * (i - mean) * histo[i]; // sum along the histogram
}
std_dev /= N; // divide the sum by the count of samples.
std_dev = sqrt(std_dev); // get the root mean square to finally convert the variance to standard deviation.

ヒストグラム法の戦略は、取得したすべての信号サンプルの代わりに、少数のビンで低速操作を行うことです。サンプルサイズが長いほど良い。詳細については、この興味深いページThe Histogram、Pmf and Pdfをご覧ください。


非常に徹底的かつ明確な説明。実際のレベルでは、ADCサンプリングが「良い方法で」分配されること、つまりPWM信号にロックされないことをどのように保証しますか?PWMとADCサンプリングの両方にArduino(hw + sw)を使用していることを認めなければなりません。組み込みのタイマーを自分でセットアップする必要があるかもしれません。サンプリング周波数はPWM周波数よりもかなり高いはずです。
ltj

1
サンプリングを開始するとすぐに、事態は非常に複雑になります。最初に行うことは、ナイキストシャノンの定理です。直感的に理解できるのは、サンプリング周波数が高いほど、より多くの情報が得られることです。しかし、基本的ではありますが、直感的ではないのは、周波数Fsでサンプリングする前に、Fs / 2の信号を絶対にローパスフィルター(アナログ/エレクトロニクスドメイン)する必要があるということです。そうしないと、エイリアシングの影響を受けます。最高のサンプリング周波数を選択することをお勧めします。可能であれば、PWM周波数の約10倍のようなもの。
RawBean

これは、2倍の帯域幅でサンプリングする必要があると実際に述べているナイキストシャノンの定理の一般的な誤解です。エイリアシングが役立つ場合があります。意図的な無礼はありませんが、これはtexbookからの回答のようです。高周波数の詳細が無関係である可能性が最も高いこのシナリオで〜10倍のPWMサンプリングを提案するのは過剰です。
akellyirl 14

1

問題を正しく理解します。測定に使用しているメーターと同様に、PWMの「平均」を取得する必要があります。

PWM周期の少なくとも10倍の時定数を持つA1,2,3信号にRCフィルターを使用できます。つまり、PWM周期が10マイクロ秒だった場合、RC時定数は100マイクロ秒になるはずです。たとえば、10kOhms x 10nF = 100us

より良い解決策は、次のようにマイクロコントローラーで信号をデジタルでフィルター処理することです。

float y = (1-0.99)*input + 0.99*y; 

「0.99」値を変更して、このデジタルフィルターの時定数を変更します。


1
コードで行う場合は、エイリアスに注意してください。
アンディ別名

エイリアシングは必ずしも問題ではありません。信号を再構成するには、サンプルレートが少なくとも最高周波数の2倍でなければならないことは誰もが知っています。ただし、信号が帯域制限されている場合は、帯域幅の 2倍でサンプリングするだけで済みます。これはアンダーサンプリと呼ばれます。信号は加熱パッドを駆動しているため、おそらく低周波数であるため、100〜1000 SPSの範囲の適切なサンプルレートで十分です。参照:ni.com/newsletter/50078/en
akellyirl

アンダーサンプリングを使用する場合、PWMレートとサンプルレートが互いに素であることを確認するのが賢明でしょう。
akellyirl

正確に私の考え-ADCで測定し、同じMCUでPWMを生成する場合、両方が時間内にロックされる傾向があるかもしれません。
アンディ別名14

信号は低周波数ではなく、pwm周波数です。低frqの場合、浮動小数点演算をそのように使用するよりも、単純に1つの期間と平均にわたってサンプリングする方が、おそらくリソースの消費が少なくなります。
スコットサイドマン14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.