Вычисление скорости оборотов
-
- professor
- Сообщения: 3406
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Вычисление скорости оборотов
Вопрос из разряда тупых, но я завис на нём.
Стоит датчик на колесе, каждый оборот даёт импульс. Скорость порядка 6-7 об/сек.
Беру выборку 10 р/сек, т.е не в каждой выборке есть импульс. Да и обороты будут падать, так что надо уметь обрабатывать пустой кусок.
Мой алгоритм:
если импульс есть, я запоминаю его индекс. И считаю разность между последним и текущим импульсом.
Если импульса нет, я считаю, что он был в последнем отсчёте, но индекс последнего не обновляю. Таким образом, если импульсов нет, скорость постепенно затухает.
На словах хорошо, а на деле такая ёлка сам расчёт так выглядит:
Что не так с алгоритмом, или может. я очевидную ошибку в проге сделал, но не вижу её?
Как считают скорости встроенные в драйвер алгоритмы?
в приложении
tt- кусок кода в Lv14
tt2 - попытка сохранить в 12, но не факто, что откроется, ошибки какие-то выдавала система.
Стоит датчик на колесе, каждый оборот даёт импульс. Скорость порядка 6-7 об/сек.
Беру выборку 10 р/сек, т.е не в каждой выборке есть импульс. Да и обороты будут падать, так что надо уметь обрабатывать пустой кусок.
Мой алгоритм:
если импульс есть, я запоминаю его индекс. И считаю разность между последним и текущим импульсом.
Если импульса нет, я считаю, что он был в последнем отсчёте, но индекс последнего не обновляю. Таким образом, если импульсов нет, скорость постепенно затухает.
На словах хорошо, а на деле такая ёлка сам расчёт так выглядит:
Что не так с алгоритмом, или может. я очевидную ошибку в проге сделал, но не вижу её?
Как считают скорости встроенные в драйвер алгоритмы?
в приложении
tt- кусок кода в Lv14
tt2 - попытка сохранить в 12, но не факто, что откроется, ошибки какие-то выдавала система.
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Вычисление скорости оборотов
А почему нельзя использовать 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.
А как посмотреть сигнал с датчика? Длительность импульса в заявленном диапазоне скорости?
"Finds the locations, amplitudes, and second derivatives of peaks and valleys in Signal In"
На FP частота опроса вроде бы 100 Гц, как бы что надо для процесса 7 оборотов в секунду. А по тексту выборка 10 р(points?)/сек?
По расчету макс скорость не более 420 rpm, а на графике 600.
А как посмотреть сигнал с датчика? Длительность импульса в заявленном диапазоне скорости?
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Вычисление скорости оборотов
Артем, а что если пойти по более простому пути и использовать принцип "конденсаторного" частотометра.Artem.spb писал(а):Вопрос из разряда тупых, но я завис на нём.
Стоит датчик на колесе, каждый оборот даёт импульс. Скорость порядка 6-7 об/сек.
1. Брать сигнал определенной длительностью, например 1 сек.
2. Нормировать его, например в диапазон 0..1, можно попробовать еще и дискретизировать на два уровня "0"-"1".
3. Полученный сигнал интегрировать, это значение будет прямо пропорционально количеству импульсов, останется только немного подстроить коэффициент пропорциональности.
Высокой точности на таких частотах и аналоговом сигнале не достигнуть все равно.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Вычисление скорости оборотов
Чем выше будет частота опроса, тем точнее можно вычислять скорость.
Считать скорость имеет смысл скользящим интервалом. Вычислять индексы пиков, считать их количество за максимально доступное время и вычислять скорость по расстоянию между крайними пиками, а не между соседними.
Считать скорость имеет смысл скользящим интервалом. Вычислять индексы пиков, считать их количество за максимально доступное время и вычислять скорость по расстоянию между крайними пиками, а не между соседними.
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Вычисление скорости оборотов
Для измерения периода сигнала с частотой ~10 Гц с хорошей точностью, частоты опроса 100 Гц действительно будет маловато.Чем выше будет частота опроса, тем точнее можно вычислять скорость.
- Вложения
-
- Data Chunk Period.vi
- (19.25 КБ) 179 скачиваний
-
- professor
- Сообщения: 3406
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Вычисление скорости оборотов
потому что эта функция не даёт мне оборотов (расстояния между двумя соседними пиками)Blackman писал(а):А почему нельзя использовать Waveform Peak Detection.vi?
"Finds the locations, amplitudes, and second derivatives of peaks and valleys in Signal In"
Сложность в том, что железо далеко и отлаживаю программу дистанционно. картинка получена заказчиком без моего участия, а подписи уехали после того, как я изменил typedef.На FP частота опроса вроде бы 100 Гц, как бы что надо для процесса 7 оборотов в секунду. А по тексту выборка 10 р(points?)/сек?
По расчету макс скорость не более 420 rpm, а на графике 600.
А как посмотреть сигнал с датчика? Длительность импульса в заявленном диапазоне скорости?
Но вчера я уже сам гонял прогу, ёлка примерно так же выглядит, поэтому и кинул эту картинку.
600 rpm возникает как раз из-за косяка в алгоритме (ниже опишу своё видение)
я тестировал так:
Частота АЦП: 10кГц
буфер: 1000 точек.
Сигнал с датчика строгий п- образный (я проверял). длительность не смотрел, но он менее 10% периода при такой скорости.
канал изначально дискретный, так что там уже 0/1 без вариантов.IvanLis писал(а): Артем, а что если пойти по более простому пути и использовать принцип "конденсаторного" частотометра.
1. Брать сигнал определенной длительностью, например 1 сек.
2. Нормировать его, например в диапазон 0..1, можно попробовать еще и дискретизировать на два уровня "0"-"1".
по-моему он не будет пропорционален, потому что ширина импульса тоже зависит от скорости.3. Полученный сигнал интегрировать, это значение будет прямо пропорционально количеству импульсов, останется только немного подстроить коэффициент пропорциональности.
Высокой точности на таких частотах и аналоговом сигнале не достигнуть все равно.
и вариант брать секунду не подходит, потому что обороты нужны чаще, по ним строится кривая скорости от времени, по которой потом расчёт ведётся. На одном из этапов график всего 3 секунды. 3 точки не пойдут.
максимально доступное время - порядка 0,1 сек. За это время проходит о 0 до 1 пика. так что не пойдёт. В программе заложен коэффициент на несколько датчиков, для повышения точности, но тестирование идёт с одним, да и на малых оборотах всё равно будут выборки без импульсов, так что надо уметь "выкручиваться".Borjomy_1 писал(а):Чем выше будет частота опроса, тем точнее можно вычислять скорость.
Считать скорость имеет смысл скользящим интервалом. Вычислять индексы пиков, считать их количество за максимально доступное время и вычислять скорость по расстоянию между крайними пиками, а не между соседними.
10кГц.Blackman писал(а): Для измерения периода сигнала с частотой ~10 Гц с хорошей точностью, частоты опроса 100 Гц действительно будет маловато.
если я правильно понимаю алгоритм Data Chunk Period.vi, он выдаёт мне период между имульсами только после получения импульса, а это не устраивает, т.к. нужно получать обороты 10р/сек (пусть и примерные).
я так понимаю что в моём алгоритме происходит следующее: когда в соседних выборках есть пики, всё нормально.
если пика нет, то я сначала получаю период 2, 2>1.
потом получаю период 3, 3>2.
а после прихода импульса получается 4, 4<3
тут и происходит подскок скорости.
Если последний пик был в конце выборки, то период 4 получается равным примерно длине выборки, т.е. период 100мс, что и даёт те самые 600RPM.
и дальше обороты снова спадают.
Как водится в таких случаях, написав вопрос, сам же придумал вариант ответа.
Думаю в случае отсутствия пика брать максимум из предыдущего и текущего периода, таким образом вместо 4 и 5 я всё ещё буду использовать 3.
Проверить смогу только в понедельник.
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Вычисление скорости оборотов
Непонятно, как без сигналов с датчика можно вычислить скорость колеса (даже приблизительно). Пока мы не получим с датчика минимум 2 сигнала, которые определяют временные ворота для счетчика импульсов опорной частоты (samples per second),если я правильно понимаю алгоритм Data Chunk Period.vi, он выдаёт мне период между импульсами только после получения импульса, а это не устраивает...
Вывод - "Колесо крутится со скоростью ... " и
Вывод - "Колесо не крутится (скорость=0) " равновероятны.
Как бы прояснить это требование?... т.к. нужно получать обороты 10 р/сек (пусть и примерные).
-
- professor
- Сообщения: 3406
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Вычисление скорости оборотов
Если скорость была х, то пока сигнала нет, скорость спадает как-то. Ну пусть она спадает по закону 1/t.Blackman писал(а):Непонятно, как без сигналов с датчика можно вычислить скорость колеса (даже приблизительно). Пока мы не получим с датчика минимум 2 сигнала, которые определяют временные ворота для счетчика импульсов опорной частоты (samples per second),
Вывод - "Колесо крутится со скоростью ... " и
Вывод - "Колесо не крутится (скорость=0) " равновероятны.
А для полной остановки есть ещё параметр, означающий предельное время ожидания импульса. Если превышено, то скорость 0.
Понятно, что надо 2 импульса, но ждать непонятно сколько в данном случае не устраивает.
Например, "Counter - Read Pulse Width and Frequency (Continuous).vi" как я понимаю, выдаёт частоты именно с получением импульса.
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Вычисление скорости оборотов
Ширина импульса тоже обратно пропорциональна частоте. Можно приблизиться к физической схеме и сделать типа тригера, тогда длина импульса на выходе будет равна длительности периода.Artem.spb писал(а):по-моему он не будет пропорционален, потому что ширина импульса тоже зависит от скорости
Я имел ввиду окно шириной 1 сек, которое будет скользить по сигналу. Получится осреднение частоты за 1 сек.Artem.spb писал(а):и вариант брать секунду не подходит, потому что обороты нужны чаще, по ним строится кривая скорости от времени, по которой потом расчёт ведётся. На одном из этапов график всего 3 секунды. 3 точки не пойдут.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- professor
- Сообщения: 3406
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Вычисление скорости оборотов
А мысль интересная. как-то я не подумал, что можно хранить последние N секунд истории и искать пики там.IvanLis писал(а):Я имел ввиду окно шириной 1 сек, которое будет скользить по сигналу. Получится осреднение частоты за 1 сек.Artem.spb писал(а):и вариант брать секунду не подходит, потому что обороты нужны чаще, по ним строится кривая скорости от времени, по которой потом расчёт ведётся. На одном из этапов график всего 3 секунды. 3 точки не пойдут.
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Вычисление скорости оборотов
Здесь ты прав. Сейчас попробовал, данный прием не работает .Artem.spb писал(а):по-моему он не будет пропорционален, потому что ширина импульса тоже зависит от скорости.
Я сейчас по делам сношусь... вернусь накидаю по принципу тригера, должно нормально работать: https://ru.wikipedia.org/wiki/%D0%A7%D0 ... 1.80.D1.8B
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Вычисление скорости оборотов
Предлагаю такое решение. Оно вычисляет с ошибкой для периода оборота меньше периода опроса, но можно, думаю, это решитьмаксимально доступное время - порядка 0,1 сек.
- Вложения
-
- подсчет импульсов2.png (12.16 КБ) 12177 просмотров
-
- Untitled 1.vi
- Правда, не знаю, удастся ли его открыть, ибо сконвертировал в 2009.
- (18.72 КБ) 169 скачиваний
-
- user
- Сообщения: 73
- Зарегистрирован: 14 апр 2014, 21:09
- Версия LabVIEW: 2015
- Откуда: Санкт-Петербург
Re: Вычисление скорости оборотов
Artem.spb,
Я в задаче, аналогичной Вашей, собираю индексы всех перепадов 0-1 или 1-0 для дальнейшей обработки. Имея такой набор, и зная частоту дискретизации, можно позволить себе любую аппроксимацию.
Набросал Вам пример "сквозной" сборки индексов, как я её себе представляю.
А можно и вообще все пики хранить, если потом они где-то потребуются.А мысль интересная. как-то я не подумал, что можно хранить последние N секунд истории и искать пики там.
Я в задаче, аналогичной Вашей, собираю индексы всех перепадов 0-1 или 1-0 для дальнейшей обработки. Имея такой набор, и зная частоту дискретизации, можно позволить себе любую аппроксимацию.
Набросал Вам пример "сквозной" сборки индексов, как я её себе представляю.
- Вложения
-
- Пример.vi
- (15.42 КБ) 162 скачивания
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: Вычисление скорости оборотов
Почему она падает, а не увеличивается. Означает ли это, что известен закон изменения скорости колеса?Если скорость была х, то пока сигнала нет, скорость спадает как-то. Ну пусть она спадает по закону 1/t.
С этим все ясно. Минимальная скорость колеса или нижнее значение диапазона измерения скорости колеса.А для полной остановки есть ещё параметр, означающий предельное время ожидания импульса. Если превышено, то скорость 0.
Ждать ровно один период (1 оборот колеса) с одним датчиком, 1/2 периода (1/2 оборота колеса) с двумя датчиками и т.д.Понятно, что надо 2 импульса, но ждать непонятно сколько в данном случае не устраивает.
Например, "Counter - Read Pulse Width and Frequency (Continuous).vi" как я понимаю, выдаёт частоты именно с получением импульса.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 4 Ответы
- 1351 Просмотры
-
Последнее сообщение Bovee