Ардуино счетчик импульсов: Сайт не активен

Содержание

Arduino-подсчет импульсов без прерывания - CodeRoad



Я хотел бы знать, есть ли способ подсчета цифровых импульсов на Arduino WITHOUT, реализующем процедуру прерывания.

Дальнейшее описание: у меня есть датчик, который выдает цифровые импульсы, пропорциональные некоторому измерению, которое я хочу вычислить.

arduino embedded electronics
Поделиться Источник manatttta     27 августа 2014 в 19:35

2 ответа


  • Arduino счетчик импульсов

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

  • Прерывание работает слишком быстро на Arduino

    Я знаю, что это звучит немного смешно :). но я пытаюсь исключить возможности: На Arduino Uno я прикрепил прерывание, срабатывающее на HIGH, к подпрограмме, которая только увеличивает изменчивый определенный счетчик long .

    Этот счетчик отображается на экране LCD. Если я подключу генератор импульсов...



4

Мало того, что вы можете сделать это без обработчика прерываний, вы можете сделать это практически без программного обеспечения и обрабатывать более быстрые частоты импульсов, которые возможны с помощью программного опроса или подсчета прерываний.

Atmel AVR, на котором базируется большинство Arduinos, имеет аппаратное обеспечение счетчика / таймера, которое будет непосредственно считать импульсы на входном выводе. Все, что вам нужно сделать, это настроить аппаратное обеспечение для работы счетчика и прочитать регистр счетчика. Существует небольшая сложность для 16-битных счетчиков на 8-битном устройстве, но ее легко преодолеть. Arduino настраивает таймеры для операций по умолчанию PWM, но они могут быть переопределены, как описано здесь (Подробнее см. Руководство пользователя AVR) - вам нужно использовать таймер/счетчик в режиме CTC.

Arduninos на базе ARM и почти любой другой microcontroller будут иметь аналогичные аппаратные средства; некоторые из них обладают большей гибкостью, по сравнению с которой булавки могут использоваться для подсчета аппаратных средств.

На AVR у вас есть 8-и 16-битные счетчики, если вам нужны большие счетчики, вам, возможно, придется обрабатывать прерывание переполнения. Если вы будете регулярно опрашивать счетчик, вы можете справиться даже с этим без прерываний, имея возможность опрашивать с гораздо более низкой и, возможно, апериодической скоростью, чем скорость входных импульсов, просто опрашивая флаг переполнения перед следующим переполнением.

В вашем случае вам, вероятно, нужно считывать количество импульсов с регулярным периодом, который короче времени, в течение которого счетчик будет переполняться с максимальной ожидаемой частотой пульса. Так, например, если вы используете 8-битный счетчик и максимальная частота импульсов составляет 1 кГц, вам нужно будет опрашивать каждые 256/1000 секунд или меньше, но наибольшая точность достигается за счет того, что период максимально длинный.

Так, например, у вас может быть что-то вроде следующего (это не реальный код, а только фрагмент):

for(;;)
{
    delayMS( 250 ) ;
    frequency = 4 * readCounter() ;
}

Альтернативой, которая получит лучший линейный отклик, но недетерминированный отсчет, будет опрос флага переполнения и измерение времени, затраченного на подсчет фиксированного числа импульсов, и таким образом определение вашего измерения по времени для фиксированного отсчета, а не по отсчету для фиксированного времени.

for(;;)
{
    int start = getMillisec() ;

    while( !counterOVF() )
    {
        // Do nothing (or something useful but quick)
    }

    int t = getMillisec() - start ;
    frequency = 256 * t / 1000 ; 
}

Поделиться Clifford     27 августа 2014 в 22:11



1

Вы могли бы использовать аналоговый, с небольшим количеством цифрового перед ним. если ваша входная максимальная частота составляет 1 кГц, используйте этот сигнал для запуска mono-stable (edge triggered) с импульсным выходом 1 мс (1/fmax)., затем отфильтруйте его нижними частотами (R последовательно, C на землю и повторите для многополюсного) и, наконец, считайте аналоговое напряжение на этом последнем конденсаторе. Если R*C относительно мал, то аналоговый сигнал будет реагировать быстро, но будет иметь рябь. Если он большой, то время реакции пострадает, но сигнал будет более стабильным.

Поделиться Dario Dentes     05 декабря 2016 в 19:59


Похожие вопросы:


Прерывания прерывают другие прерывания на Arduino?

У меня есть Arduino Uno (потрясающее маленькое устройство!). У него есть два прерывания; назовем их 0 и 1 . Я подключаю обработчик к прерыванию 0 и другой к прерыванию 1, используя attachInterrupt()...


Arduino Последовательные Прерывания

Я работаю над проектом Arduino Mega 2560. На ПК Windows 7 я использую Arduino1.0 IDE. Мне нужно установить последовательную связь Bluetooth со скоростью передачи данных 115200. Мне нужно получить...


Как обрабатываются прерывания в Arduino?

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


Arduino счетчик импульсов

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


Прерывание работает слишком быстро на Arduino

Я знаю, что это звучит немного смешно :). но я пытаюсь исключить возможности: На Arduino Uno я прикрепил прерывание, срабатывающее на HIGH, к подпрограмме, которая только увеличивает изменчивый...


Генерация импульсов и считывание на arduino

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


Счетчик импульсов на Arduino

Мне нужна функция, которая возвращает количество импульсов в течение заданного времени, на arduino. Это частичный код, который я использую, но функция ничего не перенастраивает ( не возвращает даже...


прерывания при создании библиотеки arduino

Я создаю библиотеку для счетчика энергии. Я хочу подсчитать импульсы, которые производит счетчик энергии, и преобразовать их в энергию через arduino. Чтобы поймать любой импульс, я хочу использовать...


arduino прерывания с серводвигателем

в настоящее время я работаю над проектом открытия двери с кодом доступа с помощью arduino UNO и серводвигателя. Нормальная работа требует ввода кода доступа с помощью клавиатуры, которая работает...


arduino переменная прерывания не работает

Я новичок с arduino, и я пытаюсь сделать генератор синусовых волн. Поскольку я недавно обнаружил, что не могу поместить все в основной пустотный цикл, я пытаюсь использовать прерывания.

У меня есть...

arduino - как использовать счетчик импульсов прерывания esp32 ulp и режим периодического пробуждения deepsleep

Я пытаюсь измерить энергопотребление с помощью счетчика dds353 kWh. Этот счетчик имеет импульсный выход. Мне интересно использовать esp32, так как я могу периодически отправлять данные через Интернет на узловую панель управления. Мне также очень интересно использовать esp32 в режиме низкого энергопотребления и периодически просыпаться для отправки данных через mqtt. Я пробовал примеры из github с использованием espressif idf но я бы не возражал против эквивалента Arduino. Я хотел бы сделать аппаратное прерывание, которое, когда один из выводов rtc gpio становится высоким, счетчик увеличивается, в то время как запускается отдельное прерывание таймера и иногда пробуждает основные ядра xtensia, которые извлекают данные из rtc и отправляют их. Я просмотрел примеры счетчиков импульсов и с моими ограниченными знаниями не могу сказать, срабатывают ли прерывания, когда ulp находится в спящем режиме или только когда он включен.

Я был бы очень рад, если бы кто-нибудь показал мне, как в основном использовать ulp для подсчета импульсов, даже когда он находится в спящем режиме, и периодически будить основные ядра. Я согласен с примерами IDF или Arduino

2

Barty 28 Апр 2020 в 18:57

1 ответ

Лучший ответ

Если вы хотите считать импульсы во время глубокого сна, используйте ULP. Код на ULP продолжает выполняться, когда плата просыпается и переходит в нормальный режим питания. Поэтому, когда он активен, он все равно будет запускать счетчик на процессоре ULP, если вы не остановите таймер периодического пробуждения ULP, ULP будет продолжать просыпаться и работать, пока активен основной процессор.

Как вы уже сказали, проверено на этом примере, должно быть довольно близко к тому, что вам нужно.

Единственная разница, по-видимому, заключается в том, что пример настроен на пробуждение после заданного количества импульсов, а не через фиксированный промежуток времени. Однако это должно быть легко изменить, включив пробуждение глубоким сном по таймеру.
Для Arduino вы можно проверить
Дополнительная информация:
ULP не имеет прерываний GPIO. Таким образом, вы используете заглушку глубокого сна (небольшой фрагмент кода, который запускается сразу после глубокого сна, перед загрузкой приложения из флеш-памяти в ОЗУ), вы можете увеличить переменную счетчика импульсов и снова перейти в режим сна. Таким образом, вы можете получить низкое энергопотребление (~ 5 мкА) между импульсами и умеренное энергопотребление при работе пробуждающего шлейфа (около 13 мА) в течение очень короткого времени.
Так что экспериментировать со своим конкретным сценарием остается за вами.

0

Codebreaker007 28 Апр 2020 в 22:07

Подсчет и хранение импульсов Arduino

Расход воды в кВтч ???

Частота передачи ваших данных будет зависеть от частоты импульсов и того, насколько актуальной должна быть ваша информация. Не имеет смысла отправлять обновления каждый час, если вы получаете в среднем только 1 импульс в час. В этом случае один раз каждый день или около того будет делать. Вы можете отправлять каждый раз, например, 10 импульсов, но тогда вы ничего не отправите, если уедете на неделю, а получателю может потребоваться более частое обновление. Поэтому лучшей альтернативой является отправка через фиксированные промежутки времени, например, каждый день в полдень и в полночь.

Для надежности передачи данных у вас есть несколько вариантов. Радиомодули RFM12B являются приемопередатчиками, поэтому вы можете разрешить приемнику отправить подтверждение. Не совсем сложно, но может быть еще проще, с односторонней связью. Слово избыточность. Многое из этого. Это часто плохое слово, но здесь наш объем данных настолько мал, что некоторая избыточность не принесет никакого вреда; вряд ли стоит включать передатчик для отправки двух байтов, не так ли?

Теперь отправка 5 копий одних и тех же данных в одной передаче не является хорошей идеей. Резервирование бесполезно, если вся передача заблокирована. Вот что вы делаете: N-я передача отправляет следующее:

• значение счетчика N (подойдет 1 байт) • N-4-е данные
• N-3-е данные
• N-2-й данные
• данные N-1
• новые данные
• Хэмминг ECC

Я бы отправил накопительные данные, например, 16-битные числа. Если у вас пульс на 0,1 м 3 3 воды через пару лет у вас будет переполнение, но у приемника с этим проблем не должно быть.

Это даст вам полезную нагрузку в несколько десятков байт, но гарантирует, что все данные будут получены, даже если потеряны 4 последовательных передачи. Если это заставляет вас спать лучше, вы все равно можете объединить это с подтверждением и повторной передачей, если это необходимо.

Микроконтроллеру будет почти нечего делать: держать таймер, чтобы сохранить время до следующей передачи, и считать входящие импульсы. Вы можете запустить его на дешевом кристалле 32,768 кГц. Даже без использования режимов пониженного энергопотребления MSP430F1101A будет использовать только незначительную пару мкА; Ваш блок питания будет потреблять кратное из этого. Включайте передатчик только два раза в день для отправки ваших данных.

Ваш микроконтроллер должен будет работать непрерывно в течение нескольких месяцев, а затем вы должны принять во внимание отключение питания. Где я живу, они редки; последний из них датируется 3 годами назад и длился 15 минут, но мне сказали, что они чаще встречаются в сельской местности в США, где есть много воздушных линий электропередачи. В любом случае, вы хотите, чтобы резервная батарея поддерживала работу контроллера во время отключения питания. Ячейки CR2032 и MSP430 достаточно для вечности. ИЛИ выход батареи с питанием от сети (3,3 В) с парой диодов. Отложите передачи при работе от батареи.

Нет необходимости хранить счетчики в EEPROM, просто храните их в оперативной памяти.

Простой счётчик импульсов от 0 до 99 | Лучшие самоделки

Этот простой счётчик импульсов пригодится совместно с другими устройствами, например в станке для намотки трансформаторов и катушек или в самодельном пульсометре. В сегодняшнем устройстве в качестве образования импульсов для подсчёта выступает тактовая кнопка но вместо неё можно подключить другие устройства которые выдают импульсы и которые требуется подсчитывать.

Простой счётчик импульсов от 0 до 99

Необходимые детали:

  • Резистор R1 – 10 кОм;
  • Резистор R2 – 33 кОм;
  • Резистор R3 – 1 мОм;
  • Конденсатор С1, С2, С3 – 47 нФ;
  • Семисегментные индикаторы с общим катодом (SP5503) – 2 шт.;
  • Микросхема IC2, IC3 – CD4026 — купить – http://ali.pub/4g6es3;
  • Микросхема IC1 – NE555 – http://ali.pub/4g6f97;
  • Тактовые кнопки – 2 шт;
  • Макетная плата.

Как сделать счётчик импульсов, инструкция:

Счётчик импульсов я собрал на макетной плате по такой схеме:

Простой счётчик импульсов от 0 до 99

При каждом нажатии правой кнопки SW1 на семисегментном индикаторе значение увеличивается на единицу. Левая кнопка обнуляет значение. Счётчик может отсчитывать от 0 до 99, после чего отсчёт начинается опять с нуля.

Простой счётчик импульсов от 0 до 99

Микросхема NE555 отвечает за генерацию импульсов, а две последующие микросхемы десятичные счётчики выводят цифры на семисегментные индикаторы.

Простой счётчик импульсов от 0 до 99

Чтобы увеличить количество цифр например до 3-х то нужно добавить ещё одну микросхему CD4026 (IC4) и к ней семисегментный индикатор подключив при этом 5 вывод микросхемы IC3 со входом 1 микросхемы IC4.

Простой счётчик импульсов от 0 до 99

Простой счётчик импульсов с отсчётом от 0 до 99 готов, в следующей статье мы как раз применим его на практике в мониторе сердечного ритма (пульсометре).

Похожие самоделки:

Счетчик импульсов на дин рейку — blog.instalator

Счетчик имеет два варианта исполнения, первый для снятия показаний со счетчиков с низкочастотным выходом импульсов, например водосчетчики, а второй для снятия показаний с электросчетчиков с импульсным выходом, где частота импульсов может достигать 16000 импульсов на 1 кВтч.

Первый вариант:

Счетчик имеет два входа. После С16 и С13 сигнал поступает на аналоговый коммутатор сигналов MM74HC4066, он коммутириует входные сигналы для разных типов датчиков. Например для датчиков системы NAMUR, если датчик используется герконовый или транзисторный например, то коммутатор коммутирует входы на триггер шмитта SN74LVC1G14DBVR для формирования сигнала с четким фронатами.

Далее сигнал поступает на цифровые или аналоговые (в случае NAMUR) входы микроконтроллера Atmega328, который и ведет подсчет импульсов. Счетчик имеет связь с внешним миром через Ethernet выполненного на микросхеме W5500 или WiFi (при установке на плату счетчика ESP8266) по протоколу MQTT.

Принципиальная схема счетчика

При пропадании питания подсчитанные импульсы записываются в энергонезависимую память EEPROM микроконтроллера и при подачи питания счет продолжается.

Входные цепи счетчикаСхема импульсного выхода счетчика воды Valtec

Счетчик собран в корпусе фирмы меандр и представляет собой одномодульный (в соответствии с международным стандартом DIN 43-880) пластмассовый корпус для электронной аппаратуры, способ сборки без винтовой (на защёлках). Материал корпуса — ABS пластик светло серого цвета (RAL7035).  Крепление корпуса на DIN рейку (35мм) или на ровную поверхность.

Код счетчика в открытом доступе на GitHub. Счетчик имеет несколько конфигурируемых параметров. Изменение параметров через топики MQTT:

Создаваемые топики MQTT

 

Топик MQTT Значения Описание
namur  true/false Переключает входы счетчика на тип — NAMUR.
polling 500 — 4294967295 мс Интервал публикации изменений данных в миллисекундах, т.е. данные счетчика публикуются только по изменению состояния, но не чаще заданного периода.
correction 0;0 Для ручного задания текущих показаний счетчика, данные отправляются с разделителем «;»
ratio 1 — 32767 Множитель, лучше использовать не на счетчике, а непосредственно в IoBroker
namur_lvl_1 /  namur_lvl_2 0 — 1023 Значение аналогового входа, для типа NAMUR, выше которого будет считаться как срабатывание датчика.
namur_brk_1 / namur_brk_2 0 — 1023 Значение аналогового входа, для типа NAMUR, ниже которого будет выдаваться ошибка на обрыв кабеля.
interrupt_1 / interrupt_2 1, 2 , 3 1 — CHANGE прерывание вызывается при смене значения на порту, с LOW на HIGH и наоборот.
2 — RISING прерывание вызывается только при смене значения на порту с LOW на HIGH.
3 — FALLING прерывание вызывается только при смене значения на порту с HIGH на LOW.
bounce 0 — 5000 мс Задержка в миллисекундах для программного подавления дребезга
save true/false При записи значения true происходит сохранение данных и параметров в энергонезависимую память EEPROM
A_1 / A_2 0 — 1023 Отображает текущие значения аналоговых входов при активном режиме NAMUR. Для облегчения конфигурации параметров — namur_lvl_x и namur_brk_x
count_1 / count_2 0 — 4 294 967 295 Значения счетчика.

Второй вариант:

Схема счетчика отличается только входной и программной частью. Входная часть сделана на отдельном микроконтроллере Atmega328 которая занимается подсчетом импульсов, расчетом текущей нагрузки, замером тока и выводит значения на UART порт.

Код для второго варианта так же на моей странице GitHub.

После отключения питания счетчик автоматически сохраняет текущие показания в энергонезависимой памяти EEPROM.

Публикуемые топики MQTT, счетчика импульсов
Топик MQTT Значения Описание
count 0 — 4 294 967 295 кВт. Значения счетчика.
power 0 — 32767 Вт Текущее значение мощности нагрузки
amp 0 -100 А. Ток нагрузки (требует подключения трансформатора тока)
polling 1000 — 32767 мс Интервал публикации изменений данных в миллисекундах, т.е. данные счетчика публикуются только по изменению состояния, но не чаще заданного периода.
bounce 0 — 10000 мс Задержка в миллисекундах для программного подавления дребезга
num 0 — 32767 Значение передаточного числа счетчика. Количество импульсов на 1 кВт*ч
save true/false При записи значения true происходит сохранение данных и параметров в энергонезависимую память EEPROM
correction 0 — 4 294 967 295 Для ручного задания текущих показаний счетчика
reset true/false Перезагрузка устройства с сохранением текущих значений
RAW count;power;amp;bounce;num;error Вывод сырых данных одной строкой.

Блок питания счетчика собран на микросхеме MC

MC34063, которая имеет широкий диапазон входных напряжений от 5. 5 до 40 Вольт.

Корпус 151 Меандр

Подключаем Arduino к счетчику электроэнергии

Нет, эта статья не об очередном способе обмануть этот злосчастный прибор. Здесь пойдет речь о том, как с помощью Arduino и среды LabView превратить свой счетчик электроэнергии в средство мониторинга потребляемой мощности или даже в амперметр!



Самый первый счетчик электроэнергии был индукционным. Принцип его работы до смешного прост — по сути это электродвигатель, ротором которого является алюминиевый диск, вращающий циферблат. Чем больше потребляемый ток- тем быстрее крутится диск. Устройство чисто аналоговое.

Однако сегодня индукционные счетчики сдают свои позиции, уступая место своим более дешевым электронным собратьям. И как раз один такой и станет подопытным:

Принцип работы не сильно изменился — в данном случае диск заменен электроникой, которая генерирует импульсы в соответствии с величиной потребляемой электроэнергии. Как правило, в большинстве приборов эти импульсы показывает светодиодный индикатор. Соответственно, чем быстрее мигает эта лампочка — тем больше сжигается драгоценных кВт.
Кроме того, на лицевой панели любого устройства есть передаточное соотношение счетчика А — число импульсов на 1 кВт*ч. Как видно из фото, у подопытного А=12800. Из этой информации можно сделать следующие выводы:

— С каждым импульсом счетчик фиксирует потребление, равное 1/12800 части от 1 кВт*ч. Если включить к счетчику нагрузку и начать просто считать импульсы, то потом легко получить потребленное ею количество электроэнергии (кВт*ч), разделив количество импульсов на передаточное соотношение.

— Так как индикатор изменяет скорость своего моргания, то можно вывести зависимость между мощностью (кВт) и временем одного импульса счетчика, что позволит получить данные о мощности/токе.
Не будем загружать статью расчетами, но если нужно то

вот они Воистину, передаточное число счетчика — великая вещь, так как зная ее можно выразить как мощность так и ток:
Составим пропорцию из нашего передаточного соотношения (А=12800 имп/кВт*ч) и неизвестного передаточного соотношения, которое будет при нагрузке X и за время одного единственного импульса (моргания лампочки):

Здесь X — неизвестная мощность, а t — время одного импульса. Выражаем отсюда неизвестную мощность и вот оно:

Ток считается с применением следующей пропорции передаточных соотношений и токов известных и неизвестных при нагрузке X.:


Что в общем-то приводит к идентичной формуле, но для тока (ток измеряется в Амперах а индексы означают нагрузку, при которой будет данный ток):

Тут можно заметить подводный камень — нужно знать ток при идеальной нагрузке в 1 кВт. Если необходима хорошая точность — лучше его измерить самостоятельно, а если нет- то приблизительно можно посчитать по формуле (напряжение и мощность известны), но будет более грубо, так как не учитывается коэффициент мощности.

Таким образом, все упирается в измерение времени одного импульса (моргания индикатора). В своих изысканиях я опирался на этот отличный проект. Некий итальянец сделал в среде Labview интерфейс для мониторинга мощности и придумал схему для измерения импульсов. Но в его проекте красовалась огромная недоработка — он подходил только лишь для счетчиков с передаточным соотношением 1000 имп/кВт*ч.

Верхний график — средняя мощность за 5 минут, нижний — в реальном времени. Интерфейс довольно гибкий и легко модифицируется под свои нужды. Если Вы еще не имели дела со средой LabView — рекомендую познакомиться.

Чтобы все заработало, оказалось достаточно внести один единственный блок в алгоритм программы, в соответствии с формулой выше.

Выглядит это следующим образом
Казалось бы просто, но до этого надо еще додуматься!

Итак, если Вы все-таки решите реализовать мониторинг мощности, то есть два варианта:

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

Схема для бесконтактного снятия импульсов

Программа просто сравнивает значение сопротивления на фоторезисторе и потенциометре. Причем последний позволяет выставить чувствительность такого датчика во избежание ложного срабатывания и настроиться под яркость индикатора.

2. У Вас есть доступ к импульсному выходу счетчика. На многих моделях имеется импульсный выход, который дублирует мигания лапочки. Это сделано для того, чтобы была возможность подключать прибор к системе автоматизированного учета. Представляет собой транзистор, открывающийся при горящем индикаторе и закрывающийся при погасшем. Подключиться напрямую к нему не составляет труда — для этого потребуется всего один подтягивающий резистор. Однако прежде чем делать это, удостоверьтесь что это именно импульсный выход, а не что-либо иное! (в паспорте всегда есть схема)

Схема для подключения к телеметрическому выходу

В моем случае — доступ полный, поэтому заморачиваться я особо не стал. Устанавливаем LabView и вперед измерять! Все графики представляют собой мощность (Вт) в реальном времени.
Первым под раздачу попал многострадальный чайник. Крышечка гласит что мощность у него 2,2 кВт, однако судя по графику, исправно потребляет лишь 1700 Вт. Обратите внимание, что потребление более-менее постоянно во времени. Это означает что нагревательный элемент (скорее всего нихром) очень слабо изменяет свое сопротивление в течении всего процесса вскипячивания.

Совсем другое дело клеевой пистолет — заявленная мощность 20 Вт.Он ведет себя в соответствии с законами физики — при нагреве сопротивление нагревателя увеличивается, а ток соответственно уменьшается. Проверял мультиметром — все так и есть.

Старый радиоприемник «Весна». Здесь график ушел вверх в начале из-за того, что я запустил измерение во время импульса, соответственно это повлияло на данные. Горки на графике показывают, как я крутил ручку громкости. Чем громче — тем больше радио кушает.

Перфоратор с заявленной мощностью 700 Вт. Нажал на кнопку до упора, чуть чуть подождал и отпустил, но не плавно. На графике хорошо видно бросок тока при пуске двигателя. Именно поэтому моргает свет, когда добрый сосед начинает долбить свою любимую стену.

А теперь самое интересное. Я провел небольшой эксперимент со своим стареньким ноутбуком, результат которого приведен на картинке:

Оранжевой точкой отмечено время, когда я запустил сразу несколько «тяжелых» программ. Как видите, графики загрузки процессора и возросшее потребление имеют нечто общее между собой. Недавно была одна интересная статья которая наталкивает на некоторые мысли. Не уверен что с помощью мониторинга мощности можно слить ключи шифрования, однако факт налицо.
(Трепещите параноики!)

В общем, из обычного счетчика и дешевой Arduino, можно сделать довольно простое и интересное решение для самодельного «умного дома». Кроме, собственно, мониторинга потребления электроэнергии есть вполне неплохая возможность организовать систему контроля включенных приборов, которая по изменению потребления и его характеру будет угадывать что включили. Без каких-либо дополнительных датчиков.

Исходники скетча для Arduino и файл LabView можно скачать на странице автора. После установки доработать напильником добавить блок в соответствии с описанием выше.

Автор: Astrei

Источник

Подсчёт изделий, деталей и срабатываний механизмов

ПРИБОРЫ СЧИТАЮТ ГОТОВЫЕ ИЗДЕЛИЯ, ВЫ — ПРИБЫЛЬ.

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

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

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

Заказывайте счетчик импульса там же, где Вы приобретаете датчики!

Счетчик импульсов СИ1 производства «ТЕКО» предназначен для прямого, обратного и реверсивного подсчета импульсов и включения/выключения цепей управления внешними объектами по достижении заданного количества импульсов. Подсчет объектов или частоты совершенных операций осуществляется в комплекте с датчиками: индуктивными, оптическими и емкостными, в соответствии с их стандартным применением.

ОСНОВНЫЕ ФУНКЦИОНАЛЬНЫЕ ВОЗМОЖНОСТИ СЧЕТЧИКА ИМПУЛЬСОВ:
  • отображение результата счета на светодиодном экране
  • включение и отключение нагрузки по заданному условию
  • возможность сброса счетчика в исходное состояние
  • сохранение всех установок, режимов работы и текущего значения при попадании питания в энергонезависимой памяти
  • прямой обратный или реверсивный счет
  • тип выходных устройств — реле, оптотранзистор, оптосемистор
  • диапазон задания установки счета -999...9999
  • множитель показаний счетчика — 1,10,100,1000

Рекомендация применения индуктивных датчиков в комплексе со счетчиком импульсов:

Для контроля баллонов на газонаполнительной станции используйте взрывобезопасные датчики ISB BS7A-10-N в комплекте с блоком сопряжения.

Варианты применения емкостных датчиков в комплексе со счетчиком импульсов:

Для подсчета стеклянных и пластиковых бутылок на транспортере востребованы ёмкостные выключатели CSN EF8A5-31P-20-LZ.   Для подсчета картонных упаковок используйте ёмкостный выключатель CSN E86P5-31N-20-LZ
Для обнаружения и подсчёта объектов применимы ёмкостные выключатели CSB A81A5-31P-10-LZ      

 

Для задачи подсчета наиболее востребованы оптические датчики в комплексе со счетчиком импульсов:

 

В зависимости от Ваших условий (нужное расстояние срабатывания, схема подключения, напряжение питания) мы подберем соответствующее исполнение датчиков в комплекте со счетчиком импульсов.

Решайте комплекс задач с помощью одного прибора:

  • автоматизированный подсчет готовых изделий
  • автоматизированный подсчет хода двигателей
  • контроль времени включения/выключения дополнительных устройств после достижения заданного числа испульсов
  • контроль и сопоставление количества ходов оборудования и реального объема продукции, поступившей на склад
  • контроль времени и количества ходов оборудования во время наладки
  • прибор помимо основной функции выполняет роль источника питания

Используйте счетчики импульсов для улучшения результатов труда:

  • Вы сокращаете время простоев оборудования
  • ведете учет готовых изделий и сооветствующего им количества ходов оборудования
  • снижаете технологический брак путем своевременного ремонта оборудования при обнаружении низкого процента годных деталей.

Закажите прибор у производителя и оформите бесплатную доставку почтой.

Как считать мелкие детали и не сбиваться?

При необходимости подсчета мелких деталей мы рекомендуем применять индуктивные кольцевые датчики производства "ТЕКО". С их помощью Вы всегда знаете точное количество метизов, дроби, канцелярских кнопок — всевозможных металлических мелких деталей, которые требуется упаковать или отсортировать.

В «ТЕКО» Вы можете приобрести кольцевые датчики в двух исполнениях и восьми типоразмерах.

Принцип работы:

Изделия, проходя через отверстие датчика, изменяют электромагнитное поле, изменение преобразуется в импульс, который фиксируется счетчиком импульсов. Таким образом происходит подсчет изделий. Выберите подходящий Вам вариант кольцевых датчиков производства "ТЕКО»:

ISB R1A5-31P-R5-LZ
ISB R1A5-31P-R10-LZ
ISB R1A5-31P-R30-LZ


Сделайте заказ или проконсультируйтесь со специалистом отдела продаж
по телефону +7 (351) 729-82-00 или по адресу [email protected]


Эксперименты с частотомером Arduino

Обзор

В этом посте я хотел бы резюмировать свои недавние эксперименты с различными подходами к подсчету частот с использованием платформы Arduino. Моя первоначальная цель - разработать небольшой емкостный датчик приближения, который был бы более надежным, чем датчик, измеряющий время зарядки по умолчанию (и, что не менее важно, работающий от аккумулятора). Идея, как и в случае с терменвоксом, состоит в том, чтобы использовать осциллятор для генерации прямоугольных волн и обнаружения небольших изменений частоты, вызванных близостью человека.Для этого мне сначала понадобился надежный частотомер. Мои требования были следующие:

  • он должен быть максимально точным как минимум до 100 кГц
  • он должен работать на ATtiny (даже на ATtiny13)

Результаты

В итоге я получил небольшую библиотеку, которая может подсчитывать частоту до диапазона МГц на более сложных платформах (например, Uno, Mega), и я также заставил ее работать на большинстве ATtiny (я тестировал ее на ATtiny85. ), но не на ATtiny13 (технически это было бы возможно, но я не смог поместить код датчика приближения во флеш-память 1K, поэтому решил не тратить на это больше времени).На ATTiny неточность внутреннего генератора может повлиять на измерение с постоянным коэффициентом, но это нормально для моего приложения (в любом случае, зачем вам считать частоту с помощью ATTiny?)

Библиотека использует фиксированное время стробирования 100 мс (период подсчета импульсов), что вносит некоторую ошибку (счетчик импульсов умножается на 10, чтобы получить частоту, таким образом, последняя цифра всегда равна 0). Из-за этого также стоит упомянуть, что эта библиотека плохо работает на очень низких частотах.

Библиотека частотомеров доступна по адресу https://github.com/domoszlai/arduino-frequency-counter. Он реализует два разных подхода, так как у них есть плюсы и минусы, и отдельный подход для ATTiny. Подробности реализации можно найти в исходном коде и на странице github.

Подходы

Я выделил три основных метода подсчета частоты на основе количества требуемых аппаратных таймеров:

Это очень наивный подход, и это даже не совсем таймер, поскольку он неявно использует Timer0 для подсчета времени.Эти методы обычно основаны на одной из функций pulseIn () , millis () , micros () для измерения времени затвора или ширины импульса. Я нашел их слишком неточными для моих целей.

В этом методе используется один таймер для измерения времени стробирования и прерывание со сменой вывода (PCI) для подсчета импульсов. Это очень часто используется, поскольку прерывания по смене вывода доступны для многих / большинства выводов, но он может хорошо работать только на более низких частотах (в моих тестах он отлично работал с ~ 60 кГц).Это метод, который используется счетчиком ATTiny как самый маленький, например ATTiny85 имеет только один доступный таймер (два, но, Timer0 используется ядром Arduino).

См .: frequency_counter_PCI.cpp

Я обнаружил, что это самый надежный метод, работающий на частотах до нескольких МГц. Он использует один таймер для измерения времени стробирования и аппаратный таймер / счетчик (TC) для подсчета импульсов. Однако аппаратный счетчик требует использования одного конкретного вывода, что в некоторых ситуациях может быть очень непрактичным.Это должен быть контакт T1 (обычно контакт 5) для большинства плат, но T5 (контакт 47) в случае Arduino Mega.

См .: frequency_counter_TC.cpp

Знаете ли вы какой-либо другой / лучший способ надежного измерения частоты? Может быть, измерение ширины импульса с использованием внешних прерываний?

Как посчитать частоту с помощью Arduino · Один транзистор

Правильный способ подсчета частот от нескольких герц до 6 МГц с помощью платы Arduino. Настраивайте аппаратные таймеры и используйте прерывания.Добавьте дисплей и создайте недорогой частотомер.

Подсчет частоты с помощью Arduino казался легкой задачей. Но большинству людей нравится делать это простым, но неправильным способом: использовать pulseIn для измерения ширины импульса. Это ограничивает максимальную измеряемую частоту примерно до 50 кГц. Кроме того, функция производит выборку только одного цикла сигнала.

Хороший способ измерения частоты - подсчет переходов входного сигнала, которые происходят за определенный промежуток времени. Это требует знания таймеров и прерываний.Метод сложнее реализовать, и для того, чтобы все было правильно, нужно установить несколько регистров.

Это было сделано раньше, и хотя его было трудно найти, я обнаружил код, который может считать частоты до 8 МГц, если входной сигнал имеет рабочий цикл 50%. Единственным недостатком является то, что входной контакт частоты закреплен на цифровом контакте 5. Однако верхний диапазон не ограничивается лишь несколькими МГц. С помощью некоторого дополнительного оборудования (микросхема предварительного делителя частоты) частоты в сотни МГц могут быть измерены с достаточной точностью.

Аппаратное обеспечение очень простое: подключите любой дисплей к Arduino, но избегайте использования контакта 5. У вас его нет? Запишите измерения в последовательный порт. Единственное необходимое оборудование - это плата разработки AVR. Программное обеспечение - это самая большая проблема. Мой код основан на библиотеке, написанной Martin Nawrath , и коде, опубликованном Nick Gammon .

То, что вы видите на моей макетной плате на приведенной выше фотографии, - это плата, совместимая с Arduino Nano, и простой кварцевый генератор, построенный на старом шестнадцатеричном инверторе 74LS04.

В программе используются два таймера. Первый таймер будет настроен на использование неизвестной частоты в качестве источника синхронизации. Его переполнения будем считать по прерыванию. Второй таймер будет срабатывать прерывание через определенные промежутки времени. Эта процедура прерывания считывает текущее значение первого таймера. Используя это и количество фактических переполнений, можно рассчитать частоту. Первым шагом является проверка таблицы данных ATmega328:

Внешняя тактовая частота должна быть меньше половины системной тактовой частоты (fTn Следовательно, максимальная частота, которую вы можете рассчитывать с ATmega328 Arduino, составляет 16 / 2,5 = 6,4 МГц. Немного, но все же лучше, чем PulseIn. Я буду использовать Timer1 (который составляет 16 бит) для подсчета входных импульсов неизвестного сигнала.При входной частоте, скажем, максимальной 8 МГц, 16-битный регистр переполнится (достигнет максимального значения 65535) через 8,192 мс. Это слишком мало для низкочастотных сигналов. Разрешение таймера необходимо увеличить за счет счетчика переполнения. При каждом переполнении переменная счетчика будет увеличиваться (увеличивая разрешение таймера). Таким образом, Timer1 увеличивается на каждом нарастающем фронте на выводе D5.

Timer2 сохранит… время. Это 8-битный таймер, но мы позволим ему считать только до 124 (это означает 125 «тактов»).Частота счета определяется установкой предварительного делителя на 128. При тактовой частоте 16 МГц плат Arduino Timer2 будет «тикать» с частотой 16 МГц / 128 = 125 кГц. Считайте 125 раз с частотой 125 кГц. Сколько времени прошло? Ну, 1 миллисекунда. Таймер 2 переполняется каждые 1 мс. Сколько раз он переполняется до того, как вычисляется частота Timer1, - это переменная, которую можно изменить, если хотите. Высокие частоты могут быть дискретизированы за короткие периоды, в то время как низкочастотные сигналы могут дискретизироваться за более длительный период времени для точного считывания.Значение по умолчанию для переменной samplingPeriod установлено на 200 мс. Мне удалось измерить с его помощью всего 50 Гц (период 20 мс) - засчитываются только 10 отсчетов.

Вот код (также на GitHub):

 // Частотомер Arduino от нескольких Гц до 6 МГц
// Один транзистор, 2018
//  https://www.onetransistor.eu/ 
//
// На основе:
// * Скетч частотомера от Ника Гаммона (CC BY 3.0 AU)
//  http://www.gammon.com.au/timers 
// * Библиотека FreqCounter от Мартина Наврата (LGPL 2.1)
//  http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-frequency-counter-library/ 

// здесь задаем период выборки (в миллисекундах):
беззнаковое int samplingPeriod = 200;

// Таймер 1 переполняет счетчик
изменчивое беззнаковое длинное переполнение1;

void init_Timer1 () {
 переполнение1 = 0; // сбросить счетчик переполнения

 // Устанавливаем регистры управления (см. Таблицу)
 TCCR1A = 0; // нормальный режим работы
 TCCR1B = бит (CS12) | бит (CS11) | бит (CS10); // использовать внешний источник синхронизации

 TCNT1 = 0; // устанавливаем текущее значение таймера на 0

 TIMSK1 = бит (TOIE1); // разрешить прерывание при переполнении
}

ISR (TIMER1_OVF_vect) {
 overflow1 ++; // увеличиваем счетчик переполнения
}

// Таймер 2 переполняет счетчик
изменчивый беззнаковый int overflow2;

void init_Timer2 () {
 переполнение2 = 0; // сбросить счетчик переполнения

 GTCCR = бит (PSRASY); // сбросить предделители

 // Устанавливаем регистры управления (см. Таблицу)
 TCCR2A = бит (WGM21); // Режим CTC
 TCCR2B = бит (CS22) | бит (CS20); // предделитель установлен на 1/128, "тики" на 125 кГц
 OCR2A = 124; // считает от 0 до 124, затем запускает прерывание и сбрасывается;

 TCNT2 = 0; // устанавливаем текущее значение таймера на 0

 TIMSK2 = бит (OCIE2A); // разрешаем прерывание
}

// прерывание происходит через каждые 125 отсчетов / 125 кГц = 0.001 секунда = 1 мс
ISR (TIMER2_COMPA_vect) {
 if (++ overflow2  Серийный  .print ("Частота:");
  Serial  .print ((длинное без знака) freqHz);
  Серийный  .println ("Гц");

 // сбрасываем таймеры
 TCNT1 = 0; переполнение1 = 0;
 TCNT2 = 0; переполнение2 = 0;
}

void setup () {
 // включить последовательный вывод
  Серийный .begin (115200);
  Serial  .println («Частотомер Arduino»);
  Серийный  .println ();

 // Отключить Timer0; millis () больше не будет работать
 TCCR0A = 0; TCCR0B = 0;

 // запускаем таймер 1 (частота счета)
 init_Timer1 ();
 init_Timer2 ();
}

void loop () {
 // здесь ничего; прерывания выполняют все
 // вы можете добавить пользовательский ввод, который изменяет период выборки
}
 

В отличие от проектов, на которых я основывал свой код, мой скетч выполняет непрерывный подсчет частоты и отображение после каждого периода выборки.Обратите внимание, что период дискретизации следует регулировать в зависимости от желаемого частотного диапазона. Это напрямую влияет на интервал обновления дисплея. Автоматический выбор диапазона также возможен за счет увеличения периода выборки, если подсчитанных выборок мало, и наоборот. Этот код был разработан и протестирован только на ATmega328. У других микроконтроллеров могут быть другие регистры. Обязательно посетите форум Ника Гаммона, где он адаптирует аналогичный код для ATmega2560 и очень хорошо объясняет, как это работает.

Сейчас довольно легко построить частотомер.Просто добавьте дисплей и буфер ввода. Если вы не будете измерять только сигналы 5 В, вам понадобится буферная схема. Он может быть построен с использованием транзистора, операционного усилителя или триггера Шмитта.

Подсчет импульсов с использованием аппаратных прерываний | Arduino | Программирование на C | Встроенное программное обеспечение | Микроконтроллер

болгарский

Уважаемый господин, Мы небольшая научно-исследовательская компания, базирующаяся в Болгарии, Европе.Мы специализируемся на разработке микроконтроллеров и периферийных устройств на базе ST (STM32), Microchip (Atmel - AVR, ARM) и TI (MSP430). Для наших мобильных проектов Более

Счетчик импульсов I2c

Обзор продукта DS1372U + - это 32-битный двоичный счетчик с интерфейсом I2C с 64-битным идентификатором в 8-выводном корпусе µSOP.Это 32-битный двоичный счетчик вверх и 24-битный счетчик вниз с уникальным 64-битным идентификатором. 32-битный двоичный счетчик, предназначенный для непрерывного отсчета времени в секундах, и дополнительный счетчик, который может генерировать периодический сигнал тревоги.

DS1374 - это 32-битный двоичный счетчик, предназначенный для непрерывного отсчета времени в секундах. Дополнительный счетчик генерирует периодический сигнал тревоги или служит сторожевым таймером. Если отключено, этот счетчик может использоваться как 3 байта энергонезависимой (NV) RAM. Отдельные выходные контакты предназначены для прерывания и прямоугольной волны на одной из четырех выбираемых частот.

ЖК-дисплей 16x2 i2c; ЖК-модуль; Программирование джойстика в Arduino; Мигающие светодиоды; Семисегментный с Ардуино; ШИМ-импульс с модуляцией; Модуль ИК-датчика; Управление сервомотором с помощью потенциометра; Музыкальные огни Audio Spactram; Светодиодный куб 4х4х4; Модуль Sonar HC SR 04; Модуль DS1307 RTC Tiny I2C - Как установить дату и T ... Модуль клавиатуры для Arduino

с номером 255, Пользователь, GPIO, настраиваемый в модулях 0, Нет, Не используется 1, DHT11, датчик DHT11 2, AM2301, AM230X, DHT21 и Датчик температуры DHT22 3, SI7021, только для Sonoff Si7021, но не i2c версии 4, DS18x20, датчик температуры 1-Wire Dallas Semiconductor DS18b20 5, I2C SCL, вывод последовательного тактового сигнала I2C, используется с любыми I2C comp...

Семейства микросчетчиков с K 04 по K 07 и AK 07 доступны в большом количестве моделей и могут использоваться как в приложениях постоянного, так и переменного тока. © Fritz Kübler GmbH, возможны ошибки и изменения. 03/2013. Счетчики импульсов.

Здесь используется Wire.read, а не Wire.receive. Пример соединения двух Unos для связи по I2C. ACK или NAK. На приведенном выше рисунке показано, что происходит, если ведомое устройство пытается прочитать или записать более одного байта за раз, что приведет к тому, что счетчик внутреннего адреса будет перемещаться по границе страницы.

Серия таймеров / счетчиков / анализаторов FCA3000 и FCA3100 объединяет множество различных функций в одном многофункциональном приборе. Благодаря лучшему в отрасли разрешению по частоте и времени, серия FCA в стандартной комплектации поставляется с глубокой внутренней памятью и высокой скоростью передачи данных во внутреннюю память 250 тыс. Выборок / с. Кроме того, на многопараметрическом дисплее отображаются вспомогательные измерения наряду с основным измерением ...

Счетчик импульсов arduino

Датчик пульса, который мы собираемся использовать, представляет собой датчик частоты сердечных сокращений по технологии Plug and Play.Этот датчик довольно прост в использовании и эксплуатации. Поместите палец на датчик, и он будет определять сердцебиение, измеряя изменение света от расширения капиллярных кровеносных сосудов. В центре этого сенсорного модуля также есть светодиод, который помогает определять сердцебиение.

Датчик импульсов и Arduino - интерфейс

Под светодиодом находится схема шумоподавления, которая должна препятствовать тому, чтобы шум влиял на показания. Когда происходит сердцебиение, кровь прокачивается через человеческое тело и попадает в капиллярные ткани.

Объем этих капиллярных тканей увеличивается в результате сердцебиения. Это изменение очень небольшое, но мы можем измерить его с помощью Arduino. Модуль датчика пульса имеет подсветку, которая помогает измерять частоту пульса. Когда мы кладем палец на датчик пульса, отраженный свет будет меняться в зависимости от объема крови внутри капиллярных кровеносных сосудов. Во время сердцебиения объем внутри капиллярных кровеносных сосудов будет большим.

Это влияет на отражение света, и свет, отраженный во время сердцебиения, будет меньше по сравнению со светом, в течение которого сердцебиение отсутствует в период времени, когда нет сердцебиения, или период времени между сердцебиениями, объем внутри капиллярных сосудов будет меньше.

Это приведет к более высокому отражению света. Это изменение пропускания и отражения света может быть получено как импульс на выходе импульсного датчика. Затем этот пульс можно кодировать для измерения сердцебиения, а затем запрограммировать, чтобы считывать его как число ударов сердца. Светодиод будет мигать в соответствии с частотой сердечных сокращений. В функции прерывания мы настроили таймер, который будет генерировать прерывание каждые две миллисекунды, что дает нам частоту дискретизации Гц и разрешение по времени между ударами 2 мс.

Это отключит выход ШИМ на контактах 3 и 11, а также отключит функцию тонального сигнала. Следующая функция запускается каждые 2 мс. Он снимает показания датчика пульса каждые 2 мс и увеличивает счетчик выборки.

Счетчик выборок используется для отслеживания времени, а переменная N используется для предотвращения шума. Следующие два цикла будут отслеживать самые высокие и самые низкие значения.

Инициализируется пороговая переменная, которая является средней точкой аналоговой точки.

Счетчик частоты Arduino

Эта переменная используется для отслеживания средней точки. Следующая функция будет искать сердцебиение. Вначале мы инициализировали первую долю как истинную, а вторую долю - как ложную.

Итак, если у нас есть первое чтение, то оно отбрасывается возвратом. Во втором чтении мы заполняем массив rate [], который поможет нам вычислить BPM. ВРМ фактически вычисляется из среднего значения за последние 10 раз между значениями ударов.Старое значение выпадет, а новое значение будет поступать каждый раз при запуске функции. Затем мы усреднили массив и рассчитали BPM. Мы рассчитали биение, когда значение импульса было больше порогового значения. Если последовательный монитор отображает значения быстро и при чрезмерных уровнях мощности, попробуйте подключить понижающий резистор 10 кОм к цифровому входу.

В этом разделе :. Теория мощности переменного тока. Датчики CT. Введение 2. Установка 3. Взаимодействие с Arduino 4.

Измерение напряжения.URL-адрес встроить. Базовый: Как построить монитор энергии Arduino 1. Процедура калибровки 2. Источники ошибок Emontx 3. Установка и теория калибровки трансформатора тока и адаптера переменного тока 4. Насколько хорош ваш мультиметр 5. Подсчет импульсов. История хранения таймсерий в emoncms Таймсерии с фиксированным интервалом Фиксированный интервал с усреднением Временные ряды с переменным интервалом Запись URL-адреса исследования нагрузки Вставить.

Внутреннее устройство Emoncms. Используя IDE Arduino. Другое программное обеспечение. Энергетика 3. Энергетическое исследование Сноудонии 4. Энергетическое исследование Сноудонии: данные 5.Основание на энергетической модели ZeroCarbonBritain 6. Сценарии в масштабе сообщества 7. Возобновляемое тепло 8. Модель энергии с нулевым выбросом углерода. Переменная поставка 2.

Переменное предложение и неизменный спрос 3. Переменное предложение, традиционный спрос на электроэнергию и избыточное предложение 4. Смешанное предложение и неизменный спрос 6. Электромобили 7. Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику использования файлов cookie и наши Условия использования .

Наконец-то вышла бета-версия темного режима. Измените свои предпочтения в любое время.Stack Overflow for Teams - это закрытое и безопасное место, где вы и ваши коллеги можете находить информацию и делиться ею. Дальнейшее описание: у меня есть датчик, который выдает цифровые импульсы, пропорциональные некоторому измерению, которое я хочу вычислить.

Вы можете сделать это не только без обработчика прерываний, но и без программного обеспечения или без него, а также работать с более высокой частотой следования импульсов, что возможно с помощью программного опроса или подсчета прерываний.

Все, что вам нужно сделать, это настроить оборудование для работы счетчика и прочитать регистр счетчика.Для 16-битных счетчиков на 8-битном устройстве есть небольшая сложность, но ее легко преодолеть. Arduninos на базе ARM и почти любой другой микроконтроллер будут иметь аналогичные аппаратные средства; некоторые имеют большую гибкость в отношении того, какие выводы могут использоваться для аппаратного подсчета.

На AVR у вас есть 8- и 16-битные счетчики, если вам нужны большие счетчики, вам, возможно, придется обработать прерывание переполнения. Если вы будете опрашивать счетчик регулярно, вы сможете справиться даже с этим без прерываний, имея возможность опрашивать с гораздо меньшей и, возможно, апериодической скоростью, чем частота входных импульсов, просто опрашивая флаг переполнения перед следующим переполнением.В вашем случае вам, вероятно, потребуется считывать счетчик импульсов с регулярным периодом, который короче времени, в течение которого счетчик будет переполняться при максимальной ожидаемой частоте импульсов.

Так, например, у вас может быть что-то вроде следующего: это не настоящий код, а всего лишь фрагмент:. Альтернативой, которая получит лучший линейный отклик, но недетерминированное считывание, будет опрос флага переполнения и измерение времени, затрачиваемого на подсчет фиксированного количества импульсов, и, таким образом, определение вашего измерения по времени для фиксированного количества, а не по количеству на фиксированное время.Вы можете использовать аналоговый, с небольшим количеством цифрового перед ним.

Затем отфильтруйте его R последовательно, C на землю, и повторите для многополюсника и, наконец, считайте аналоговое напряжение на последнем конденсаторе. Если он большой, пострадает время реакции, но сигнал будет более стабильным. Учить больше. Arduino - считает импульсы без прерывания Задать вопрос. Спросил 5 лет 7 месяцев назад. Последняя активность 3 года 4 месяца назад. Просмотрен 24k раз. Да, вы можете сделать это с помощью опроса, однако при этом ваш процессор будет загружен, и вы должны знать, что любое состояние, которое может длиться меньше времени, чем ваш интервал опроса, может быть пропущено.

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

Активные старые голоса. Клиффорд Клиффорд Многие ребята просили частотомер, и наконец у меня появилось достаточно времени, чтобы его изготовить. Схема имеет минимум внешних компонентов и напрямую считает частоту. В любом случае амплитуда входной частоты не должна превышать 5 В. Если вы хотите измерить сигналы более 5 В, необходимо добавить дополнительные цепи ограничения, и я покажу это в другой раз.Теперь просто сделайте это с сигналами 5 В. Подсчитываемая частота подключается к цифровому выводу 12 Arduino.

Общий синтаксис этой функции: PulseIn pin, value, time, где pin - это имя вывода, значение HIGH или LOW, а time - время, в течение которого функция будет ждать импульса. Функция возвращает ноль, если в указанное время нет действительного импульса с. Принципиальная схема частотомера на ардуино приведена ниже. Потентиметр R1 используется для регулировки контрастности ЖК-экрана.

Резистор R2 ограничивает ток через светодиод подсветки. В программе время высокого и низкого уровня входного сигнала измеряется с помощью отдельных функций pulseIn. Затем время максимума и минимума складывается, чтобы получить общий период времени сигнала. Функция pulseIn возвращает период времени в микросекундах. Затем делится на результат, чтобы получить частоту в герцах.

Программа частотомера, использующего ардуино, показана ниже. Схема может быть запитана через разъем внешнего питания 9V Arduino.

На самом деле это простая схема счетчика с использованием Arduino. Мы можем модифицировать эту схему для других приложений, таких как тахометр, счетчик вторжений и т. Д. Здравствуйте, я занимаюсь проектом удаленного мониторинга и управления генератором. Я столкнулся с некоторыми трудностями в какой-то части программы. Не могли бы вы направить меня? Это хорошо, но как насчет схемы для ограничения пикового напряжения входной частоты, а также для работы с плавающим входом - e. Я предпочитаю использовать буфер операционного усилителя с стабилитроном 3v9 между выходом и землей плюс, конечно, нагрузочный резистор.

Его также можно использовать для преобразования синусоидальных и других неквадратичных волн в прямоугольные. Уважаемый сэр. Мой проект должен сделать плату Arduino для проверки счетчика частоты. Разъем 10-60 МГц - это BNC. У меня есть старый счетчик частоты, мой босс хочет заменить его на Arduino. Мы проверили это в нашей лаборатории!

Автор praveen. Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику конфиденциальности и Условия использования. Arduino Stack Exchange - это сайт вопросов и ответов для разработчиков оборудования и программного обеспечения с открытым исходным кодом, совместимого с Arduino.Регистрация займет всего минуту. Вот код, который у меня есть. Мне кажется, он работает отлично. Моя единственная проблема в том, что он возвращает это число только один раз при сбросе платы.

Теперь, если я перенесу тот же код в пустую петлю, он будет подсчитывать последовательно, давая мне непостоянные результаты. Я не понимаю, что мне нужно поместить в секцию цикла, чтобы я мог многократно и точно подсчитывать, сколько переключений входного контакта я получаю в течение определенного периода времени, чтобы я мог что-то сделать с выходом на основе наличия 12 , Гц сигнал или нет.

Теперь я хочу получить тот же результат, но повторять снова и снова. Таким образом, если сигнал пропадет, я могу запустить выход, чтобы выключить LOW. Когда сигнал присутствует, на выходе будет высокий уровень. Моя попытка заключалась в том, чтобы переместить прерывание присоединения в пустую петлю, чтобы оно повторялось.

Вот как это выглядит. Я получаю самообновление, но «счетчик» вместо того, чтобы начинать с 0, каждый раз начинается с предыдущего счета. Так он становится все больше и больше. Вам необходимо сбросить IRQCount обратно на 0 перед повторным присоединением прерывания.В противном случае он просто продолжит отсчет с того места, где остановился в прошлый раз. Я бы фактически оставил прерывание прикрепленным и просто сбросил бы переменную непосредственно перед задержкой.

Это может привести к случайным ошибкам в значении. Зарегистрируйтесь, чтобы присоединиться к этому сообществу. Лучшие ответы голосуются и поднимаются наверх. Главная Вопросы Теги Пользователи без ответа. Подсчет импульсов с прерыванием Задать вопрос.Страницы: [1]. Тема: Счетчик импульсов с таймером?

Код Arduino - простой счетчик

раз прочитано предыдущая тема - следующая тема.Счетчик импульсов с таймером? Я пока не нашел способа использовать таймеры Arduino в качестве счетчиков импульсов. Я бы хотел, чтобы счетчик собирал импульсы, чтобы я мог читать накопленные импульсы из регистра счетчика, сбрасывать счетчик и позволять ему продолжать работу. Меня не интересуют ни частота, ни длительность импульса, ни время между ними.

Подсчет событий с помощью Arduino и PCF8583

Вся математика будет выполняться в другом месте. Частота этих импульсов варьируется от одного раза в 5 минут до 10 кГц. Есть какие-нибудь примеры? Я не нашел.Я использую счетчики в других средах около 30 лет и достаточно знаю об электронике. Re: Счетчик импульсов с таймером? Цитата: Mistofeles 23 марта, PM. Настроить прерывание для подсчета импульсов на входном выводе легко.

Простой, простой, однострочный обработчик прерываний. Код: [Выбрать]. Пожалуйста, не пишите мне в личку с техническими вопросами. Разместите их на форуме. Теперь я не понимаю, что было не так в моем сообщении. Я сказал, что хочу использовать счетчик таймера.

Я очень хорошо умею считать один, два, три, здесь нет проблем.И я не понимаю, почему вы говорите, что Arduino должен использовать больше контактов при подсчете импульсов. Я бы понял, если вы хотите использовать синхронный счет, но большинство счетчиков позволяют выбрать также асинхронный режим. Это означает подсчет в режиме запуска по фронту. Другие подпрограммы системы настолько чувствительны ко времени, что использование прерываний не дает ответа. Страницы: [1] 2 3.

Тема: Высокая скорость подсчета импульсов? Прочитал раз предыдущую тему - следующую тему. Высокоскоростной счет импульсов? Здравствуйте, я новичок в Arduino, но я очень опытный программист.Пару лет назад я сделал свой собственный контроллер ПЛК для своей индукционной ветряной турбины. Сейчас я заинтересован в создании микроконтроллера для моей ветряной турбины, поэтому у меня есть несколько вопросов: я хотел бы взаимодействовать с энкодером 24 В, импульсный на оборот, поэтому я буду использовать оптоизолятор.

В моем текущем контроллере ПЛК мне пришлось купить специальную «высокоскоростную» карту, чтобы сделать это очень дорого! Я предполагаю, что это будет сложно сделать с Arduino. Я готов изменить энкодеры на более низкое значение PPR - но мне было интересно, что кому-нибудь, хотя должно быть максимальное значение импульса PPR на один оборот энкодера?

Мне интересно, достаточно ли он быстр, чтобы я мог использовать стандартный входной вывод, или я должен использовать прерывание.Любые советы по этому поводу также будут оценены! Re: Высокая скорость подсчета импульсов?

Это возможно с прерываниями по таймеру на 12 мкс. Я бы посмотрел на использование предделителя или внешнего счетчика. Вы смотрите на 20 кГц, что на самом деле не так быстро для Arduino, но зачем тратить микроконтроллер только на подсчет, он должен быть занят другими задачами более высокого уровня. Насколько точно и как часто нужно контролировать скорость? Я хотел бы контролировать скорость примерно на уровне 20 Гц - посчитайте, сколько импульсов каждые 50 мс, и рассчитайте по нему обороты.Это звучит более осуществимо?

RuggedCircuits Guest. Это квадратурный энкодер или однолинейный энкодер? Если однострочный, вы можете захотеть использовать функцию захвата ввода микроконтроллера. Я не думаю, что для этого есть высокоуровневая функция Arduino, но вы всегда можете работать с регистрами чипа на более низком уровне. Это даст вам разрешение за один цикл в периоде i. Использование прерываний даст вам хорошую точность, но будет дрожание и задержка в зависимости от того, что еще происходит в системе.

Прерывания

- в значительной степени единственное решение, если у вас есть квадратурный энкодер, если вы не хотите игнорировать одну из квадратурных линий и вернуться к случаю однолинейного энкодера. И я не думаю, что есть необходимость в оптоизоляции, если можно соединить заземления вместе; просто используйте делитель напряжения, чтобы сбить 24V до 5V.

Да, я использую четырехканальный энкодер, но использую только одну «последовательность импульсов». Мне не нужна информация о направлении, так что, по сути, это однострочный энкодер для того, как я его использую.Я начинаю склоняться к использованию низкого значения PPR и подсчета времени, прошедшего между импульсами - это должно быть намного менее требовательно. Я не понимаю, что вы имеете в виду, говоря о том, что заземлите вместе, чтобы устранить оптоизоляцию, не могли бы вы объяснить? У меня нет большого опыта работы с электронными схемами, но я пытаюсь научиться!

Можете ли вы предоставить ссылку на кодировщик, который вы используете, ссылка на техническое описание была бы хорошей.


Измерение и мониторинг электроэнергии в доме

В этом руководстве объясняется, как преобразовать счетчики импульсов в допустимый выходной формат с помощью платы Arduino.

Требуется немного технических и программных знаний.

Материал:

Теперь я объясню, как контролировать счетчики электроэнергии, газа и воды с помощью простых «импульсных» датчиков. Для интерфейса вам подойдет Arduino. Преимущество этой платформы в том, что она дешевая, простая, с открытым исходным кодом, и вы сможете найти множество типов датчиков, которые наверняка будут соответствовать вашим потребностям.

Если у вас есть какая-либо электрическая производственная система, вам понадобится дополнительный счетчик на стороне подключения и .Если вы выбираете счетчик импульсов, выберите тот, у которого есть выход S0, который выводит импульс на Втч или более.

Уже много лет я использую измеритель SDM Eastron с интерфейсом RS-485, дешевый, точный и более удобный.

Изменения в электрической установке должны выполняться квалифицированным специалистом. Я не шучу, это связано с высоким напряжением, которое может нанести серьезный ущерб вам или вашему дому!

Для газового счетчика я использовал дешевый инфракрасный барьерный датчик, чтобы обнаружить отражающую часть на отверстии с шестью цифрами (иногда она может быть с цифрой 9 или нулем).Настройка потенциометра на хорошую чувствительность была игрой терпения! ..
Тем не менее, я столкнулся со многими проблемами с этим методом, особенно когда повышение температуры резистора менялось и приводило к ложным импульсам. Также я иногда получал неправильные импульсы, если солнечный свет отражал датчик.

Затем я нашел действительно чувствительный датчик Холла, который обнаруживает магнит и идеально подходит для моих нужд, Allegro A3213EUA-T или A3214. Этот точный, он может определять поляризацию (север / юг), и мой счетчик больше не дрейфует!

Для счетчика воды я использую разумный и дорогой геркон (кашель), купленный у моего поставщика водопровода.

Очень важно выбрать подходящие датчики, некоторые из них могут быть недостаточно чувствительными. В общем, принцип заключается в подсчете информации о включении / выключении. Также будьте осторожны при прокладке кабелей, это должно быть сделано правильно .

Связь:

Poolmeter приведен в качестве примера, он не является частью проекта meterN.

Поскольку каждая установка отличается, я, к сожалению, не могу создать портативное приложение, поэтому вам придется собрать его самостоятельно. Но не бойтесь, вот немного теории;)

Плата Arduino должна быть выделена для подсчета.Leonardo имеет 4 аппаратных прерывания, настоятельно рекомендуется использовать прерывания для счетчиков быстрых импульсов, а не для цифровых входов, поскольку он обеспечивает обнаружение импульсов, а не что-то еще.
Когда прерывание обнаруживает импульс, оно останавливает текущий код, чтобы сделать что-то более важное: подсчет! У каждого прерывания также есть приоритет, чем ниже номер прерывания, тем выше приоритет.
Тогда ваш более быстрый измеритель должен быть на внутр. 0, и я буду использовать его для электросчетчика. Остерегайтесь int.номер не соответствует номеру контакта.

Для газового счетчика импульсы медленные, затем я использую цифровой вход для измерения допустимой длительности импульса.

Если вы используете цепь с разомкнутыми контактами, такую ​​как выход S0, вам необходимо установить понижающий резистор. Если вы этого не сделаете, ваш кабель будет вести себя как антенна, а Arduino достаточно чувствителен, чтобы обнаруживать действительно низкий уровень напряжения.
Если ваш датчик необходимо отключить, никогда не оставляйте входную цепь разомкнутой, вам нужно «заземлить» его, иначе у вас может быть постоянное прерывание.
Некоторым датчикам требуется подтягивающий резистор, например датчикам Холла.

Код poolmeters.ino определяет спад счета прерываний для электросчетчика, цифровые входы для водяного и газового.

Некоторые импульсы могут быть несовершенными, и поскольку Arduino достаточно быстрый, он может обнаруживать несколько падающих фронтов в одном. Один из приемов заключается в использовании RC-цепи или, проще говоря, в обнаружении импульсов, длительность которых превышает определенное время. Импульсы электросчетчика имеют длину около 50 мс, я установил порог 30 мс.

Если ваш датчик шумит, как мой геркон для водяных импульсов, вы также можете использовать оптоизолятор или триггер Шмитта для фильтрации сигналов.

Вы поняли самое сложное! Теперь все, что нужно, - это общаться. Формат вывода, нестабильный с помощью meterN, описан в инструкции.

Основной пул:

Поскольку счетчик всегда должен увеличиваться до тех пор, пока он не пройдет, и не может вернуться к нулю (после всплеска или при сбросе Arduino), решение состоит в том, чтобы прочитать последнее записанное значение в ежедневном CSV и увеличить эту запись с подсчетом в течение 5-минутного периода объединения.Затем обнулить счетчик arduino и так далее ..
Это означает, что даже если meterN или регистратор остановлены, счетчик всегда будет увеличиваться и измеряться, пока на Arduino подается питание!
Это то, что делает пример скрипта pooler.php.

Пулы на панели инструментов:

Измеритель, который часто увеличивается, как электрический выход S0, может посылать время между двумя импульсами. Это время можно экстраполировать на другое значение: чем меньше время, тем больше вы потребляете.
Например, для электросчетчика: время 1716 мс также дает (1000 * 3600) / 1716 = ~ 2098 Вт!
Имейте в виду, что если вы потребляете мало, время обновления между двумя импульсами может быть большим.На счетчике 1000 импульсов / кВтч он обновляется примерно с секунды при потреблении 3500 Вт до ~ 3,6 секунды при 1000 Вт и только каждые ~ 36 секунд при 100 Вт.

Если ваш счетчик работает медленно и не обновляет часто, как счетчик газа, на самом деле бесполезно знать средние значения в течение длительного времени.
Если счетчик недавно получил импульс, это означает, что ваше устройство работает. Таким образом, значение может возвращать «Вкл» или «Выкл», если последний импульс слишком старый.

Все вышеперечисленное должно быть закодировано в соответствии с вашей установкой.

Для общения с компьютером я использую pyserial, модуль Python, который упрощает доступ к последовательному порту.Ознакомьтесь с файлом readme в примере poolmeter для получения более подробной информации.

счетчик импульсов rpc · PyPI

# счетчик импульсов-rpc #

Пакет шаблонов для проекта удаленного вызова процедур (RPC), использующий [ базовый узел-rpc ] [3].

## Обзор ##

В этой упаковке:

  • Прошивка совместимая с Arduino Uno или Mega2560.
  • Устанавливаемый пакет Python для взаимодействия с прошивкой Arduino через последовательный порт или i2c (через прокси-сервер serial-to-i2c).

## Установить ##

Пакет Python можно установить через pip , используя следующую команду:

pip install pulse-counter-rpc

## Загрузить прошивку ##

Чтобы загрузить предварительно скомпилированную прошивку, включенную в пакет Python, запустите следующая команда:

python -m pulse_counter_rpc.bin.upload <тип платы>

замена <тип платы> на uno или mega2560 , в зависимости от модель доски.

Будет предпринята попытка загрузить микропрограммное обеспечение путем автоматического обнаружения последовательный порт. В системах с несколькими последовательными портами используйте командную строку -p аргумент для указания используемого последовательного порта. Например:

python -m pulse_counter_rpc.bin.upload -p COM3 uno

## Использование ##

После загрузки прошивки на плату класс pulse_counter_rpc.Proxy может быть используется для взаимодействия с устройством Arduino.

Пример использования см. В журнале сеанса ниже.

### Пример интерактивного сеанса ###

 >>> из серийного импорта Последовательный
>>> from pulse_counter_rpc import Proxy
 

Подключиться к последовательному устройству.

 >>> serial_device = Serial ('/ dev / ttyUSB0', скорость передачи = 115200)
 

Инициализировать прокси-сервер устройства, используя существующее последовательное соединение.

 >>> прокси = Прокси (серийное_устройство)
 

Запрос количества байтов, свободных в ОЗУ устройства.

 >>> proxy.ram_free ()
409
 

Запрос описательных свойств устройства.

 >>> proxy.properties ()
base_node_software_version 0.9.post8.dev141722557
имя pulse_counter_rpc
производитель Wheeler Lab
URL-адрес http: //github.com/wheeler-microfluidics/rpc-p ...
версия_программного обеспечения 0.1
dtype: объект
 

Интерактивное использование методов API Arduino.

 >>> # Установить вывод 13 как выход
>>> proxy.pin_mode (13, 1)
>>> # Включите светодиод
>>> proxy.digital_write (13, 1)
>>> # Выключите светодиод
>>> proxy.digital_write (13, 0)
 

### Конфигурация и состояние ###

Устройство хранит конфигурацию и состояние . Конфигурация сериализован и хранится в EEPROM, что позволяет сохранять настройки на устройстве сбрасывается.Состояние сохраняется в памяти устройства и каждый раз инициализируется заново. устройство запускается.

Распечатать (не по умолчанию) значения конфигурации.

 >>> распечатать proxy.config
серийный_номер: 2
baud_rate: 115200
i2c_address: 17
 

Параметры конфигурации можно установить, обновив конфигурацию.

 >>> result_code = proxy.update_config (серийный_номер = 1234)
>>> result_code = proxy.update_config (i2c_address = 32)
 

Чтобы сохранить изменения в конфигурации , при сбросе устройства - , а не состояние - используйте save_config метод.

 >>> proxy.save_config ()
 

### Другие методы ###

Ниже приведен список атрибутов класса Python pulse_counter_rpc.Proxy . Примечание что многие функции [Arduino API] [1] (например, pin_mode , digital_write , и т. д.) предоставляются через RPC API.

 >>> прокси.
proxy.analog_read proxy.microseconds
proxy.analog_write прокси.миллисекунды
proxy.array_length имя_прокси
proxy.base_node_software_version proxy.on_config_baud_rate_changed
proxy.begin proxy.on_config_i2c_address_changed
proxy.buffer_size proxy.on_config_serial_number_changed
proxy.channel_count proxy.on_state_frequency_changed
proxy.config proxy.on_state_voltage_changed
proxy.delay_ms proxy.pin_mode
proxy.delay_us прокси.характеристики
proxy.digital_read proxy.ram_free
proxy.digital_write proxy.read_eeprom_block
proxy.echo_array proxy.reset_config
proxy.get_buffer proxy.reset_state
proxy.i2c_address proxy.save_config
proxy.i2c_available proxy.serialize_config
proxy.i2c_buffer_size proxy.serialize_state
proxy.i2c_read proxy.set_i2c_address
proxy.i2c_read_byte прокси.set_state_of_channels
proxy.i2c_request proxy.software_version
proxy.i2c_request_from proxy.state
proxy.i2c_scan proxy.state_of_channels
proxy.i2c_write proxy.str_echo
proxy.load_config proxy.update_config
proxy.manufacturer proxy.update_eeprom_block
proxy.max_i2c_payload_size proxy.update_state
proxy.max_serial_payload_size proxy.url
 

## Разработка прошивки ##

Прошивка / скетч Arduino находится в каталоге pulse_counter_rpc / Arduino / pulse_counter_rpc каталог.Ключевые функции определены в классе pulse_counter_rpc :: Node в файл Node.h .

Выполнение следующей команды создаст микропрограмму с использованием [SCons] [2] для Arduino Uno и Arduino Mega2560 и упакует полученную прошивку в Пакет Python, готовый к распространению.

асфальтоукладчик sdist

### Добавление новых методов удаленного вызова процедур (RPC) ###

Новые методы могут быть добавлены в RPC API путем добавления новых методов в pulse_counter_rpc :: Node класс в файле Node.h .

# Автор #

Авторские права 2015 Кристиан Фобель

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *