FreqMeasure + FreqCount != два частотомера
- Войдите на сайт для отправки комментариев
Вс, 12/02/2017 - 13:14
Требуется два частотомера на одном МК.
Один канал до 1кГц, вторй до 50кГц. Частота измерения 100 м.сек.
Поотдельности обе библы прекрасно работают, но стоит добавить даже отдельно FreqMeasure.begin(); как COUNT сразу начинает выдавать пургу, в виде:
При этом что ему не подавай, все одно...
Как их пожинить?
#include <FreqCount.h> // PIN_5 для NANO и UNO #include <FreqMeasure.h> // PIN_8 double sum=0; int count_a=0; void setup() { Serial.begin(57600); FreqCount.begin(1000); //COUNT = мил.сек измерительного интервала } void loop() { // Для COUNT, более 1 кГц. = B if (FreqCount.available()) { //Возвращает True когда новый замер готов, запоминается одно значение, должно быть считано до получения следующено unsigned long count = FreqCount.read(); //Считывание значения. Serial.print("B = "); Serial.println(count); } }
Криво вставилось...
FreqMeasure.begin(); добавляется между 9-10 строками.
при этом сериал монитор выдает:
B = 9219
B = 9214
B = 4294910978
B = 9214
B = 9215
B = 9216
B = 9219
B = 9213
B = 9218
B = 4294910975
B = 9216
B = 9215
B = 9219
B = 9214
B = 9215
Kavalsky, одновременно они работать ни при каких условиях не могут. Можно попробовать по очереди. Инициализируйте и завершайте функции перед запуском другой функции. FreqMeasure.begin() ...опрос.... FreqMeasure.end() ; FreqCount.begin() ...опрос.... FreqCount.end()
dimax, спасибо, посоветуйте каким образов в Он-лайн можно мониторить одновременно два канала ?
Куда копать?
Kavalsky, я же вам предыдущем посте рассказал как нужно делать.
Kavalsky, я же вам предыдущем посте рассказал как нужно делать.
Проблема с этими библиотеками. Нужно снимать сигнал с двух каналов, хотя бы раз в 1/10 сек= 10Гц.
Канал второй от 0 до 1кГц и первый от 300 до 2кГц.
1. FreqCount - первый
Чтобы получать результаты с частостой 10Гц необходимо задать FreqCount.begin(100);
В таком случае из поданный 1234 Гц мы получим ответ 123. Нужно домножить на 10, но тогда вносим погрешность.... Но самое печальное дальше.
2. FreqMeasure - второй
У него есть коэффициент кол-ва суммирования результатов (К) и вычесления среднего. Но при этом, если мерить до 50гц, и К=2, то замер происходит с частотой примерно 5Гц, если увеличить К, то там 1Гц и менее... т.е. неподходит.
Если подавать с генератора TTL 1кГц при К=2 получаем разброс на верхах 1000-1020. Отлично.
Но если тот же сигнал принимать с Генерирующей Ардуины, разброс получается 1200-1500 !!!
Если же мы установим К=20, то все отлично! 1000-1020.
Как я писал выше, повышать К нельзя, потому как на низах замер будет очень медленно проводится.
Решение 1.
Я ввел переменный К, поделил на три диапазона (<100<350<) и ввел каждому свой К.
В целом стало отлично, НО , на переходе между 99 и 101 получается адовый разброс в 75-125
При изменении К более чем 2-3 единици начинается такой разброс.
Решение 2 - не провереное
Фильтр поставить? Но не уверен и не очень понимаю какой..
Нужен совет или идея ... Заранее благодарен!
2. FreqMeasure
Для сравнения, при К = 3
на контакттах подключения к Считывающей Ардуине Осцлограф показывает 77-78 Гц
Ардуина 92-108 Гц
Тоже самое при К=15
Ардуина 82-83 = это удобоваримо, но это 3 измерения в секунду а не 10, а будет ниже частота, вообще хлам....
При низких частотах нужно не считать периоды за фиксированный интервал времени, а измерять длительность одного периода.
При низких частотах нужно не считать периоды за фиксированный интервал времени, а измерять длительность одного периода.
Это да, через детектор нуля для синуса, для меандра всё проще
Сигнал - Меандр.
частота плавает от 30 до 1000 Гц
Или 1кГц это тоже низкая?
Ткните в ветку или поисковый запрос. Я не очень в теме "детектора нуля"
Сигнал - Меандр.
частота плавает от 30 до 1000 Гц
Или 1кГц это тоже низкая?
Ткните в ветку или поисковый запрос. Я не очень в теме "детектора нуля"
Если меандр, то детектор нуля Вам не нужен.
А вот низкая или высокая... это зависит от того, что Вы можете точнее измерить:
- количество импульсов измеряемой частоты за фиксированный (не безобразно большой) интервал времени,
- количество импульсов (высокой) измерительной частоты, укладывающихся в один период измеряемой.
В принципе, можно измерить и точнее:
- сколько импульсов высокой частоты укладывается в некоторое количество периодов измеряемой частоты так, чтобы это измерение происходило за разумное время. Так при наличии точного кварца, скажем, на 16 МГц, можно получить за 0.1с 6 достоверных знаков.
- сколько импульсов высокой частоты укладывается в некоторое количество периодов измеряемой частоты так, чтобы это измерение происходило за разумное время. Так при наличии точного кварца, скажем, на 16 МГц, можно получить за 0.1с 6 достоверных знаков.
Ок, спасибо, беру! именно 0.1 сек. и нужно.
Как оформить, через micros и HIGH\LOW ?
Или есть более эргономичный способ?
Вас только что пнули теорией... Слышал что типа на голой Меге это кому-то удавалось... типа на АСМе... но реализаций этого никто так и не видел...
Ребята, а чтож все замерли, все в лицах участвовали в ветке :)
http://arduino.ru/forum/programmirovanie/prostoi-chastotomer
Еще нашел вот такуую библу http://playground.arduino.cc/Main/PinChangeInt
Если скрестить ее с TimerOne то должно что-то получится.
Kavalsky, вы ставите себе задачу не "по-плечам". И помощи вряд ли дождётесь, т.к. по-уму тут не нужно никакие библиотеки скрещивать, а нужно взять и написать весь алгоритм двух счётчиков с ноля, только так можно учесть все нюансы и получить желаемое.
Все, отбой, заработало.
Прерывания наше все.
запишусь на уведомления, надо собрать
запишусь на уведомления, надо собрать
Прошел всего год и месяц))))
новую тему подымать бессмысленно, все умники дадут мне сслки и в том числе на эту с примечанием, эта тема решена, ищи в истории. я просто сегодня на эту ветку зашел и решил повторить. и повторюсь, что я написал это сообщение и здесь и на форуме про пожелания на счет улучшения форума, что бы не потерять эту тему завтра, тк сегодня дел много и не займусь этим частометром сегодня, а завтра искать это лишняя потеря времени
Добрый день! Может кто подскажет как удобнее поправить билиотеку FreqCount под себя.
Задача такая что есть разные сигналы от 1 кГц до 100кГц меандр. И мне нужно в некоторы случаях фиксировать когда 2 контакта с разными сигналами соприкоснулись, например 78кГц и 10кГц. библиотека их отлично резала и выдавала в этом случае 48кГц(что-то около этого, точно не помню). Мне по сути не обязательно знать какие частоты есть и тд. мне надо знать что видит кабель"1" или "1+2" или "2".
Может есть какие идеи?
Gino, возможно будут идеи если приведёте фактическую осцилограмму смешанных сигналов. Т.е. именно в том месте, в котором планируется подключение. Ибо соединение двух импульсных сигналов без специального сумматора - это короткое замыкание, и что у вас будет в реальной цепи совершенно неведомо.