Автомобильный тахометр

Добрый день, All! Есть необходимость сделать автомобильный тахометр 300...6000 об/мин. Для этого в программе организован буфер unsigned int TaxBuf[BufSize], написана п/программы взятия отсчета, сдвига буфера, вычисления результата как среднего арифметического содержимого буфера. Т. е. наблюдаются последние BufSize отсчетов. Проблема в том, что данные о текущей частоте вращения необходимо выводить на LCD с "точностью" до +-1 об/мин. Понятно, что на самом деле такая точность не нужна, а отображать на дисплее практически невозможно - цифры "скачут", считать показания затруднительно. Хотелось бы написать алгоритм аналога стрелки обычного микроамперметра стрелочных тахометров. При этом неравномерность вращения коленвала на холостых оборотах в соседних отсчетах может достигать +-50 об/мин. Помогите с идеей такого алгоритма...

Reply to
Vladimir Ivanov
Loading thread data ...

Hello, Vladimir Ivanov! You wrote in conference fido7.ru.embedded to All on Wed, 31 Aug 2005 19:39:04 +0000 (UTC):

VI> Есть необходимость сделать автомобильный тахометр 300...6000 VI> об/мин. Для этого в программе организован буфер unsigned int VI> TaxBuf[BufSize], написана п/программы взятия отсчета, сдвига VI> буфера, вычисления результата как среднего арифметического VI> содержимого буфера.

Лучше простой low pass фильтр:

temp = (signed int)(value16 - result16); temp /= 16; // можно менять "постоянную времени" фильтра. result16 += temp;

Работает конечно не как стрелочный прибор, но как интегрирующая r-c цепочка, а результат куда лучше среднего арифметического.

dima

formatting link

Reply to
Dmitry Orlov

Thu Sep 01 2005 09:07, Dmitry Orlov wrote to Vladimir Ivanov:

VI>> Есть необходимость сделать автомобильный тахометр 300...6000 VI>> об/мин. Для этого в программе организован буфер unsigned int VI>> TaxBuf[BufSize], написана п/программы взятия отсчета, сдвига VI>> буфера, вычисления результата как среднего арифметического VI>> содержимого буфера. DO> Лучше простой low pass фильтр: DO> Работает конечно не как стрелочный прибор, но как интегрирующая r-c DO> цепочка, а результат куда лучше среднего арифметического.

Да не надо там усреднения. Среднее значение не требуется и все равно младшие цифры будут мельтешить. Чтобы не было неприятного мельтешения, надо обновлять индикатор ~3 раза в секунду. Еще один момент: значение имеет относительная точность оборотов, а не абсолютная. То есть принудительно затупить точность индикации до 1..2% от текущих оборотов. Тогда не будет видно противного мелкого плавания.

VLV

"Спешите делать добро, пока его не сделали вам"

Reply to
Vladimir Vassilevsky

Vladimir, ты ещё здесь сидишь?

Четверг Сентябрь 01 2005 19:14, Vladimir Vassilevsky wrote to Dmitry Orlov:

DO>> Лучше простой low pass фильтр: DO>> Работает конечно не как стрелочный прибор, но как интегрирующая DO>> r-c цепочка, а результат куда лучше среднего арифметического. VV> Да не надо там усреднения. Среднее значение не требуется и все равно VV> младшие цифры будут мельтешить. Чтобы не было неприятного VV> мельтешения, надо обновлять индикатор ~3 раза в секунду.

Правильно. Слишком быстро выводить бесполезно - человек не успеет проанализировать данные.

VV> Еще один момент: значение имеет относительная точность оборотов, а VV> не абсолютная.

Ты хочешь сказать, что требуется выдавать определённое количество значащих цифр? Попробуй пояснить свою мысль более развёрнуто.

VV> То есть принудительно затупить точность индикации до 1..2% от текущих VV> оборотов. Тогда не будет видно противного мелкого плавания.

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

Георгий

Reply to
George Shepelev

Fri Sep 02 2005 20:45, George Shepelev wrote to Vladimir Vassilevsky:

VV>> Еще один момент: значение имеет относительная точность оборотов, а VV>> не абсолютная.

GS> Ты хочешь сказать, что требуется выдавать определённое количество GS> значащих цифр? Попробуй пояснить свою мысль более развёрнуто.

Поясняю:

u16 LimitAccuracyRPM(u16 rpm) { s16 tmp; u8 norma;

if(rpm) { norma = 0; tmp = (s16)rpm; while(tmp > 0) { tmp <<= 1; norma++; } rpm += 512 >> norma; rpm &= -1024 >> norma; }

return rpm; }

GS> Это не избавит от возможности скачков младшего разряда, когда измеряемое GS> значение колеблется возле возникновения переноса из младших разрядов в GS> старшие.

