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

 
 
> Измеритель уровня топлива, Первый проект на AVR
alex2103
сообщение Mar 16 2007, 22:33
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



Очень хочется разобраться в МК... Для этого был куплен ATmega8 и поставлена перед собой задача собрать устройство контроля уровня бензина в баке. smile.gif В баке стоит переменный резистор с поплавком, диапазон примерно 0-60 Ом. Зависимость сопротивление/литры неизвестна angry.gif
К МК подключен сдвоенный семисегментный индикатор от старого системного блока (показывал раньше крутые мегагерцы). У этого индикатора выводы общих анодов запараллелены...из-за этого динамической индикации не получилось и индикатор занимает 14 ног smile.gif
Устройство должно мереть падение напряжения на резисторе в баке и выводить результат в литрах на индикатор.
Сам пока написал функцию для вывода числа 0-99 на индикатор.

Подскажите пожалуйста:
1) как организовать подключение резистора к АЦП (с учетом того, что резистор в баке и токи там должны быть маленькие)
2) как интерпретировать значение АЦП с учетом нелинейности сопротивление/литры?
Спасибо.

З.Ы.:не пинайте сильно...это мой первый опыт работы с МК.
Go to the top of the page
 
+Quote Post
5 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 69)
alex2103
сообщение Mar 17 2007, 23:50
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



С подключением датчика вроде все понятно. Нужно сделать делитель и выбрать номиналы сопротивлений такими, чтоб максимальный ток был не больше 10 мА например...
А каким образом мне перевести результат АЦП в литры?
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 18 2007, 14:25
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



неужели никто мне не поможет?
Go to the top of the page
 
+Quote Post
Massi
сообщение Mar 18 2007, 15:53
Сообщение #4


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

Группа: Свой
Сообщений: 1 007
Регистрация: 24-01-06
Из: Киев
Пользователь №: 13 556



ну для начала...смотреть какой ток должен быть...это бензобак...искра и привет...больше писать здесь не придется...
а далее стандарт...делитель...фильтр герц на 10...оцифровка....накопление и усреднение....
для перевода...есть процедура калибровки...налей воды...100 литров...спусти 3 литра в банку...считай значения...слей 3 литра...считай значения...и так далее...по другому никак...

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

теперь самое веселое...это питание...оно скачет аки собака...шпильки до 300 в есть...искровые разряды дают до гиг полосу грязи...итак...фильтр мощнейший на вход...с супрессорами и катушками...через резистор цементовый в 10-25 ом..дросселя россыпями ставить...конденсаторов по питанию не жалеть...перед опорниками фильтр...после тоже...сам ставлю типа LQH32...перед питанием меги и после тоже...корпус металл...


--------------------
Motobaza.kiev.ua
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 18 2007, 18:23
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



Massi, калибровку так себе и представлял. Бак всего 38 литров и заливать буду по литру и снимать значения. В итоге получу некую таблицу соответствия результата АЦП и литров. Как потом в проге реализовать эту таблицу? неужели через IF... smile.gif Хотелось бы чтоб на индикатор выводилась челая часть литров, а дробная с округлением до 0,5 литра обозначалась запятой. Можно где-нибудь посмотреть на примеры?

Насчет токов в баке:
В заводской системе они там нехилые. В цепи резистора там бывает до 0,1А и еще есть контакт, который моммутирует лампу на 2Вт (замыкается если меньше 5 литров). Ничего не взрывается (да и взрываться там ИМХО нечему-это отдельный разговор).
Насчет опорного. Нужна ли в такой задаче высокая точность? Что получится если использовать Uпит.?
Прочитав про фильтрацию питания стало страшно smile.gif Вот сейчас на столе лежит автомобильный тахометр/вольтметр и т.д. и питание там на 7805 в стандартной обвязке. Расчитывал сделать также. Это возможно? Где можно подсмотреть примеры готовых решений с питанием для авто?

З.Ы.: извиняюсь что много написАл. Просто тема очень интересна для меня и многое еще непонятно. Надеюсь на помощь!
Go to the top of the page
 
+Quote Post
Massi
сообщение Mar 19 2007, 10:50
Сообщение #6


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

Группа: Свой
Сообщений: 1 007
Регистрация: 24-01-06
Из: Киев
Пользователь №: 13 556



можно функцию написать...а поправочные коэфициенты хранить в памяти...прогу тебе никто не напишет кроме тебя самого...помочь с затыком да...а работу твою никто выполнять не станет...идею подбросить можно...реализацию тоже...тоесть куда бежать и где рыть...
тахометр система инерционная...стрелка там тяжелая...она фильтр сама по себе...тахометры на мотиках горят на три пятнадцать...особенно на ижах и днепрах...
и дубовые они...они просто копят импульсы на конденсаторе...посему и 7805 стоит...шумы там по барабану...но 7805 всего 35 в максимум...как повезет...
я тебе уже ответил...цементовый резистор...предохранитель...конденсатор на 1 кВ 10 нан...дроссель
типа PLT09HN2003R0P1B...супресор 1,5КЕ18СА конденсатор пленка на 1 мкф и єлектролит на 470 мкф 50 в...далее дроссель типа CDR27 на 22микрогенри и конденсаторы впаралель 100 мкф и 1 мкф...вот теперь можно и на 7805 подавать...после 7805 конденсатор 50 мкф и 1 мкф керамика...далее дроссель и опять конденсатор 50 мкф...вот теперь можно брать питание...
далее...АЦП надо вывести к 8 разрядам...ибо потом усреднять будет нечего...а это опорник нужен какой нибудь...
все остальное от лукавого...
ибо лучче перебдеть чем недобдеть...


--------------------
Motobaza.kiev.ua
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 19 2007, 12:03
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



Прогу за меня писать не надо, мне самому интересно smile.gif Просто хочется посмотреть чей-то исходник...
Под тахометром я имел ввиду МК устройство (часы, будильник, тахометр и т.д.).
Совет по питанию постараюсь реализовать. Но что-то мне кажется что он уж очень навороченый...у будущего устройства в принципе функция не особо ответсвенная - просто показывать сколько у меня еще в баке бензина.
Что такое супресор? smile.gif

Сообщение отредактировал alex2103 - Mar 19 2007, 12:25
Go to the top of the page
 
+Quote Post
Massi
сообщение Mar 19 2007, 12:41
Сообщение #8


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

Группа: Свой
Сообщений: 1 007
Регистрация: 24-01-06
Из: Киев
Пользователь №: 13 556



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


--------------------
Motobaza.kiev.ua
Go to the top of the page
 
+Quote Post
Валентиныч
сообщение Mar 19 2007, 16:55
Сообщение #9


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

Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712



