tightenloop

Выбор Микроконтроллера Для Разработки Эбу

47 сообщений в этой теме

tightenloop    11

Итак предисловие:

В последнее время всё чаще и чаще народ начинает задумываться о реализации самодельного ЭБУ. Идеи реализаций бывают схожими, а бывают в корне различными. Например мой первый самодельный ЭБУ работал на PIC18f4550. Пользователь Evgen75mk рассматривает вариант реализации ЭБУ на аналоговом таймере 555, пользователь rusefi создаёт ЭБУ на базе stm32f4 ну а участники проекта VUNGUL реализовали свой отладочный блок для разработки ЭБУ на базе микроконтроллера семейства HCS12. Хотелось бы отметить, что самодельный ЭБУ VEMS реализован на atmega128 (16Mhz), Megasquirt 1 - MC68hc908gp32 (8Mhz), Megasquirt 2 -mc9s12c64 (24Mhz), Megasquirt 3 MC9s12XEP100 + сопроцессор XGATE (50Mhz)

из стоковых SAAB TRIONIC MC332 (motorola 32bit), Motronic 1.3 2xMCS51.как видно вариантов и очевидно, что за каждым выбором кроются некоторые идеи.

Причины выбора того или иного мк бывают разные поэтому в в этой теме предлагаю обсуждать вопрос о выборе МК для разработки ЭБУ.

Желательно свой выбор достойно аргументировать ("просто его должно хватить" это не ответ предоставляйте по возможности реальные факты, осциллограммы, вырезки из даташитов и т.д.)

Хорошо бы если по каждому предлагаемому процу описание было бы в виде

- Название МК, тактовая частота производительность.

- Периферийные устройства

- Доступность компилятора (платный\бесплатный\ условно бесплатный)

- Доступность интерфейса для отладки

- Другие аргументы (цена, надёжность и тд)

Итак,

проект VUNGUL на данный момент работает

- mc9s12c128 (24MHz) производительность до 24МИПС

- 1х 16бит таймер 8 каналов (модулей захвата-сравнения)

- 1х 10бит АЦП 8 каналов - 5В

- 1x USART

-1x CAN

- Возможность выводв внешней шины, для внешней памяти и периферийных устройств.

- Компилятор GCC - бесплатный (даже для коммерческих проектов) интегрируется с ide Eclipse

- бесплатный (open source) отладчик TBDML - стыкуется с gdb

- цена 8$ -

Обсуждение перенесено из другой темы


Ошипке поправьте

спс сделано.

Cortex M4F для этих (полиномов) целей не хватает.

Смотря как подходить.

Месяца 2 назад проводил benchmark и сравнения HCS12 и Cortex M4F (в этом тесте также участвовали Valjokk, Vungul, v0stap)

Cortex M4F - заместо заявленных 210 МИПС на нелинейном коде разгонялся только до реальных 85-90. (flash-wait state =5, Fosc=8 Core Clk-168Mhz, динамическое предсказание - ВКЛ. компилятор GCC, математика с целыми числами без знака, оптимизация -0, прога исполнялась из флеша )

Но это ещё не всё, при дизассембле кода на Cortex M4F было выявлено, что предоставленные периферийные библиотеки написаны далеко от оптимального и обычная запись в порт происходит за 3-5 инструкций итого 85-90\4 и получаем реальные 20 МИПС (worst-case scenario)

HSC12 выдавал свои заявленные 24 МИПС при 24 МГц с целыми числами без знака на нелинейном коде, оптимизация -0.

Для сравнения при дизассембле кода на HSC12 было выявлено что прямая запись в регистры (в том числе и в порт) длятся 1-2 инструкции и получаем производительность вполне соизмеримую с Cortex M4F.

Безусловно на прямолинейном коде Cortex M4F намного быстрее HSC12, но его скорость очень падает при первом if, switch или jmp из-за сброса конвейера команд при переходе и медленного флеша, который работает всего на 168\5=33.6 Мгц

Так-что вывод - Cortex M4F мощный только при исполнении из RAM. или на линейном коде.

Для расчёта полиномов не обязательно "задрачивать" проц инструкциями с плавающей точкой, все коэфициенты можно масштабировать в char или short integer.

