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

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

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

Postby Artem.spb on 05 Feb 2016, 22:48

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

На словах хорошо, а на деле такая ёлка
blob.png


сам расчёт так выглядит:

freq1.png

freq2.png


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

в приложении
tt- кусок кода в Lv14
tt2 - попытка сохранить в 12, но не факто, что откроется, ошибки какие-то выдавала система.
Attachments
tt.zip
(54.44 KiB) Downloaded 59 times
tt2.zip
(39.37 KiB) Downloaded 59 times
Artem.spb
expert
expert
 
Posts: 1221
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 214
CLD hardware I/O VIP freelance

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

Postby Blackman on 06 Feb 2016, 00:04

А почему нельзя использовать 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.
А как посмотреть сигнал с датчика? Длительность импульса в заявленном диапазоне скорости?
Blackman
leader
leader
 
Posts: 685
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 171

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

Postby IvanLis on 06 Feb 2016, 09:35

Artem.spb wrote:Вопрос из разряда тупых, но я завис на нём.
Стоит датчик на колесе, каждый оборот даёт импульс. Скорость порядка 6-7 об/сек.


Артем, а что если пойти по более простому пути и использовать принцип "конденсаторного" частотометра.
1. Брать сигнал определенной длительностью, например 1 сек.
2. Нормировать его, например в диапазон 0..1, можно попробовать еще и дискретизировать на два уровня "0"-"1".
3. Полученный сигнал интегрировать, это значение будет прямо пропорционально количеству импульсов, останется только немного подстроить коэффициент пропорциональности.

Высокой точности на таких частотах и аналоговом сигнале не достигнуть все равно.
User avatar
IvanLis
professor
professor
 
Posts: 4470
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 692
hardware VIP bloggers teachers

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

Postby Borjomy_1 on 06 Feb 2016, 11:07

Чем выше будет частота опроса, тем точнее можно вычислять скорость.
Считать скорость имеет смысл скользящим интервалом. Вычислять индексы пиков, считать их количество за максимально доступное время и вычислять скорость по расстоянию между крайними пиками, а не между соседними.
Borjomy_1
expert
expert
 
Posts: 1765
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 309
VIP

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

Postby Blackman on 06 Feb 2016, 12:31

Чем выше будет частота опроса, тем точнее можно вычислять скорость.

Для измерения периода сигнала с частотой ~10 Гц с хорошей точностью, частоты опроса 100 Гц действительно будет маловато.
Attachments
Data Chunk Period BD.PNG
Измерение периода сигнала для блока данных
Data Chunk Period.vi
(19.25 KiB) Downloaded 59 times
Blackman
leader
leader
 
Posts: 685
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 171

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

Postby Artem.spb on 06 Feb 2016, 17:13

Blackman wrote:А почему нельзя использовать 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 wrote:Артем, а что если пойти по более простому пути и использовать принцип "конденсаторного" частотометра.
1. Брать сигнал определенной длительностью, например 1 сек.
2. Нормировать его, например в диапазон 0..1, можно попробовать еще и дискретизировать на два уровня "0"-"1".

канал изначально дискретный, так что там уже 0/1 без вариантов.

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

по-моему он не будет пропорционален, потому что ширина импульса тоже зависит от скорости.

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

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

максимально доступное время - порядка 0,1 сек. За это время проходит о 0 до 1 пика. так что не пойдёт. В программе заложен коэффициент на несколько датчиков, для повышения точности, но тестирование идёт с одним, да и на малых оборотах всё равно будут выборки без импульсов, так что надо уметь "выкручиваться".

Blackman wrote:Для измерения периода сигнала с частотой ~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.
Проверить смогу только в понедельник.
Artem.spb
expert
expert
 
Posts: 1221
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 214
CLD hardware I/O VIP freelance

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

Postby Blackman on 06 Feb 2016, 18:43

если я правильно понимаю алгоритм Data Chunk Period.vi, он выдаёт мне период между импульсами только после получения импульса, а это не устраивает...

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

Как бы прояснить это требование?
Blackman
leader
leader
 
Posts: 685
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 171

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

Postby Artem.spb on 06 Feb 2016, 19:42

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


Если скорость была х, то пока сигнала нет, скорость спадает как-то. Ну пусть она спадает по закону 1/t.
А для полной остановки есть ещё параметр, означающий предельное время ожидания импульса. Если превышено, то скорость 0.

