Перейти к содержанию

Сглаживание Отображаемой Информации


Рекомендуемые сообщения

Доброго времени суток!

Я заканчиваю прогу для автомобильного тахометра, и я хочу в своем девайсе сделать красивое отображение выводимой инфры. Под понятием "красивое" понимается некая плавность изменения показаний на семисегментном индикаторе. Ну, например, если обороты двигателя колебряться в небольшом диапазоне (+/- 30об/мин), то, чтобы показания не прыгали хаотично 100 раз за секунду, а чтобы были статичными. Ну, эт не очень сложно я думаю)))

Самое сложное, и самое прикольное, что мне бы хотелось, если кто-то видел в фильмах :) делают, чтобы при увеличении оборотов, цифры достаточно плавно, хоть и стремительно "ползли" в область высоких оборотов. Ну, это типа как на современным иномарках, только там тахо механический. Там сделано, когда резко жмешь на газ, то стрелка адекватно реагирует. А если немножко подгазовать, то она как-бы лениво и плано поднимается на небольшую величину. Вот так же и я хочу сделать, только с цифрами - придать им плавность, "бархотистость" и в то же время чтобы не тупили сильно.

Кто подобное делал - отзовитесь!!! :)

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Суть - следящая система(а по сути это самая настоящая виртуальная САР), которая по разнице между реальным и отображаемым значением выбирает скорость роста отображаемого значения, таким образом отображаемое стремится к реальному с конечной скоростью, выбирая скорость этого стремления в зависимости от величины разницы - будет то что ты хочешь.

Самое интересное, это сделать алгоритм приращения которым можно было бы приращать целые числа на дробное значение, например не на 1 или 2 а на 1.1

Как это можно сделать? Можно конечно подключить к исходнику библиотеку для работы с числами с плавающей запятой, но зачем такого монстра... можно добавить к целому числу еще один придаток который будет отображать дробную часть, суммируешь целое число и дробное одновременно как только возникает переполнение в "дробной" части прибавляешь к целому единичку.

По сути, это число в целом остается ЦЕЛОЕ, но за значимую часть берется только старшие разряды.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Решение имеется. Оно называется ГИСТЕРЕЗИС. При росте показаний переключение происходит с задержкой вверх, а при падении показаний соответственно задержка вниз. Величину гистерезиса нужно подстроить по вкусу. Естественно, что нужно организовать память на предыдущее показание, чтобы было с чем сравнивать...

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Решение имеется. Оно называется ГИСТЕРЕЗИС. При росте показаний переключение происходит с задержкой вверх, а при падении показаний соответственно задержка вниз. Величину гистерезиса нужно подстроить по вкусу. Естественно, что нужно организовать память на предыдущее показание, чтобы было с чем сравнивать...

ДА, что-то типа такого. Я пытался реализовать, но пока не получается. Хм, пока писал сообщение, понял что написал в коде дурость...

Спс за совет. Щас попробуем)))

приращение целых чисел на дробное значение не требуется, т.к. значение оборотов КВ, которое находится в мах пределах 400-7000 об/мин приращать на значение 0,12356 мне кажется нецелесообразно))))) Можно польоваться даже десятками! Гистерезис, я думаю, проще реализовать.

Ссылка на комментарий
Поделиться на другие сайты

Частоту регенерации (обновления дисплея) стоит сделать в районе 0,5...1 сек. То же поэкспериментируйте. Это вместе с гистерезисом...

Работа с дробными числами не требует плавающей запятой. Размещение десятичной запятой не имеет к флоатам никакого отношения. Просто выводится число с разрешением в 0,1 от целого. Например при расчете частоты вращения необходимо расчитать (точнее измерить с более высоким разрешением) величину в 10 раз больше и ее и выводить, а запятую просто зажечь между первым и вторым разрядом.

Вывод на дисплей не в курсе относительно ваших чисел, ему лишь символы нужно зажигать... :)

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Например при расчете частоты вращения необходимо расчитать величину в 10 раз больше и ее и выводить, а запятую просто зажечь между первым и вторым разрядом.

Да, так и делал. Да, в общем-то при выводе оборотов запятая не нужна. Просто я в нем еще предусмотрел индикацию бортового напряжения. как раз по такому алгоритму. Про частоту обновления: где-то так и стоит. Но, думаю, для плавности может ее как-то изменить? Например,если показания изменились не сильно, то сделать подольше. Если резкий скачок, то в штатном режиме 0,5 сек.

