Оптимизация алгоритма обработки ДПКВ

Обсуждение прошивок SECU-3. Discussion of SECU-3 firmware.

Moderator: STC

Stranger21
LQFP144 - On Top Of The Game
Posts: 1664
Joined: Fri Jul 01, 2011 2:10 pm
Location: г Уфа

Re: Оптимизация алгоритма обработки ДПКВ

Post by Stranger21 »

все ,STC , я все понял . момент универсальности я не учел . да кучу кода вылетит если оставить только 60-2.
на мпсз зш только 60-2 , или только дх , две разные версии . настроек у него вообще нету чтоль .. я как увидел его менеджер .. смешно аш стало ...:) какой то калькулятор детский ) даже ошибки не показывает , правда вроде реагирует на ошибку по дад как установка 16 расхода. а кроме дад у него больше и нет ничего .
ацп пользует только дад и напряжение борт сети. дпкв только под 60-2 . наверняка выкидывание данных в ком порт по запросу . ну вот и скорость от сюда ...
как встанет температура , ошибки , и прочеее то и скорость упадет ...

все у меня более вопрос нету ...
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Оптимизация алгоритма обработки ДПКВ

Post by STC »

У меня прерывается каждый зуб, но проверяется один раз за оборот. Работает. На слово поверите? Тогда проверьте.
Просто проверять - мало. Нужно опираться на куждый зуб в расчетах. Таймер нужно использовать только для отсчета моментов времени, которые приходятся на интервал между зубъями. Если использовать только таймер и программировать его на срабатывание только каждые пол оборота или оборот, то из-за ускорений коленвала (особенно на низких оборотах) к моменту срабатывания таймера его значение будет уже неактуальным (большая ошибка). Неужели это непонятно? Другими словами, такая реализация ничем не лучше обычного ДХ с четырями шторками...
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
AleksandR K.
LQFP112 - Up with the play
Posts: 149
Joined: Tue Mar 29, 2011 12:51 pm

Re: Оптимизация алгоритма обработки ДПКВ

Post by AleksandR K. »

Прерывание на каждый зуб не нужно, их (зубья) нужно просто подсчитывать счётчиком. Обычный таймер в режиме счёта внешних событий. Остаток - по времени, как обычно.

Кстати, у меня работает не по градусам, а по времени.
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Оптимизация алгоритма обработки ДПКВ

Post by STC »

В этом случае нужно делать перепланировку времени выполнения основного цикла (выделять кванты времени для фоновых операций, но практически непрерывно проверять счетчик событий). У тебя основной цикл загружен? И вообще, что умеет делать прошивка кроме обработки ДПКВ.
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
AleksandR K.
LQFP112 - Up with the play
Posts: 149
Joined: Tue Mar 29, 2011 12:51 pm

Re: Оптимизация алгоритма обработки ДПКВ

Post by AleksandR K. »

STC wrote:практически непрерывно проверять счетчик событий
В качестве счётчика событий - таймер, прерывание аппаратное, ничего дополнительно проверять не нужно.
Примерно, как на рисунке.
Значение Compare нужно менять на новое при каждом прерывании, каждый оборот обнулять счётчик таймера.
Понадобится три прерывания для проверки синхронизации, два - для УОЗ. Вроде всё.
Отсчёт остатка времени вести другим таймером - это очевидно.
Attachments
Таймер.png
Last edited by AleksandR K. on Tue Jan 17, 2012 2:08 pm, edited 1 time in total.
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Оптимизация алгоритма обработки ДПКВ

Post by STC »

Если я правильно понял, то в твоем алгоритме используется большее кол-во таймеров.
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
AleksandR K.
LQFP112 - Up with the play
Posts: 149
Joined: Tue Mar 29, 2011 12:51 pm

Re: Оптимизация алгоритма обработки ДПКВ

Post by AleksandR K. »

Это не мой алгоритм, это пока идея. Я же писал:"Если есть лишний таймер". У меня его нет.
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Оптимизация алгоритма обработки ДПКВ

Post by STC »

Ладно. Для тех кто хочет повысить планку максимальных оборотов, я вижу как минимум 2 варианта.
1. Заменить 32-х битное деление на оптимизированное 32*32 умножение на обратное число (reciprocal). Операция умножения займет не более 95 циклов (5.5 мкс).
Но тогда для каждого шкива нужно использовать разные константы (раздутие и усложнение кода чтобы сохранить универсальность). Если отказаться от универсальности, то данное решение будет очень эффективным, а если его обединить с вариантом N 2, то эффективность будет еще выше.
2. На высоких оборотах (например выше 6000) заменять 32-х битное деление на 16-ти битное (выполняется быстрее). Какая будет экономия я не проверял.
Этот вариант проще и сохраняет универсальность, но менее эффективен.

p.s. Примеров умножения 32*32=64 для AVR в интернете полно.
Еще хочу обратить внимание на то, что планка максимальных оборотов в SECU-3 ограничена не кол-вом цилиндров, а временем выполнения прерывания.
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
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Оптимизация алгоритма обработки ДПКВ

Post by STC »

Провел оптимизацию алгоритма по варианту 2. Код:

Code: Select all

if (ckps.period_curr < 128)
  OCR1A = GetICR() + (diff * (ckps.period_curr)) / ANGLE_MAGNITUDE(CKPS_DEGREES_PER_COG);
else
  OCR1A = GetICR() + ((uint32_t)diff * (ckps.period_curr)) / ANGLE_MAGNITUDE(CKPS_DEGREES_PER_COG);
Код очень простой. Если ожидается что делимое будет не более 16-ти бит, то используем 16-ти битное деление, которое в несколько раз быстрее 32-х битного. Примерно после 2000 мин-1 происходит переход на использование 16-ти битного деления.

Результат, как и ожидолось хороший. Время выполнения прерывания снизилось на 35...40%.
Таким образом планка оборотов поднялась как минимум до 16000 мин-1. Проверил на осциллографе с эмулятором ДПКВ, из которого не удалось выжать больше чем 16000 мин-1.

12000 мин-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
Stranger21
LQFP144 - On Top Of The Game
Posts: 1664
Joined: Fri Jul 01, 2011 2:10 pm
Location: г Уфа

Re: Оптимизация алгоритма обработки ДПКВ

Post by Stranger21 »

Спасибо ! проверим ) если отсечку с моника сниму ))))
WAZ21051 gti 1.7i SECU3Ts + mm1.2.3(1)
ВАЗ21310 1.7i Я7.2 2001г
Post Reply