Вычисление скорости оборотов

Захват, обработка и генерирование сигнала
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Вычисление скорости оборотов

Сообщение Artem.spb »

Вопрос из разряда тупых, но я завис на нём.
Стоит датчик на колесе, каждый оборот даёт импульс. Скорость порядка 6-7 об/сек.
Беру выборку 10 р/сек, т.е не в каждой выборке есть импульс. Да и обороты будут падать, так что надо уметь обрабатывать пустой кусок.
Мой алгоритм:
если импульс есть, я запоминаю его индекс. И считаю разность между последним и текущим импульсом.
Если импульса нет, я считаю, что он был в последнем отсчёте, но индекс последнего не обновляю. Таким образом, если импульсов нет, скорость постепенно затухает.

На словах хорошо, а на деле такая ёлка
blob.png
сам расчёт так выглядит:
freq1.png
freq2.png
Что не так с алгоритмом, или может. я очевидную ошибку в проге сделал, но не вижу её?
Как считают скорости встроенные в драйвер алгоритмы?

в приложении
tt- кусок кода в Lv14
tt2 - попытка сохранить в 12, но не факто, что откроется, ошибки какие-то выдавала система.
Вложения
tt.zip
(54.44 КБ) 187 скачиваний
tt2.zip
(39.37 КБ) 156 скачиваний
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Вычисление скорости оборотов

Сообщение Blackman »

А почему нельзя использовать Waveform Peak Detection.vi?
"Finds the locations, amplitudes, and second derivatives of peaks and valleys in Signal In"
На FP частота опроса вроде бы 100 Гц, как бы что надо для процесса 7 оборотов в секунду. А по тексту выборка 10 р(points?)/сек?
По расчету макс скорость не более 420 rpm, а на графике 600.
А как посмотреть сигнал с датчика? Длительность импульса в заявленном диапазоне скорости?
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: Вычисление скорости оборотов

Сообщение IvanLis »

Artem.spb писал(а):Вопрос из разряда тупых, но я завис на нём.
Стоит датчик на колесе, каждый оборот даёт импульс. Скорость порядка 6-7 об/сек.
Артем, а что если пойти по более простому пути и использовать принцип "конденсаторного" частотометра.
1. Брать сигнал определенной длительностью, например 1 сек.
2. Нормировать его, например в диапазон 0..1, можно попробовать еще и дискретизировать на два уровня "0"-"1".
3. Полученный сигнал интегрировать, это значение будет прямо пропорционально количеству импульсов, останется только немного подстроить коэффициент пропорциональности.

Высокой точности на таких частотах и аналоговом сигнале не достигнуть все равно.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Вычисление скорости оборотов

Сообщение Borjomy_1 »

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

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Вычисление скорости оборотов

Сообщение Blackman »

Чем выше будет частота опроса, тем точнее можно вычислять скорость.
Для измерения периода сигнала с частотой ~10 Гц с хорошей точностью, частоты опроса 100 Гц действительно будет маловато.
Вложения
Измерение периода сигнала для блока данных
Измерение периода сигнала для блока данных
Data Chunk Period.vi
(19.25 КБ) 176 скачиваний
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Вычисление скорости оборотов

Сообщение Artem.spb »

Blackman писал(а):А почему нельзя использовать Waveform Peak Detection.vi?
"Finds the locations, amplitudes, and second derivatives of peaks and valleys in Signal In"
потому что эта функция не даёт мне оборотов (расстояния между двумя соседними пиками)
На FP частота опроса вроде бы 100 Гц, как бы что надо для процесса 7 оборотов в секунду. А по тексту выборка 10 р(points?)/сек?
По расчету макс скорость не более 420 rpm, а на графике 600.
А как посмотреть сигнал с датчика? Длительность импульса в заявленном диапазоне скорости?
Сложность в том, что железо далеко и отлаживаю программу дистанционно. картинка получена заказчиком без моего участия, а подписи уехали после того, как я изменил typedef.
Но вчера я уже сам гонял прогу, ёлка примерно так же выглядит, поэтому и кинул эту картинку.

600 rpm возникает как раз из-за косяка в алгоритме (ниже опишу своё видение)
я тестировал так:
Частота АЦП: 10кГц
буфер: 1000 точек.