Ссылка на комментарий
Поделиться на другие сайты

Напоминаю, что под термином "задержка" в гистерезисе понимается сдвиг порга переключения на следующий дискрет, а не временная задержка. Я обычно делаю гистерезис так, при движении вверх переключение происходит на точке +0,75, а при движении вниз на точке +0,25 между соседними целыми. При этом нужно измерять с двоичным разрешением в 4 раза выше целого.

Но это просто вариант. Можно применять по аналогии и другие цифры - важен принцип. При этом нет мерцания соседних значений....

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

0.5-1 сек это слишком большой интервал, чтобы было все плавным нужно выводить и обрабатывать каждые 0.1Сек, и то это может показаться слегка приторможенным.

Оно ведь за рулем когда - совсем другой масштаб времени ... и 1 секунда это слишком много. 1-2 секунды этого будет достаточно для установления показаний при малой разнице значения, и примерно 0.2-0.3 сек для больших скачков.

Да, и правда ... можно ведь отсечь и выводить показания округленные до 10, но "дробные" значения приращения все же нужны для приращения малых значений. Ведь если оставить целые - при некоторых колебаниях реального значения, отображаемое тоже будет колебаться а так оно будет приближаться к реальному, но очень медленно вследствие чего изменение показаний наступит скажем секунд через 5, но реально такой ситуации не будет чтобы разница между показанием прибора и реальным значением была стабильна в течении 5 секунд.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Решал похожую задачу - нужно было отобразить fps (количество кадров в секунду) в самописном 3D-движке. Чтобы сгладить резкие кратковременные отклонения, выводил среднее арифметическое десяти последних отсчётов.

Ссылка на комментарий
Поделиться на другие сайты

под измерение напряжения достаточно было увеличить частоту обновления до 1 сек. Работатет как часы!! Надо только калибровать.

Шаманю с оборотами))

Решал похожую задачу - нужно было отобразить fps (количество кадров в секунду) в самописном 3D-движке. Чтобы сгладить резкие кратковременные отклонения, выводил среднее арифметическое десяти последних отсчётов.

Я тоже примерно так хотел, но боюсь, что сложновато будет ему работать. Тем более, что прерывания могут вызываться достаточно часто (для 6000об/мин) - 12000 раз в сек. Это конечно не так уж много, просто если еще будем терять время на расчеты, то при малых оборотах, дисплей будет ярче, чем при высоких. А это не есть хорошо для меня)

Поясню про измерения:

змерение оборотов производится очень часто, т.к. я измеряю их период. Была конечно идея измерять их количество - это гораздо проще, но я подумал, что для отслеживания вот этой тенденции изменения (кароче для реализации того, что я хочу), надо мерять часто. Поэтому решил мерять период. + точность на "низах" хорошая получается. Что немаловажно - карб настраивается на 800 об/мин Если мерять раз в сек, погрешность будет ок 40 об/мин. Для низов это все-таки немало.

Для напруги изменил значение скважности. Напряжение замеряется чуть реже раза в секунду. Этого достаточно.

Изменено пользователем Дмитрий Андреевич
Ссылка на комментарий
Поделиться на другие сайты

среднее арифметическое десяти последних отсчётов

Это затормаживает установление показаний ровно на 10 отсчетов, как для быстрых изменений так и для медленных.

Если отсчеты получаются каждые 1 сек, то реальное значение даже если оно мгновенно изменилось от 0 до 7000 мы получим только спустя 10 секунд.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Люди! Укого есть программа генератора импульсов на ЛПТ. Не могу скачать нормальную прогу. Есть одна, но расчитана на 10Гц. А если хочу расширить диапазон - надо платить :(

Мне хотяб до 100Гц хорошо бы до 1кГц для полного теста того, как измеряются обороты) Можно триальную - чисто для пробы.

Если кто может - хелп!

Мыло: dmitriy607@yandex.ru

Изменено пользователем Дмитрий Андреевич
Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

0.5-1 сек это слишком большой интервал, чтобы было все плавным нужно выводить и обрабатывать каждые 0.1Сек, и то это может показаться слегка приторможенным.

............

Позвольте, Алексей, с Вами не согласиться.

Первое. Тахометр не тот прибор, показания котороо нужно считывать с высокой скоростью.

