Изобретаю свой "велосипед"
Последние два дня я достал всех в вотсап КадабраЧатике вопросами про вычисления расхода топлива на бензиновом двигателе. Ну а правда, лично вы знаете, сколько ваш прогретый двигатель кушает на холостых бензина в форме "литров в час"? (у кого есть БК - идите лесом :-P, особенно если на марке, которую тут нельзя называть).
За 3 дня у меня получилось сделать простейший аналог штатного Бортового Компьютера, который умеет вычислять моментальный расход и сколько литров сожгли за поездку.
Сейчас я хочу убедится, что в моем алгоритме расчета расхода топливо нет ошибок и приступить к дальнейшей реализации БК и интеграции его в штатную приборку. Для тех кто обладает примерными представлениями по данной теме прошу под кат. I need help.
Итак, пока вы не устали сразу перейдем к делу. Сигнал о расходе я беру от ЭБУ. В штатной проводке Audi есть специальный провод который идет на приборку и называется "Расход топлива". Я не знал до сегодняшнего вечера какую форму имеет сигнал, но предположил, что чем больше будет моментов времени с высоким уровнем, тем больше будет расход. И собственно не прогадал:
Имеем ~100 импульсов в секунду, длительность которых говорит о времени открытия форсунок.
В плане железки у меня сейчас Arduino. Использую аналоговый вход А0, на котором висит АЦП и выдает значения от 0 до 1023.
В программе есть два счетчика: первый (назовем его cnt_all) считает общее количество выборок АЦП, второй (cnt_hi) - кол-во выборок, при которых уровень сигнала был высоким (>800).
Отношение cnt_hi / cnt_all за определенный период дает представление о времени, в течении которого форсунки были открыты.
Например
T = 1 секунда
cnt_all = 8300
cnt_hi = 830
cnt_hi / cnt_all = 0.1 (секунду).
Умножим на общую производительность форсунок (некий коэффициент K) получим расход топлива за T = 1 секунду. Умножив на 60*60 получим расход топлива за T = 1 час.
Так как я хочу наблюдать изменение показаний на БК чуть почаще чем раз в секунду, то вычисления я произвожу почаще. Например раз в t = 0.5 секунды. Итого получаем формулу для расхода топлива за t времени:
V(t) = ( cnt_hi / cnt_all ) * K * t
Общий расход в литрах соответственно:
fuel = fuel + V(t)
Моментальный расход (литров в час):
currFuel = ( V(t)* (1/t) ) * 3600;
Все верно?
Второй вопрос: как лучше подобрать коэффициент K? Пока есть одна мысль:
1 - залить бак до полного, включить счетчик
2 - покататься часик
3 - заправить до полного. На счетчике будет M литров, на чеке N.
M / K = N / X.
Отсюда X = N * K / M (обычная пропорция).
А теперь главное: зачем это все, когда можно купить готовый универсальный БК, или на худой конец другую штатную приборку с БК от аналогичной машины и провязать ее к ЭБУ.
Ответ: Я не ищу легких путей, и пока есть стимул и желание заниматься электроникой - я буду этим заниматься. Поэтому прошу: не надо предлагать в комментариях варианты готовых изделий. Это не мой путь.
Какие есть задумки:
1) на приборке есть пустое место (там должен был быть lcd экранчик штатного БК). Хочу найти в китае похожий по размерам цветной с интерфейсом SPI (или I2C) - чтобы занять как можно меньшее кол-во ножек у контроллера. Лучше подключить больше проводов от проборки и мониторить максимально возможное число параметров (Уровень толива в баке, температуру ОЖ, скорость и т.д.). И выводить это все в том формате, который я считаю для себя удобным.
2) интегрировать arduino (или подобный девайс) в приборку - подключить к питанию, припаять информационные провода напрямую к плате. Мб для этого куплю запасную приборку на ebay.
3) вывести usb наружу (возможно задействовав неиспользуемые пины в OBD разъеме - будет возможность сесть в машину, за 5 секунд подключить ноут к arduino и прошить новой прошивкой.
Для желающих начать делать нечто подобное для своего авто - буду рад помочь.
Если кто изучает или работает с FPGA, ARM и т.д. пишите в комментах или в личку - найдем общие темы для разговоров ;-)
Спасибо за внимание.
За 3 дня у меня получилось сделать простейший аналог штатного Бортового Компьютера, который умеет вычислять моментальный расход и сколько литров сожгли за поездку.
Сейчас я хочу убедится, что в моем алгоритме расчета расхода топливо нет ошибок и приступить к дальнейшей реализации БК и интеграции его в штатную приборку. Для тех кто обладает примерными представлениями по данной теме прошу под кат. I need help.
Итак, пока вы не устали сразу перейдем к делу. Сигнал о расходе я беру от ЭБУ. В штатной проводке Audi есть специальный провод который идет на приборку и называется "Расход топлива". Я не знал до сегодняшнего вечера какую форму имеет сигнал, но предположил, что чем больше будет моментов времени с высоким уровнем, тем больше будет расход. И собственно не прогадал:
Имеем ~100 импульсов в секунду, длительность которых говорит о времени открытия форсунок.
В плане железки у меня сейчас Arduino. Использую аналоговый вход А0, на котором висит АЦП и выдает значения от 0 до 1023.
В программе есть два счетчика: первый (назовем его cnt_all) считает общее количество выборок АЦП, второй (cnt_hi) - кол-во выборок, при которых уровень сигнала был высоким (>800).
Отношение cnt_hi / cnt_all за определенный период дает представление о времени, в течении которого форсунки были открыты.
Например
T = 1 секунда
cnt_all = 8300
cnt_hi = 830
cnt_hi / cnt_all = 0.1 (секунду).
Умножим на общую производительность форсунок (некий коэффициент K) получим расход топлива за T = 1 секунду. Умножив на 60*60 получим расход топлива за T = 1 час.
Так как я хочу наблюдать изменение показаний на БК чуть почаще чем раз в секунду, то вычисления я произвожу почаще. Например раз в t = 0.5 секунды. Итого получаем формулу для расхода топлива за t времени:
V(t) = ( cnt_hi / cnt_all ) * K * t
Общий расход в литрах соответственно:
fuel = fuel + V(t)
Моментальный расход (литров в час):
currFuel = ( V(t)* (1/t) ) * 3600;
Все верно?
Второй вопрос: как лучше подобрать коэффициент K? Пока есть одна мысль:
1 - залить бак до полного, включить счетчик
2 - покататься часик
3 - заправить до полного. На счетчике будет M литров, на чеке N.
M / K = N / X.
Отсюда X = N * K / M (обычная пропорция).
А теперь главное: зачем это все, когда можно купить готовый универсальный БК, или на худой конец другую штатную приборку с БК от аналогичной машины и провязать ее к ЭБУ.
Ответ: Я не ищу легких путей, и пока есть стимул и желание заниматься электроникой - я буду этим заниматься. Поэтому прошу: не надо предлагать в комментариях варианты готовых изделий. Это не мой путь.
Какие есть задумки:
1) на приборке есть пустое место (там должен был быть lcd экранчик штатного БК). Хочу найти в китае похожий по размерам цветной с интерфейсом SPI (или I2C) - чтобы занять как можно меньшее кол-во ножек у контроллера. Лучше подключить больше проводов от проборки и мониторить максимально возможное число параметров (Уровень толива в баке, температуру ОЖ, скорость и т.д.). И выводить это все в том формате, который я считаю для себя удобным.
2) интегрировать arduino (или подобный девайс) в приборку - подключить к питанию, припаять информационные провода напрямую к плате. Мб для этого куплю запасную приборку на ebay.
3) вывести usb наружу (возможно задействовав неиспользуемые пины в OBD разъеме - будет возможность сесть в машину, за 5 секунд подключить ноут к arduino и прошить новой прошивкой.
Для желающих начать делать нечто подобное для своего авто - буду рад помочь.
Если кто изучает или работает с FPGA, ARM и т.д. пишите в комментах или в личку - найдем общие темы для разговоров ;-)
Спасибо за внимание.
Это FPGA + ARM на одном кристалле.
Применение: системы реального времени. Это космос (спутники, станции), оборонка, оборудование для ЦОД, канальных провайдеров, биржи и т.д.
А нет ли у вас там гениев для халтурки одной?
http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=167&No=816
На мой взгляд очень бюджетная плата) щас с ней и работаю. Пока пытаюсь понять, как передавать данные из плис в процессор. По идее все делается через Qsys и компонент HPS. Пока пошел второй день чтения документации)))
http://inmys.ru/#/products/som_cyclone_v_se
http://inmys.ru/#/products/evm_cyclone_v_se
На таких, как я понял платах
Крутой девайс. По сравнению с 3 и 4 циклоном там много интересных фич появилось.
Я уже простенький коммуникатор выделил под это:)
а не проще кстати тупо выключатель сделать? там же в простом варианте только k-line нужен, а это один провод) или вся интересная инфа именно в OBD2 идет?
http://stackoverflow.com/questions/17170646/fuel-consumption-from-obd2-port-parameters
на тракторах чуть что - только 2я передача и жуткие пинки при включении R/D
говорят на механике при отключении дмрв наблюдается резкий скачок в приёмистости и расходе топлива)
Насчет float подумаю, но думаю это не критично. Планировал хранить значение до следующей заправки. А это не дольше 10 часов работы (10*60*60*2) - столько раз будет суммироватся float)
По крайней мере я такие цифры получил на моей, пытаясь аналоговым чтением считать ключ Cyfral. И поймал грабли. Длина импульса у Cyfral около 60 мкс. , и за одну операцию analogRead ключик успевал около 10раз напеть мне свой код, как оказалось.
Не поймай эти грабли, переделай на цифровой вход, правильно подобрав делитель напряжения.
Я в итоге взял схему делителя отсюда: http://radiokot.ru/circuit/digital/home/77/
В правом углу схемы около надписи "KEY". В тексте написано, как оно работает. И только тогда я получил все импульсы ключа.
AnalogRead делает 8300 отчетов в секунду -> 1\8300 = 0.00012 -> раз в 0,12 ms
Минимальная длина импульса около 0.35-0.45 ms. Но тут переделать проблемы нет. Главное с алгоритмом и коэффициентом разобраться)))
2) занимать OBD
3) на приборку и так приходят все нужные провода, просто в виде сигналов (как на фотке с осцилографом). Проще "оцифровать" и обработать.