Будут колебания младшей цифры в пределах +/- 1 если результат попадает на границу округления. Если это нежелательно, то вводится гистерезис на +/- бит в соответствующем разряде. VLV

"Спешите делать добро, пока его не сделали вам"

Reply to
Vladimir Vassilevsky

Добрый день, Vladimir! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Thu, 01 Sep

2005 19:14:24 +0400:

VV> Да не надо там усреднения. Среднее значение не требуется и все равно младшие цифры будут мельтешить. Чтобы не было неприятного мельтешения, надо обновлять индикатор ~3 раза в секунду. Еще один момент: значение имеет относительная точность оборотов, а не абсолютная. То есть принудительно затупить точность индикации до

1..2% от текущих оборотов. Тогда не будет видно противного мелкого плавания.

Неравномерность вращения коленвала на х.х. достигает +-100 об/мин. Если выводить три раза в секунду, будут охреновенные скачки. Тупо загрублять показания тоже не хотелось бы - пусть будет все же неточное, но усреднение. Только вот как это хитрое усреднение реализовать?

Reply to
Vladimir Ivanov

Sat Sep 03 2005 22:09, Vladimir Ivanov wrote to Vladimir Vassilevsky:

VI> Hеравномерность вращения коленвала на х.х. достигает +-100 об/мин.

Это неправильно. Чинить двигатель.

VI> Если выводить три раза в секунду, будут охреновенные скачки.

Какой смысл тогда имеет значение оборотов, если они настолько плавают?

VI> Только вот как это хитрое усреднение реализовать?

Если обороты отличаются от среднего значения больше чем на порог, то устанавливаем среднее значение равным текущему.

VLV

"Спешите делать добро, пока его не сделали вам"

Reply to
Vladimir Vassilevsky

Vladimir, ты ещё здесь сидишь?

Суббота Сентябрь 03 2005 03:08, Vladimir Vassilevsky wrote to George Shepelev:

VV>>> Еще один момент: значение имеет относительная точность оборотов, VV>>> а не абсолютная. GS>> Ты хочешь сказать, что требуется выдавать определённое GS>> количество значащих цифр? Попробуй пояснить свою мысль более GS>> развёрнуто. VV> Поясняю: VV> u16 LimitAccuracyRPM(u16 rpm)

Пояснять принято на естественном русском языке. Если ты не можешь внятно сформулировть мысль на родном языке, каракули на "птичьем" лишь запутают ситуацию.

GS>> Это не избавит от возможности скачков младшего разряда, когда GS>> измеряемое значение колеблется возле возникновения переноса из GS>> младших разрядов в старшие. VV> Будут колебания младшей цифры в пределах +/- 1 если результат VV> попадает на границу округления.

39.99 <-> 40.00

Думаешь, приятно такое наблюдать?

VV> Если это нежелательно, то вводится гистерезис на +/- бит в VV> соответствующем разряде.

Именно об этом и шла речь.

Георгий

Reply to
George Shepelev

Vladimir, ты ещё здесь сидишь?

Суббота Сентябрь 03 2005 21:09, Vladimir Ivanov wrote to Vladimir Vassilevsky:

VI> Hеравномерность вращения коленвала на х.х. достигает +-100 об/мин. VI> Если выводить три раза в секунду, будут охреновенные скачки. Тупо VI> загрублять показания тоже не хотелось бы - пусть будет все же VI> неточное, но усреднение. Только вот как это хитрое усреднение VI> реализовать?

Использовать более длинный буфер, усреднять несколько раз за период полной модификации этого буфера. Т.е. постоянная времени интегрирования будет длинее периода смены показаний индикатора.

Георгий

Reply to
George Shepelev

Пpивет тебе, Vladimir!

Дело было 04 сентябpя 05, Vladimir Vassilevsky и Vladimir Ivanov обсуждали тему "Автомобильный тахометp".

VI>> Hеpавномеpность вpащения коленвала на х.х. достигает +-100 об/мин.

VV> Это непpавильно. Чинить двигатель.

Сам ты непpавильный... :) Пpи совеpшенно постоянной _сpедней_ скоpости вpащения ноpмального двигателя _мгновенная_ скоpость как pаз так и меняется в пpеделах одного обоpота - от минимума пpи подходе к ВМТ поpшня любого гоpшка и до максимума чеpез ЕМHИП ~60 гpадусов после вспышки. А у двухтактников и еще сильнее меняется - до 25..30%.

Если датчик у человека меpяет вpемя между двумя соседними зубцами шестеpни, котоpых много больше одного на обоpот, то отсчеты как pаз и будут следовать мгновенной скоpости.

Удачи! Александp Лушников.

Reply to
Alexander V. Lushnikov

Здравствуй, Alexander!