Второе. Речь шла не об измерении с такой частотой, а ВЫВОДЕ, что совсем не одно и тоже. Латентность при частых измерениях и довольно медленном выводе будет очень низкой, т.е. показания будут всегда своевременными.

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

Наконец четвертое. Уже делел сию приблуду. Цифры и методы кои здесь озвучивал там и применял.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

А зачем через LPT ? В виндовс ты частоту программно точно не выставишь, возьми аудиовыход и программой которой можно редактировать звуковые файлы сделай нужные частоты. Ну а на выход простой компаратор или транзистор и на логику можно подавать.

А если калибровать не нужно, то почему бы не сделать генератор на 561ЛА7 и с него подавать на вход нужную частоту.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

сори за оф-топ, как в механике реализуется демпфирование (для себя интересно)?

Крылышко, подвергающееся сопротивлению воздуха, вязкая жидкость между вращающейся и неподвижной пластиной, металлический диск в зазоре полюсов магнита (при вращении диска в нём наводится ток, взаимодействующий своим полем с магнитом и препятствующий движению)

Ссылка на комментарий
Поделиться на другие сайты

С Теслой, в смысле собеседником по теме, а не Николой, соглашусь. Демпфировать показания стоит. Только делать это нужно в скользящем окне.(собственно это Тесла и предлагал, только ненаучно... :) ) Т.е. делается кольцевой буфер на восемь или шестнадцать измерений и каждый вывод производится расчет среднего значения. При таком раскладе ничего десять секунд ждать не нужно. Только при резких изменениях измерения будет секундный процесс установления показаний... это отличное решение, только немножко жрет память...

Для тех кто не в курсе о кольцевом буфере.

Это простой линейный массив с адресацией через циклический счетчик. Это при заполнении.

При вычислении среднего нужно просто суммировать элементы и результат сдвинуть вправо на 3 (8-элементов) или 4 (16 элементов) разряда, т.е. по сути округлить. Одновременно повышается разрядность и при округлении можно элементарно сделать гистерезис (уже упомянутый)...

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Этот буфер, скользящий или нет но усреднение покажет реальное значение только когда заполнятся все ячейки буфера новым значением - т.е. пройдет 8 или 16 измерений прежде чем установится реальное значение. Такой прибор ВСЕГДА будет запаздывать с показаниями. Это может быть приемлемо когда измеряется напряжение в сети и оно там практически постоянно.

Но в данном случае хочется как только произошло резкое изменение оборотов - прибор не должен ждать пока оно усреднится, а показать это значение намного быстрее, чего обычное усреднение сделать не может.

Тут как раз такой случай, когда простые фильтры делают только хуже.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Алексей. Вы не читаете ответы. При интервале измерений в 0,1 сек и буфере в 8 точек показания установятся менее чем за 1 сек. Кому нужно быстрее? Для осмысления считанной цифры потребуется гораздо больше времени. Если цифры будут менятся быстрее их просто будет невозможно считать с индикатора. Тем более с тахометра. В штатных приборах (стрелочных) постоянная времени демпфирования порядка полусекунды. Т.е. тоже самое. Вы просто остановитесь и подумайте... :)

ЗЫ. Насчет запаздывания показаний. Скачкообразное изменение оборотов в двигателе не возможно - это тяжелая механическая система. Даже на холостом ходе это происходит где то за треть секунды на 2000...3000 об/мин. Но режим холостого хода практически бессмысленен в смысле информации с тахометра(ну уж точности точно никакой не нужно). Тахометр нужен при движении, а в движении изменить обороты скачком невозможно.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

С Теслой, в смысле собеседником по теме, а не Николой, соглашусь. Демпфировать показания стоит. Только делать это нужно в скользящем окне.(собственно это Тесла и предлагал, только ненаучно... :) ) Т.е. делается кольцевой буфер на восемь или шестнадцать измерений и каждый вывод производится расчет среднего значения. При таком раскладе ничего десять секунд ждать не нужно. Только при резких изменениях измерения будет секундный процесс установления показаний... это отличное решение, только немножко жрет память...

Для тех кто не в курсе о кольцевом буфере.

Это простой линейный массив с адресацией через циклический счетчик. Это при заполнении.

При вычислении среднего нужно просто суммировать элементы и результат сдвинуть вправо на 3 (8-элементов) или 4 (16 элементов) разряда, т.е. по сути округлить. Одновременно повышается разрядность и при округлении можно элементарно сделать гистерезис (уже упомянутый)...

