прерывание раз в 500-100 мкс
- Войдите на сайт для отправки комментариев
Ср, 06/07/2022 - 11:01
Интересует, возможно ли это сделать.
Прерывание по первому таймеру, если правильно понял, максимально возможно со скоростью 4100 мкс. Пояснение: при 16 МГц цикл выполняется 1/(16 ∗ 10^6) секунды или 6.25e-8 с. Это означает что 65535 отсчетов произойдут за (65535 ∗ 6.25e-8 с) и ISR будет вызываться примерно через 0,0041 с.
Предположил другой вариант, с использование micros(). Заявлено разрешение 4 мкс.
код:
void loop() {
timing = micros();
if(micros() - timing >= 1000){
PORT_motor_HIGH;
}
timing = micros();
if(micros() - timing >= 1000){
PORT_motor_LOW;
}
}
Других вариантов не нашёл. Прошу подсказку.
Задача: управление шаговым двигателем Nema 17 (драйвер А4988).
Библиотеки не интересуют.
Нужен диапазон 500-100 мкс
ЛЕГКО !
У таймера есть режим CTC и можно настроить даже так что прерывание будет вызываться сразу после выхода из прерывания (не думаю что вам это надо - так как для выполнения основного кода не будет окна времени). При этом на автомате может и ногой дергать !!!
Ersekin, Ваши расчеты категорически ошибочны. Как в большую так и в меньшую сторону.
Во-первых, для вызова прерывания таймеру необязательно считать до максимальных 65536 тиков, можно настроить прерывание при любом меньшем значении, что позволит программировать меньший интервал. А во-вторых, у таймера есть предделитель, который может понизить частоту вплоть до 1024 раз, позволяя отмерять длинные интервалы.