В серьезных проектах, где время цикла больше 1мс, такие таймеры
Захват-4.png
работать будут некорректно
По этому я использую другой принцип
Захват-3.png
Здесь идет подсчет циклов выполнения программы
Для работы этих таймеров нужен макрос подсчета времени цикла, и количества циклов от включения питания ПР
Захват-5.png
Уставка (PT)задается целым числом в мс, на выходе ET время прошедшее от старта(прямой счет), выходе (PT- ET) оставшееся время, эти времена тоже в мс, дискретность равна времени цикла.
Абсолютная погрешность вычисления интервалов времени не более половины времени цикла во всем допустимом диапазоне уставки в мс от Тц до 4294967295/Tц
Таймер имеет вход паузы. Любое количество пауз не вносят дополнительных погрешностей в отсчет времени.
Работает таймер так
Переменные на входе
dT - время цикла в мс(целое)
x_Clc - номер текущего цикла.
1. Уставка в мс переводится в количество циклов PT_Clc
Захват-6.png
здесь деление выполняется с округлением, по этому погрешность вычисления интервалов времени не более половины времени цикла
2. В момент старта запоминаем номер текущего цикла в переменную Start_Clc
Захват-7.png
3. В процессе работы вычисляется сколько циклов прошло от старта ET_Clc = x_Clc - Start_Clc
Захват-8.png
4. И сравниваем уставку PT_Clc с прошедшим количеством циклов ET_Clc
Захват-9.png