Цитата(alex2103 @ Mar 19 2007, 14:03) *
...у будущего устройства в принципе функция не особо ответсвенная - просто показывать сколько у меня еще в баке бензина.

Если с точностью до 0,5 литра - то, скорее всего, не получится (да и зачем?). При движении авто уровень бензина в баке непостоянен, также будут меняться и показания уровнемера.
Выход - многократные измерения в течение нескольких секунд (мо-быть - десятков секунд) с последующим усреднением значений.
Что касается требований по питанию, то они не так сташны, как описано выше, но проблемы, все таки, могут быть.
Занимаюсь разработкой автоэлектроники много лет (на уровне "для души"), опыт использования AVR показывает, что желательно развязывать бортовую сеть и питание контроллера LC-фильтром с последующей стабилизацией параметрикой. И кренки 78хх - не лучший вариант. Предпочтительнее что-нить более интересное.


--------------------
Закономерность: Чем больше узнаю, тем меньше знаю...
Любые мнения, даже ошибочные, имеют право на существование.
Чем лучше узнаю людей, тем больше нравятся собаки...
Go to the top of the page
 
+Quote Post
muravei
сообщение Mar 19 2007, 17:54
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(alex2103 @ Mar 19 2007, 12:03) *
Прогу за меня писать не надо, мне самому интересно smile.gif Просто хочется посмотреть чей-то исходник...

В "Схемотехнике 1-07" - "Датчик уровня топлива на АВР -микроконтроллере"
Принцип основан на измерении емкости датчика , сравниваются частоты двух RC генераторов на 555 таймерах, образцового и измерит.
Достоинство- ни каких движущихся деталей.
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 20 2007, 09:32
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



muravei, спасибо! Жаль что в сети в свободном доступе только оглавление этого журнала sad.gif Статью так и не получилось найти.
У вас случаем нет ее?
Go to the top of the page
 
+Quote Post
muravei
сообщение Mar 20 2007, 10:46
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(alex2103 @ Mar 20 2007, 09:32) *
У вас случаем нет ее?

Есть, но нет сканера.sad.gif
Схема там простая, можно на пальцах, рисунок конструкции датчика обещан на сайте, но там пока ничего не нашел.
Go to the top of the page
 
+Quote Post
Old1
сообщение Mar 20 2007, 12:14
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095



Цитата(alex2103 @ Mar 20 2007, 10:32) *
... Жаль что в сети в свободном доступе только оглавление этого журнала sad.gif Статью так и не получилось найти.
У вас случаем нет ее?

Схемотехника 2007_01
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 20 2007, 13:27
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



Old1, спасибо огромное, читаю...

Вот так собираюсь сделать питание... Какие будут замечания?

Сообщение отредактировал alex2103 - Mar 20 2007, 13:32
Прикрепленные файлы
Прикрепленный файл  power.GIF ( 4.08 килобайт ) Кол-во скачиваний: 204
 
Go to the top of the page
 
+Quote Post
Валентиныч
сообщение Mar 20 2007, 17:12
Сообщение #15


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

Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712



Цитата(alex2103 @ Mar 20 2007, 15:27) *
Вот так собираюсь сделать питание... Какие будут замечания?

Пожалуй, схема близка к оптимальной.


--------------------
Закономерность: Чем больше узнаю, тем меньше знаю...
Любые мнения, даже ошибочные, имеют право на существование.
Чем лучше узнаю людей, тем больше нравятся собаки...
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 20 2007, 17:36
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



Валентиныч, ОК! Значит сегодня травлю платку smile.gif

Еще вопрос по ИОН. Если верхнее плечо делителя питать от VCC и вход AREF АЦП соединить с VCC, то как я понимаю возможные скачки напряжения не будут влиять на результат АЦП?
Go to the top of the page
 
+Quote Post
Валентиныч
сообщение Mar 20 2007, 17:55
Сообщение #17


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

Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712



Цитата(alex2103 @ Mar 20 2007, 19:36) *
Если верхнее плечо делителя питать от VCC и вход AREF АЦП соединить с VCC, то как я понимаю возможные скачки напряжения не будут влиять на результат АЦП?

Не стоит AREF цеплять на VCC, лучше использовать внутренний ИОН. На делитель можно подать VCC через дополнительный R, равный сопротивлению делителя. К этой же точке можно прилепить еще одну емкость - получившаяся RC цепочка не будет лишней в цепи питания делителя.
Кроме того, я бы несколько увеличил номинал R1 в Вашей схеме стабилизации питания (ом до 50-100).


--------------------
Закономерность: Чем больше узнаю, тем меньше знаю...
Любые мнения, даже ошибочные, имеют право на существование.
Чем лучше узнаю людей, тем больше нравятся собаки...
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 22 2007, 23:03
Сообщение #18


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



спаял я платку... подключил вместо датчика в баке переменный резистор и покрутил его руками... Вроде АЦП работает-значения на индикаторе меняются (могу наблюдать значения от 0 до 99, потом старшие разряды не влазят). Не понравилось что даже при 8бит АЦП значение мл. разряда скачут +/- 2 единицы. Так и должно быть? (делитель питается от ACC? а опора используется внутренняя).

Валентиныч, резистор поставил 47Е.

Как произвести калибровку? Индикатор же у меня на 2 разряда... Пока только приходит мысль отсылать результат АЦП через УАРТ на компьютер...но как-то неохочется компьютер в гараж тащить smile.gif Может подскажите другую реализацию? Например при нажатии кнопки записать округленное значение АЦП в епром, а потом считать все эти значение программатором? Можно такое реализовать?
Go to the top of the page
 
+Quote Post
Oldring
сообщение Mar 22 2007, 23:17
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(alex2103 @ Mar 22 2007, 23:03) *
Не понравилось что даже при 8бит АЦП значение мл. разряда скачут +/- 2 единицы. Так и должно быть? (делитель питается от ACC? а опора используется внутренняя).


При аккуратно спроектированной схеме и правильно написанной программе, у ATMega8 на столе шум 10-битного АЦП получается заметно меньше единицы младшего разряда.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 23 2007, 15:32
Сообщение #20


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



меня вот такая мысль посетила... Конструктивно датчик уроня топлива есть переменный резистор на оси которого заркеплен рычаг с поплавком. Ход у оськи резистора 0-90 градусов. Бак на 38 литров. Получается что одному литру примерно соответствует 2,4 градуса поворота оси резистора. Вообще реально ли достоверно определить кол-во литров при такой характеристике датчика? Или это пустая трата времени?
Go to the top of the page
 
+Quote Post
Валентиныч
сообщение Mar 23 2007, 16:35
Сообщение #21


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

Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712



Цитата(alex2103 @ Mar 23 2007, 17:32) *
Конструктивно датчик уроня топлива есть переменный резистор на оси которого заркеплен рычаг с поплавком. Ход у оськи резистора 0-90 градусов. Бак на 38 литров. Получается что одному литру примерно соответствует 2,4 градуса поворота оси резистора. Вообще реально ли достоверно определить кол-во литров при такой характеристике датчика?

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


--------------------
Закономерность: Чем больше узнаю, тем меньше знаю...
Любые мнения, даже ошибочные, имеют право на существование.
Чем лучше узнаю людей, тем больше нравятся собаки...
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 23 2007, 17:33
Сообщение #22


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



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

Вот в CV хотел сделать округление рез-та АЦП...не получилось smile.gif
Без округления вроде все адекватно, но скачет мл. разряд. С округлением вообще непонятно что показывает sad.gif Помогите найти ошибку.
Код
unsigned char t[10];
while (1)
      {
unsigned char out=0;
unsigned char n=0;
unsigned int sum=0;
n=0;
sum=0;
while(n<10)        
        {
        t[n]=read_adc(0); // читаем АЦП
         n++;
         }  
n=0;
while(n<10)
{
    sum+=(unsigned int)t[n];
    n++;
}
out=(unsigned char)sum/10;

        leds(out); //выводим на индикатор
        
        delay_ms(1000);  
           }
Go to the top of the page
 
+Quote Post
vooon
сообщение Mar 24 2007, 00:24
Сообщение #23


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401



приведу ваш код, немного лучьше форматированный и с моими комментами
Код
unsigned char t[10];
while (1)
{
    unsigned char out=0;
    unsigned char n=0;
    unsigned int sum=0;

    n=0;        // ненужно, и так 0
    sum=0;

    while(n<10) // для этих целей for боьше подходит
    {
        t[n] = read_adc(0); // читаем АЦП
        n++;
    }
    n=0;
    while(n<10) // for(n = 0; n < 10; n++)
    {
        sum+=(unsigned int)t[n]; // приведение типа ненужно, автоматически это сделают
        n++;
    }
    out=(unsigned char)sum/10; // тоже самое

    leds(out);                 //выводим на индикатор

    delay_ms(1000);            // вместо задержки моглибы еще что нибудь сделать, ну да ладно :)
                               // да и лучьше сделать задержку между read_adc()
}
Go to the top of the page
 
+Quote Post
Massi
сообщение Mar 24 2007, 10:21
Сообщение #24


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

Группа: Свой
Сообщений: 1 007
Регистрация: 24-01-06
Из: Киев
Пользователь №: 13 556



ставьте фильтр активный на вход...вытянете все разряды...
вначале сигнал получите чистый...ибо будете писать писать...воевать с мельницами...если все проблемы можно решить одним операционником....возьмите даташит на AD629...там есть фильт на 10 50 100 Гц...пощитанный...вместо этого опера ставить AD820...на вход защитный стабилитрон и RC 100 R 50 pF...от ВЧ помех...вытянешь все 10 разрядов...

и от калибровки не уйти...однозначно...


--------------------
Motobaza.kiev.ua
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 24 2007, 12:04
Сообщение #25


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Massi @ Mar 24 2007, 09:21) *
ставьте фильтр активный на вход...вытянете все разряды...
вначале сигнал получите чистый...ибо будете писать писать...воевать с мельницами...
Вот получение чистого сигнала с потенциометра с помощью активных фильтров и хитрых операционников как раз и является войной с мельницами, а также пальбой из пушки по воробъям. Чтобы получить нормальные отсчеты с потенциометра необходимо и достаточно обеспечить хорошее питание и грамотную разводку:
Цитата
спаял я платку... подключил вместо датчика в баке переменный резистор и покрутил его руками...


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 25 2007, 17:26
Сообщение #26


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



vooon, за подправленный код спасибо. Как я понял в моем коде ошибок нет? Я вот думаю может действительно нужно делать задержки между чтением АЦП? Пойду курить даташит...

Massi, операционник нежелателен - места для него не хватает...да и на радиорынок ехать не хочется smile.gif

Сергей Борщ,
Цитата
Чтобы получить нормальные отсчеты с потенциометра необходимо и достаточно обеспечить хорошее питание и грамотную разводку

Питание пытался сделать по совету Massi. Схемка есть на предыдущей странице. Такого питания будет достаточно? Что вы имеете ввиду под грамотной разводкой?
Go to the top of the page
 
+Quote Post
Vladimir Chekin
сообщение Mar 26 2007, 04:22
Сообщение #27


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 16-03-07
Из: МО, г.Балашиха
Пользователь №: 26 210



> Не понравилось что даже при 8бит АЦП значение мл. разряда скачут +/-
> 2 единицы. Так и должно быть?

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

Рекомендую циклически пропускать полученные значения через фильтр "минимум/максимум", а уж только затем складывать среднее значение этого фильтра в интегратор. Для начала достаточно буфера на 3 значения и обычной пузырьковой сортировки. Если потенциометр совсем хреновый, то длину буфера можно увеличить.

Данный метод обработки потенциометров был использован в системе "Астролябия", изготовленного под руководством С.Борщ smile.gif
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 26 2007, 08:39
Сообщение #28


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



Обвешал по питанию всё КМками и мл. разряд вроде устаканился smile.gif

Код
for(n=0;n<10;n++)
        {
        t[n]=read_adc(0); // Измерить напряжение на нулевом входе АЦП (линия РАО порта А)
        }  
for(n=0;n<10;n++)
        {
        sum+=t[n];
        }
out=sum/10; //среднее <--
leds(out);
delay_ms(1000);


по-моему понял почему у меня округление не работает... В out получается дробное число smile.gif как из него получить только целую часть? help.gif
Go to the top of the page
 
+Quote Post
Demeny
сообщение Mar 26 2007, 08:59
Сообщение #29


Знающий
****

Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237



Код
out=(unsigned char)sum/10;

Так делать категорически нельзя - именно в этом ошибка. Здесь к типу unsigned char приводится только переменная sum, а не sum/10, как может показаться, то есть от накопленной суммы программа оставит младшие 8 байт, и уже их поделит на 10.
Обойдитесь корректно без деления и дробных чисел. Возьмите фильтр по 16 значениям, и вместо деления на 16 примените сдвиг вправо на 4 разряда.
Код
sum = sum>>4;
out=(unsigned char)sum;

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


--------------------
Сделано в Китае. Упаковано в России.
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 26 2007, 09:24
Сообщение #30


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



Demeny, спасибо! сделал как вы посоветовали. Теперь среднее правильно считает. Сейчас разбираюсь как выкинуть из буфера минимальные и максимальные значения...
Go to the top of the page
 
+Quote Post
Vladimir Chekin
сообщение Mar 26 2007, 09:54
Сообщение #31


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 16-03-07
Из: МО, г.Балашиха
Пользователь №: 26 210



