Arduinoブラシレスモーター制御チュートリアル| ESC | BLDC
このチュートリアルでは、ArduinoとESCを使用してブラシレスモーターを制御する方法を学習します。 BLDCモーターの動作の詳細が必要な場合は、他の記事を確認するか、ブラシレスモーターの動作原理と、ArduinoとESCを使用してモーターを制御する方法の説明が記載された次のビデオをご覧ください。
この例では、次の仕様のアウトランナーBLDCモーターがあります。KV定格が1000で、2S、3S、または4S LiPoバッテリーを使用して電力を供給でき、30AESCが必要です。ブラシレスモーターのKV定格は、無負荷時の1ボルトあたりのモーターのRPMを定義します。
この場合、1000KVは、たとえば、7.4ボルトの電圧を持つ2S LiPoバッテリーをモーターに供給する場合、モーターは最大RPM 7.4 x 1000、つまり7400RPMを達成できることを意味します。
ブラシレスモーターは電力を大量に消費し、それらに電力を供給する最も一般的な方法はLiPoバッテリーを使用することです。 LiPoバッテリーの「S」番号は、バッテリーに搭載されているセルの数を示し、各セルの電圧は3.7Vです。
この例では、3つのセルを備えた11.1Vの3SLiPoバッテリーを使用します。したがって、モーターが最大RPMの11100に達することが期待できます。
最後に、この例で使用し、モーターの要件に一致させる30AESCを示します。一方のESCには、モーターの3つのフェーズを制御する3本のワイヤーがあり、もう一方の側には、電力を供給するための2本のワイヤー(VCCとGND)があります。
ESCから出ている3本のワイヤーの別のセットもあります。それは信号線+5Vとアースです。 ESCのこの機能は、バッテリーエリミネーター回路と呼ばれ、その名前が示すように、マイクロコントローラー用に個別のバッテリーが不要になります。これにより、ESCはArduinoに電力を供給するために使用できる安定化された5Vを提供します。
ここで、この接続が実際にはサーボモーターで見られる接続と同じであることがわかります。
したがって、ESCとArduinoを使用してブラシレスモーターを制御することは、Arduinoを使用してサーボを制御するのと同じくらい簡単です。 ESCは、サーボと同じタイプの制御信号を使用します。これは、標準の50HzPWM信号です。
これは非常に便利です。たとえば、RC飛行機を作成する場合、通常はサーボとブラシレスモーターの両方が必要であり、このようにして、同じタイプのコントローラーで簡単に制御できるためです。
したがって、Arduinoを使用して50Hz PWM信号を生成するだけで、パルス幅または1ミリ秒から2ミリ秒まで変化する高状態期間に応じて、ESCはモーターを最小から最大RPMまで駆動します。
この例の回路図は次のとおりです。 ESCに加えて、モーター速度を制御するための単純なポテンショメーターを使用します。
このArduinoチュートリアルに必要なコンポーネントは、以下のリンクから入手できます。
Arduinoコードは、ほんの数行のコードで本当にシンプルです。
説明: したがって、サーボライブラリを定義する必要があります。サーボライブラリを使用すると、50HzのPWM信号を簡単に生成できます。そうでない場合、Arduinoが生成するPWM信号は異なる周波数になります。次に、ESC制御用のサーボオブジェクトを作成し、ポテンショメータからのアナログ入力を保存するための変数を定義する必要があります。セットアップセクションでは、attach()関数を使用して、接続されているESCの制御信号であるArduinoピンを定義し、PWM信号の最小および最大パルス幅をマイクロ秒単位で定義します。
ループセクションでは、最初にポテンショメータを読み取り、その値を0から1023までの値を0から180までの値にマッピングします。次に、write()関数を使用して、信号をESCに送信するか、50HzPWM信号を生成します。 0〜180の値は、セットアップセクションで定義された1000〜2000マイクロ秒の値に対応します。
したがって、このコードをArduinoにアップロードし、バッテリーを使用してすべての電源を入れると、ポテンショメーターを使用してブラシレスモーターの速度をゼロから最大に制御できます。
ただし、ここで注意しなければならないことがいくつかあります。最初にモーターに電力を供給するとき、信号値は最小値の1ミリ秒以下である必要があります。これはESCのアーミングと呼ばれ、モーターが確認のビープ音を鳴らして、適切にアーミングされていることを確認します。電源を入れたときの値が高い場合、つまりスロットルを上げている場合、ESCは、正しい最小値までスロットルを下げるまでモーターを始動しません。これは、電源を入れているときにスロットルを上げてもモーターが始動しないため、安全性の点で非常に便利です。
最後に、ESCキャリブレーションがどのように機能するかを説明しましょう。すべてのESCには独自の高点と低点があり、それらはわずかに異なる場合があります。たとえば、最低点は1.2ミリ秒、最高点は1.9ミリ秒の場合があります。このような場合、スロットルは最初の20%で、1.2ミリ秒という低いポイント値に達するまで何もしません。
この問題を解決するために、ESCを調整するか、必要に応じて高点と低点を設定できます。そのためには、ESCに電力を供給する前に、まずポテンショメータを最大値または少なくとも現在の中間点よりも大きい値に調整する必要があります。次に、ESCの電源を入れると、モーターからビープ音が数回鳴り、新しい最高点を設定したことを実際に確認します。
次に、2秒後、ポテンショメータを新しい最低点となる位置に移動する必要があります。確認のビープ音が再び鳴り、ESCキャリブレーションが完了します。これでスロットルがすぐに反応し、これらの新しい2つのポイント内でモーターを制御できます。
このチュートリアルのほとんどすべてです。このArduinoブラシレスモーター制御をワイヤレスで作成する方法を学びたい場合は、私が構築した以前のビデオとArduinoベースのRC送信機を確認し、それを使用してBLDCモーターを制御する方法を説明できます。
このチュートリアルを楽しんで、何か新しいことを学んだことを願っています。以下のコメントセクションでお気軽に質問してください。Arduinoプロジェクトのコレクションを確認することを忘れないでください。 Arduinoブラシレスモーター制御–回路図
BLDCモーター制御用のArduinoコード
/*
Arduino Brushless Motor Control
by Dejan, https://howtomechatronics.com
*/
#include <Servo.h>
Servo ESC; // create servo object to control the ESC
int potValue; // value from the analog pin
void setup() {
// Attach the ESC on pin 9
ESC.attach(9,1000,2000); // (pin, min pulse width, max pulse width in microseconds)
}
void loop() {
potValue = analogRead(A0); // reads the value of the potentiometer (value between 0 and 1023)
potValue = map(potValue, 0, 1023, 0, 180); // scale it to use it with the servo library (value between 0 and 180)
ESC.write(potValue); // Send the signal to the ESC
}
Code language: Arduino (arduino)ESCキャリブレーション
製造プロセス