Сигнал с датчика строгий п- образный (я проверял). длительность не смотрел, но он менее 10% периода при такой скорости.
IvanLis писал(а): Артем, а что если пойти по более простому пути и использовать принцип "конденсаторного" частотометра.
1. Брать сигнал определенной длительностью, например 1 сек.
2. Нормировать его, например в диапазон 0..1, можно попробовать еще и дискретизировать на два уровня "0"-"1".
канал изначально дискретный, так что там уже 0/1 без вариантов.
3. Полученный сигнал интегрировать, это значение будет прямо пропорционально количеству импульсов, останется только немного подстроить коэффициент пропорциональности.
Высокой точности на таких частотах и аналоговом сигнале не достигнуть все равно.
по-моему он не будет пропорционален, потому что ширина импульса тоже зависит от скорости.

и вариант брать секунду не подходит, потому что обороты нужны чаще, по ним строится кривая скорости от времени, по которой потом расчёт ведётся. На одном из этапов график всего 3 секунды. 3 точки не пойдут.
Borjomy_1 писал(а):Чем выше будет частота опроса, тем точнее можно вычислять скорость.
Считать скорость имеет смысл скользящим интервалом. Вычислять индексы пиков, считать их количество за максимально доступное время и вычислять скорость по расстоянию между крайними пиками, а не между соседними.
максимально доступное время - порядка 0,1 сек. За это время проходит о 0 до 1 пика. так что не пойдёт. В программе заложен коэффициент на несколько датчиков, для повышения точности, но тестирование идёт с одним, да и на малых оборотах всё равно будут выборки без импульсов, так что надо уметь "выкручиваться".
Blackman писал(а): Для измерения периода сигнала с частотой ~10 Гц с хорошей точностью, частоты опроса 100 Гц действительно будет маловато.
10кГц.
если я правильно понимаю алгоритм Data Chunk Period.vi, он выдаёт мне период между имульсами только после получения импульса, а это не устраивает, т.к. нужно получать обороты 10р/сек (пусть и примерные).

я так понимаю что в моём алгоритме происходит следующее:
pulce.png
когда в соседних выборках есть пики, всё нормально.
если пика нет, то я сначала получаю период 2, 2>1.
потом получаю период 3, 3>2.
а после прихода импульса получается 4, 4<3
тут и происходит подскок скорости.
Если последний пик был в конце выборки, то период 4 получается равным примерно длине выборки, т.е. период 100мс, что и даёт те самые 600RPM.
и дальше обороты снова спадают.

Как водится в таких случаях, написав вопрос, сам же придумал вариант ответа.
Думаю в случае отсутствия пика брать максимум из предыдущего и текущего периода, таким образом вместо 4 и 5 я всё ещё буду использовать 3.
Проверить смогу только в понедельник.
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Вычисление скорости оборотов

Сообщение Blackman »

если я правильно понимаю алгоритм Data Chunk Period.vi, он выдаёт мне период между импульсами только после получения импульса, а это не устраивает...
Непонятно, как без сигналов с датчика можно вычислить скорость колеса (даже приблизительно). Пока мы не получим с датчика минимум 2 сигнала, которые определяют временные ворота для счетчика импульсов опорной частоты (samples per second),
Вывод - "Колесо крутится со скоростью ... " и
Вывод - "Колесо не крутится (скорость=0) " равновероятны.
... т.к. нужно получать обороты 10 р/сек (пусть и примерные).
Как бы прояснить это требование?
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Вычисление скорости оборотов

Сообщение Artem.spb »

Blackman писал(а):Непонятно, как без сигналов с датчика можно вычислить скорость колеса (даже приблизительно). Пока мы не получим с датчика минимум 2 сигнала, которые определяют временные ворота для счетчика импульсов опорной частоты (samples per second),
Вывод - "Колесо крутится со скоростью ... " и
Вывод - "Колесо не крутится (скорость=0) " равновероятны.
Если скорость была х, то пока сигнала нет, скорость спадает как-то. Ну пусть она спадает по закону 1/t.
А для полной остановки есть ещё параметр, означающий предельное время ожидания импульса. Если превышено, то скорость 0.

Понятно, что надо 2 импульса, но ждать непонятно сколько в данном случае не устраивает.
Например, "Counter - Read Pulse Width and Frequency (Continuous).vi" как я понимаю, выдаёт частоты именно с получением импульса.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: Вычисление скорости оборотов