Понятно, что надо 2 импульса, но ждать непонятно сколько в данном случае не устраивает.
Например, "Counter - Read Pulse Width and Frequency (Continuous).vi" как я понимаю, выдаёт частоты именно с получением импульса.
Artem.spb
expert
expert
 
Posts: 1221
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 214
CLD hardware I/O VIP freelance

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

Postby IvanLis on 06 Feb 2016, 19:56

Artem.spb wrote:по-моему он не будет пропорционален, потому что ширина импульса тоже зависит от скорости


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

Artem.spb wrote:и вариант брать секунду не подходит, потому что обороты нужны чаще, по ним строится кривая скорости от времени, по которой потом расчёт ведётся. На одном из этапов график всего 3 секунды. 3 точки не пойдут.

Я имел ввиду окно шириной 1 сек, которое будет скользить по сигналу. Получится осреднение частоты за 1 сек.
User avatar
IvanLis
professor
professor
 
Posts: 4470
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 692
hardware VIP bloggers teachers

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

Postby Artem.spb on 06 Feb 2016, 20:03

IvanLis wrote:
Artem.spb wrote:и вариант брать секунду не подходит, потому что обороты нужны чаще, по ним строится кривая скорости от времени, по которой потом расчёт ведётся. На одном из этапов график всего 3 секунды. 3 точки не пойдут.

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


А мысль интересная. как-то я не подумал, что можно хранить последние N секунд истории и искать пики там.
Artem.spb
expert
expert
 
Posts: 1221
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 214
CLD hardware I/O VIP freelance

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

Postby Pavel on 06 Feb 2016, 20:09

А Extract Single Tone information не натравить на сигнал?
Pavel
developer
developer
 
Posts: 271
Joined: 31 Jul 2009, 08:07
Medals: 1
Activity (1)
LabVIEW Version: 8.5
Karma: 39
VIP

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

Postby IvanLis on 06 Feb 2016, 20:10

Artem.spb wrote:по-моему он не будет пропорционален, потому что ширина импульса тоже зависит от скорости.

Здесь ты прав. Сейчас попробовал, данный прием не работает :wink: .
Я сейчас по делам сношусь... вернусь накидаю по принципу тригера, должно нормально работать: https://ru.wikipedia.org/wiki/%D0%A7%D0 ... 1.80.D1.8B
User avatar
IvanLis
professor
professor
 
Posts: 4470
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 692
hardware VIP bloggers teachers

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

Postby Borjomy_1 on 06 Feb 2016, 21:23

максимально доступное время - порядка 0,1 сек.

Предлагаю такое решение. Оно вычисляет с ошибкой для периода оборота меньше периода опроса, но можно, думаю, это решить
Attachments
подсчет импульсов.png
подсчет импульсов2.png
подсчет импульсов2.png (12.16 KiB) Viewed 3146 times
Untitled 1.vi
Правда, не знаю, удастся ли его открыть, ибо сконвертировал в 2009.
(18.72 KiB) Downloaded 59 times
Borjomy_1
expert
expert
 
Posts: 1765
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 309
VIP

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

Postby bartex on 06 Feb 2016, 21:35

Artem.spb,
А мысль интересная. как-то я не подумал, что можно хранить последние N секунд истории и искать пики там.

А можно и вообще все пики хранить, если потом они где-то потребуются.
Я в задаче, аналогичной Вашей, собираю индексы всех перепадов 0-1 или 1-0 для дальнейшей обработки. Имея такой набор, и зная частоту дискретизации, можно позволить себе любую аппроксимацию.
Набросал Вам пример "сквозной" сборки индексов, как я её себе представляю.
Attachments
Снимок.PNG
Пример.vi
(15.42 KiB) Downloaded 56 times
bartex
user
user
 
Posts: 73
Joined: 14 Apr 2014, 21:09
Location: Санкт-Петербург
LabVIEW Version: 2015
Karma: 16

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

Postby Blackman on 06 Feb 2016, 22:07

Если скорость была х, то пока сигнала нет, скорость спадает как-то. Ну пусть она спадает по закону 1/t.

Почему она падает, а не увеличивается. Означает ли это, что известен закон изменения скорости колеса?
А для полной остановки есть ещё параметр, означающий предельное время ожидания импульса. Если превышено, то скорость 0.

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

Ждать ровно один период (1 оборот колеса) с одним датчиком, 1/2 периода (1/2 оборота колеса) с двумя датчиками и т.д.
Blackman
leader
leader
 
Posts: 685
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 171

Next

Return to Обработка сигнала

Who is online

Users browsing this forum: Yandex and 7 guests

cron