Частотомер на PIC16F628A

На рисунке показана схема простого частотомера созданного на основе микроконтроллера PIC16F628A. Частотомер измеряет частоту от 2 Гц до 10 МГц, результат измерения выводится на первую строку индикатора 1602А, во второй строке отображается период измеряемого сигнала от 100 нс до 500 мс. Время измерения 1 секунда.

Сигнал уровня ТТЛ можно непосредственно подавать на вход частотомера через конденсатор емкостью 100 пФ, для расширения возможности частотомера можно собрать усилитель формирователь, который повышает чувствительность до 50 мВ и защищает вход частотомера от перегрузок.

Прошивка — Freq_F628_hastotomer.hex

Comments

  1. Скажите пожалуйста, а на сколько разрядов расчитана ваша схема? Мне крайне важны цифры индикации после запятой, минимум в пятикратном разряде. Например частоту 5Гц мне просто необходимо увидеть вот так: 5,000036 Гц. А также мне крайне важно, чтобы частотомер мог легко отличить частоты, например: 7,000063 Гц от 7,000064 Гц. Ваша схема сможет справиться с этой задачей?

    1. Нет, эти схемы не имеют такой точности, тем более на низкой частоте. Вам нужно измерять период, а не частоту. А эти схемы просто считают кол-во импульсов за 1 секунду. Конечно на ардуино можно поэкспериментировать, увеличить время счета до 100 секунд, тогда конечно можно получить приемлемую точность.

      1. Жаль.. Очень жаль. Я уже весь интернет перелопатил в поисках такого частотомера.. Единственно нашел что-то подходящее вот здесь: https://www.radiokot.ru/konkursCatDay2017/16/ , но данная схема сложная для меня. Просто могу её не осилить. Да и компоненты к ней нужно где-то доставать…

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

        1. Вот пример скетча для Arduino:
          #include

          void setup() {
          Serial.begin(57600);
          FreqMeasure.begin();
          }

          double sum=0;
          int count=0;

          void loop() {
          if (FreqMeasure.available()) {
          // average several reading together
          sum = sum + FreqMeasure.read();
          count = count + 1;
          if (count > 30) {
          float frequency = FreqMeasure.countToFrequency(sum / count);
          Serial.println(frequency,5);
          sum = 0;
          count = 0;
          }
          }
          }
          Частотомер измеряет период колебаний, тридцать раз, суммирует результат и делит его на 30. Период достаточно точно измеряет. Если частота 5 Гц то период 0,2 сек * 30, то время измерения 6 секунд. Если увеличить время измерения до 60 циклов, то точность будет еще больше.
          В данном примере частота выводится до 5-го знака после запятой, какова реальная точность я не знаю, это надо собирать схему и тестировать.
          На PIC контроллерах можно конечно такое реализовать, но я не задавался таким вопросом.

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

Войти с помощью: