Использование 4 16 -битных таймеров для 400 Гц ШИМC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Использование 4 16 -битных таймеров для 400 Гц ШИМ

Сообщение Anonymous »

Я имею дело с квадрокоптером на основе Arduino Mega и пытаюсь сделать частоту PWM для 4 двигателей - 400 Гц каждый.
Я нашел интересное решение, где 4 Atmega2560 16 -битные таймеры используются для управления 4 ESCs с PWM, чтобы оно могло достичь частоты 400 Гц. 700-2000 мкс являются нормальной шириной импульсов ESC.

1sec /repreresh_interval = 1 /0,0025 = 400 Гц. < /p>

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

Проблема состоит в том, чтобы заставить его работать каждый ШИМ должен контролировать с помощью 1 16 -битного таймера. В другом месте, скажем, 2 ESC на 1 таймере дадут 200 Гц. Таким образом, все 16 -битные таймеры заняты контролем 4 ESC, но мне все еще нужно прочитать входной PPM из приемника. Для этого мне нужен по крайней мере еще один 16 -битный таймер, которого у меня больше нет.
Это все еще один 8 -битный таймер, он может читать только 0..255 номеров, в то время как обычные номера работают с ESCS 1000..2000 и прочее. Это сработает? Будет ли это резко уменьшить скорость?>

Подробнее здесь: https://stackoverflow.com/questions/279 ... -400hz-pwm
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»