Jump to content

Измерение частоты ESP32 (с помощью PCNT)


Recommended Posts

Posted (edited)

Всем привет!

Измеряю частоту с помощью аппаратного модуля Pulse Counter (PCNT) ESP32. При измерении частоты генерируемой самой ESP32 (с помощью LEDC), всё идеально, показания измеренной частоты точь-в-точь как заданные. Но стоит подключить другой источник импульсов, как начинается небольшая пляска показаний (переодические завышения на несколько Герц, график во вложении). В качестве альтернативного источника сигнала ATMega8, которая генерирует квадратные импульсы с помощью аппаратного таймера.

  1. К источникам сигнала вопросов нет, так как при измерении мультиметром, показания в точности до 1 Герца равны заданным (и ESP32 и ATMega8 выдают точные значения частоты);
  2. К способу измерения тоже нет вопросов, так как импульсы генерируемые самой ESP32 замеряются с точностью до 1 Гц;
  3. Остаётся только вопрос к схематическому подключения внешнего источника частоты к ESP32.

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

Подскажите пожалуйста, как мне нужно изменить схему, чтобы избавиться от шума? Или укажите где ещё я ошибаюсь...

Спойлер

5.jpg.e6f63ed0d838621f8c98dff662ce2cbf.jpg

6.jpg.400e4f95e1c1b38e8b3c6f0f15e5dc96.jpg

7.JPG.69e0c2fadb3c5159ac4a0f48689df1ad.JPG

 

Edited by -=FISHER=-

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Link to comment
Share on other sites

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Я бы не был так уверен в 1 и 2.

Какого порядка частоты вообще?

Как в ESP32 сделан отсчёт времени? 

В качестве источника импульсов лучше взять аппаратный генератор с кварцем. И делитель по необходимости.

Link to comment
Share on other sites

@-=FISHER=- , дело скорее всего в биениях частот. Посмотрите внимательнее алгоритм измерения частоты. Какая длительность окна счёта импульсов. Сколько туда попадает импульсов при измерении частоты 136 Гц. Какая получается погрешность при отсчёте с точностью ±1 импульс.

Ну и с входным формирователем вы что-то намудрили. Зачем полевику питание 12 В? И 10 кОм на +3,3 В это многовато. Фронты будут сильно завалены, верхняя частота сильно ограничена.
1213983253_.png.90340993bfcfd1cc927f13e0542de97b.png

Я бы заменил R4 хотя бы на 1 кОм, диод и R3  выкинул бы, и соединил бы сток полевика непосредственно с R4 и со входом контроллера. Заодно уровень нуля будет ниже, помехозащищённость выше.

Link to comment
Share on other sites

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Posted (edited)
9 минут назад, ChePay сказал:

Какого порядка частоты вообще?

Интересует точное измерение на отрезке 20 Гц - 400 Гц

9 минут назад, ChePay сказал:

Как в ESP32 сделан отсчёт времени? 

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

 

5 минут назад, Lexter сказал:

Ну и с входным формирователем вы что-то намудрили. Зачем полевику питание 12 В?

Так как в конечном итоге измеряться будет сигнал именно 12 В.

 

5 минут назад, Lexter сказал:

И 10 кОм на +3,3 В это многовато.

Хорошо попробую сократить, но думаю основная проблема не в этом.

 

5 минут назад, Lexter сказал:

Я бы заменил R4 хотя бы на 1 кОм, диод и R3  выкинул бы

Они тут не случайно, выкинуть их нельзя...

5 минут назад, Lexter сказал:

Посмотрите внимательнее алгоритм измерения частоты.

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

6 минут назад, Lexter сказал:

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

250 мс

Edited by -=FISHER=-

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Link to comment
Share on other sites

Секреты депассивации литиевых батареек FANSO EVE Energy

Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Posted (edited)
6 минут назад, -=FISHER=- сказал:

в конечном итоге измеряться будет сигнал именно 12 В.

Ну и при чём тут напряжение его питания? Уровень входного сигнала ограничен только максимально-допустимым напряжением "затвор-исток", указанным в даташите. Обычно это порядка ±20 В.

6 минут назад, -=FISHER=- сказал:

Они тут не случайно, выкинуть их нельзя.

А вот тут поподробнее, пожалуйста. Очень интересно послушать. Я люблю всякую чушь слушать. :D

Edited by Lexter
Link to comment
Share on other sites

1 минуту назад, Lexter сказал:

А вот тут поподробнее, пожалуйста. Очень интересно послушать.

Хорошо. Если в этой схеме убрать диод, то +12 В попадёт прямо на пин ESP.

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Link to comment
Share on other sites

@-=FISHER=- Не надо выдёргивать из объяснений только то, что вам нравится. Читайте целиком. Сначала выбрасывается питание +12 В, потом диод. Нафиг тут не нужна вся эта тряхомудия. :D

Link to comment
Share on other sites

10 минут назад, Lexter сказал:

дело скорее всего в биениях частот

Биения частот по какой причине? Мой мультиметр очень быстро реагирует на изменения частоты, однако, показания не дёргаются даже на сотые доли Герца, когда я замеряю частоту которую формирует ATMega8. 

Только что, Lexter сказал:

Сначала выбрасывается питание +12 В

Я не могу выбросить к сожалению. Мне нужно измерять сигнал, напряжение которого +12 В.

Схема формирователя частоты, приведённая выше - тестовый стенд. Если что-то и можно в ней выкинуть, то в итоге отвалится всё, кроме сигнала, который нужно измерять, а его напряжение +12В.

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Link to comment
Share on other sites

