Измерение частоты с помощью Arduino (аналоговый вход переменного тока)

Что я хочу сделать: Для измерения частоты аналогового сигнала переменного тока, генерируемого электродинамическим шейкером с пиковым напряжением 10 В, с помощью Arduino Uno.

Что я пробовал: Попытался использовать схему, похожую на оптопару (с использованием транзистора 2N2222), чтобы принимать импульсный вход, используя функцию pulsein(). Однако продолжительность всегда возвращается как 0.

Мои вопросы:

  • Является ли этот метод приемлемым способом измерения частоты?
  • Что я могу сделать неправильно, если продолжительность времени всегда возвращает 0?
  • Есть ли более простой способ выполнить эту работу?

Выложит код, если его попросят. Однако в основном это просто определение нескольких переменных (для выводов, длительности и т. д.), а затем использование функции pulsein.

Вот изображение принципиальной схемы

, 👍3

Обсуждение

Пожалуйста, предоставьте схему или проводку, как у вас подключен сигнал к Arduino. Какую форму имеет сигнал? Вы выполняете какую-то предварительную обработку или просто полагаетесь на триггер Шмитта внутри цифрового входа Arduino?, @chrisl

Я добавил принципиальную схему. Я не использую триггер Шмитта, поскольку мой профессор объяснил мне, что схема, которую я использую, преобразует сигнал переменного тока в импульсы, которые могут быть прочитаны цифровыми входными контактами Arduino. Однако я признаю, что я не инженер-электронщик, поэтому мои знания об этом весьма ограничены., @Tejas Bhagoliwal

Попробуйте добавить резистор между базой и эмиттером транзистора, чтобы заземлить базу, когда фототранзистор оптопары не проводит ток. Это должно предотвратить плавание базы транзистора. Хотя это только предположение, что это проблема. Можете ли вы наблюдать сигнал и выходной сигнал схемы с помощью осциллографа?, @chrisl

Выход, как показано, поступает на цифровой вывод Arduino. Я посмотрел на входной сигнал, чтобы убедиться, что он действительно синусоидальный. Однако я не смотрел на результат. Я сделаю так. Спасибо за ваш вклад!, @Tejas Bhagoliwal

1. Почему транзистор? Оптопара уже включает в себя (фото)транзистор, так зачем добавлять еще один? 2. pulseIn() измеряет длину импульса, т.е. время между нарастающим фронтом и следующим спадающим фронтом (или наоборот). Для измерения частоты вам необходимо время между двумя последовательными нарастающими (или спадающими) фронтами. 3. Какой диапазон частот вы хотите измерить? Какая точность вам нужна? Существует множество методов измерения частоты, и «подходящий» для вас зависит от ваших требований., @Edgar Bonet


2 ответа


2

В этом проекте есть частотомер.

https://www.instructables.com/id/Oscilloscope-in-a- Спичечный коробок-Arduino/

Со страницы проекта: Этот осциллограф стоит столько же, сколько Arduino Nano (2 фунта и дисплей (3 фунта) плюс несколько пенсов за резисторы и т. д. Его спецификация:

  • максимум 1 млн выборок в секунду, минимум – 1000 выборок в секунду
  • 8 бит на выборку
  • 0–5 В пост. тока; AC +/- 550 мВ, AC +/- 117 мВ, AC +/- 25 мВ
  • USB-приложение для ПК или встроенный дисплей
  • может работать от батареи
  • дополнительный логический дисплей
  • дополнительный частотомер
  • дополнительный вольтметр
  • дополнительный генератор сигналов

Мой комментарий: я создал его, это хороший небольшой проект, а автор — опытный программист.

,

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

@chrisl: спасибо за информацию, готово, @Edgar


0

Является ли этот метод приемлемым способом измерения частоты?

Нет, совсем нет.

Что я могу сделать не так, чтобы продолжительность времени всегда возвращала 0?

Вы неправильно используете pulsein(), он так не работает; поищите документацию по нему!

Есть ли более простой способ выполнить эту работу?

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

,