STM32はPWMを介してESC30CESCを制御します

最近、水中プロペラに取り組んでいますが、実際の制御は4ローターのプロペラの制御と似ています。しかし、STM32ボードを使用してESCを制御し、ブレードを回転させるのは初めてだったので、たくさんのピットを踏んだ。インターネットでたくさんの情報を見つけましたが、その多くはあまり明確ではありません。これはそれを解決する方法の小さな記録です。購入するESCは異なる場合がありますが、全体的な制御の考え方は同じであるため、私の記事を読んだ直後に開始できると思います。

ESCの基本

今回購入したESC30ESCです(具体的なリンクはこちら)。この写真は非常に鮮明です。上の2本の太い赤と黒のワイヤーを使用してバッテリーを接続します(3Sと4Sは両方とも)。端子台を購入して、電源ボックスの2本のワイヤーを一緒に接続できます。次に、黒と白のワイヤーが信号ワイヤーであり、白のワイヤーが信号に接続され、黒のワイヤーがアースに接続されます。以下の白、緑、青のワイヤーは、制御のためにモーターに接続されている3相ワイヤーです。ブラシレスモーターについては説明しません。

ここに少し付け加えておきますが、一般的に使用されているモデルの飛行機ESCの信号線は、3本の線(赤、白、黒)である必要があります。これに対応して、白い線は引き続きPWM信号に接続され、黒い線は接地され、赤い線は電源に接続されます。
ここに写真の説明を挿入
購入してデバッグと制御を開始する前に、このESCの関連パラメーターを詳しく調べてください。これは非常に重要です。一般的に使用される航空機モデルのESCは一般に一方向です。つまり、一方向にしか回転できませんが、私の場合、これは双方向のESCです。
ここに写真の説明を挿入
主に信号列を見ると、内容は次のように要約できます。

  1. PWM波制御(通常、ESCは50Hz、つまり20msのPWM波によって制御されます)。
  2. 停止の中央値(ここでは一般に高レベルのデューティサイクルを指します)1.5ms、実際には1.475msから1.525msの間は、すべて中央値の停止によるものです。
  3. 制御範囲は1msから2msの間であり、実際の制御範囲は不感帯のために1.1msから1.9msの間です。
  4. 正転の場合は1.5msから1.9ms、逆回転の場合は1.1msから1.5ms。

公式の管理プログラムはArduinoに基づいており、簡単に参照できます。

#include <Servo.h>

byte servoPin = 9;
Servo servo;

void setup() {
    
    
	servo.attach(servoPin);

	servo.writeMicroseconds(1500); // send "stop" signal to ESC.
	delay(1000); // delay to allow the ESC to recognize the stopped signal
}

void loop() {
    
    
	int signal = 1700; // Set signal value, which should be between 1100 and 1900

	servo.writeMicroseconds(signal); // Send signal to ESC.
}

注:ESCは、使用する前にロックを解除する必要があります。電源を接続すると、ESCは3回ビープ音を鳴らし、ロックが正常に解除されると、ESCはさらに2回ビープ音を鳴らし、合計5回ビープ音を鳴らします。失敗したロック解除は、ESCでは制御できません。したがって、上記のコードを参照すると(もちろん、カスタマーサービスに問い合わせることができます)、ESC30Cのロック解除方法は、初期化後にニュートラル信号を設定し、信号が受信されるのを待ってから速度調整を開始することであると結論付けることができます。

制御およびデバッグ方法

私はSTM32F7開発ボードを使用し、プログラミングとデバッグにHALライブラリを使用しています。実際、これはPWM波を出力するタイマーです(ここではパーツを選択するだけで非常に簡単です)。しかし、注意が必要なことがたくさんあり、多くの詳細が明確ではなく、本当に時間とエネルギーを浪費しています。これが私のデバッグ経験についての簡単な話です。

1つ目は、タイマーでPWM波を構成するときです。ロック解除信号として初期化したり、ランダムな値を指定したり、構成しないように注意してください。ESCはタイマーとPWMが初期化された後にロック解除されるため、私の場合、1.5msの中央停止信号がロック解除信号であるため、次のように構成することはできません。 1.5ms。それ以外の場合、ESCは3回オンにした後、1回だけビープ音を鳴らし、その後ブレードは回転しません。

	//配置PWM波
	TIM3_CH1Handler.OCMode = TIM_OCMODE_COMBINED_PWM1;	//PWM模式1,CNT < CCRx值时为有效电平
	TIM3_CH1Handler.OCPolarity = TIM_OCPOLARITY_HIGH;		//高电平为有效电平
	//TIM3_CH1Handler.Pulse = 15;		//此处不配置,否则电调无法完成解锁
	HAL_TIM_PWM_ConfigChannel(&TIM3_Handler, &TIM3_CH1Handler, TIM_CHANNEL_1);	//TIM3通道1配置,即PA6

次に、遅延の使用に注意してください。最初は遅延を使用していませんでした。その結果、ESCは1回だけビープ音を鳴らした後、応答しませんでした。その後、オシロスコープでPWM波を観察したところ、初期化したPWMが点滅したばかりであることがわかり、情報を確認しました。ロック解除信号を受信する時間をESCに与える必要があります。でも今回もこだわっています。最初はdelay_us()を使って設定していたのですが、問題は解決できませんでした。その後、設定時間1sのdelay_ms(1000)に切り替えました。まだ問題がありました。後でもう一度時間を調整した後最後に、ビープ音が2回聞こえた後、モーターが回転し始めました。したがって、ロック解除信号の受信時間をどのように把握するかが非常に重要です。

	//电调初始化,初始化脉宽随机
	TIM3_PWM_Init(199, 10799);
	delay_ms(1000);
	//电调解锁:1.给电调发送中位信号;2.延时等待解锁完成,延时时间t≥1.5s
	TIM_SetTIM3Compare(15);
	delay_ms(1500);

また、使用中に自分で設定した信号に問題がないかどうかを確認するために、オシロスコープとの連携を学ぶように注意してください。以下は、最初に初期化した1.5msのデューティサイクルPWM波で、周期は20ms、振幅は3.3Vです。
ここに写真の説明を挿入
要約すると、プロセス全体に注意を払ってください。

  1. ESCは一般的に50Hzの周波数で制御され、制御範囲は実際の状況にもよりますが、約1msから2msです。
  2. 電源が接続された後、ESCは3回ビープ音を鳴らします。ロックを解除すると、ESCはさらに2回ビープ音を鳴らします。ただし、ESCが1回だけビープ音を鳴らす場合は、構成した信号をESCが受信したが、ロックが正常に解除されていない可能性があります。このとき、コードのロック解除部分が正しく記述されていないかどうかを注意深く確認する必要があります。ESCが鳴らない場合は、信号が受信されていないことを意味します。配線とコードの問題を注意深く確認してください。
  3. 遅延機能は、ESCにロック解除信号を受信するための一定の時間を与えるために使用されることに注意してください。ESCはそれぞれ異なります。これは自分で調整してください。
  4. 接地に注意してください。ESCの信号線を制御盤の信号出力ポートに接続し、信号線の接地線を制御盤のGNDに接続してください。
  5. オシロスコープを使用して、構成した信号を確認する方法を学びます。
  6. 間違ったワイヤーを接続しないでください!(これは私が私のバッテリーを燃やした方法です)

おすすめ

転載: blog.csdn.net/moumde/article/details/107620142
おすすめ