реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Проблема с расчетом скорости вращения, заказчику не нравится
clpe
сообщение Feb 12 2009, 18:20
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 71
Регистрация: 23-10-08
Из: Набережные Челны
Пользователь №: 41 132



Заказали прибор который должен считать метры, и отображать скорость вращения метров в минуту применяется датчик ВЕ158. Сделал подсчет скорости раз в секунду, заказчику не нравится что значение скорости прыгает (привод у них так работает наверное), сделал расчет скорости раз в полминуты - не нравится, что привод встал а значение скорости ещё не изменилась. Вот и гоню может при расчете раз в секунду что-то не так делаю
Код
interrupt [TIM0_OVF] void timer0_ovf_isr(void) //вызывается 30 раз в секунду
{
  time++;
  if(time == 30)
  {
    score = impulse_scr * 60;
    score = score / num_imp;
    impulse_scr = 0;
  }
}

где:
score - скорость метров в минуту
impulse_scr - счетчик импульсов
num_imp - число импульсов в одном метре

Сообщение отредактировал clpe - Feb 12 2009, 18:24
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 12 2009, 21:07
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Надо делать обработку скользящего среднего. Т.е. Во некотором временнОм окне (это и есть время индикации) Вы накапливаете значения скорости в буфере, а когда надо выдать результат - считаете среднее. Естественно, каждый новый элемент затирает самый старый.
Go to the top of the page
 
+Quote Post
rezident
сообщение Feb 12 2009, 22:28
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Вопрос по тексту исходника: а какого типа у вас переменная time и где ее значение обнуляется? А то как-то странно выглядит сравнение с числом 30 при естественном переполнении переменной. Но суть не в этом.
Как я понимаю, вам нужно "мгновенное" значение частоты смаштабированное на период времени в минуту, с периодом выдачи значения каждую секунду, так? Каким способом у вас подсчет импульсов идет? Вы меряете период или количество перепадов уровня за интервал времени? Если измеряется период, то для оценки времени интегрирования достаточно полутора периодов входной частоты. Если же идет подсчет количества перепадов с неизвестным заранее диапазоном, то интервал счета должен быть выбран заранее. После этого "мгновенное" значение частоты можно пропустить через фильтр. Если есть ресурсы, то типа SMA (простое скользящее среднее), если ресурсов нет, то хотя бы EMA (экспоненциальное скользящее среднее). Для реализации EMA, кстати, особо ничего и не нужно - рекурсивная функция Y(i+1)=Y(i)+(X(i)–Y(i))*K, где K=2/(N+1). Где Y(i+1) это результат фильтрации для вывода на индикацию, а X(i) это текущее измеренное значение частоты. N - постоянная времени интегрирования в количествах отсчетов (совпадает с секундами для вашего случая).
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 05:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01418 секунд с 7
ELECTRONIX ©2004-2016