Выбор МК для впрыска (Selecting MCU for injector unit)

Разработка впрыска топлива на базе SECU-3. Fuel injection related discussion.

Moderator: STC

Post Reply
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Выбор МК для впрыска (Selecting MCU for injector unit)

Post by STC »

Пользователь может ничего и не заметит, а вот у программиста будет головняк и сильный когда он упрется в нехватку ресурсов.
Январь 5 и AVR нельзя сравнивать только по МИПСам, не забываем о том, что у с509 богатая периферия по сравнению с AVR.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Qwertty
LQFP144 - On Top Of The Game
Posts: 252
Joined: Thu Jul 26, 2012 12:35 pm

Re: Выбор МК для впрыска (Selecting MCU for injector unit)

Post by Qwertty »

У С509 очень бедная периферия по сравнению с любой мегой. Самая ресурсоемкая задача - обработка ДПКВ делается там простым софтовым методом. Кроме того там даже не 2,6 мипса, а куда меньше. Это пиковое значение для однооперандовых команд. Типа увеличить аккумулятор. Большая часть требует аргументов - и они уже не одноцикловые. Это не мега с гарвардской архитектурой и RISC системой команд, которая выбирает одновременно большинство команд и операнд из ОЗУ и все за 1 такт. У С509 шина 8 бит и все по очереди.
Вот пример - если в секе поменять кварц на 2МГц она справится хотя бы с зажиганием? А если добавить многоканальный таймер, ну допустим на 20 каналов сравнения. Полегчает программисту от этого обрабатывать ДПКВ? С509 справляется. Да, многоканальный таймер ему немного помогает. Может даже ( я не верю...) увеличивает эквивалентную производительность вдвое. Но и все. Имеем в пересчете на мегу примерно 3МГц кварц. Пусть даже 4МГц. Пусть аппаратное деление еще в 1,5 раза ускорят программу, хотя это совсем анрил. Эквивалент - 6МГц. А у меги не 6, а до 16. Трехкратное превосходство и это я очень щедро оценил таймер и деление. В реальности разница будет куда суровее - мега быстрее примерно в 6-8 раз.
Поэтому Вемс на ней и имеет куда более широкие возможности нежели Январь на с509. Даже если писать неоптимальные алгоритмы и потерять половину производительности - все равно запас огромен.
Qwertty
LQFP144 - On Top Of The Game
Posts: 252
Joined: Thu Jul 26, 2012 12:35 pm

Re: Выбор МК для впрыска (Selecting MCU for injector unit)

Post by Qwertty »

Stranger21 wrote: На сколько Хорош будет стм32 и алгоритм Ника , по сравнению с январем ?
Ни на сколько. Это и есть один из алгоритмов Января. Только для настройки Января нужно покупать специальный софт. Который далеко не бесплатный. Так что это не лучше - это просто бесплатный вариант того, что сейчас за деньги. Вот и все.
nikll
LQFP144 - On Top Of The Game
Posts: 553
Joined: Sun Nov 06, 2011 9:20 pm
Location: Russia, Yekaterinburg
Contact:

Re: Выбор МК для впрыска (Selecting MCU for injector unit)

Post by nikll »

ДПКВ на с509 работает через прерывание таймера захвата! какой же это софтовый метод? если есть большое желание убедится могу раздизить паршивку найти это место и выложить тут асмовый листинг со своими комментами. АЦП - 10бит, полноценные таймеры, умножение 8*8 за один такт, достаточно широкий набор комманд i8051 на все случаи жизни :) AVR при одинаковой частоте продует... Частота на сколько помню 4мгц. А еще там есть приорететы прерываний (правда не вдавался как именно оно работает, просто знаю что работает).
Сека на авр занимаясь только зажиганием почти исчерпанна по ресурсам, и я бы не сказал что код там сильно неоптимальный.

Это алгоритм который Maxi(RPD) в начале нулевых выдрал из блока Delphi который они взяли из боша, выдрал он его для своей j5ls. Потом выдрав из j5ls этот алгоритм применили: Михеников в своей спортивной прошивке, TRS, MOLT, но у всех этот алгоритм был реализован с отличиями и порой с костылями, к примеру одна и та же ошибка с неверной на 4% константой в пересчете, или лишним двухсторонним преобразованием давления в милиметры ртутного столба (при том что все измеряется в паскалях либо в барах). Я расковыряв Микас-спорт из мольта и j5ls_v46 из матрицы реинженерил этот алгоритм, разобрал его, причесал, осмыслил, выкинул лишние преобразования, проверил правильность констант, и выложил свои потуги на этом форуме.
Сам по себе алгоритм не является чей то персональной собвственностью т.к. есть множество его реализаций с теми или иными отличиями в целой куче различных ЭБУ работающих по ДАДу. Не я его придумал. Я только свел чужие наработки в одну кучу, сделал матмодель и изложил простым и понятным языком.
Qwertty
LQFP144 - On Top Of The Game
Posts: 252
Joined: Thu Jul 26, 2012 12:35 pm

Re: Выбор МК для впрыска (Selecting MCU for injector unit)

Post by Qwertty »

nikll wrote:ДПКВ на с509 работает через прерывание таймера захвата! какой же это софтовый метод?
Это и есть софтовый метод. В секе ровно так же - через захват. И это прерывание потребляет основные ресурсы. Аппаратно это без участия процессора. Вот в стм32 ты можешь настроить таймер, АЦП, UART и ДМА чтоб автоматически без прерываний через равные периоды времени запускалось АЦП, результат готового преобразования передавался по юарт дальше. Допустим 512 выборок. И получишь всего одно прерывание - когда все это закончится. Тут нет ДМА, но какие то зачатки событийной системы имеются и например в меге - типа запуска АЦП от таймера. Если бы не было, то два прерывания было бы - от таймера и в его обработчике нужно было бы руками запускать АЦП и от АЦП по окончании преобразования. Нет, С509 обрабатывает ДПКВ полностью софтом. На каждый зуб вызывается обработчик. А это 30 прерываний за половину оборота коленвала. За этот же период времени всего 1 искра.
nikll wrote: AVR при одинаковой частоте продует... Частота на сколько помню 4мгц. А еще там есть приорететы прерываний (правда не вдавался как именно оно работает, просто знаю что работает).
АВР продует только если непрерывно делить числа. При равной частоте в 16МГц С509 выглядит рядом с АВР как запор рядом с болидом Ф1. И несмотря на то, что кое где запор обгонит машину формулы, в среднем он намного медленней. Обгонит на проселке, по ямкам. Ну а С509 на делениях. При равной тактовой частоте время машинного цикла - самой быстрой команды у С509 375нс, а у АВР 62,5. И напомню - у АВР две шины отдельно, для выборки программы и данных. Суммарной шириной 24 бита. У С509 одна 8 бит. Все идет по очереди с периодом в машинный цикл. Система приоритетов в 51 ядре конечно имеется. Но совсем уж медленному ядру она не сильно поможет. Хотя удобств программисту дает прилично. Удобств - не быстродействия ядру! Там от приоритетов очень малый прирост.
nikll wrote: Сека на авр занимаясь только зажиганием почти исчерпанна по ресурсам, и я бы не сказал что код там сильно неоптимальный.
viewtopic.php?p=22331#p22331
Автор все понимает, но оптимизировать просто не хочет. Процессор в секе уступает тому же Вемсу только в объемах памяти. Он не медленней. Ну про возможности Вемса все уже знают. :lol: Алгоритм, принципы хранения данных, оптимизация расчетов - простые действия обычно дают очень ощутимый результат. С509 в Январе справлятся не потому, что у него много каналов в таймере или есть деление. Просто потому, что программу там оптимизировали, размышляли над алгоритмами и т.д. В сети есть история о одном байте - http://wasm.ru/article.php?article=onebyte Довольно забавно читать. Что такое 1 байт? А рассказ кстати не вымысел.
nikll
LQFP144 - On Top Of The Game
Posts: 553
Joined: Sun Nov 06, 2011 9:20 pm
Location: Russia, Yekaterinburg
Contact:

Re: Выбор МК для впрыска (Selecting MCU for injector unit)

Post by nikll »

Ты думаеш что в ДПКВ нужен ТОЛЬКО запуск АЦП? :)))))))))
Софтовый метод это в основном цикле регулярно опрашивать пин к которому подключен ДПКВ для определения момента изменения состояния. То что ты описал так работают ВСЕ ЭБУ. Без кода в перывании ДПКВ нихрена не выйдет т.к. много событий привязанно к конкретным углам.

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

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

Про один байт историю знаю (года четыре назад читал), j5ls_v46 до этой истории нужно еще десятки тысяч человеко часов, 65кбайт прошивка написанная на асме с учетом возмжностей 8051 это вам не в тапки гадить... Непосредственно на математику уходят еденицы процентов времени, большая часть это определение углов, работа в прерываниях и прочая с твоей точки зрения не важная хрень которая тем не мение нужна много раз за цикл с привязкой к коленвалу.
Qwertty
LQFP144 - On Top Of The Game
Posts: 252
Joined: Thu Jul 26, 2012 12:35 pm

Re: Выбор МК для впрыска (Selecting MCU for injector unit)

Post by Qwertty »