Из буфера интегратора ничего выкидывать не надо. Фильтр мин/макс организуется дополнительно.

Пример. Конечно коряво, но смысл видно:

Код
uint8_t i, k, temp;
uint8_t filt_res[3];
uint16_t integrator;

for (i=0; i < 16; i++)
{
  for (k=0; k < 3; k++)
  {
    filt_res[k] =  read_adc(0); // читаем АЦП
    delay (xxx);
  }

  // Пузырьковая сортировка
  if (filt_res[0] > filt_res[1])
  {
    temp = filt_res[1];
    filt_res[1] = filt_res[0];
    filt_res[0] = temp;
  }

  if (filt_res[1] > filt_res[2])
  {
    temp = filt_res[2];
    filt_res[2] = filt_res[1];
    filt_res[1] = temp;
  }

  if (filt_res[0] > filt_res[1])
  {
    temp = filt_res[1];
    filt_res[1] = filt_res[0];
    filt_res[0] = temp;
  }

  // В filt_res[1] - среднее (не путать с усреднённым) по величене значение
  integrator += filt_res[1];
}

  temp = (uint8_t)(integrator >> 4); // В temp искомое


Сообщение отредактировал Vladimir Chekin - Mar 26 2007, 09:56
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 26 2007, 12:31
Сообщение #32


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



Если резистор не трогать, то показания АЦП теперь стоят как вкопаные, но стоит его тронуть и значения начинают скакать sad.gif думаю из-за дребезга... Может просто поставить RC цепочку секунды на две?
И еще остается открытым вопрос с калибровкой. Как её организовать?
Go to the top of the page
 
+Quote Post
Demeny
сообщение Mar 26 2007, 13:13
Сообщение #33


Знающий
****

Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237



Цитата(alex2103 @ Mar 26 2007, 13:31) *
Если резистор не трогать, то показания АЦП теперь стоят как вкопаные, но стоит его тронуть и значения начинают скакать sad.gif думаю из-за дребезга... Может просто поставить RC цепочку секунды на две?

Это можно сделать и программно. Программным аналогом RC-цепочки можно считать усреднение, он же фильтр низкой частоты, он же апериодическое звено первого порядка. Если постоянную времени RC-цепи принять за Т, то для аналогичного программного эффекта вам нужно усреднять все значения измерения на временном интервале примерно 3*T, то есть в вашем случае около 6 с. Чем больше показаний АЦП за этот интервал вы успеете накопить - тем точнее будет измерение.
Чтобы не хранить огромный массив значений, каждый раз не считать сумму всех значений (если, допустим, вы усредняете по 1024 точкам) , ведь разрядности переменной может не хватить, есть простой программный приём. При усреднении по N точкам достаточно хранить только само СРЕДНЕЕ значение, и на каждом цикле съёма данных с АЦП к этому среднему прибавлять разницу нового и среднего, делённую на N.
Код
..........
Uaverage = Uaverage + (Ucurrent - Uaverage)/N
..........

Если N точек у вас равномерно распределены по временному интервалу 6 секунд, вы получаете классический фильтр с постоянной времени 2 секунды.

Цитата(alex2103 @ Mar 26 2007, 13:31) *
И еще остается открытым вопрос с калибровкой. Как её организовать?

Тоже просто. Составляем две таблицы равной длины. В одной храним показания АЦП, в другой "литры". Заполняем таблицу опытным путём - от пустого бака к полному. Дальше всё решает линейная интерполяция. Чем больше точек вы можете себе позволить хранить в программе - тем точнее будет измерение.
Если же вы примените квадратичную интерполяцию - ну тогда вааще... tort.gif


--------------------
Сделано в Китае. Упаковано в России.
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 27 2007, 14:30
Сообщение #34


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



Цитата
Составляем две таблицы равной длины. В одной храним показания АЦП, в другой "литры". Заполняем таблицу опытным путём - от пустого бака к полному.


Прикрутил я к своему "девайсу" кнопочку и теперь если при включении питания удерживать кнопку, то попадаем в режим калибровки smile.gif в этом режиме заполняется массив в eeprom из N значений, которые соответствуют литрам (от 0 до N-1). Вроде все корректно заполняется.
Только как теперь этот массив использовать? На индикаторе хочу получить целое кол-во литров. Еще нужно предусмотреть какое-то округление до целой части, т.е. если значение АЦП соответсвует 13,6 литрам, то на индикатор выводилось бы 14, а если 13,4 то 13. Поможете? cheers.gif
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 29 2007, 21:11
Сообщение #35


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



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

Подскажите наиболее простой вариант реализации.
Go to the top of the page
 
+Quote Post
Vladimir Chekin
сообщение Mar 30 2007, 01:18
Сообщение #36


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 16-03-07
Из: МО, г.Балашиха
Пользователь №: 26 210



Цитата
датчик в виде поплавка с резистором абсолютно не подходит


По какому критерию не подходит? Мож я чего пропустил... Какой в программе период опроса АЦП (время между измерениями)? Какой период вывода инфы на индикатор?

Цитата
Если резистор не трогать, то показания АЦП теперь стоят как вкопаные, но стоит его тронуть и значения начинают скакать


Конкретнее, что значит "скакать"? Вроде бы всё логично, двигаешь резистор, показания индикатора меняются. Что не так?

Рекомендованный программный фильтр "мин/макс" делал?
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 30 2007, 08:26
Сообщение #37


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



Вот так провожу измерение

Код
unsigned char read_adc(unsigned char adc_input)
{
unsigned char out=0;
unsigned char n=0;
unsigned char i=0;
unsigned int sum=0;

for(i=0;i<16;i++)
{
for(n=0;n<16;n++)
        {
        ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
        // Start the AD conversion
        ADCSRA|=0x40;
        // Wait for the AD conversion to complete
        while ((ADCSRA & 0x10)==0);
        ADCSRA|=0x10;
        t[n]=ADCH;
        delay_us(30);
        }  
for(n=0;n<16;n++)
        {
        sum+=t[n];
        }
sum = sum>>4;
t1[i]=(unsigned char)sum;
}
for(n=0;n<16;n++)
        {
        sum+=t1[n];
        }
        sum = sum>>4;
        out=(unsigned char)sum;


return out;}


Вот так вывожу:
Код

while (1)
      {
unsigned char out=0;
unsigned char n=0;
out=read_adc(0);

for (n=9;n>0;n--)
{
if (out>=kalibr[n]-((kalibr[n]-kalibr[n-1])>>2))
if (out<=kalibr[n]+((kalibr[n+1]-kalibr[n-1])>>2))
leds(n);
}
     }

