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

 
 
> Тахометр на AVR, тонкости алгоритма
ivainc1789
сообщение Sep 1 2005, 18:22
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



Есть необходимость сделать автомобильный тахометр 300...6000 об/мин. Для этого в программе организован буфер unsigned int TaxBuf[BufSize], написана п/программы взятия отсчета, сдвига буфера, вычисления результата как среднего арифметического содержимого буфера. Т. е. наблюдаются последние BufSize отсчетов. Проблема в том, что данные о текущей частоте вращения необходимо выводить на LCD с "точностью" до +-1 об/мин. Понятно, что на самом деле такая точность не нужна, а отображать на дисплее практически невозможно - цифры "скачут", считать показания затруднительно.
Хотелось бы написать алгоритм аналога стрелки обычного микроамперметра стрелочных тахометров. При этом неравномерность вращения коленвала на холостых оборотах в соседних отсчетах может достигать +-50 об/мин.
Помогите с идеей такого алгоритма для AVR...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
BVU
сообщение Sep 2 2005, 05:16
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Да просто вычисляйте среднее значение своих измерений и ничего мудрить не надо. Я делал такие вещи, на практике достаточно брать пять значений что бы получить хорошее сглаживание:
Aср = (a'1 + a'2 + a'3 + a'4 + a'5) / 5.
А интервал показаний установите кратный двум или пяти, тогда и цыфорки скакать не будут!
Я так понял, что Вы пересчитываете импульсы с датчика Холла перемноженного на некий коэффициент?


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Sep 2 2005, 15:30
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



Цитата(BVU @ Sep 2 2005, 08:16)
Да просто вычисляйте среднее значение своих измерений и ничего мудрить не надо.  Я делал такие вещи, на практике достаточно брать пять значений что бы получить хорошее сглаживание:
Aср = (a'1 + a'2 + a'3 + a'4 + a'5) / 5.
А интервал показаний установите кратный двум или пяти, тогда и цифорки скакать не будут!
Я так понял, что Вы пересчитываете импульсы с датчика Холла перемноженного на некий коэффициент?
*


Большое спасибо всем ответившим. В настоящий момент работает вот такой алгоритм соотв. подпрограммы:
/********************************************************************************
****/
// программа расчета N, N[об/мин] = (30*Fbq)/(T1Div*TTAX)
void GetTaxData() {
unsigned char i,SkoSummaPlusCnt=0,SkoSummaMinusCnt=0;
unsigned int DatMin,DatMax,DatNew;
unsigned long DatSumma=0,SkoSummaPlus=0,SkoSummaMinus=0;
float Sko;

// если новые данные готовы,разрешить их обработку
if (TaxNew != 0) {
// безопасное быстрое копирование обновленного буфера для обработки
CLRBIT(GICR,INT1); // запретить изменение буфера
for (i=0;i<TaxBufSize;i++) DatBuf[i] = TaxBuf[i];
DatNew = TaxNew;
SETBIT(GICR,INT1); // разрешить изменение буфера

// если новый отсчет как старые,принять старые значения
// иначе,полный перерасчет с учетом нового отсчета
DatMin = DatSr - DatMinus;
DatMax = DatSr + DatPlus;
if ((DatNew < DatMin) || (DatNew > DatMax)) {

// перерасчет среднего значения в DatBuf[]
for (i=0;i<TaxBufSize;i++) DatSumma += DatBuf[i];
DatSr = DatSumma / TaxBufSize;

// среднеквадратическое отклонение вверх и вниз
for (i=0;i<TaxBufSize;i++) {
if (DatBuf[i] > DatSr) {
SkoSummaPlus += (DatBuf[i] - DatSr)*(DatBuf[i] - DatSr);
SkoSummaPlusCnt++;
}
if (DatBuf[i] < DatSr) {
SkoSummaMinus += (DatSr - DatBuf[i])*(DatSr - DatBuf[i]);
SkoSummaMinusCnt++;
}
}
Sko = sqrt((SkoSummaPlus+SkoSummaMinus)/(SkoSummaPlusCnt+SkoSummaMinusCnt-1));
DatPlus = Sko + 1;
DatMinus = Sko + 1;

// получение и отображение N
if ((DatSr > 0) && (DatSr < 0xFFFF)) {
TaxResult = Const/DatSr;// unsigned long __flash Const = 30*Fbq/T1Div;
TaxSko = TaxResult - Const/(DatSr+DatPlus);
}
}
TaxNew = 0;// запретить повторную обработку отсчета
}
}
/********************************************************************************
****/
И все же с приходом нового "нетипового" отсчета содержимое TaxResult изменяется весьма значительно, что вообще говоря ожидаемо - этот алгоритм несовершенен и задачу сглаживания не решает.

Если просто считать среднее от пяти значений, то:
"...А интервал показаний установите кратный двум или пяти, тогда и цифорки скакать не будут!..."
Никак в толк не возьму, почему? Отсчеты поступают непериодично (движок ведь работает неравномерно). Вы предлагаете обновлять показания на индикаторе только в моменты, когда полностью обновится пятиэлементный буфер?

Статистика: прогретый движок Москвича-2140 по вышеприведенному алгоритму показал среднюю неравномерность вращения коленвала около 100 об/мин.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ivainc1789   Тахометр на AVR   Sep 1 2005, 18:22
- - _sR_   Цитата(ivainc1789 @ Sep 1 2005, 21:22)Хотелос...   Sep 1 2005, 20:16
|- - yung   Стрелочный амперметр представляет собой интегратор...   Sep 1 2005, 20:52
- - CDT   В программе Sonic Foundry Sound Forge есть линейны...   Sep 2 2005, 03:58
|- - bzx   BVU сделал вполне уместное замечание. Надо увеличи...   Sep 2 2005, 07:33
|- - yung   Медианный фильтр. Смысл - все элементы массива упо...   Sep 2 2005, 20:51
- - lolikandr   Для того, чтобы получить фиксированную величину не...   Sep 5 2005, 11:21
|- - ivainc1789   После серии экспериментов удалось прийти к следующ...   Sep 5 2005, 19:07
|- - BVU   Цитата(ivainc1789 @ Sep 5 2005, 23:07)4. Хотя...   Sep 7 2005, 15:00
|- - ivainc1789   Индикация - абсолютно отдельный постпроцесс. Вед...   Sep 7 2005, 17:33
- - lolikandr   Странно, что вообще есть большие отклонения. С как...   Sep 7 2005, 14:48
|- - ivainc1789   Цитата(lolikandr @ Sep 7 2005, 17:48)Странно,...   Sep 7 2005, 17:14
- - Айский   Все-таки читаемость аналоговых индикаторов гораздо...   Jun 24 2006, 18:22
- - white.wind   А может быть использовать пишалку или светодид миг...   Jun 27 2006, 09:20
- - vooon   Кстати зря отметаете стрелочный индикатор только с...   Jun 28 2006, 21:05


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 14:16
Рейтинг@Mail.ru


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