Raspberry Pi でブラシレスモーターを回転制御

 Raspberry Pi Pico でドローン用のブラシレスモーターを制御してみました。全部を自作するとなるとハード・ソフトともに結構大変なので、PicoからESC(アンプ)を経由してモーター制御を行います。Picoの開発環境はArduinoIDE前提です。

 少し無理やりですがブレッドボードで準備してます。Picoで可変抵抗器(ポテンションメーター)のボリューム値を読み取って、モーター回転速度を制御します。

 簡単にPicoの制御内容(ソース)を説明。(ArduinoIDE使用しているので記述はArduino言語です)

 ▼可変抵抗器の読み取り部分からです▼

  raw += (analogRead(26) - raw) * 0.1;

 PicoのGP26(ADC0)ピンからanalogReadで読み取ってます。摺動部の影響で結構なノイズが乗るため、取得値を少し平滑化をしてます。相対的な値が読めればいいため、電圧値に変換はせずに、生値(ビット値)をそのまま使用してます。

 ▼ブラシレスモーター制御部分▼

  digitalWrite(0, HIGH);
  ESCLoopTimer = micros();
  ESC1_timer = raw + ESCLoopTimer;
  while (digitalRead(0) > 0) {
    ESCLoopTimer = micros();
    if (ESC1_timer <= ESCLoopTimer)digitalWrite(0, LOW);
  }

 モーター制御するためのPWM波形(信号)をループの中で生成してます。出力ピンはGP0。可変抵抗の値でHIGH時間を設定。単純に時間を関してHIGHからLOWへ変えてるだけです。

▼動かしてみました▼

 ティッシュ着けて回転します。静止画なので分り難いですね。低速域は回転速度の可変が体感できるのですが中~高速域になってくると速度変化が体感では分り難いですね。可変抵抗器の特性のせいかもしれません。

コメント