При чем тут АЦП? Это просто был пример аппаратной поддержки в отличии от софтовой. Прерывания - софтовая. Событийная система - аппаратная. Смотри в том же СТ10 модуль РЕС. Там кое что можно аппаратно делать. Но не шкив 60-2 обсчитывать.
Мега справляется с зажиганием и впрыском на турбированный мотор на 8 цилиндрах. При этом дает точность времен в 1.5 раза точнее чем С509 в Январе. Время вместо углов для тех кто понимает в чем измеряется опережение зажигания :D Кто остался в веке центробежных регуляторов - тому только угол.
Что СТМ32 быстрее меги и так понятно. Вот только машина от этого быстрее не поедет. И жрать меньше не будет. А вот наоборот - запросто. Сбои от помех и все уже кажется не столь однозначным.
Что большая часть времени - это работа в прерываниях, то есть чисто софтовая - я до тебя и пытаюсь донести. И там быстродействие важно, важнее таймеров. Но чрезмерное уже ничего не дает. Его должно хватать на выбранную задачу. Если допустим хватает процессора с тактом 8МГц, то увеличив ему такт до 16 ничего не измениться. Да, быстродействие вырастет в два раза. Но мотор быстрее не поедет. Компы за 20 лет ускорились в сотни раз. А машинистки как печатали 200 знаков в минуту так и печатают. Они в сотни раз не ускорились. Ну вот скажи мне - какой такой хитрый таймер помогает С509 обрабатывать ДПКВ? И чем помогает?
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Выбор МК для впрыска (Selecting MCU for injector unit)

Post by STC »

Буду краток. С синхродиском 60-2 и полным функционалом в прошивке, SECU-3 захлебывается на 13 000 мин-1. Не забывайте что есть синхродиски с 129 зубьями (маховик со штифтом), а может и больше, это будет 6000-7000 мин-1 максимум. В SECU-3 реализован достаточно универсальный алгоритм, можно задавать кол-во зубьев и тип синхродиска из программы-менеджера. В случае с 60-2 все значительно проще, например на счетчик зубьев хватает одного байта, с 115 или 129 уже не прокатывает. Когда я сделал 16-ти битный счетчик, прерывание сразу начало выполнятся раза в полтора дольше (до этого было до 18 000 мин-1). 8-ми битный проц... Кстати, в прерывании я не смог обойтись без 32-х битного деления... Все что я смог сделать, жто на низких оборотах использовать 32-х битное, а на высоких 16-ти битное деление, но все равно, это занимает минимум 16мкс. Вот такие вот мелочи и другие кушают каждая по 4-5мкс и в результате получается монстр. Кстати, одно обращение к 16-бит volatile переменной в памяти занимает на AVR минимум 4-5 тактов, а таких обращений будет куча, это смерть.
Пример инкрементирования volatile переменной:
LD Reg1, lo byte addr
LD Reg2, Hi byte addr
ADD Reg1, 1
ADC Reg2
ST Reg1, lo byte addr
ST Reg2, Hi byte addr
Считаем: 2+2+1+1+2+2 = 10 тактов, весело, не правда ли?
Конечно, вы можете ограничиться 60-2, 4-мя цилиндрами и скажем 7000 мин-1, тогда может быть и получится.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Qwertty
LQFP144 - On Top Of The Game
Posts: 252
Joined: Thu Jul 26, 2012 12:35 pm

Re: Выбор МК для впрыска (Selecting MCU for injector unit)

Post by Qwertty »

Вот смотри расклад примерный. Возьмем один цикл работы 4 цилиндрового стандартного мотора. За этот цикл есть какое то количество событий которые надо обработать или которыми надо управлять. Это 1 открытие форсунки, одно закрытие форсунки - не обязательно одной и той же, одно начало накопления энергии и одна искра. А также 30 событий от ДПКВ. Первые 4 частично позволяют таймером разгрузить процессор. Частично - все же таймером тоже надо управлять, там телепатии нет. А вот для 30 событий ДПКВ никакой разгрузки нет. В то же время сравни обработчик от ДПКВ и тупой сброс или взвод бита в порте ВВ. Сброс бита - это то, на что таймер разгружает ядро. Это мизер. Но Январь ездит. И Вемс ездит еще и лучше. И в них далеко не пентиумы. Хотя - давай, делай на СТМ32. Потом повеселишь нас цифрами загрузки ядра. Мне интересно - сможешь хотя бы на 5% его загрузить. Я сомневаюсь. Но зато на мп3 плеер ресурсы останутся. :D Поющий ЭБУ - как поэтично будет...
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Выбор МК для впрыска (Selecting MCU for injector unit)

Post by STC »

И Вемс ездит еще и лучше. И в них далеко не пентиумы.
Ты сам лично ездил на нем? Осциллографим смотрел что там творится? :lol:
Да, конечно мега извраты в коде никто не отменял, вон, люди пишут программы в 2кБ, которые делают невообразимые вещи, олимпиады извращенцев и ботаников-задротов... Но где здравый смысл? Зачем заниматься извращениями если можно переплатить 2$ и жить спокойно. Я не говорю про STM32, я говорю вообще (против того же ST10 ничего не имею). Можно вообще на асме написать все, и кто это потом поймет кроме разработчика. Тут люди в чужом сишном коде разобраться не могут...
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Post Reply