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)
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)