Только что, -=FISHER=- сказал:

Биения частот по какой причине?

По очень элементарной - генераторы не синхронны.

1 минуту назад, -=FISHER=- сказал:

мультиметр очень быстро реагирует на изменения частоты, однако, показания не дёргаются

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

Напишите параметры своего алгоритма. Раз дёргается - значит скорее всего с ним что-то не так. Не надо искать под фонарём. Ищите там, где вероятно потеряли.

Link to comment
Share on other sites

3 минуты назад, Lexter сказал:

По очень элементарной - генераторы не синхронны.

Можете чуть подробнее обьяснить, что вы имеете в виду?

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Link to comment
Share on other sites

Posted (edited)

Вот это:

1 час назад, -=FISHER=- сказал:

При измерении частоты генерируемой самой ESP32 (с помощью LEDC), всё идеально, показания измеренной частоты точь-в-точь как заданные. Но стоит подключить другой источник импульсов, как начинается небольшая пляска показаний

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

Если "окно" слишком короткое, и попадает в него, например, то 10, то 9  импульсов, то "болтание" измеренной частоты будет порядка 10%.

Edited by Lexter
Link to comment
Share on other sites

Период для 20 Гц = 50 мС, для 400 Гц = 2,5 мС, период счета 250 мС. То есть при измерении 400 Гц получим 100 отсчетов, а это аж - 4 Гц  (1%) при рассинхроне. При измерении 20 Гц все еще плачевнее - 4 Гц будет соответствовать 20%. Явно нужно менять алгоритм измерения частоты!

Link to comment
Share on other sites

12 минут назад, Lexter сказал:

Если "окно" слишком короткое, и попадает в него, например, то 10, то 9  импульсов, то "болтание" измеренной частоты будет порядка 10%.

Спасибо.

 

4 минуты назад, korsaj сказал:

Явно нужно менять алгоритм измерения частоты!

Спасибо.

 

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

Вообще задача заключается в том, чтобы быстро среагировать, если частота превысит пороговое значение, которое задаётся в процессе работы. И может быть в диапазоне 20 - 400 Гц с шагом примерно в 15 Гц.

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Link to comment
Share on other sites

Запустите таймер и пусть считает, по фронту сигнала запоминайте значение счетчика таймера, по следующему фронту получите новое значение и вычтите из него старое и так по кругу

Link to comment
Share on other sites

Может быть и не стоит писать полноценный тахометр, может бысть есть путь проще и точнее?

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Link to comment
Share on other sites

Конечно - купить готовый - самый простой путь.

В современных мк есть захват по внешнему сигналу - самый точный метод измерения.

Ну и конечно ЕСП32 для тахометра - совсем малюсенький ПЕРЕБОРИЩЕ.

Link to comment
Share on other sites

20 минут назад, -=FISHER=- сказал:

нужно реагировать на изменение частоты довольно быстро.

Для измерения низких частот можно измерять длительность периода. Тактовая частота у вас высокая, так что вероятно точность измерения будет достаточной. А меньше периода измеряемой частоты сделать время её измерения теоретически невозможно.

Ну и поднять точность можно усреднением измерений. Со временем индикация измеренной частоты будет "устаканиваться".

Link to comment
Share on other sites

16 часов назад, korsaj сказал:

Конечно - купить готовый - самый простой путь.

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

 

16 часов назад, korsaj сказал:

В современных мк есть захват по внешнему сигналу - самый точный метод измерения.

Разве это как раз не PCNT у ESP32 ?

 

16 часов назад, korsaj сказал:

Ну и конечно ЕСП32 для тахометра - совсем малюсенький ПЕРЕБОРИЩЕ.

Да согласен, даже для всего моего проекта это перебор, изначально я реализовал его на ESP8266. Я пользовался вот этой библиотекой, которая тоже считает количество прерываний за интервал времени. И она отлично работает, но есть так же некоторые всплески при измерении частоты. Поэтому, хотелось бы уточнить, можно ли напрямую заводить сигнал на пин МК (сигнал +12В)? Проблема не в этом?

9.jpg.9087577d537a6ffaf34f43ce54064599.jpg

 

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Link to comment
Share on other sites

7 минут назад, -=FISHER=- сказал:

Разве это как раз не PCNT у ESP32 ?

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

13 минут назад, -=FISHER=- сказал:

которая тоже считает количество прерываний за интервал времени.

Как раз не так. Она считает количество тиков между фронтами (либо спадами, как настроить).

15 минут назад, -=FISHER=- сказал:

хотелось бы уточнить, можно ли напрямую заводить сигнал на пин МК (сигнал +12В)? Проблема не в этом?

Нет, напрямую нельзя, только через ограничитель. И проблема точно не в этом.

Link to comment
Share on other sites

9 минут назад, korsaj сказал:

Она считает количество тиков между фронтами (либо спадами, как настроить).

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

 

17 часов назад, -=FISHER=- сказал:

Вообще задача заключается в том, чтобы быстро среагировать, если частота превысит пороговое значение, которое задаётся в процессе работы. И может быть в диапазоне 20 - 400 Гц с шагом примерно в 15 Гц.

 

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Что для меандра будет работать в два раза быстрее.

Link to comment
Share on other sites

Posted (edited)

При условии что сигнал действительно меандр.

Я видел разное в авто и импульс и меандр и не совсем меандр.

Механические тахометры сильно зависели от длительности импульса, а вот электронным главное период, ну а потом пошли с кан шиной, там уже главное данные )

Edited by korsaj
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...