Что бы еще такого сделать?... Предлагайте! Обсудим все!!!
Ответить

Re: счётчик импульсов - тахометр

Сб сен 14, 2019 18:54:17

goldenandy, такой циклический таймер я использую один на всё. Его задача измерять все промежутки времени, которые потребуется. А прерывание GPIO все равно общее на порт - там и разбираюсь с пинами по необходимости. Очень короткие импульсы вызвавшие прерывание, но не подтвержденные при чтении из порта в обработчике прерывания игнорируются.
Такой подход позволяет успешно обрабатывать одновременно и целый ряд кнопок, датчиков и даже принимать данные от ИК приемника. Есть проекты, где этот же таймер занимается ещё и ШИМированием, но тогда он должен быть 16- битным.

Re: счётчик импульсов - тахометр

Сб сен 14, 2019 21:46:47

ПростоНуб, Нененене, у восьмой меги нет одного прерывания на порт! Там только Int0 и Int1 :)

А вообще правильно. У каждого свой подход.
Я постарался уйти от длинных обработчиков прерываний, предпочитаю один таймер выделить под sysClock и привязывать процессы не к прерыванию таймера, а к изменению системного счетчика...
И прерывания только выставляют флаги срабатывания, а обработка идет в основном цикле программы.

Re: счётчик импульсов - тахометр

Вс сен 15, 2019 00:03:42

goldenandy, я тоже не использую длинные прерывания. Из прерывания просто помещаю сообщения с временной меткой в кольцевой буфер, а оттуда уже фоновый обработчик эти сообщения разгребает. При наличии временной метки можно уже не беспокоиться о времени обработки конкретного сообщения, пока размера буфера хвататет.
А про восьмую мегу и впрямь забыл. Как то получалось подобные задачи решать на STM8, а там подобных проблем нет. И с делением, кстати, тоже )

Re: счётчик импульсов - тахометр

Пн сен 16, 2019 20:47:56

Сделал со счётчиком, обновление 1 раз в секунду, вроде всё работает. Но хотелось бы чтобы показания не прыгали... Как этого достичь? Может сделать вывод 10 раз в секунду, или выборкой? Подозреваю что оверсемплинг и есть выборка...

Re: счётчик импульсов - тахометр

Пн сен 16, 2019 22:40:55

рокки1945, а чего им прыгать раз в секунду при стабильном входном сигнале?
Хотите чаще - при прямом счете будет еще более грубая шкала. 2 раза в секунду мерять - шаг будет 120 оборотов....
Можно взять массив, допустим в 4 элемента, писать ежесекундные показания в массив по кругу, выводить на экранчик сумму всех элементов массива, деленную на 4.
тогда у вас в каждый момент времени будет среднее от последних четырех показаний. Но при изменениях оборотов будет запаздывание отображения до 4х секунд.

Хотите более точное отображение и чаще чем раз в секунду - меряйте период импульсов...

Re: счётчик импульсов - тахометр

Вт сен 17, 2019 00:43:44

рокки1945 писал(а):Но хотелось бы чтобы показания не прыгали... Как этого достичь?

Выше писал как...
roman.com писал(а):полученные данные пропускаем через фильтр - гистерезис (что бы показания на индикаторе не "прыгали")

рокки1945 писал(а):Может сделать вывод 10 раз в секунду, или выборкой?

Будет в 10 раз быстрей прыгать))
goldenandy писал(а):Можно взять массив, допустим в 4 элемента, писать ежесекундные показания в массив по кругу, выводить на экранчик сумму всех элементов массива, деленную на 4.

Будет в 4 раза медленней прыгать))
goldenandy писал(а):а чего им прыгать раз в секунду при стабильном входном сигнале?

А потому что входной сигнал аналоговый, а выходной цифровой)) Как вы это делаете, c помощью таймера или АЦП, это не имеет значение. Смысл один - Вы переводите аналоговые величины в дискретные. Любой аналоговый сигнал содержит шумы. А ещё есть такое понятие - Шум квантования - https://ru.wikipedia.org/wiki/Шум_квантования

Единственный способ чтоб не "прыгало" это фильтр - гистерезис. Принцип предельно прост. Вводится (программно) "зона не чувствительности" к малым изменениям сигнала.

Допустим двигатель 120 оборотов. Индикатор показывает 120 оборотов.
-При изменении на +/- 1 оборот индикатор продолжает показывать 120 оборотов.
-При изменении на +/- 2 оборота индикатор показывает 118 или 122 оборотов соответственно.

По сути обычный Три́ггер Шми́тта, только программный, где +/- 1 оборот - это гистерезис Три́ггера Шми́тта.

Только так вы избавитесь от "прыганья" последних разрядов индикатора.

Да, это вносит погрешность +/- 1 оборот, но тут выбирайте сами, что вам важней: точность или чтоб не "прыгало" ))

Re: счётчик импульсов - тахометр

Вт сен 17, 2019 07:33:58

сделал просто - счётчик T1 настроен по спадающему фронту, этот же вывод подтянут к плюсу питания.
1 раз в секунду считываю регистр TCNT1 и скидываю по UART-у..
Проверил сначала генератором с осциллографа (встроенный 1 кГц меандр) потом сделал еще одну атмегу с шимом в 62 герца и ВСЁ нормально.....
только в первом случае счётчик выдаёт 1004 а во втором 63....
Погрешность не пропадает и с фильтром, подсчёт ровно по переполнению таймера ............
Вопрос у меня один как это всё выводить на семисегментники (динамическая индикация - ? tm1637 - ?) частота обновления тоже 1 раз в секунду?

Re: счётчик импульсов - тахометр

Вт сен 17, 2019 09:34:36

roman.com, А потому что входной сигнал аналоговый, а выходной цифровой/
Не подменяйте понятия. Входной сигнал цифровой, в идеале - меандр. Но с неизвестной длительностью.
А при примененном ТС алгоритме показания не могут прыгать на +/-1 единицу.
Еще раз вчитайтесь - меряем секунду, умножаем на 60 - получаем обороты в минуту.
Показания прыгают сразу на 60 единиц. Ибо всегда кратны 60.
И никаким гистерезисом это не вылечится, ибо будет конская погрешность. Скользящий фильтр, теоретически, эти прыжки может попытаться усреднить. Но ценой запаздывания показаний.
Оптимально, с моей точки зрения, мерять период сигнала, а потом уже этот период как то усреднять на средних и высоких оборотах, что бы показания не менялись чаще пары раз в секунду....

Re: счётчик импульсов - тахометр

Вт сен 17, 2019 09:57:46

а измерить период, можно таймером захвата?

Re: счётчик импульсов - тахометр

Вт сен 17, 2019 10:23:50

я сглаживаю более частым замером - для твоего случая я бы делал замера 4 в секунду, результаты в кольцевой буфер длинной 8 элементов... и 4 раза в секунду суммировал бы все элементы массива и делил на 2 для получения Гц. (*30 для имп/мин) (устаканивание 2 с, обноление показаний 4 Гц), потом можно и другие фильтры применить, типа гистерезиса...
можно мзмерять и наоборот - засекать время между импульсами, для этого какраз и пригодится вход захвата... данный метод имеет максимальную точность при низких оборотах, а с ростом оборотов точность падает, првышают её в этом случае, или пропуская импульсы (если в регистре захввта мало - ждём следующий импульс и инкрементируем счетчик пропущенных импульсов) или повышая скорость счёта таймера...
Чтобы получить результат в Гц или об/мин нужно разделить частоту счёта таймера на величину регистра захвата...

Re: счётчик импульсов - тахометр

Вт сен 17, 2019 10:30:29

Ivanoff-iv, тогда уж лучше медианный фильтр применять, но результат округлять до требуемой точности. Тогда колебания значений в пределах погрешности влиять на отображаемый результат не будут, а резкая смена оборотов приведет к резкой, а не плавной (как при усреднении) смене показаний

Re: счётчик импульсов - тахометр

Вт сен 17, 2019 10:38:56

рокки1945, да.
Я там даже какие то расчеты под данный метод делал - см. на 1 странице - https://radiokot.ru/forum/viewtopic.php ... 4#p3698984

Добавлено after 31 second:
чисто подсчет, без всяких фильтраций.

Re: счётчик импульсов - тахометр

Вт сен 17, 2019 13:04:30

goldenandy писал(а):Не подменяйте понятия. Входной сигнал цифровой, в идеале - меандр. Но с неизвестной длительностью.
А при примененном ТС алгоритме показания не могут прыгать на +/-1 единицу.

на +/-1 единицу - это просто пример, поясняющий принцип работа фильтр - гистерезиса. В реальной жизни всё иначе.

Я не подменяю понятия. Любой сигнал имеет шум. Идеальных сигналов в природе не существует))
Например синусоида:
1.jpg
(36.64 KiB) Скачиваний: 75

Меандр так же имеет шум:
2.jpg
(101.91 KiB) Скачиваний: 99

Вы измеряете длительность импульсов (или скважность, или период... не важно). Таймер 16 разрядный ? (65536 разрядов).
А теперь измерьте длительность импульсов, с учётом фазового шума меандра.
Какая у вас будет погрешность измерения ? 1, 2, 3 разряда ? ))
3.jpg
(47.94 KiB) Скачиваний: 81

Я уже молчу, что кроме фазового шума меандра есть ещё кратковременная стабильность кварцевого генератора МК.))
И т.д. и т.п.
Поэтому, после измерения длительности импульсов, сначала пропускаем полученные данные через фильтр - гистерезис (убираем шум), а потом уже делайте с этими данными что хотите... Умножайте, делите, записывайте в массив... ищите среднее... делайте скользящее окно... и т.д.
Ivanoff-iv писал(а):я сглаживаю более частым замером - для твоего случая я бы делал замера 4 в секунду, результаты в кольцевой буфер длинной 8 элементов... и 4 раза в секунду суммировал бы все элементы массива и делил на 2 для получения Гц. (*30 для имп/мин) (устаканивание 2 с, обноление показаний 4 Гц), потом можно и другие фильтры применить, типа гистерезиса...

Гистерезис лучше применять на начальном уровне обработки сигнала. "потом" гистерезис не поможет)) Будет только хуже.

А я просто увеличиваю частоту опроса датчика Холла в два раза (до 16 кГц). Затем пропускаю через фильтр - гистерезис, чтобы убрать неопределённость, т.к. у меня таймер не привязан к сигналу датчика и соответственно возникает биение. При этом точность измерения такая же, как при частоте опроса 8 кГц, и при этом показания не прыгают.))
При этом фазовый шум меня не интересует)) Какой там шум у импульсов или какая там крутизна фронтов... мне без разницы. Т.к. я измеряю количество импульсов в единицу времени (например каждые 1 с), а не длительность импульсов по таймеру.
а измерить период, можно таймером захвата?

Можно. Но показания будут нелинейные. Об это уже сказал Ivanoff-iv.
Можно конечно составить таблицу пересчётов... но нафиг надо)) Ерунда получится...

Re: счётчик импульсов - тахометр

Вт сен 17, 2019 22:30:04

roman.com писал(а):
а измерить период, можно таймером захвата?


Можно. Но показания будут нелинейные.

правильно, обратная зависимость. Превращается в обороты делением константы на период. Я об этом писал.

По фильтрации. Опять вы предлагаете опрос входа с высокой частотой. Зачем, если речь идет об совершенно конкретном методе измерения с использованием захвата таймера.

На выходе будет получаться длительность периода в тиках таймера.
вот ее можно усреднять или как то фильтровать. Но так, что б с водой и ребенка не выплеснуть.

С другой стороны, в зависимости от оборотов можно усреднять разное число отсчетов - вот и фильтрация. А на малых - ну тут увы. при одном импульсе от таходатчика раз в 2 секунды (30 об/мин) еще и фильтровать это - какие тогда запаздывания показаний будут?

Добавлено after 1 minute 53 seconds:
Вобщем, если будут вопросы по существу - буду что то писать. А от полемики устал, сорри.

Re: счётчик импульсов - тахометр

Пт сен 20, 2019 07:23:52

Уважаемый goldenandy, - сделал простенькую схему -
1. На плате мега8, кварц-8 мгц, вход счётчика T1 - без фильтра, для защиты стабилитрон 5.1 В и последовательно резистор 100 Ом (взял из книжки 1000 и 1 схема для микроконтроллера), семисегментник 4-х разрядный - без транзисторов только ограничительные 4 резистора на управляющие (думаю что этого достаточно). Питание через кренку AMS1117 - 5.0. 2 электролита. Полигоном залил всю плату и к земле.
2. Программу сделал как Вы в первом посте предложили - настройка T1 как счётчик по ниспадающему фронту, таймер 2-ой настроен как счётчик 31250 при обнулении флаг = 1,
в основном цикле показания T1 умножаю на 60 и вывожу на семисегментник (частота обновления 1 раз в секунду).
Потестил - проблем не выявленно.....

Re: счётчик импульсов - тахометр

Пт сен 20, 2019 18:17:10

рокки1945, Я рад за вас, сэр!
Ответить