BEMFを使ったモータのセンサレス駆動制御をしてるのですが、MOSFETのスイッチングタイミングでBEMFにパルス状のノイズが入って、ゼロクロスを誤検出して早くゼロクロス検出をしたとファームウェアで判断してしまいます。
この誤検出を避けるにはどうしたらいいですか?
こんな問題への対策方法の候補を書きだしておきます。
スポンサーリンク
目次
BEMFを使ったモータのセンサレス駆動制御でMOSFETのスイッチングタイミングのノイズ対策方法
BEMF(Back Electro-Motive Force)を使用したセンサレス駆動制御において、MOSFETのスイッチングに起因するノイズが問題となることはよくあります。このノイズによりゼロクロスの誤検出が発生すると、モータの制御が不安定になります。以下の方法を試して、誤検出の問題を軽減または解消することができます:
- デジタルフィルタの適用:
- ゼロクロスの検出前に、BEMF信号をデジタルローパスフィルタを通すことで高周波ノイズを除去できます。
- ハードウェアフィルタの追加:
- BEMFを測定する入力ピンに、低パスフィルタを追加することでノイズを低減できます。これは、適切な抵抗とキャパシタを使って簡単に実装できます。
- ノイズブランキング:
- MOSFETがスイッチングするタイミングを知っていれば、その期間中はゼロクロスの検出を一時的に無効にすることができます。
- ウィンドウ検出:
- ゼロクロスを検出する際、完全にゼロを検出するのではなく、許容範囲(ウィンドウ)を設定して、その範囲内での変動を許容する方法です。
- デッドタイムの調整:
- MOSFETのスイッチング時に、上側と下側のトランジスタの両方が同時にオンまたはオフにならないように、デッドタイムを適切に設定することで、スイッチングノイズを減少させることができます。
- BEMFのサンプリングタイミングを調整:
- MOSFETのスイッチングから一定時間遅延させてBEMFをサンプルすることで、スイッチングノイズの影響を受けにくくすることができます。
- スニューバ回路の追加:
- MOSFETのスイッチングノイズを低減するための外部回路。ダイオードと抵抗またはキャパシタから構成され、トランジスタのドレインとソース間に接続します。
これらの方法の中から、あなたのアプリケーションやハードウェア設計に適したものを選択し、適切に実装することで、BEMFの誤検出問題を解消または軽減することができるでしょう。
補足1:BEMF信号をデジタルローパスフィルタ
ゼロクロスの検出前に、BEMF信号をデジタルローパスフィルタを通すことで高周波ノイズを除去できます。
はプログラムでどのように計算すればいいですか?
デジタルローパスフィルタを使用して高周波ノイズを除去する場合、最も単純かつ一般的な方法は移動平均フィルタや単純なIIR (Infinite Impulse Response) フィルタを使用することです。以下にそれぞれの方法を説明します:
- 移動平均フィルタ:
移動平均フィルタは、直近のN個のサンプルの平均を取ることで信号を平滑化します。この方法は計算が簡単であり、ハードウェア上での実装も容易です。
移動平均フィルタのコード例
#define N 10 // 例として10個のサンプルで平均を取る場合 int samples[N] = {0}; int index = 0; int average = 0; int filter(int new_sample) { average -= samples[index]; samples[index] = new_sample; average += new_sample; index = (index + 1) % N; return average / N; }
- 単純なIIRフィルタ:
IIRフィルタは、新しいサンプルと前回のフィルタ出力を組み合わせることで信号を平滑化します。この方法は移動平均フィルタよりもメモリを少なく使用しますが、適切な係数を選択することが重要です。
一次IIRフィルタのコード例
float alpha = 0.1; // この値は0から1の間で選択します。小さい値の場合、平滑化の効果が強くなります。 float last_output = 0; float filter(float new_sample) { last_output = alpha * new_sample + (1.0 - alpha) * last_output; return last_output; }
どちらのフィルタも、新しいBEMFのサンプルが取得されるたびに呼び出されることを想定しています。実際のアプリケーションに合わせて、適切なフィルタ設定やパラメータを選択する必要があります。
フィルタの性能を評価する際には、BEMF信号の重要な特徴(ゼロクロスのタイミングなど)がフィルタリングによって失われないことを確認することが重要です。
補足2:抵抗とキャパシタでローパスフィルタ
BEMFを測定する入力ピンに、低パスフィルタを追加することでノイズを低減できます。これは、適切な抵抗とキャパシタを使って簡単に実装できます。
この方法について、例えば、20000rpmで回転するモータでは、どのくらいの抵抗値とキャパシタくらいまでなら、BEMFの遅延に影響がないですか?
BEMFノイズ低減のためのフィルタ設計