kalibr хранит значения полученные при калибровке. Не нравится мне конструкция из if, но в силу своей неопытности ничего лучшего не придумал. biggrin.gif

Проблема в том, что 1 литр = 2 градуса поворота резистора. Испытание в баке еще не проводил, но что-то кажется что точность будет никакая...
С пузырьковой сортировкой пробывал, но что-то не заработало. unsure.gif
Go to the top of the page
 
+Quote Post
Vladimir Chekin
сообщение Mar 30 2007, 09:31
Сообщение #38


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 16-03-07
Из: МО, г.Балашиха
Пользователь №: 26 210



Я задавал вопросы про времена, ты привёл код. Как по этому коду мне получить ответы? Не зная тактовой частоты твоего камня, да и АВР я не знаю, поэтому участок кода работы с АЦП проверить не могу, может знатоки АВР проверят. Так что, мои вопросы остались без ответа.

По проге. На первый взгляд вроде всё правильно. На данном этапе это главное, а красота придёт с опытом. Навскидку, в твоей проге
delay_us(30);
Сделай побольше порядка на 3, не микросекунды, а мили. Тогда и появится нужная плавность в показаниях.

Зачем ты заводишь массивы? В данной проге они не нужны совсем. Достаточно накапливать сумму в одном unsigned int sum с последующим делением, как было в моём примере выше.

Показалось мало 16 раз, ты сделал 256. Пусть так. 16 * 16 = 256. Не нужно 2 цикла. Т.к. ты нигде кроме этой процедуры не используешь промежуточный результат после 16 первых "оборотов", то достаточно одного цикла 256 раз с последующим делением на 256 (сдвиг вправо на 8 разрядов). Смысл не изменится.

А это куда вывод?
Код
for (n=9;n>0;n--)
{
if (out>=kalibr[n]-((kalibr[n]-kalibr[n-1])>>2))
if (out<=kalibr[n]+((kalibr[n+1]-kalibr[n-1])>>2))
leds(n);
}


>> С пузырьковой сортировкой пробывал, но что-то не заработало.
Не заработало что? Я привёл полностью рабочий код. Надо было просто скопировать его в свою прогу и всё.
Go to the top of the page
 
+Quote Post
muravei
сообщение Mar 30 2007, 10:07
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(alex2103 @ Mar 29 2007, 22:11) *
Собрал я свой измеритель и окончательно убедился, что датчик в виде поплавка с резистором абсолютно не подходит sad.gif
Наверное нужно сооружать в баке конденсатор и мерять его емкость.

Подскажите наиболее простой вариант реализации.

А "Схемотехника" чем не угодила? Или надо самостоятельно на грабли наступать?
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 30 2007, 10:29
Сообщение #40


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



Vladimir Chekin , спасибо за внимание к теме smile.gif
Clock frequency : 1,000000 MHz
ADC Clock frequency: 125,000 kHz

Зачем заводил массив не объясню...сам незнаю зачем blink.gif Обязательно исправлю.

Цитата
А это куда вывод?

Это вывод на индикатор целого кол-ва литров.
Если значение АЦП лежит в пределах n-0.25литра<n<n+0.25литра , то на индикатор выводится n.

С пузірьковой сортировкой попробую еще.

muravei, наступание на грабли хороший метод обучения smile.gif

muravei, наступание на грабли хороший метод обучения smile.gif
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 30 2007, 12:02
Сообщение #41


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



Получилась у меня пузырьковая сортировка! smile.gif
Код
unsigned char i, k, temp;
unsigned char filt_res[3];
unsigned int integrator=0;

for (i=0; i < 16; i++)
{
  for (k=0; k < 3; k++)
  {
    filt_res[k] =  read_adc(0); // ÷èòàåì ÀÖÏ
    delay_ms (10);
  }

  // Ïóçûðüêîâàÿ ñîðòèðîâêà
  if (filt_res[0] > filt_res[1])
  {
    temp = filt_res[1];
    filt_res[1] = filt_res[0];
    filt_res[0] = temp;
  }

  if (filt_res[1] > filt_res[2])
  {
    temp = filt_res[2];
    filt_res[2] = filt_res[1];
    filt_res[1] = temp;
  }

  if (filt_res[0] > filt_res[1])
  {
    temp = filt_res[1];
    filt_res[1] = filt_res[0];
    filt_res[0] = temp;
  }

  //  filt_res[1] - ñðåäíåå (íå ïóòàòü ñ óñðåäí¸ííûì) ïî âåëè÷åíå çíà÷åíèå
  integrator += filt_res[1];
}

  temp = integrator >> 4; // Â temp èñêîìîå


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

Сообщение отредактировал alex2103 - Mar 30 2007, 12:02
Go to the top of the page
 
+Quote Post
muravei
сообщение Mar 30 2007, 12:16
Сообщение #42


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(alex2103 @ Mar 30 2007, 11:29) *
muravei, наступание на грабли хороший метод обучения smile.gif

Главное, чтобы грабли не были детскими... wink.gif
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 30 2007, 12:31
Сообщение #43


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



muravei, ну так и раздел форума для "детей" smile.gif

ОФФ: многим обитателям форума мои вопросы могут показаться очень простыми, на которые даже отвечать не хочется smile.gif Для меня любой ваш ответ - неоценимая помощь в освоении МК!
Когда-то прогуливал лекции по МК, было неинтересно... А теперь сам пытаюсь обучиться, причем не потому, что "надо", а просто для себя...
Go to the top of the page
 
+Quote Post
Vladimir Chekin
сообщение Mar 30 2007, 12:40
Сообщение #44


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 16-03-07
Из: МО, г.Балашиха
Пользователь №: 26 210



>> Clock frequency, АDC Clock frequency...
Я оценил юмор smile.gif Мож заодно пришлёшь мне компилятор и симулятор или макет с эмулятором/дебагером, чтоб я смог откомпилить и прогнать твою прогу, чтоб узнать сколько времени между измерениями и выводом на экран на самом деле?

>> Это вывод на индикатор целого кол-ва литров
Хм, у тебя только 9 градаций? Странно, вроде изначально речь шла о 40-литровом. Чего-то я не пойму тогда изначальной затеи.

Пока нет опыта сделать нормальную процедуру калибровки, можно пойти более долгим, менее универсальным, но более простым путём: сперва сделать вывод на индикатор значения отфильрованного АЦП, т.е. out. Наливать в бак по литру и записывать показания индикатора на бумажку.

Затем в программе объявить массив, инициализированный данными с бумажки: uchar table [40] = {x0, x1,... x39};

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

Кстати, а что за экран? Судя по "плаванию" в элементарном есть подозрение в корректном написании процедуры преобразования целого в ASCI и собственно вывод. Может поэтому показания "скачат"?
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 30 2007, 13:24
Сообщение #45


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



Цитата
Хм, у тебя только 9 градаций? Странно, вроде изначально речь шла о 40-литровом. Чего-то я не пойму тогда изначальной затеи.

9 градаций сделано на время отладки. Потом будет 40.

Цитата
Наливать в бак по литру и записывать показания индикатора на бумажку.

Алгоритм у меня такой же. Только индикатор у меня на 2 символа и out для калибровки я записываю в епром. Налил литр - нажал кнопку, налил еще - нажал. smile.gif

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

Вот как это красиво организовать?

Цитата
Кстати, а что за экран? Судя по "плаванию" в элементарном есть подозрение в корректном написании процедуры преобразования целого в ASCI и собственно вывод.


"Экран" от старого системника...на 2 с половиной разряда smile.gif
Вот так с ним работаю:
Код
void leds(char a)
{
unsigned char digits[2];
if(a>=99) // если больше 99, то на индикаторе "Er"-типа ошибка.
{
PORTD=0x86;
PORTB=0x5F;
return;
}
digits[0] =a % 10;
digits[1] =a / 10 % 10;
switch(digits[1])  // в led[] и led1[] храняться коды индикаторов.
{
case 0: PORTD=led[0]; break;
case 1: PORTD=led[1]; break;
case 2: PORTD=led[2]; break;
case 3: PORTD=led[3]; break;
case 4: PORTD=led[4]; break;
case 5: PORTD=led[5]; break;
case 6: PORTD=led[6]; break;
case 7: PORTD=led[7]; break;
case 8: PORTD=led[8]; break;
case 9: PORTD=led[9]; break;
default: PORTD=0xBF;break;
}
switch(digits[0])
{
case 0: PORTB=led1[0]; break;
case 1: PORTB=led1[1]; break;
case 2: PORTB=led1[2]; break;
case 3: PORTB=led1[3]; break;
case 4: PORTB=led1[4]; break;
case 5: PORTB=led1[5]; break;
case 6: PORTB=led1[6]; break;
case 7: PORTB=led1[7]; break;
case 8: PORTB=led1[8]; break;
case 9: PORTB=led1[9]; break;
default: PORTB=0xBF;break;
        }  
}


Еще раз спасибо за содействие! a14.gif
Go to the top of the page
 
+Quote Post
vooon
сообщение Mar 30 2007, 14:44
Сообщение #46


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401



Цитата(alex2103 @ Mar 30 2007, 14:24) *
Код
...
...
switch(digits[1])  // в led[] и led1[] храняться коды индикаторов.
{
case 0: PORTD=led[0]; break;
case 1: PORTD=led[1]; break;
case 2: PORTD=led[2]; break;
case 3: PORTD=led[3]; break;
case 4: PORTD=led[4]; break;
case 5: PORTD=led[5]; break;
case 6: PORTD=led[6]; break;
case 7: PORTD=led[7]; break;
case 8: PORTD=led[8]; break;
case 9: PORTD=led[9]; break;
default: PORTD=0xBF;break;
}
switch(digits[0])
{
case 0: PORTB=led1[0]; break;
case 1: PORTB=led1[1]; break;
case 2: PORTB=led1[2]; break;
case 3: PORTB=led1[3]; break;
case 4: PORTB=led1[4]; break;
case 5: PORTB=led1[5]; break;
case 6: PORTB=led1[6]; break;
case 7: PORTB=led1[7]; break;
case 8: PORTB=led1[8]; break;
case 9: PORTB=led1[9]; break;
default: PORTB=0xBF;break;
}


не лучьше ли сдалать так:
Код
// старшее знакоместо
if (digits[1] < 10)
  PORTD = led[digits[1]];
else
  PORTD = 0xBF;

// младшее знакоместо
if (digits[0] < 10)
  PORTB = led1[digits[0]];
else
  PORTB = 0xBF;


кстати зачем заводить два массива-знакогенератора?
лучше сделать подключение сегментов одинаково на обоих портах.
Go to the top of the page
 
+Quote Post
Vladimir Chekin
сообщение Mar 30 2007, 19:17
Сообщение #47


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 16-03-07
Из: МО, г.Балашиха
Пользователь №: 26 210



>> Вот как это красиво организовать?
Дык написано ж было... "В цикле путём сравнения значений таблицы с out находишь номер члена таблицы меньше или больше out, как удобнее, и уже его выводишь на экран." Или надо код написать? Может стоит хотя б какую-нить книжку по Си почитать, там обычно примеров разных циклов предостаточно. В книгах однозначно основы разжеваны куда более чётко и методично, чем наши несвязные советы.

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

После увеличения паузы между измерениями и фильтра "мин/макс" изменилось ли что-то? Или всё равно показания скачат?
Go to the top of the page
 
+Quote Post
alex2103
сообщение Mar 30 2007, 22:28
Сообщение #48


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



Цитата
После увеличения паузы между измерениями и фильтра "мин/макс" изменилось ли что-то? Или всё равно показания скачат?

С показаниями все отлично! Спасибо.
Цитата
Может стоит хотя б какую-нить книжку по Си почитать, там обычно примеров разных циклов предостаточно.

Читаю Шпак Ю.А. Программирование на языке С для AVR и PIC микроконтроллеров.

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

Кстати никто не подскажет как поведет себя пепроволочный переменный резистор в баке? Бензин резистивный слой не погубит?
Go to the top of the page
 
+Quote Post
alex2103
сообщение Jul 5 2007, 20:35
Сообщение #49


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



Прикрутил я переменник СП-3 smile.gif Качесто сего резистора неприятно удивило...показывает все что хочет. Все-таки надо датчик какой-то хитрый делать. Либо емкостный, либо кучу герконов с резисторами smile.gif От поплавка с резистором получается Указатель, а не Измеритель sad.gif
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Jul 6 2007, 05:36
Сообщение #50


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

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Недавно видел схему простого емкостного уровнемера - идея датчика следующая - (генератор на 555) задающий конденсатор представлят собой цепочку последовательнго включенных конденсаторов, располагаемых на планке, ну а с другой стороны отводы типа иголочек.
И мне кажется, что опорный генератор (конденсатор) нужен, если его пластина также есть часть сенсора, но в неосушаемой области.
Посмотрите по линкам - может что покажется интересным
http://www.merl.com/projects/iGlassware/
http://www.discovercircuits.com/PDF-FILES/capgage.pdf


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
alex2103
сообщение Jul 6 2007, 20:29
Сообщение #51


Частый гость
**

Группа: Свой
Сообщений: 135
Регистрация: 7-03-07
Из: г. Запорожье
Пользователь №: 25 945



sensor_ua, спасибо за ссылки. Жаль с английским туго smile.gif Как я понял датчик в баке является частью генератора. Изменение емкости датчика влияет на частоту генерации...
Буду смотреть проекты частотомеров на МК чтоб эту частоту измерить и оценить уровень жидкости. В МК я все еще ламер smile.gif
Go to the top of the page
 
+Quote Post
sergeeff Jr.
сообщение Jul 10 2007, 20:40
Сообщение #52


Знающий
****

Группа: Свой
Сообщений: 568
Регистрация: 8-07-07
Из: Занзибар
Пользователь №: 28 964



А вот такая мысля появилась: почему бы не использовать датчик давления? Его поставить на дно бензобака и сделать так, что бы ничего кроме бензина не касалось мембраны датчика. А насколько я знаю такие дачтики довольно таки химическостойкие...


--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
Go to the top of the page
 
+Quote Post
Tcom
сообщение Jul 11 2007, 08:39
Сообщение #53


Местный
***

Группа: Свой
Сообщений: 360
Регистрация: 3-01-06
Из: Украина Запорожская обл.
Пользователь №: 12 792



А если по ямкам машинка ехать будет, то центр тяжести топлива будет менятся тоже. Тогда лучше поплавок))
Go to the top of the page
 
+Quote Post
muravei
сообщение Jul 11 2007, 12:57
Сообщение #54


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(alex2103 @ Jul 7 2007, 00:29) *
Изменение емкости датчика влияет на частоту генерации...
Буду смотреть проекты частотомеров на МК чтоб эту частоту измерить и оценить уровень жидкости. В МК я все еще ламер smile.gif

Чем Вам уст-во из "Схемотехники" не глянулось- на том же принципе.
Go to the top of the page
 
+Quote Post
sergeeff Jr.
сообщение Jul 11 2007, 18:55
Сообщение #55


Знающий
****

Группа: Свой
Сообщений: 568
Регистрация: 8-07-07
Из: Занзибар
Пользователь №: 28 964



А если машина будет по ямкам прыгать, то среднее арифметическое решит эту проблему...


--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
Go to the top of the page
 
+Quote Post
Alexey Melnichen...
сообщение Nov 19 2007, 13:54
Сообщение #56





Группа: Новичок
Сообщений: 3
Регистрация: 19-11-07
Пользователь №: 32 453



Скажите а где взять прошивку для решения датчика из журнала Схемотехника 1,2007 . Их сайт dian.ru не отвечает.
Go to the top of the page
 
+Quote Post
Krys
сообщение Nov 20 2007, 08:27
Сообщение #57


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



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


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Nov 20 2007, 08:41
Сообщение #58


Полное ничтожество
*****

Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354



о каких точностях вы говорите -0,25 литра - так она не достижима даже если через себя перепрыгнуть.
не даром на штатном приборе 1/2 и 4/4

такие вопросы можно решить только с датчиком расхода
Go to the top of the page
 
+Quote Post
Alexey Melnichen...
сообщение Nov 22 2007, 06:46
Сообщение #59





Группа: Новичок
Сообщений: 3
Регистрация: 19-11-07
Пользователь №: 32 453



Устройство очень полезное тем что нет движ. частей . У меня на двух машинах это вызывает разные неполадки. И не всегда понятно когда в пути надо дозапрвить бак а когда можно подождать и доехать до заправки с хорошим качественным бензином.
Скачки показаний действительно на многих машинах убираются за счет инерционочсти показометра.
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Nov 22 2007, 07:27
Сообщение #60


Полное ничтожество
*****

Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354



Цитата(Alexey Melnichenko @ Nov 22 2007, 09:46) *
Устройство очень полезное тем что нет движ. частей . У меня на двух машинах это вызывает разные неполадки. И не всегда понятно когда в пути надо дозапрвить бак а когда можно подождать и доехать до заправки с хорошим качественным бензином.
Скачки показаний действительно на многих машинах убираются за счет инерционочсти показометра.


попробуй на ниве убери скачки
при правом повороте с полным баком может загореться лампочка - заправься
Go to the top of the page
 
+Quote Post
Krys
сообщение Nov 22 2007, 09:24
Сообщение #61


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(rv3dll(lex) @ Nov 22 2007, 13:27) *
попробуй на ниве убери скачки
при правом повороте с полным баком может загореться лампочка - заправься
У меня зубила. Когда топлива меньше четверти в баке - лампочка горит на каждой кочке. Но стрелка - не дёргается. Объясняется это просто: стрелка имеет механизм инерционности, а лампочка вспыхивает сразу же при замыкании контакта поплавка. В современных табло эта проблема решена введением интегратора на лампочку.
Мне дак даже удобнее, что лампочка начинает временами вспыхивать, всё чаще напоминая о необходимости заправиться. Стараюсь ездить на полном баке, чтобы лампочка не действовала на нервы. Зато нет опасности встать где-нибудь, когда бензин кончится.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
Alexey Melnichen...
сообщение Nov 22 2007, 09:45
Сообщение #62





Группа: Новичок
Сообщений: 3
Регистрация: 19-11-07
Пользователь №: 32 453



А прошивка есть или нет? того чудо девайса что в Схемотехнике 1.2007
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Nov 22 2007, 13:13
Сообщение #63


Полное ничтожество
*****

Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354



Цитата(Krys @ Nov 22 2007, 12:24) *
У меня зубила. Когда топлива меньше четверти в баке - лампочка горит на каждой кочке. Но стрелка - не дёргается. Объясняется это просто: стрелка имеет механизм инерционности, а лампочка вспыхивает сразу же при замыкании контакта поплавка. В современных табло эта проблема решена введением интегратора на лампочку.
Мне дак даже удобнее, что лампочка начинает временами вспыхивать, всё чаще напоминая о необходимости заправиться. Стараюсь ездить на полном баке, чтобы лампочка не действовала на нервы. Зато нет опасности встать где-нибудь, когда бензин кончится.



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

ЗАЧЕМ ДЕЛАТЬ ТО ЧТО НЕ ДОЛЖНО РАБОТАТЬ В ПРИНЦИПЕ!!!!!!!!!!!!!!!!!!!!?????????????????
Go to the top of the page
 
+Quote Post
Krys
сообщение Nov 26 2007, 09:17
Сообщение #64


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(rv3dll(lex) @ Nov 22 2007, 19:13) *
опять вернулись к тому что стрелка ничего не порказывает
Извиняюсь перед модераторами за демагогию, но почему это стрелка ничего не показывает? Она показывает уровень топлива в баке.
Цитата(rv3dll(lex) @ Nov 22 2007, 19:13) *
получается, что при уклоне машины в разные стороны при ускорениях поворотах и торможении бензин плещется переливается и нет возможности что либо мерить.
Есть возможность. Нужно интегрировать показания, в среднем они будут правильные, близкие к реальному остатку топлива. Другое дело, что когда бензин плещется, то ни один датчик, ни одной системы, не измерит вам точно остаток топлива, поэтому интегрирование придётся делать с любого датчика.