AVL> Пpи совеpшенно постоянной _сpедней_ скоpости вpащения ноpмального AVL> двигателя _мгновенная_ скоpость как pаз так и меняется в пpеделах одного AVL> обоpота - от минимума пpи подходе к ВМТ поpшня любого гоpшка и до AVL> максимума чеpез ЕМHИП ~60 гpадусов после вспышки. А у двухтактников и еще AVL> сильнее меняется - до 25..30%.

Есть жесткая механическая связь массивных инерционных деталей: коленвал-маховик-сцепление-редуктор(КПП)-ведущие колеса-дорога. Где, на твой взгляд, в этой цепи демпфируются эти очень немалые проценты колебания частоты вращения коленвала? Поскольку, если этого демпфирования нет, то автомобиль движется быстрыми рывками :).

Успехов! До свидания. Sergey.

Reply to
Sergey Brylew

Sun Sep 04 2005 15:39, George Shepelev wrote to Vladimir Vassilevsky:

VV>> u16 LimitAccuracyRPM(u16 rpm)

GS> Пояснять принято на естественном русском языке. Если ты не можешь внятно GS> сформулировть мысль на родном языке, каракули на "птичьем" лишь запутают GS> ситуацию.

Георгий, сейчас ты лишний раз всем продемонстрировал, что ты дурак.

VLV

"Спешите делать добро, пока его не сделали вам"

Reply to
Vladimir Vassilevsky

После серии экспериментов удалось прийти к следующим выводам:

  1. Применение только программных ФНЧ с дополнительным последующим усреднением последних 16 отсчетов буфера недостаточно для нормального отображения данных пользователю. Как не подстраивай постоянную времени фильтра, результат будет или сильно запаздывать, или цифры "бегать". Можно было бы попытаться сделать постоянную времени адаптивной на основе выходных данных ФНЧ, но мне не показалось, что это перспективный путь...
  2. Наверное единственное решение - "загрублять" показания перед выводом на LCD. Вычислять среднее значение последних n отсчетов и определять текущие допуски вверх и вниз для этих отсчетов. Допустим, после такой обработки получены данные: 1000 об/мин +10 об/мин -20 об/мин. На дисплей выводим 1000 об/мин. Каждый новый отсчет записывается в буфер и проверяется на значение в допуске 980...1020 об/мин. Если значение в допуске, на индикаторе сохраняется показание 1000 об/мин., иначе содержимое буфера с записанным новым отсчетом перерассчитывается и получаются новые среднее значение и новые допуски. Таким образом, если приходит новый "похожий" на предыдущие отсчет, это не требует изменения показаний LCD.
  3. Сами допуски я рассчитывал как среднеквадратическое отклонение от среднего для всех отсчетов больших среднего и соотв. меньших. Можно было бы вообще за допуск "вверх" и "вниз" от среднего брать величину самого большого по величине отсчета, но это ведь не учитывает статистику других отсчетов буфера...
  4. Хотя во внутреннем представлении микроконтроллера результат тахометра все равно изменяется часто, на LCD выводим три раза в секунду.

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

Reply to
Vladimir Ivanov

Привет, *Sergey*!

/понедельник, 05 сентября 2005/ *Sergey Brylew* писал(а) к *Alexander V Lushnikov* по поводу *Re: Автомобильный тахометp:*

[кусь] AVL>> до максимума чеpез ЕМHИП ~60 гpадусов после вспышки. А у AVL>> двухтактников и еще сильнее меняется - до 25..30%.

SB> Есть жесткая механическая связь массивных инерционных деталей: SB> коленвал-маховик-сцепление-редуктор(КПП)-ведущие колеса-дорога. Где, на SB> твой взгляд, в этой цепи демпфируются эти очень немалые проценты SB> колебания частоты вращения коленвала? Поскольку, если этого SB> демпфирования нет, то автомобиль движется быстрыми рывками :).

А он так и движется. Вибрации. ;) На самом деле многое зависит от конструкции - 4-х цилиндровый, скажем, "плавнее" одногоршкового. ;)

Reply to
Andrey Solomatov

Привет, *Vladimir*!

/вторник, 06 сентября 2005/ *Vladimir Ivanov* писал(а) к *Vladimir Ivanov* по поводу *Re: Автомобильный тахометр:*

VI> После серии экспериментов удалось прийти к следующим выводам: VI> 1. Применение только программных ФНЧ с дополнительным последующим VI> усреднением последних 16 отсчетов буфера недостаточно для нормального VI> отображения данных пользователю. Как не подстраивай постоянную времени VI> фильтра, результат будет или сильно запаздывать, или цифры "бегать".

На мой взгляд, здесь нужно правильно подобрать алгоритм. Я в другом письме тебе кинул оптимальный на мой взгляд вариант. Измерять обороты двигателя чаще чем раз в 0,1с смысла нет. С другой стороны - большая часть проблем возникает от того, что при измерении периода он привязывается к оборотам - при больших оборотах значение будет скакать, а при малых - увеличивается время реакции.

[кусь]

VI> В принципе после всего этого, удалось получить приемлемую работу VI> прибора. Но достичь иллюзии поведения стрелочного тахометра в части VI> отображения при максимальной достоверности показаний полностью не VI> удалось...

А это, по моему, невозможно. "Стрелки" удобны для отображения меняющихся значений - цифры для постоянных, но _точных_.

Reply to
Andrey Solomatov

Vladimir, ты ещё здесь сидишь?

Понедельник Сентябрь 05 2005 17:58, Vladimir Vassilevsky wrote to George Shepelev:

GS>> Пояснять принято на естественном русском языке. Если ты не GS>> можешь внятно сформулировть мысль на родном языке, каракули на GS>> "птичьем" лишь запутают ситуацию. VV> Георгий, сейчас ты лишний раз всем продемонстрировал, что ты дурак.

Хамишь? Hу хами, если ни на что другое не способен. А о необходимости формулировать алгоритм на естественном языке говорили многие специалисты, к примеру "Мифический человеко-месяц" Брукса почитай.

Георгий

Reply to
George Shepelev

Vladimir, ты ещё здесь сидишь?

Понедельник Сентябрь 05 2005 22:08, Vladimir Ivanov wrote to Vladimir Ivanov:

VI> После серии экспериментов удалось прийти к следующим выводам:

[...]

VI> В принципе после всего этого, удалось получить приемлемую работу VI> прибора. Hо достичь иллюзии поведения стрелочного тахометра в части VI> отображения при максимальной достоверности показаний полностью не VI> удалось...

И не удастся. У стрелочного прибора есть одно принципиальное преимущество, на нём непосредственно видна _скорость_ перемещения стрелки (первая производная измеряемой величины). А на цифровом приборе только циферки мельтешат, нужно их в голове интерпретировать.

Георгий

Reply to
George Shepelev

Пpивет тебе, Sergey!

Дело было 05 сентябpя 05, Sergey Brylew и Alexander V Lushnikov обсуждали тему "Автомобильный тахометp".

AVL>> Пpи совеpшенно постоянной _сpедней_ скоpости вpащения ноpмального AVL>> двигателя _мгновенная_ скоpость как pаз так и меняется в пpеделах AVL>> одного обоpота - от минимума пpи подходе к ВМТ поpшня любого AVL>> гоpшка и до максимума чеpез ЕМHИП ~60 гpадусов после вспышки. А у AVL>> двухтактников и еще сильнее меняется - до 25..30%.

SB> Есть жесткая механическая связь массивных инеpционных деталей: SB> коленвал-маховик-сцепление-pедуктоp(КПП)-ведущие колеса-доpога. Где, на SB> твой взгляд, в этой цепи демпфиpуются эти очень немалые пpоценты SB> колебания частоты вpащения коленвала?

1) описанное - на холостом ходу

2) пpочитай внмательно написанное тобой - там уже содеpжится ответ. :)

Удачи! Александp Лушников.

Reply to
Alexander V. Lushnikov

Hi Vladimir !

Совсем недавно 05 Sep 05 23:08, Vladimir Ivanov писал к Vladimir Ivanov:

VI> После серии экспериментов удалось прийти к следующим выводам:

Я делал подобную функцию- показывал частоту вращения турбины. Правда, турбина размерами несколько больше, чем у тебя. Hо смысл подобный- есть шестеренка, с которой снимаются импульсы, число импульсов пропорционально частоте вращения.

Сделал так: есть счетчик, который инкрементируется при каждом импульсе.

Каждые 250ms:

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

Итого: Имеем новое значение на экране каждые 250 мс, причем оно показывает среднюю частоту за предыдущую секунду. Частота при выводе округлялась до десятков (т.е. значение единиц всегда 0).

Эксплуатационщики были довольны. Hи на мельтешение, ни на тормознутость защиты (там это все еще и щелкало разными реле, в зависимости от достигнутых оборотов) нареканий не было.

Оговорка: Это была большая дура, думаю значительно более инерциональная, чем маховик в автомобиле. Максимальная частота - до 10000 об/мин.

WBRgrds Ruslan

Reply to
Ruslan Mohniuc

Привет, Vladimir !

05 Sep 05 , 23:08 Vladimir Ivanov писал к Vladimir Ivanov:

VI> В принципе после всего этого, удалось получить приемлемую работу VI> прибора. Hо достичь иллюзии поведения стрелочного тахометра в части VI> отображения при максимальной достоверности показаний полностью не VI> удалось...

А как работает стрелочный прибор? В смысле, должна же быть внятная кинематическая модель?

. С уважением, Hикита. icq:240059686, lj-user:nicka_startcev ... Выползень роду женского подло нарушил Обряд Чистописания

Reply to
Nickita A Startcev

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.