так, как делают в КИХ и БИХ фильтрах при реализации на ПЛИС.

в этом случае даже HSC12 может справиться с поставленой задачей.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
rusefi    30

Но это ещё не всё, при дизассембле кода на Cortex M4F было выявлено, что предоставленные периферийные библиотеки написаны далеко от оптимального и обычная запись в порт происходит за 3-5 инструкций итого 85-90\4 и получаем реальные 20 МИПС (worst-case scenario)

Вот это место не понял. Мы собираемся порт дёргать в каждой атомарной операции вычислений? Вероятно нет. Мне кажется, что это деление на 4 - методологически не верно. Время записи в порт конечно же играет роль, но не деление на 4.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
tightenloop    11

24	 GPIO_Write(GPIOD, 0x0000);
0800030c: mov.w r0, #3072 ; 0xc00
08000310: movt r0, #16386 ; 0x4002
08000314: mov.w r1, #0
08000318: bl 0x8000480 <GPIO_Write>
25	 for(int i=0; i<1000000; i++ );
......

	 GPIO_Write:
08000480: push {r7}
08000482: sub sp, #12
08000484: add r7, sp, #0
08000486: str r0, [r7, #4]
08000488: mov r3, r1
0800048a: strh r3, [r7, #2]
485		 GPIOx->ODR = PortVal;
0800048c: ldrh r2, [r7, #2]
0800048e: ldr r3, [r7, #4]
08000490: str r2, [r3, #20]
486	 }
08000492: add.w r7, r7, #12
08000496: mov sp, r7
08000498: pop {r7}
0800049a: bx lr

rusefi, я понимаю твоё беспокойство, но как сам предлагал мне когда то взгляни сам на дизассембл обычной функции GPIO_Write(); с аккадемической точки зрения. Когда вызываешь функцию она загружает передаваемые параметры (в этом случае регистры общего назначения r0, r1)

затем вызывается сама функция GPIO_Write(); которая в моём случае находится по адресу 0x8000480, итого уже 4 инструкции

Сколько инструкций заимёт выполнение GPIO_Write() думаю, что сам можешь посчитать.

Итого при тестах опытным путём была получена цифра 4 и 20МИПС подразумевает то, что если писать код таким стилем

GPIO_Write();
Timer1_Write();
Timer2_Write();
USART_Write();
CAN_Write();
<something>_Write();

то невдаваясь в подробности каждая строчка будет исполняться со скоростью примерно 20 МИПС

Чтобы небыть голословным привожу дизассембл кода под HCS12 в котором вызывается функция, которая начинает "заряжать" катушку Б

0000c07a <.LM8>:
Ignition(COIL_B,DWELL);
c07a: f6 02 50 ldab 0x250 <.Ldebug_info0+0x3>
c07d: ca 10	 orab #0x10
c07f: 7b 02 50 stab 0x250 <.Ldebug_info0+0x3>

После этого думаю не сложно сделать выбор что будет работать быстрее 3 инструкции при 24МИПС или около 15-18 инструкций которые испольнятся со скоростью 80-90 МИПС

Мы собираемся порт дёргать в каждой атомарной операции вычислений? Вероятно нет

безусловно запись в порт это лишь пример. Но представь ситуацию вызывается прерывание модуля сравнения в котором

необходимо "дать" искру (запись в порт) и поставить в очередь модуля сравнения следующее некоторое событие (запись в периферийное устройство) это как-раз то место,где СТМ (при использовании стандартных библиотек) не будет быстрее моротолы уже доказано выше.

При вычислении количества топлива безусловно СТМ будет намного быстрее. Но нет смысла в точных расчётах, если нет железа, которое это точно исполнит. к томуже на расчёт топлива у нас есть "целая вечность" по сравнению с такими критическими процессами как зажигание, где задержка на 16 мкС приводит к задержке зажигания на целый градус при 10000об\мин. А у тебя ещё и RTOS c планировщиком задач и приоритетами.

Забегая вперёд отмечу, что у мотороллы есть ещё несколько существеных плюсов

1. внешняя шина, к которой можно подключать внешнюю память и внешние периферийные устройства (их несложно реализовать на ПЛИС)

2. Более лучшая помехозащащённость (питание 5 В, АЦП 5В)

Можно безконечно рассеждать об этом, но эта тема отдельного топика.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
rusefi    30

[1. внешняя шина, к которой можно подключать внешнюю память и внешние периферийные устройства (их несложно реализовать на ПЛИС)

stm32 не остановился на 168Mhz stm32f4407 - у них уже есть 180Mhz STM32F427 как раз с контроллером памяти. Но 5в они конечно от этого не стали :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
tightenloop    11
168Mhz stm32f4407 - у них уже есть 180Mhz

180/168= 1.071 => 7.1% :unsure: прирост для проца это не много. К тому же контроллер памяти это не внешняя шина.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
rusefi    30

К тому же контроллер памяти это не внешняя шина.

http://www.chibios.org/dokuwiki/doku.php?id=chibios:community:plans:external_ram

Или мегагерцы неправильные, и шина-контроллер-память тоже не правильные?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
tightenloop    11

не понял что ты хотел сказать этим сказать ты хочешь чтобы тебе помогли сконфигурировать FSMC???

Или мегагерцы неправильные

Опять не понял поясни.

и шина-контроллер-память тоже не правильные?

FSMC - это интерфейс памяти и кроме памяти туда ничего не повесить.

Для того чтобы повесить внешнее периферийное устройство нужна полная шина (шина адреса, шина данных, шина управления) затем нужен дешифратор старших разрядов и затем только периферийное устройство на плис или на дискретных элементах, если ты маньяк.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
rusefi    30

ты хочешь чтобы тебе помогли сконфигурировать FSMC???

Мда, как всё запущено... Даже не знаю, где ты такое прочитал.

Опять не понял поясни.

Это был сарказм

Для того чтобы повесить внешнее периферийное устройство нужна полная шина ...

А CAN/SPI/I2C - тоже неправильные шины? Как-то выходит, что куда не кинь - stm32 неправильный процессор? А ARM и не знает :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex1958    13

HSC12 выдавал свои заявленые 24 МИПС при 24 МГц с целыми числами без знака на нелинейном коде, оптимизация -0.

Для сравнения при дизассембле кода на HSC12 было выявлено что прямая запись в регистры (в том числе и в порт) длятся 1-2 инструкции и получаем производительность вполне соизмеримую с Cortex M4F.

Безусловно на прямолинейном коде Cortex M4F намного быстрее HSC12, но его скорость очень падает при первом if, switch или jmp из-за сброса конвейера команд при переходе и медленного флеша, который работает всего на 168\5=33.6 Мгц

Так-что вывод - Cortex M4F мощный только при исполнении из RAM. или на линейном коде.

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

Было интересно несколько проектов перекинуть на Cortex, ради интереса.

Без флоатов и на AVR8 все пашет и успевает. Буду более интересный процессор искать.

Видел сегодня систему на ат89S51 и ведь успевает всё - 20 тысяч оборотов, разумеется, без флоатов. И ту же самую систему видел на 68-й серии в 97 году.

Во как!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
rusefi    30

И ту же самую систему видел на 68-й серии в 97 году.

Во как!

А я видел полностью аналоговый ЭБУ. Процессоры применяют только слабаки :)

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
tightenloop    11
процессор искать

будущее процов это однозначно ARM + FPGA на одном кристале посмотри на

http://www.xilinx.com/products/silicon-devices/soc/index.htm

У ST есть серия stm32Rxxxxx - для решения реал-таимовских задач.

Главное какойбы проц не взял советую проводить бенчмарк (мне когда-то советовали ну а теперь сам убедился в этом)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
rusefi    30

Если делать правильно, то нужно использовать процессор из современного ЭБУ - например Power Architecture например MPC5634M или SPC56x семейство.

Там и 150+Mhz, и 5вольт, и автомобильное исполнение, и FPU. Вот только что-то я не вижу их в продаже отдельно без отладочных плат.

Изменено пользователем rusefi

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex1958    13
процессор искать

будущее процов это однозначно ARM + FPGA на одном кристале посмотри на

http://www.xilinx.co...s/soc/index.htm

Вот ещё fpslic = AVR+FPGA, на процессор можно чисто сервисные задачи выкинуть: обороты, расход топлива, температура движка и передача всего этого дела на БК или панель.

Очень интересная задача ECU/EDC на плис.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
tightenloop    11
fpslic = AVR+FPGA

привлекательно но цена кусаеттся и не понятно сколько IDE и отладка стоит

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex1958    13

Чудесатость fpslic не ищется, наверное пороект прибили.

http://www.xilinx.co...s/soc/index.htm - пробежал вдоль, не подступиться с наскока.

Вот:

www.haoyuelectronics.com/ebay/icore/Schematic.pdf

www.ebay.com/itm/FPGA-ARM-core-board-STM32-Cyclone-IV-4-Development-board-stm32f103VC-EP4CE6E144-/180933898787

Изменено пользователем Alex1958

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
tightenloop    11
www.haoyuelectronics.com/ebay/icore/Schematic.pdf

блин 1:1 как я думал vungul II делать, только работа с периферией через FSMC это маньячить не по детски нужно

из 4Gb адресного пространства выделить 1кб под периферию .....

К стате сам с какими ПЛИС работаешь и какой софт, кабеля используешь. (если не секрет)

Я сам сижу на Альтеровских MAX. (пока хватает) Quartus web edition из под linux ну и кабель USB Blaster

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex1958    13

Я сам не работаю с плис, хотя в комманде есть плисовод.

Последний раз был мах вроде, это так давно было.

только работа с периферией через FSMC это маньячить не по детски нужно

из 4Gb адресного пространства выделить 1кб под периферию .....

Надо платку заказать.

Есть DSO203, а в нём также STM+плис :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
rusefi    30

Cortex M4F - заместо заявленных 210 МИПС на нелинейном коде разгонялся только до реальных 85-90. (flash-wait state =5...

Есть мнение, что было важно не забыть про ART accelerator у STM32F4: с ним 0 wait state будет, который и даст 210 DMIPS

Примерно вот так - http://electronicdes...g-0-wait-memory

Изменено пользователем rusefi

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
tightenloop    11
ART Accelerator only caches the first 128-bit word of a sequential code

что тут не понятно?

любой if, switch, while, jmp bsr, и тому подобные сбрасывают конвеер команд. тк не возможно до выполнения инструкции пердсказать условие будет true или false

поэтому 210 DMIPS это больше смахивает на коммерческий ход.

210 мипс можно реально получить только но п р я м о л и н е й н о м коде а ещё и с DMA.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex1958    13

Хорошая связка получилась CPLD+STM32F4.

Но пока без жесткой реалтайм ОС (алгоритм линейный).

Нужно выбрать ОСьку для Cortex'а. Предложения?

Вообще можно всё в CPLD запихнуть, а карты распологать, как в старые добрые времена, в 27С512.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Геннадий    1 017

Фантазеры! Похвастались поверхностными знаниями о новых сериях МК, а о задачах ЭБУ, временных интервалах процессов - ни слова. Давайте, хватайте "сильнейший" МК и грузите его эмуляцией низкоуровневых процессов высокоуровневым языком. Потом удивляйтесь, почему тормозит. Кстати, функции зажигания не обязательно должны входить в функции блока управления двигателем (ЭБУ). На мой взгляд, рассуждения без конкретики - пустая болтовня. Без обид.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex1958    13

Фантазеры! Похвастались поверхностными знаниями о новых сериях МК, а о задачах ЭБУ, временных интервалах процессов - ни слова. Давайте, хватайте "сильнейший" МК и грузите его эмуляцией низкоуровневых процессов высокоуровневым языком. Потом удивляйтесь, почему тормозит. Кстати, функции зажигания не обязательно должны входить в функции блока управления двигателем (ЭБУ).

Это к какому посту относится?

/*тут был текст, обойдётесь*/

Изменено пользователем Alex1958

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Геннадий    1 017

Это ко всей теме относится. Проскочило замечание, что еще и функции зажигания требуются, где малейшее отклонение от заданных величин опережения чревато плохими последствиями. Весь ваш разговор - "беседа на отвлеченные темы", т.к. никакой конкретики не несет. В таком контексте разговора можете сразу останавливаться на Intel-е. И берите сразу Core7. Не промахнетесь. :)

Это я к чему. Сначала надо бы... а впрочем обойдетесь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас