Пользователь может ничего и не заметит, а вот у программиста будет головняк и сильный когда он упрется в нехватку ресурсов.
Январь 5 и AVR нельзя сравнивать только по МИПСам, не забываем о том, что у с509 богатая периферия по сравнению с AVR.
Выбор МК для впрыска (Selecting MCU for injector unit)
Moderator: STC
- 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)
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
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Re: Выбор МК для впрыска (Selecting MCU for injector unit)
У С509 очень бедная периферия по сравнению с любой мегой. Самая ресурсоемкая задача - обработка ДПКВ делается там простым софтовым методом. Кроме того там даже не 2,6 мипса, а куда меньше. Это пиковое значение для однооперандовых команд. Типа увеличить аккумулятор. Большая часть требует аргументов - и они уже не одноцикловые. Это не мега с гарвардской архитектурой и RISC системой команд, которая выбирает одновременно большинство команд и операнд из ОЗУ и все за 1 такт. У С509 шина 8 бит и все по очереди.
Вот пример - если в секе поменять кварц на 2МГц она справится хотя бы с зажиганием? А если добавить многоканальный таймер, ну допустим на 20 каналов сравнения. Полегчает программисту от этого обрабатывать ДПКВ? С509 справляется. Да, многоканальный таймер ему немного помогает. Может даже ( я не верю...) увеличивает эквивалентную производительность вдвое. Но и все. Имеем в пересчете на мегу примерно 3МГц кварц. Пусть даже 4МГц. Пусть аппаратное деление еще в 1,5 раза ускорят программу, хотя это совсем анрил. Эквивалент - 6МГц. А у меги не 6, а до 16. Трехкратное превосходство и это я очень щедро оценил таймер и деление. В реальности разница будет куда суровее - мега быстрее примерно в 6-8 раз.
Поэтому Вемс на ней и имеет куда более широкие возможности нежели Январь на с509. Даже если писать неоптимальные алгоритмы и потерять половину производительности - все равно запас огромен.
Вот пример - если в секе поменять кварц на 2МГц она справится хотя бы с зажиганием? А если добавить многоканальный таймер, ну допустим на 20 каналов сравнения. Полегчает программисту от этого обрабатывать ДПКВ? С509 справляется. Да, многоканальный таймер ему немного помогает. Может даже ( я не верю...) увеличивает эквивалентную производительность вдвое. Но и все. Имеем в пересчете на мегу примерно 3МГц кварц. Пусть даже 4МГц. Пусть аппаратное деление еще в 1,5 раза ускорят программу, хотя это совсем анрил. Эквивалент - 6МГц. А у меги не 6, а до 16. Трехкратное превосходство и это я очень щедро оценил таймер и деление. В реальности разница будет куда суровее - мега быстрее примерно в 6-8 раз.
Поэтому Вемс на ней и имеет куда более широкие возможности нежели Январь на с509. Даже если писать неоптимальные алгоритмы и потерять половину производительности - все равно запас огромен.
Re: Выбор МК для впрыска (Selecting MCU for injector unit)
Ни на сколько. Это и есть один из алгоритмов Января. Только для настройки Января нужно покупать специальный софт. Который далеко не бесплатный. Так что это не лучше - это просто бесплатный вариант того, что сейчас за деньги. Вот и все.Stranger21 wrote: На сколько Хорош будет стм32 и алгоритм Ника , по сравнению с январем ?
-
- 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)
ДПКВ на с509 работает через прерывание таймера захвата! какой же это софтовый метод? если есть большое желание убедится могу раздизить паршивку найти это место и выложить тут асмовый листинг со своими комментами. АЦП - 10бит, полноценные таймеры, умножение 8*8 за один такт, достаточно широкий набор комманд i8051 на все случаи жизни AVR при одинаковой частоте продует... Частота на сколько помню 4мгц. А еще там есть приорететы прерываний (правда не вдавался как именно оно работает, просто знаю что работает).
Сека на авр занимаясь только зажиганием почти исчерпанна по ресурсам, и я бы не сказал что код там сильно неоптимальный.
Это алгоритм который Maxi(RPD) в начале нулевых выдрал из блока Delphi который они взяли из боша, выдрал он его для своей j5ls. Потом выдрав из j5ls этот алгоритм применили: Михеников в своей спортивной прошивке, TRS, MOLT, но у всех этот алгоритм был реализован с отличиями и порой с костылями, к примеру одна и та же ошибка с неверной на 4% константой в пересчете, или лишним двухсторонним преобразованием давления в милиметры ртутного столба (при том что все измеряется в паскалях либо в барах). Я расковыряв Микас-спорт из мольта и j5ls_v46 из матрицы реинженерил этот алгоритм, разобрал его, причесал, осмыслил, выкинул лишние преобразования, проверил правильность констант, и выложил свои потуги на этом форуме.
Сам по себе алгоритм не является чей то персональной собвственностью т.к. есть множество его реализаций с теми или иными отличиями в целой куче различных ЭБУ работающих по ДАДу. Не я его придумал. Я только свел чужие наработки в одну кучу, сделал матмодель и изложил простым и понятным языком.
Сека на авр занимаясь только зажиганием почти исчерпанна по ресурсам, и я бы не сказал что код там сильно неоптимальный.
Это алгоритм который Maxi(RPD) в начале нулевых выдрал из блока Delphi который они взяли из боша, выдрал он его для своей j5ls. Потом выдрав из j5ls этот алгоритм применили: Михеников в своей спортивной прошивке, TRS, MOLT, но у всех этот алгоритм был реализован с отличиями и порой с костылями, к примеру одна и та же ошибка с неверной на 4% константой в пересчете, или лишним двухсторонним преобразованием давления в милиметры ртутного столба (при том что все измеряется в паскалях либо в барах). Я расковыряв Микас-спорт из мольта и j5ls_v46 из матрицы реинженерил этот алгоритм, разобрал его, причесал, осмыслил, выкинул лишние преобразования, проверил правильность констант, и выложил свои потуги на этом форуме.
Сам по себе алгоритм не является чей то персональной собвственностью т.к. есть множество его реализаций с теми или иными отличиями в целой куче различных ЭБУ работающих по ДАДу. Не я его придумал. Я только свел чужие наработки в одну кучу, сделал матмодель и изложил простым и понятным языком.
Re: Выбор МК для впрыска (Selecting MCU for injector unit)
Это и есть софтовый метод. В секе ровно так же - через захват. И это прерывание потребляет основные ресурсы. Аппаратно это без участия процессора. Вот в стм32 ты можешь настроить таймер, АЦП, UART и ДМА чтоб автоматически без прерываний через равные периоды времени запускалось АЦП, результат готового преобразования передавался по юарт дальше. Допустим 512 выборок. И получишь всего одно прерывание - когда все это закончится. Тут нет ДМА, но какие то зачатки событийной системы имеются и например в меге - типа запуска АЦП от таймера. Если бы не было, то два прерывания было бы - от таймера и в его обработчике нужно было бы руками запускать АЦП и от АЦП по окончании преобразования. Нет, С509 обрабатывает ДПКВ полностью софтом. На каждый зуб вызывается обработчик. А это 30 прерываний за половину оборота коленвала. За этот же период времени всего 1 искра.nikll wrote:ДПКВ на с509 работает через прерывание таймера захвата! какой же это софтовый метод?
АВР продует только если непрерывно делить числа. При равной частоте в 16МГц С509 выглядит рядом с АВР как запор рядом с болидом Ф1. И несмотря на то, что кое где запор обгонит машину формулы, в среднем он намного медленней. Обгонит на проселке, по ямкам. Ну а С509 на делениях. При равной тактовой частоте время машинного цикла - самой быстрой команды у С509 375нс, а у АВР 62,5. И напомню - у АВР две шины отдельно, для выборки программы и данных. Суммарной шириной 24 бита. У С509 одна 8 бит. Все идет по очереди с периодом в машинный цикл. Система приоритетов в 51 ядре конечно имеется. Но совсем уж медленному ядру она не сильно поможет. Хотя удобств программисту дает прилично. Удобств - не быстродействия ядру! Там от приоритетов очень малый прирост.nikll wrote: AVR при одинаковой частоте продует... Частота на сколько помню 4мгц. А еще там есть приорететы прерываний (правда не вдавался как именно оно работает, просто знаю что работает).
viewtopic.php?p=22331#p22331nikll wrote: Сека на авр занимаясь только зажиганием почти исчерпанна по ресурсам, и я бы не сказал что код там сильно неоптимальный.
Автор все понимает, но оптимизировать просто не хочет. Процессор в секе уступает тому же Вемсу только в объемах памяти. Он не медленней. Ну про возможности Вемса все уже знают. Алгоритм, принципы хранения данных, оптимизация расчетов - простые действия обычно дают очень ощутимый результат. С509 в Январе справлятся не потому, что у него много каналов в таймере или есть деление. Просто потому, что программу там оптимизировали, размышляли над алгоритмами и т.д. В сети есть история о одном байте - http://wasm.ru/article.php?article=onebyte Довольно забавно читать. Что такое 1 байт? А рассказ кстати не вымысел.
-
- 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)
Ты думаеш что в ДПКВ нужен ТОЛЬКО запуск АЦП? ))))))))
Софтовый метод это в основном цикле регулярно опрашивать пин к которому подключен ДПКВ для определения момента изменения состояния. То что ты описал так работают ВСЕ ЭБУ. Без кода в перывании ДПКВ нихрена не выйдет т.к. много событий привязанно к конкретным углам.
Сравнение с запором неверно, тут скорее сравнивать газель и формулу1, на треке в жестко ограниченных условиях ф1 конечно лудьше, но вот по типичным дорогам да еще с загрузкой в тонну или десятком пассажиров... почему то я не видел на улицах своего города ф1
Вот только с509 при более сложном алгоритме и аналогичном подходе справляется не только с зажиганием но и с впрыском в турбированный движок. А всякие извраты типа переход на время вместо углов это для тех кто хочет покупать дорогие и слабые камни. stm32 за цену меги порвет ее по всем параметрам без вариантов.
Про один байт историю знаю (года четыре назад читал), j5ls_v46 до этой истории нужно еще десятки тысяч человеко часов, 65кбайт прошивка написанная на асме с учетом возмжностей 8051 это вам не в тапки гадить... Непосредственно на математику уходят еденицы процентов времени, большая часть это определение углов, работа в прерываниях и прочая с твоей точки зрения не важная хрень которая тем не мение нужна много раз за цикл с привязкой к коленвалу.
Софтовый метод это в основном цикле регулярно опрашивать пин к которому подключен ДПКВ для определения момента изменения состояния. То что ты описал так работают ВСЕ ЭБУ. Без кода в перывании ДПКВ нихрена не выйдет т.к. много событий привязанно к конкретным углам.
Сравнение с запором неверно, тут скорее сравнивать газель и формулу1, на треке в жестко ограниченных условиях ф1 конечно лудьше, но вот по типичным дорогам да еще с загрузкой в тонну или десятком пассажиров... почему то я не видел на улицах своего города ф1
Вот только с509 при более сложном алгоритме и аналогичном подходе справляется не только с зажиганием но и с впрыском в турбированный движок. А всякие извраты типа переход на время вместо углов это для тех кто хочет покупать дорогие и слабые камни. stm32 за цену меги порвет ее по всем параметрам без вариантов.
Про один байт историю знаю (года четыре назад читал), j5ls_v46 до этой истории нужно еще десятки тысяч человеко часов, 65кбайт прошивка написанная на асме с учетом возмжностей 8051 это вам не в тапки гадить... Непосредственно на математику уходят еденицы процентов времени, большая часть это определение углов, работа в прерываниях и прочая с твоей точки зрения не важная хрень которая тем не мение нужна много раз за цикл с привязкой к коленвалу.
Re: Выбор МК для впрыска (Selecting MCU for injector unit)
При чем тут АЦП? Это просто был пример аппаратной поддержки в отличии от софтовой. Прерывания - софтовая. Событийная система - аппаратная. Смотри в том же СТ10 модуль РЕС. Там кое что можно аппаратно делать. Но не шкив 60-2 обсчитывать.
Мега справляется с зажиганием и впрыском на турбированный мотор на 8 цилиндрах. При этом дает точность времен в 1.5 раза точнее чем С509 в Январе. Время вместо углов для тех кто понимает в чем измеряется опережение зажигания Кто остался в веке центробежных регуляторов - тому только угол.
Что СТМ32 быстрее меги и так понятно. Вот только машина от этого быстрее не поедет. И жрать меньше не будет. А вот наоборот - запросто. Сбои от помех и все уже кажется не столь однозначным.
Что большая часть времени - это работа в прерываниях, то есть чисто софтовая - я до тебя и пытаюсь донести. И там быстродействие важно, важнее таймеров. Но чрезмерное уже ничего не дает. Его должно хватать на выбранную задачу. Если допустим хватает процессора с тактом 8МГц, то увеличив ему такт до 16 ничего не измениться. Да, быстродействие вырастет в два раза. Но мотор быстрее не поедет. Компы за 20 лет ускорились в сотни раз. А машинистки как печатали 200 знаков в минуту так и печатают. Они в сотни раз не ускорились. Ну вот скажи мне - какой такой хитрый таймер помогает С509 обрабатывать ДПКВ? И чем помогает?
Мега справляется с зажиганием и впрыском на турбированный мотор на 8 цилиндрах. При этом дает точность времен в 1.5 раза точнее чем С509 в Январе. Время вместо углов для тех кто понимает в чем измеряется опережение зажигания Кто остался в веке центробежных регуляторов - тому только угол.
Что СТМ32 быстрее меги и так понятно. Вот только машина от этого быстрее не поедет. И жрать меньше не будет. А вот наоборот - запросто. Сбои от помех и все уже кажется не столь однозначным.
Что большая часть времени - это работа в прерываниях, то есть чисто софтовая - я до тебя и пытаюсь донести. И там быстродействие важно, важнее таймеров. Но чрезмерное уже ничего не дает. Его должно хватать на выбранную задачу. Если допустим хватает процессора с тактом 8МГц, то увеличив ему такт до 16 ничего не измениться. Да, быстродействие вырастет в два раза. Но мотор быстрее не поедет. Компы за 20 лет ускорились в сотни раз. А машинистки как печатали 200 знаков в минуту так и печатают. Они в сотни раз не ускорились. Ну вот скажи мне - какой такой хитрый таймер помогает С509 обрабатывать ДПКВ? И чем помогает?
- 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)
Буду краток. С синхродиском 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, тогда может быть и получится.
Пример инкрементирования 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
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Re: Выбор МК для впрыска (Selecting MCU for injector unit)
Вот смотри расклад примерный. Возьмем один цикл работы 4 цилиндрового стандартного мотора. За этот цикл есть какое то количество событий которые надо обработать или которыми надо управлять. Это 1 открытие форсунки, одно закрытие форсунки - не обязательно одной и той же, одно начало накопления энергии и одна искра. А также 30 событий от ДПКВ. Первые 4 частично позволяют таймером разгрузить процессор. Частично - все же таймером тоже надо управлять, там телепатии нет. А вот для 30 событий ДПКВ никакой разгрузки нет. В то же время сравни обработчик от ДПКВ и тупой сброс или взвод бита в порте ВВ. Сброс бита - это то, на что таймер разгружает ядро. Это мизер. Но Январь ездит. И Вемс ездит еще и лучше. И в них далеко не пентиумы. Хотя - давай, делай на СТМ32. Потом повеселишь нас цифрами загрузки ядра. Мне интересно - сможешь хотя бы на 5% его загрузить. Я сомневаюсь. Но зато на мп3 плеер ресурсы останутся. Поющий ЭБУ - как поэтично будет...
- 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)
Ты сам лично ездил на нем? Осциллографим смотрел что там творится?И Вемс ездит еще и лучше. И в них далеко не пентиумы.
Да, конечно мега извраты в коде никто не отменял, вон, люди пишут программы в 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
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook