Частотомер на Arduino UNO и LCD KeyPad Shield
- Войдите на сайт для отправки комментариев
Братцы! Только не бейте по голове за дилетантский вопрос или если подобная тема уже тут обсуждалась - я честно искал по форуму и ничего похожего не нашел.
А суть вопроса вот в чем: начал я делать частотомер на базе Arduino Uno с воткнутым в него LCD KeyPad Shield . Удобная штука этот шилд - кнопки можно использовать для выбора режимов измерений, двухстрочный дисплей - для вывода результатов и разной вспомогательной информации. Для измерения частоты нашел библиотеки FreqMeasure и FreqCount. Первая из них предназначена для измерения частот до 1 кГц, вторая - выше 1 кГц. Попробовал - работают хорошо.
Но как только стал собирать все это хозяйство вместе, столкнулся со следующей проблемой. Библиотеки эти предполагают, что измеряемая частота подается на pin 5 (для FreqCount) и pin 8 (для FreqMeasure), причем, похоже, что изменить их на другие в исходных текстах этих библиотек невозможно, поскольку они связаны с конкретными входами таймеров Arduino. С другой стороны, LCD KeyPad Shield использует пины с 4-го по 9-й из коих 8 и 9 для управляющих сигналов и 4-7 для передачи данных. Т.е. входы 5 и 8, которые мне нужны для подачи измеряемых сигналов, заняты дисплейным модулем. Что в таком случае делают опытные товарищи?
Заранее благодарен всем, кто сможет что-нибудь посоветовать.
Doctor, освобождать пины, как ещё. Я б наверное выпаял дисплей, подключил его к плате через этот модуль, и получил i2c дисплей.
для этих библиотек лучше использовать именно их пины. они завязаны на аппаратные особенности работы внутренних таймеров , делителей, прерываний на них.
лучше выпаять пины с кейпад шилда и перекинуть их другие.
Зачем много кнопок? и вообще подумайте так ли без них не обойтись для частотомера?
я делал частотомер на arduino pro mini и lcd1602 , перерыл инет в поиске готовых проектов, перепробовал многие, потратил пару деньков, (очень плохо и коряво работали) , остановился именно на FreqCount.h FreqMeasure.h . Вместо кнопок и меню , просто сделал джампер .
FreqCount vs FreqMeasure :
FreqCount: best for 1 kHz to 8 MHz (up to 65 MHz with Teensy 3.0 & 3.1)
FreqMeasure: best for 0.1 Hz to 1 kHz
Сам скетч:
Для защиты по входу и питанию налепил стабилитронов . Резисторы: перед входом 100 ом, для контрастности дисплея с VSS (gnd) на V0 2,2-2,7ком , на RW перемычка
Спасибо братцы dimax и slider! Оба ответа полезные, но достаточно очевидные. Я, честно говоря, ожидал какой-нибудь хитрости, которая позволила бы не сильно курочить имеющуюся аппаратную часть т.е. продолжать использовать LCD KeyPad Shield без выпаивания дисплея и выкусывания ножек. Нельзя ли, например, просто разделить процессы измерения частоты и индикации результатов во времени следующим образом:
Поставить на вход какой-нибудь ключ, разрешающий подачу входных измеряемых сигналов на пины 5 и 8.
1. Снять сигнал Enable с дисплейного модуля (pin 9), чтобы он перестал чувствовать, что у него на всех других входах делается.
2. Открыть входной ключ, подав тем самым измеряемый сигнал на пины 5 и 8.
3. Выполнить цикл измерения частоты методами FreqCount или FreqMeasure (в зависимости от измеряемой частоты выбрав тот или другой метод) и запомнить результат.
4. Запереть входной ключ, сняв тем самым измеряемый сигнал с пинов 5 и 8.
5. Разрешить работу дисплея и вывести на него результат измерений.
Повторить все вышеуказанное в цикле.
Таким образом, во время измерения частоты пины 5 и 8 будут использоваться для подачи измеряемого сигнала, а во время передачи данных на дисплейный модуль - для обмена данными с дисплеем. Так можно?
для этих библиотек лучше использовать именно их пины. они завязаны на аппаратные особенности работы внутренних таймеров , делителей, прерываний на них.
По-моему вы ошибаетесь, никакой завязки там нет, библе совершенно безразлично с какими пинами работать, я включал всегда как мне удобно было, -никаких проблем. Можно на аналоговые повесить, -все в одном ряду. LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);
для этих библиотек лучше использовать именно их пины. они завязаны на аппаратные особенности работы внутренних таймеров , делителей, прерываний на них.
По-моему вы ошибаетесь, никакой завязки там нет, библе совершенно безразлично с какими пинами работать, я включал всегда как мне удобно было, -никаких проблем. Можно на аналоговые повесить, -все в одном ряду. LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);
Нет, slider прав - в библиотеках FreqCount и FreqMeasure все завязано на таймер и прерывания. У Arduino UNO два восьмиразрядных таймера и один 16-ти разрядный, именно он и используется, а этот таймер и входы прерываний сидят на конкретных пинах поэтому изменить их невозможно.
Вот с дисплейным модулем дело полегче, там действительно можно разные пины использовать и при инициализации дисплея указать в программе, на каких выходах он сидит. Но их мне менять не хочется уже по конструктивным соображениям - этот дисплейный шилд так хорошо втыкается в Ардуинку, что пилить контакты и вешать на них какие-то перемычки мне бы не хотелось, особенно, если без этого можно как-то обойтись, немного усложнив программную часть. Вот я и думаю, как бы мне на елку залезть и не ободрать ничего...
Doctor, я думал, что он про LCD пишет. Только сейчас дошло, что он имел ввиду библы частотомеров. Это да, там очень сильная привязка, я сам писал скетчи частотомеров и генераторов, без библиотек, так что с аппаратно-программной частью знаком не по наслышке :)
По поводу разделить задачи -да, в теории можно. Но, скорее всего придёться отказаться от всех библиотек и переписать всё с ноля :))
Doctor, сделал скетч частотомера с расшарингом 5-го пина на двоих с LCD. Оказалось, что он почти всё время сидит в Z-состоянии, и только в момент вывода на дисплей там пролетает пачка импульсов длиной 3ms. В идеале этот пин нужно коммутировать, что -б совсем избегать той ситуации, когда и входной сигнал идёт на пин, и МК переключил пин в OUTPUT Но я просто подрубил входящий сигнал через килоомный резистор. И о чудо, всё работает. И на LCD никаких глюков, и частота измеряется. С этим скетчем рабочий диапазон измерения примерно 1Гц..3МГц
dimax
Потрясающе! Вот это ровно то, о чем я и мечтал! И пилить ничего не надо, и конфликт пинов разрешен. Спасибо, dimax!
Идею уловил, теперь буду ее развивать. Килоомный резистор для первого эксперимента хорошо, конечно, но в окончательном варианте, мне кажется, лучше что-то более надежное. Я на входе все равно собираюсь какой-то компаратор поставить чтобы слабые входные сигналы усиливать и формировать, соответственно, если у этого компаратора будет вывод, переводящий его в третье состояние, то его можно использовать для управления подачей измеряемой частоты на входы Ардуино.
dimax спасибо Вам за ваш труд.
Doctor, сделал скетч частотомера с расшарингом 5-го пина на двоих с LCD. Оказалось, что он почти всё время сидит в Z-состоянии, и только в момент вывода на дисплей там пролетает пачка импульсов длиной 3ms. В идеале этот пин нужно коммутировать, что -б совсем избегать той ситуации, когда и входной сигнал идёт на пин, и МК переключил пин в OUTPUT Но я просто подрубил входящий сигнал через килоомный резистор. И о чудо, всё работает. И на LCD никаких глюков, и частота измеряется. С этим скетчем рабочий диапазон измерения примерно 1Гц..3МГц
Это просто шедевр) Я сейчас как раз собираю "Шмеля"-радиомикрофончик маленький.(http://vrtp.ru/index.php?act=categories&CODE=article&article=1892)
А частометра, к сожалению, нет, но ардуино как всегда под рукой. Можно ли ваш скетч переделать под ардуино уно, и если можно, то как?
А как этот частотомер можно применить к "Шмелю"?
Он нужен для настройки радиосигнала, испускаемого от антенны
У Вас есть уверенность, что частотомер на ардуине измерит несущюю частоту "Шмеля"?
Почти никакой. Но я лучше попробую, чем упущу возможность
Похвально.
Здравствуйте, подскажите по подключению этого частотомера, подключаю тахогенератор для измерения частоты один выход на вход, второй на Gnd, не работает. Когда подключаю один на вход, второй на заземление тогда работает, почему так?
AndryGladky, что у вас подразумевается под "заземлением", и почему это не тоже самое, что "Gnd" -нам не известно.
Напишите, пожалуйста, что к чему подключать. Какие выводы LCD к каким входам ардуинки, что "висит в воздухе" и используется для определения частоты.
Напишите, пожалуйста, что к чему подключать. Какие выводы LCD к каким входам ардуинки, что "висит в воздухе" и используется для определения частоты.
AUno, успокойтесь уже, этот частотометр до 3МГц, вы не измерете частоту своего радиомикрофона. Даже если бы он был до 200МГц, вы бы всё равно не измерили -потому что нельзя просто так подключить М.К. к антенне передатчика без согласования и усиления.
Я взял тахогенератор для измерения скорости ветра, это двигатель переменного тока. Когда один вывод его подключаю к pin 8, а второй к gnd, то показывает нули. Когда беру один вывод подключаю к pin 8, а второй к металлическому столу который подключен к контуру заземления, то он нормально работает, измеряет частоту. LCD подключен проводами на макетной плате к 12, 11, 6, 4, 3, 2 пины.
AndryGladky, тахогенератор подключается к М.К. только через специальную схему согласования.
А какую?
Я снимал с него сигнал осцилографом, там обычная синусоида, только надо ставить делитель так как при высоких оборотах он дает до 40 вольт.
AndryGladky, что бы подключить источник переменного тока к МК для измерения частоты нужно - (1) исходный сигнал выпрямить или срезать отрицательную часть синуса. (2) Ограничить макс. напряжение.(3) компаратором или триггером Шмитта сделать меандр. После всех этих преобразований можно подать на вход М.К.
А не можете показать где взять схему. Выпрямить обычный диодный мост, ограничить напряжение резисторный делитель, либо стабилитрон, я так думаю, а что лучше тригер на тм2 или что то другое? И тогда просто считать импульсы или все таки мерять частоту? А что тогда этот частотомер измеряет только частоту прямоугольных импульсов?
Возможно уже не актуально, и без LCD дисплея (немного не по теме), но все же... за основу взял скетч из поста №2, добавил в него кнопку для переключения режимов измерений.
подскажите пожалуйста,как измерить частоту в сети 220в?как правильно развязаться с высоковольтной частью?
AndryGladky, что бы подключить источник переменного тока к МК для измерения частоты нужно - (1) исходный сигнал выпрямить или срезать отрицательную часть синуса. (2) Ограничить макс. напряжение.(3) компаратором или триггером Шмитта сделать меандр. После всех этих преобразований можно подать на вход М.К.
можно подробнее как срезать отрицательную часть синуса?
AndryGladky, что бы подключить источник переменного тока к МК для измерения частоты нужно - (1) исходный сигнал выпрямить или срезать отрицательную часть синуса. (2) Ограничить макс. напряжение.(3) компаратором или триггером Шмитта сделать меандр. После всех этих преобразований можно подать на вход М.К.
можно подробнее как срезать отрицательную часть синуса?
Я бы еще вдобавок к вышеописанному использовал какую-нибудь оптопару чтобы получить гальваническую развязку между сетью и общим проводом частотомера. Иначе частотомер этот может очень больно кусаться. :)
чтобы правильно развязаться от сети 220в неоходимо поставить разделительный трансформатор, или использовать оптрон (опто-транзистор), предварительно снизив входящие на них напряжение если на трансформатор то это позволит уменьшить его габариты, а оптрон можно и поискать на подходящее напряжение(220 на входе хотя не факт), чтобы срезать отрицательную часть синуса в цепь необходимо установить 1 выпрямительный диод, подключив диод в одну сторону получишь сигнал - , подключив диод в обратную сторону получишь +, если будешь использовать транс то диод надо установить после него, если оптрон то до оптрона, также на выходе с диода (вариант с трансом, если оптрон то срразу за оптроном) надо установить триггер шмитта, для получения частотного сигнала на входе мк
спасибо,начинаю уже понимать что и как....вариант с трансом не хотелось бы:габаритно и не дешево....я раньше думал что оптрон и так сам будет срезать синус,ведь внутри там грубо-говоря светодиод,который будет гореть только при напряжении в одном направлении,ну вы поняли) я подключал оптрон и ардуина мне давала показания,но чушь плавающую,я не знал куда копать и вот только сейчас у вас нашел про компаратор или шмидта после оптрона...
схемку бы как компаратор подключить в данном случае=)а то шмидта только сборки есть на 4 штуки в одном корпусе,габаритно и расточительно....
правда в наше время использовать разделительный трансформатор для таких целей уже не целесообразно, проще взять оптрон, а перед ним поставить резистор для понижения входящего напряжения (если это необходимо), и выпрямительный диод чтобы срезать одну из частей синусы
pastry777 не подскажешь модельку Шмитта, которае есть у тебя, а то знаю только про 74HC14 но ее в городе не нашол, да и что то подобное не попадается а заказывать онлайн от 150/200р за шт жаба душит
да,у меня именно 74НС14....спутал,там 6 каналов...так давно их не касался,что уже и забыл....я из Украины,покупал еще давно,сейчас специально цены посмотрел,продается в переводе рублей 15 за штуку...то сайт у вас дорогой какой-то видимо,поищите еще...
да,у меня именно 74НС14....спутал,там 6 каналов...так давно их не касался,что уже и забыл....я из Украины,покупал еще давно,сейчас специально цены посмотрел,продается в переводе рублей 15 за штуку...то сайт у вас дорогой какой-то видимо,поищите еще...
дело в том где можно по штучно взять - 150р и далее цены, где по 15\20р то там либо за доставку 300 \ 500 р отвали либо товару у них на 1.5к набирать, а из-за 1 микросхемки на..... надо
Есть оптопары со встроенным триггером Шмитта, вот такие, например, H11L1M, H11L2M, H11L3M или SFH6720T и масса аналогичных. Можно из китайщины достаточно дешево выписать, вот тут за 88 рублей 10 штук предлагают, только посылки из Китая не очень быстро доходят, иногда больше месяца ждать приходится.
pastry777, всё зависит от того, что вы хотите получить. В принципе уже после оптрона будет почти квадратный сигнал. Дальнейшая обработка целесообразна если нужно высокое качество.
я вот так вот и подключал,как у вас на схеме,но получал не то что нужно,а именно:частота вообще не соответствовала реальной,плавала....
чтобы стало ясно,это компрессор в тепловом насосе,у него есть своя автоматика с преобразователем частоты,я ставил удаленный мониторинг температур для статистики и диагностики и вот хотел измерять когда на какой частоте компрессор работает...времени было не много,на тот момент попробовал,не получилось и этот вопрос пока отпал...пришло время опять вспомнить и возможно разобраться...на тот момент я сошелся на том,что не ясно какой там формы и чИстоты дает тот преобразователь напряжение на компрессор и то что я видел на дисплее его родного контроллера это одно,а ардуина чувствовала и фиксировала/показывала всю грязь...как-то так пока что...
Есть оптопары со встроенным триггером Шмитта, вот такие, например, H11L1M, H11L2M, H11L3M или SFH6720T и масса аналогичных. Можно из китайщины достаточно дешево выписать, вот тут за 88 рублей 10 штук предлагают, только посылки из Китая не очень быстро доходят, иногда больше месяца ждать приходится.
Спасибо!заказал 1 лот этих оптопар,так,впрок,на будущее,даже если сейчас не пригодятся)
еще самое интеерсное,я не могу понять как вы нашли этот лот,я на али в поиске ввел H11L1M,выбрал сортировку по цене и там ну вообще нет этого лота по вашей сссылке,самое дешевое это порядка в два раза дороже от вашей ссылки))видимо я не умею пользоваться поиском....
Я новичок в програмировании на ардуино и у меня возникла проблема в измерении быстрых процессов. Например когда я пытаюсь считать данные с акселирометра ADXL335 ардуино не поспевает чертить данные на экран в ввиде кривой линии. Хотелось бы увеличить частоту до 1Кгц. Если кто знает как это сделать помогите пожалуйста
Частоту чего до 1 кГц?
На всякийц случай: максимальная частота, с которой можно снимать показания с прибора, написана у него в дэйташите. Сравните ее со своим килогерцем. Если ниже - то никак. Только использовать другой более быстродействующий прибор.
Если же Вы хотите рисовать на экране 1000 fps, то об Ардуине сразу забудьте.
Если стоит задача нарисовать наэкране кривую, снятую с прибора с частотой 1000 отсчета в секунду и прибор это позволяет, то сначала нужно считать всю серию измерений в массив и только после окончания измерения рисовать кривую на экране.
1
Doctor, сделал скетч частотомера с расшарингом 5-го пина на двоих с LCD. Оказалось, что он почти всё время сидит в Z-состоянии, и только в момент вывода на дисплей там пролетает пачка импульсов длиной 3ms. В идеале этот пин нужно коммутировать, что -б совсем избегать той ситуации, когда и входной сигнал идёт на пин, и МК переключил пин в OUTPUT Но я просто подрубил входящий сигнал через килоомный резистор. И о чудо, всё работает. И на LCD никаких глюков, и частота измеряется. С этим скетчем рабочий диапазон измерения примерно 1Гц..3МГц
vasus, очевидно, разница в ошибке округления.
В первом случае измеряется количество импульсов за секунду. Погрешность - порядка длительности импульса,т.е. тем больше, чем ниже частота.
Во втором случае погрешность пропорциональна отношению 1 такта опорной частоты к полупериоду измеряемой, т.е. тем больше, чем выше частота.
И, кроме того, во втором случае измеряются и складываются длительности двух полупериодов, НО! эти полупериоды берутся от двух разных периодов, т.е. при нестабильной форме сигнала частотомер бьудет показывать что угодно, но только не частоту.
andriano, Спасибо, я и не сообразил что полупериоды беруться с разных периодов. Тогда конечно это для более менее равномерного вращения. хотя , если необходимо замерить частоту вращения вала зубчатым колесом, то, думаю, будет достаточно. но может возникнуть следующая проблема, если сигнал от индуктивного датчика будет "оквадрачиваться" (например триггером-Шмидта) то, при налинии не постоянного зазора между зубьями и датчиком, будет меняться амплитуда сигнала на протяжении одного оборота и , следовательно , будет непостоянной ширина "оквадраченного" импульса. И тогда будет белиберда... Вопрос по первому случаю, если увеличить время замера кол-ва импульсов, точность на низких частотах возрастёт?
Вопрос по первому случаю, если увеличить время замера кол-ва импульсов, точность на низких частотах возрастёт?
Естественно, возрастет. Но... чтобы полусить две цифры после запятой, придется увеличить время измерения до 100 секунд.
Мне кажется, правильный частотомер должен измерять обоими способами и, в зависимости от результата выбирать, что показывать.
В первом случае измеряется количество импульсов за секунду. Погрешность - порядка длительности импульса,т.е. тем больше, чем ниже частота.
Во втором случае погрешность пропорциональна отношению 1 такта опорной частоты к полупериоду измеряемой, т.е. тем больше, чем выше частота.
В третьем случае измеряется количество тактовых и полных периодов входной за секунду. Погрешность - порядка длительности импульса тактовой, т.е. определяется частотой тактовой и не зависит от входной частоты.
Здравствуйте. Дабы не поднимать новых тем спрошу здесь.
Собрал емкостной датчик влажности. Для измерения частоты генератора воспользовался кодом dimax. Все прекрасно и стабильно считывается.
Теперь у меня огромная проблема: у меня таких датчиков 3 штуки. Как мне с одной ардуины считать показания с трех генераторов? (частота порядка 120кГц)
Это вообще реально сделать на UNO или же на DUE ?
shtep, нужна плата с тремя 16-битными таймерами + что бы были выведены три их тактовых входа. Насчёт Due непомню, как там с \тим делом. Да и не найдёте вы примеров на неё. В стандартной плате мега2560 туча таймеров, но выведено лишь два тактовых входа. Есть вариации плат мега2560 со всеми распаяными пинами, вот например. Думаю это для вас самый оптимальный вариант.