Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с расчетом скорости вращения
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
clpe
Заказали прибор который должен считать метры, и отображать скорость вращения метров в минуту применяется датчик ВЕ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 - число импульсов в одном метре
_Pasha
Надо делать обработку скользящего среднего. Т.е. Во некотором временнОм окне (это и есть время индикации) Вы накапливаете значения скорости в буфере, а когда надо выдать результат - считаете среднее. Естественно, каждый новый элемент затирает самый старый.
rezident
Вопрос по тексту исходника: а какого типа у вас переменная 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 - постоянная времени интегрирования в количествах отсчетов (совпадает с секундами для вашего случая).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.