Raspberry Pi 4Bを使ってESCにPWM信号を送り、水中スラスターを制御するには?

投稿者 :Fengyukun on

ESC を使用: APISQUEEN 24V 100A ESC

100A ESC取扱説明書:https://cdn.shopify.com/s/files/1/0621/5493/2452/files/100A.pdf?v=1700410535

1: ESCのロックを解除します

ニュートラルストップ信号はそのロック解除信号です
信号周期 20ms の 50Hz 信号を使用します。
命令内のパーセンテージは、PWM 信号の実際のデューティ サイクルではなく、PWM 制御パルス幅のパーセンテージを指します (ここで誤解されやすいです)。
ニュートラル停止信号は次のようになります。
75% デューティ サイクル、7.5% 実際のデューティ サイクル: 1.5ms (1.475ms ~ 1.525ms)。

輸入豚
インポート時間

pi = pigpio.pi() #pigpio オブジェクトを作成する
LED_PIN = 18 #LED が接続される GPIO ポートを定義します
PWM_FREQUENCY = 50 #PWM 周波数を Hz で定義します
パルス幅変調範囲 = 1000
PWM_DUTYCYCLE = 0 # PWM デューティ サイクルを定義します。値の範囲は 0 (2) 55、
pi.set_mode(LED_PIN, pigpio.OUTPUT) #GPIO ポートを出力モードに設定します
pi.set_PWM_Frequency(LED_PIN, PWM_FREQUENCY) #PWM 周波数を設定
pi.set_PWM_range(LED_PIN, PWM_range) # 設定範囲 1000

pi.set_PWM_dutycycle(LED_PIN, 75) #PWM デューティ サイクルを設定 75/1000=7.5%
time.sleep(3) # ロックを正常に解除するには 3 秒遅延します

2. 制御ESC

デューティ サイクル 75%: 実際のデューティ サイクル 7.5%-1.5ms (1.475ms と 1.525ms の間) 停止。
デューティ サイクル 50% ~ 75%: 実際のデューティ サイクル 5% ~ 7.5%、逆方向 1ms ~ 1.5ms。
デューティ サイクル 100%: 実際のデューティ サイクル 7.5% ~ 10% 順方向 1.5 ms ~ 2ms

pi.set_PWM_dutycycle(LED_PIN, 100)
# 前進: 7.5%-10% デューティサイクルが高いほど、前進速度が速くなります。
タイムスリープ(15)

pi.set_PWM_dutycycle(LED_PIN, 60)
#Reverse: デューティサイクルが 5% に近づくほど、反転速度は速くなります。
タイムスリープ(5)

pi.set_PWM_dutycycle(LED_PIN, 75)
#デューティサイクル
タイムスリープ(5)

3. デバッグ


デバッグ中に、オシロスコープを使用して波形が正しいかどうかを確認できます。
たとえば、下の写真は私が送信し始めた PWM 停止信号です。
電圧振幅は 3.3V、周期は 20ms、実際のデューティ サイクルは 7.5% で、これは正しいです。
しかし、波形にノイズと乱雑さが多すぎるため、ESC のロックを解除することはできませんでした。

最初は RPi.GPIO ライブラリを使用していましたが、それを pigpio ライブラリに置き換えてハードウェア pwm 信号を送信して問題を解決しました。

4. サンプルコード:


輸入豚
インポート時間

pi = pigpio.pi() #pigpio オブジェクトを作成する
LED_PIN = 18 # LED が接続される GPIO ポートを定義します。
PWM_FREQUENCY = 50 #PWM 周波数を Hz で定義します
パルス幅変調範囲 = 1000
PWM_DUTYCYCLE = 0 # PWM デューティ サイクルを定義します。値の範囲は 0 (2) 55、
pi.set_mode(LED_PIN, pigpio.OUTPUT) #GPIO ポートを出力モードに設定します
pi.set_PWM_Frequency(LED_PIN, PWM_FREQUENCY) #PWM 周波数を設定
pi.set_PWM_range(LED_PIN, PWM_range) # 設定範囲 1000

pi.set_PWM_dutycycle(LED_PIN, 75) #PWM デューティ サイクルを設定 75/1000=7.5%
time.sleep(3) # ロックを正常に解除するには 3 秒遅延します

pi.set_PWM_dutycycle(LED_PIN, 100)
#正転デューティサイクル7.5%-10%、デューティサイクルが大きいほど、正転速度が速くなります。
タイムスリープ(15)

pi.set_PWM_dutycycle(LED_PIN, 60)
# リバース デューティサイクルが 5% に近づくほど、反転速度は速くなります。
タイムスリープ(5)

pi.set_PWM_dutycycle(LED_PIN, 75)
#デューティサイクル
タイムスリープ(5)

この投稿をシェアする



← 投稿順 新着順 →


0件のコメント

コメントを残す