私はarduinoのメガベースのクワッドコプターを扱っており、4つのモーターのPWM周波数をそれぞれ400hzにしようとしています。
4 つの ATmega2560 16 ビット タイマーを使用して 4 つの ESC を PWM で制御し、400hz の周波数に到達できる興味深いソリューションを見つけました。700 ~ 2000µs は、ESC が扱う通常のパルス幅です。
1 秒/リフレッシュ間隔 = 1/0.0025 = 400hz。
this is servo.h lib:
#define MIN_PULSE_WIDTH 700 // the shortest pulse sent to a servo
#define MAX_PULSE_WIDTH 2000 // the longest pulse sent to a servo
#define DEFAULT_PULSE_WIDTH 1000 // default pulse width when servo is attached
#define REFRESH_INTERVAL 2500 // minimum time to refresh servos in microseconds
#define SERVOS_PER_TIMER 1 // the maximum number of servos controlled by one timer
#define MAX_SERVOS (_Nbr_16timers * SERVOS_PER_TIMER)
問題は、各 PWM を 1 つの 16 ビット タイマーで制御する必要があることです。それ以外の場合、たとえば、1 つのタイマーで 2 つの ESC を実行すると 200hz になります。そのため、すべての 16 ビット タイマーは 4 つの ESC の制御でビジーですが、受信機から入力 PPM を読み取る必要があります。そのためには、もう持っていない 16 ビット タイマーが少なくとももう 1 つ必要です。
通常の数値 escs が 1000..2000 などで動作するのに対し、それは 0..255 の数値しか読み取ることができない 1 つの 8 ビット タイマー フリー ビットです。
では、pwm と ppm の両方の読み取りに同じ 16 ビット タイマーを使用するとどうなるでしょうか? それはうまくいくでしょうか?急激に速度が落ちますか?
データのフィルタリング、デバッグなどを制御する Raspberry Pi とペアで arduino を使用していますが、ppm の読み取り値を Raspberry に移動した方がよいでしょうか?