#define BUF_SIZE 8

int buf[BUF_SIZE];

int sum = 0;
int i = 0;

int avg(int val) {
sum = sum + val - buf[i];
buf[i] = val;
i++;
if(i >= BUF_SIZE) i = 0;
return sum >> 3;
}

Ссылка на комментарий
Поделиться на другие сайты

Да нет, Тесла. Так не делают.

Каждый цикл сумму массива рассчитают заново. Т.е. есть процесс его заполнения (обычно в прерываниях по готовности данных), а есть процесс расчета среднего, округления и вывода (он в суперлупе и асинхронен с реальным временем). Вывод индикации вообще не нужно делать когерентно с процессами, только если это упрощает алгоритм.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Тема мен кажется началась из-за того что обычное сглаживание не устраивает - хочется плавное изменение малых величин но и быструю реакцию на большие изменения оборотов. Большие - это 200-300 оборотов, малые - 20-30...

Когда двигатель стоит на нейтралке обороты могут меняться достаточно быстро.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Да нет, Тесла. Так не делают.

Каждый цикл сумму массива рассчитают заново. Т.е. есть процесс его заполнения (обычно в прерываниях по готовности данных), а есть процесс расчета среднего, округления и вывода (он в суперлупе и асинхронен с реальным временем).

Не понял, а зачем? Разве это не усложняет алгоритм? Сумма ведь всегда считается строго по заданному числу отсчётов, или нет?

Изменено пользователем Tesla
Ссылка на комментарий
Поделиться на другие сайты

.... Большие - это 200-300 оборотов, малые - 20-30...

Сколько, сколько??? Я в шоке... Ващето холостой ход - это порядка 600...800 оборотов. При прогреве до 1500. А вообще диапазон работы двигателя от 450 до 6500...8000 в зависимости от числа клапанов на цилиндр, привода клапанов и прочей мутотени... (у дизелей без наддува максимум 4500, с наддувом 6000)

Алексей, Вы бы поездили на автомобиле в начале, а потом уже предлагали решения...

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Да хоть еще 10 карт приобретите, если не понимаете что для мощного потока нужен совсем другой стандарт  32 гиговая карта за 1к ?  Вы реально знаете толк в извращениях, за такие деньги минимум люди берут на 64 гига и как раз нужного стандарта но вы этого не понимаете и поэтому всё стоит на месте.   Вам для информации  FHD прут на ура.
    • Таким образом, таблицу надо скорректировать.
    • если забыть про радиатор) 
    • Доброго времени суток. Столкнулся с проблемой: не получается скачать пакет STM32F4 (пробовал и другие, ошибка та же) при нажатии кнопки install появляется ошибка (первый скриншот). Такое ощущение, что CubeIDE не может подключиться к сети, постоянно появляется окно как на втором скиншоте. Подскажите как можно исправить проблему?
    • Я вас конечно уважаю, но хамить мне не надо. Все УНЧ что я создавал сначала до идеала дорабатывались в симуляторе, и только потом собирались. В 98% случаев они сразу работали корректно. Были исключения, но там проблемы были в разводке платы и деталях а не симуляторе. Тот же мой VAC 2.0 ПОЛНОСТЬЮ совпал по результатам тестов в железе с результатами тестов в симуляторе.  Эта схема это простейший ВК в AB классе к которому подключили ОУ для усиления напряжения. Нет ни единой причины этой схеме работать некорректно или плохо. Единственные 2 варианта почему будет работать плохо/не работать, это либо накосячено при сборке или детали обвязки неисправны, либо сам ОУ палëный. Качество работы этой схемы очень сильно будет зависеть от качества ОУ и симулятор тут не при чëм. И опять же, этой схеме уже больше 30 лет и еë собирали сотни человек! Если собрано на нормальных деталях, эта схема будет работать как надо и выдаст качественный звук. 
    • У многих в голове "битые ячейки". Ясно сказано, что работает видео в помещении, опробовано десятки раз. Весь снятый материал в лесу и в поле пошёл в корзину и также опробовано не один раз. Приобретена новая карта за 1К. Видео ещё хуже, чем с тех "чудо флешек". https://disk.yandex.ru/i/Ww52T3leg99VxA
    • Сорри, вопрос звучит не однозначно. Меня интересовало - нужен ли вынос наружу головок или не нужен, а не их расположение на передней панели относительно друг друга.
×
×
  • Создать...