Цитата(rv3dll(lex) @ Nov 22 2007, 19:13) *
ЗАЧЕМ ДЕЛАТЬ ТО ЧТО НЕ ДОЛЖНО РАБОТАТЬ В ПРИНЦИПЕ!!!!!!!!!!!!!!!!!!!!?????????????????
И должно, и работает. Не верите - посмотрите у меня на машине. У большинства автовладельцев всё работает и показывает, притом показывает правильно (в пределах погрешности).


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Nov 26 2007, 11:30
Сообщение #65


Полное ничтожество
*****

Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354



Цитата(Krys @ Nov 26 2007, 12:17) *
Извиняюсь перед модераторами за демагогию, но почему это стрелка ничего не показывает? Она показывает уровень топлива в баке.
Есть возможность. Нужно интегрировать показания, в среднем они будут правильные, близкие к реальному остатку топлива. Другое дело, что когда бензин плещется, то ни один датчик, ни одной системы, не измерит вам точно остаток топлива, поэтому интегрирование придётся делать с любого датчика.

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



пример)
движение по обычному шоссе 5 км туда - 5 обратно
загрузка машины разная

так вот туда лампочка заправься горела устойчиво а обратно только мигала.
это о чем нибудь говорит ????


Автомобиль нива 21213 - спроси любого владельца нивы и он тебе пользуясь определённой лексикой расскажет что показывает стрелка
Go to the top of the page
 
+Quote Post
Марк_Я
сообщение Nov 26 2007, 14:57
Сообщение #66


Частый гость
**

Группа: Свой
Сообщений: 178
Регистрация: 19-09-07
Из: М.О. г.Фрязино
Пользователь №: 30 656



Проблемы с плеском бензина нет никакой. Даже если не интегрировать, то есть такая идея мерять только при стабильном положении машины, а в дороге вычитать расходомером. Остановка - и сразу сверка и коррекция. Кстати и поплавок можно заменить сильфоном с дифманометром, как в стиральных и посудомоечных машинах.
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Nov 26 2007, 19:08
Сообщение #67


Полное ничтожество
*****

Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354



Цитата(Марк_Я @ Nov 26 2007, 17:57) *
Проблемы с плеском бензина нет никакой. Даже если не интегрировать, то есть такая идея мерять только при стабильном положении машины, а в дороге вычитать расходомером. Остановка - и сразу сверка и коррекция. Кстати и поплавок можно заменить сильфоном с дифманометром, как в стиральных и посудомоечных машинах.


тут согласен - расходомер основной инструмент остальное индикатор

тем кто плохо разбирается в машине самой - после работы в сервисе для меня капиталка вазовского двигателя не вызывает трудностей
сам езжу на моторе 1875см3 переделывал сам.
объём топливной магистрали около 200 - 500 грамм разная для каждой машины
туда входят трубки - если карбюр солекс - то их 2 там есть обратка, фильтр - в инжекторе большой, поплавковая камера - в инжекторе рампа, бензонасос

после того как двигатель остановили инжектор сливает рампу в бак , в карбюраторе испаряется бензин из поплавковой камеры - поплавок падает соединяяя топливопровод с атмосферой бензин сливается в бак.


как вам ошибка в 200 грамм минимум?.
дальше хуже в зависимости от нагрузки машины и кренов эти 200-500 могут не использоваться двигателем - у инжектора хватанув воздух насос несколько секунд вообще не качает - у карбюраторных - обратка выльется в пустоту и новая порция не всасётся заборником


точность ваших измерителей поллитра? - я и так знаю когда кончится бензин!!!!!!
Go to the top of the page
 
+Quote Post
Krys
сообщение Nov 28 2007, 08:46
Сообщение #68


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(rv3dll(lex) @ Nov 27 2007, 01:08) *
точность ваших измерителей поллитра? - я и так знаю когда кончится бензин!!!!!!
Во-первых, не нервничайте. Во-вторых, меня лично устроит точность измерителя плюс-минус поллитра, это всего лишь плюс-минус один процент по отношению к 43 литрам в моей 8ке. А когда бензин кончится - лучше не знать, а заправляться несколько раньше, лучше даже существенно раньше, чем он кончится. А для этого даже показания с погрешностью подойдут.
В-третьих, считаю это уже офтопом и предлагаю прекратить данную дискуссию.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Nov 28 2007, 11:10
Сообщение #69


Полное ничтожество
*****

Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354



Цитата(Krys @ Nov 28 2007, 11:46) *
Во-первых, не нервничайте. Во-вторых, меня лично устроит точность измерителя плюс-минус поллитра, это всего лишь плюс-минус один процент по отношению к 43 литрам в моей 8ке. А когда бензин кончится - лучше не знать, а заправляться несколько раньше, лучше даже существенно раньше, чем он кончится. А для этого даже показания с погрешностью подойдут.
В-третьих, считаю это уже офтопом и предлагаю прекратить данную дискуссию.




а вот это уже не офф топ

1 - в горизонтальном баке - даже +-литр не получишь!!!
2 - ты на 3 литра если не больше ошибёшься , когда зальёшь бак по горловину - так как поплавок к тому времени уже упрётся в крышу бака - )))
3 - точность в 1 процент она относительная
для литра ошибки.
1/43 = 0,023 полный бак
1/20 = 0,05 полбака
1/10 = 0,1 четверть

1/(5)= 0,2-резерв

20% - 10км которых как раз до заправки может не хватить))))


я всё к тому, что чем меньше осталось - тем хуже точность - но тем не менее тут как раз точность наиболее важна 10 км по сравнению с 400 и 10 по сравнению с 50.



с удовольствием присоединюсь к обсуждению измерений с использованием датчика объёмного расхода топлива и импульсного датчика скорости, что я собственно и предлогаю!!!!
Go to the top of the page
 
+Quote Post
John Silver
сообщение Jun 9 2011, 10:53
Сообщение #70


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 14-06-06
Из: Могилев
Пользователь №: 18 059



А как быть с термокомпенсацией.
Замечал у себя: выезжаешь в -20, показывает пол-бака, проезжаешь 200 км, в это время бензин по обратке греется, смотришь на показания - опять пол-бака wacko.gif.
Или мне показалось?

Посчитал, на 20гр погрешность примерно 1,5%. Значит показалось...
Но 1,5%/20гр - это существенно, надо ставить термодатчик.

Сообщение отредактировал John Silver - Jun 9 2011, 11:07
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 26th July 2025 - 11:11
Рейтинг@Mail.ru


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