Сообщение IvanLis »

Artem.spb писал(а):по-моему он не будет пропорционален, потому что ширина импульса тоже зависит от скорости
Ширина импульса тоже обратно пропорциональна частоте. Можно приблизиться к физической схеме и сделать типа тригера, тогда длина импульса на выходе будет равна длительности периода.
Artem.spb писал(а):и вариант брать секунду не подходит, потому что обороты нужны чаще, по ним строится кривая скорости от времени, по которой потом расчёт ведётся. На одном из этапов график всего 3 секунды. 3 точки не пойдут.
Я имел ввиду окно шириной 1 сек, которое будет скользить по сигналу. Получится осреднение частоты за 1 сек.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Вычисление скорости оборотов

Сообщение Artem.spb »

IvanLis писал(а):
Artem.spb писал(а):и вариант брать секунду не подходит, потому что обороты нужны чаще, по ним строится кривая скорости от времени, по которой потом расчёт ведётся. На одном из этапов график всего 3 секунды. 3 точки не пойдут.
Я имел ввиду окно шириной 1 сек, которое будет скользить по сигналу. Получится осреднение частоты за 1 сек.
А мысль интересная. как-то я не подумал, что можно хранить последние N секунд истории и искать пики там.
Pavel

Activity
developer
developer
Сообщения: 271
Зарегистрирован: 31 июл 2009, 08:07
Награды: 1
Версия LabVIEW: 8.5

Re: Вычисление скорости оборотов

Сообщение Pavel »

А Extract Single Tone information не натравить на сигнал?
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: Вычисление скорости оборотов

Сообщение IvanLis »

Artem.spb писал(а):по-моему он не будет пропорционален, потому что ширина импульса тоже зависит от скорости.
Здесь ты прав. Сейчас попробовал, данный прием не работает :wink: .
Я сейчас по делам сношусь... вернусь накидаю по принципу тригера, должно нормально работать: https://ru.wikipedia.org/wiki/%D0%A7%D0 ... 1.80.D1.8B
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Вычисление скорости оборотов

Сообщение Borjomy_1 »

максимально доступное время - порядка 0,1 сек.
Предлагаю такое решение. Оно вычисляет с ошибкой для периода оборота меньше периода опроса, но можно, думаю, это решить
Вложения
подсчет импульсов.png
подсчет импульсов2.png
подсчет импульсов2.png (12.16 КБ) 12114 просмотров
Untitled 1.vi
Правда, не знаю, удастся ли его открыть, ибо сконвертировал в 2009.
(18.72 КБ) 167 скачиваний
bartex
user
user
Сообщения: 73
Зарегистрирован: 14 апр 2014, 21:09
Версия LabVIEW: 2015
Откуда: Санкт-Петербург

Re: Вычисление скорости оборотов

Сообщение bartex »

Artem.spb,
А мысль интересная. как-то я не подумал, что можно хранить последние N секунд истории и искать пики там.
А можно и вообще все пики хранить, если потом они где-то потребуются.
Я в задаче, аналогичной Вашей, собираю индексы всех перепадов 0-1 или 1-0 для дальнейшей обработки. Имея такой набор, и зная частоту дискретизации, можно позволить себе любую аппроксимацию.
Набросал Вам пример "сквозной" сборки индексов, как я её себе представляю.
Вложения
Снимок.PNG
Пример.vi
(15.42 КБ) 161 скачивание
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Вычисление скорости оборотов

Сообщение Blackman »

Если скорость была х, то пока сигнала нет, скорость спадает как-то. Ну пусть она спадает по закону 1/t.
Почему она падает, а не увеличивается. Означает ли это, что известен закон изменения скорости колеса?
А для полной остановки есть ещё параметр, означающий предельное время ожидания импульса. Если превышено, то скорость 0.
С этим все ясно. Минимальная скорость колеса или нижнее значение диапазона измерения скорости колеса.
Понятно, что надо 2 импульса, но ждать непонятно сколько в данном случае не устраивает.
Например, "Counter - Read Pulse Width and Frequency (Continuous).vi" как я понимаю, выдаёт частоты именно с получением импульса.
Ждать ровно один период (1 оборот колеса) с одним датчиком, 1/2 периода (1/2 оборота колеса) с двумя датчиками и т.д.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Обработка сигнала»