Аппаратный частотомер на 328/168 с использованием его ICP

Пользовательские блоки дополняющие набор стандартных блоков
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Ответить
lfgjikjjyj
Лейтенант
Сообщения: 376
Зарегистрирован: 27 мар 2025, 12:13
Имя: Коля
Поблагодарили: 91 раз

Аппаратный частотомер на 328/168 с использованием его ICP

Сообщение lfgjikjjyj »

для версии 7,5,2

ICP — инпут каптуре пин, ну или что-то типа «фотографии» входного сигнала.
Аппаратно захватывает сигнал за один тик процессора и фиксирует количество тиков до следующего захвата; далее по тикам получаем период за крошечный минимум накладных расходов на измерение.

2026-07-15_235941.png

Частотомер_(Code_-_Professional).ubi
------------------------------------------------------------------------------------------
Частотомер_v1.0_(Code_-_Professional).ubi
-добавил усреднение

------------------------------------------------------------------------------------------
Частотомер_v1.1_(Code_-_Professional).ubi
- заменил усреднение на период времени наполнения

Важно - нано желательно не использовать у них плохие кварцы стоят а вот уно промини там хорошие стоят.


Забирает таймер 1, забирает пин 8.
Так же блокирует прерывание на момент захвата, если что.

— Можно включить подтягивающий резистор, чтобы пин не болтался.
— Можно включить аппаратное шумоподавление.
— Выбрать фронт импульса регистрации замеров.
— Выбрать диапазон частот измерения.
— Выбрать усреднение. 1,0
— Выбрать период опроса. 1,1


Усреднение уменьшает ошибку квантования на один шаг: если поставить 10, то ошибка шага станет 0,1; если для больших частот поставить 10 000, то 0,0001.

Шумоподавление — крошечное, всего 4 тика проца.
Производит 4 выборки сигнала на входе.
Сигнал проходит, только если все 4 выборки одинаковы.
Отфильтровывает короткие помехи (< 250 нс при 16 МГц).
Добавляет задержку 4 такта (250 нс).
Работает на аппаратном уровне, не задействуя ЦПУ.
Но пусть и такое будет.

Захват по переднему фронту.
Захват по заднему фронту.
Для измерения частоты достаточно одного фронта
(переднего или заднего — не важно, результат будет одинаковый).
Но пусть будет.

Выбор предделителя позволяет избежать переполнения счетчика.
Чем меньше предделитель, тем выше точность измерения, то есть нужно начинать всегда с малого выбора.
ПредделительДискретизацияМин. частотаМакс. частота
10.0625 мкс244 Гц~100 кГц
80.5 мкс30.5 Гц~100 кГц
644 мкс3.8 Гц~100 кГц
25616 мкс0.95 Гц~30 кГц
102464 мкс0.24 Гц~7.8 кГц
Те тики, что идут между захватами, как раз и состоят из дискретизации; отсюда и точность.
_______________________________________________________________________________________________________

Можно сказать, у нас есть штатный блок — скоростной счётчик, и он делает то же самое, да ещё два пина на выбор, и таймер свободен.
Только вот название у этого счётчика бутафорское, и делает это он на костылях, и по большей части программно. Кстати, встречаются моменты, где Сергей упорно игнорирует аппаратные возможности, но с усердием эмулирует их через костыли; но на костылях ходить можно, но не побегаешь.
Чтобы померить низкочастотный сигнал, нам нужен получается скоростной счётчик, а чтобы померить высокочастотный сигнал, нужен уже другой подход. И мой блок тоже не мерит высокочастотный сигнал, но он колоссально разгружает код, делая его быстрее и оставляет пины прерывания на другие действия.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось lfgjikjjyj 18 июл 2026, 19:23, всего редактировалось 3 раза.
lfgjikjjyj
Лейтенант
Сообщения: 376
Зарегистрирован: 27 мар 2025, 12:13
Имя: Коля
Поблагодарили: 91 раз

Re: Аппаратный частотомер на 328/168 с использованием его ICP

Сообщение lfgjikjjyj »

Добавил усреднение и заменил «нанки» на другие, с нормальным кварцем, и стало куда лучше.
До этого мерил анализатором 24 МГц, но там очень большой шаг дискретизации — в 42 нс, поэтому, измеряя 10 кГц, он иногда выдавал округление как либо 10000, либо 9996, поэтому входную частоту без замера просто пропишу тут: интереснее уже по факту, что покажет UART.
Если взять две «нанки» с их хреновым микрокварцем, то они выдают:
на 10 кГц при усреднении 1000 разница между максимум и минимум — 0,05 Гц;
на 100 кГц при усреднении 1000 разница между максимум и минимум — 12,46 Гц.

Если взять две «атмеги» с лучшим кварцем, то они покажут:
на 10 кГц при усреднении 1000 разница между максимум и минимум — 0,02 Гц;
на 100 кГц при усреднении 1000 разница между максимум и минимум — 5 Гц.

На 100 кГц при усреднении 10000 разница между максимум и минимум — 1,75 Гц.
Показания там где-то такие:
99999,69;
100000,3;
99999,19;
99999,32;
99999,44;
99999,19;
99998,88;
99999,13;
99999,32;
99999,57;
99999,63;
99998,69;
99998,95;
99999,19;
99999,37;
99998,95;
99999,32.

Чтобы сравнивать точнее, нужен генератор, у которого на выходе округление происходит после запятой, а не в целом числе.
Насколько стабильно выдаёт Arduino, нужен анализатор на 100 МГц.

не профрешение но до 50кгц вполне сносно при нормальнем кварце и стабильно-повторяющемся входном сигнале
lfgjikjjyj
Лейтенант
Сообщения: 376
Зарегистрирован: 27 мар 2025, 12:13
Имя: Коля
Поблагодарили: 91 раз

Re: Аппаратный частотомер на 328/168 с использованием его ICP

Сообщение lfgjikjjyj »

В 1.0: если выставить для высокой частоты усреднение, а потом перейти на низкую, то время обновления затягивается.
В версии 1.1 теперь усреднение само набирается в зависимотсти от количества опросов и периода времени его
Если время выборки 1000, то параметр количество опросов столько раз выдаст значение за 1 сек.
Здесь главное, чтобы количество тиков измеряемой частоты не превысило 10 000.
К примеру, на входе 100 кГц — это за 1 сек 100к тиков, это уже много.
Ставим параметр количество опросов 10: итого 10 опросов в 1 сек — это 10к тиков.
Можно наоборот: уменьшать время выборки.
Допустим, 100 мс при количестве опросов 1 даст те же самые 10к тиков.

К примеру, попробовал измерить частоту вентилятора. Как оказалось, первый вентилятор трёхпроводный — не выдаёт ничего; второй, оказалось, тоже ничего, а вот остальные три без проблем выдали показания:
74.02
74.02
74.02
74.03
74.06
74.08
74.14
74.10
74.15
74.17
74.31
74.29
74.25
74.11
74.08
74.10
74.19
74.26
74.35
74.26

Которые достаточно после блока умножить на 30 — это будут обороты вентилятора в минуту.
Максиму = 2230,50
Минимум = 2220,60
Среднее = 2224,49

Если вентилятор делает 4 импульса в секунду, то нужно умножать на 15, но обычно большинство вентиляторов делают 2 импульса на оборот, отсюда и умножаем на 30, чтобы перевести в минуты.
Но это расточительный пример использования — важный таймер, но если он всё равно простаивает, то это самый лучший выбор как по точности, так и по нагрузке на код.
Проверил осцылографом всё совпадает.
IMG_20260718_220714.jpg
так же можно подключить и расходомер воды - зная частоту его откалибровать и щитать литры

если сравнивать со штатным блоком на теже получаемые частоты
то на малых частотах тот лучше в плане скорости за единицу секунды даже тот же вентилятор н атом будет менее загружать код
но когда стоит работаь с частотами чуть выше как он начинает загибаться
проблема там прерывание длится раза в два дольше и более того что бы измерить период он делает три прерывания что в сумме его делает в три раза тяжелее спецапаратника
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить

Вернуться в «Триггеры, таймеры, счетчики, детекторы сигнала»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость