American English British English Български Čeština Français Deutsch (Du) Magyar Italiano 日本語 Lietuvių Polski Српски Slovenčina Español (Tú) Türkçe Українська
Select language:

Добавл. в прошивку возможностей одновременного/моно впрыска

<<

AlxSh

User avatar

Posts: 92

Joined: 14 Jul 2014, 12:52

Location: Ивановская область, Кинешма

Your CAR: 2141 1.7

SECU version: DIY SECU-3


Has thanked: 2 times
Been thanked: 24 times

Post 23 Sep 2015, 21:54

Re: Добавл. в прошивку возможностей одновременного/моно впры

Pavel Buyevich wrote:
STC wrote:Дискретность времени 1мс? Это же слишком много, за 1мс форсунка нальет много топлива.
Поэтому я и сказал - "грубый", сугубо для примера =) Отталкиваясь от того как сейчас сконфигурирован таймер, мы можем дергать прерывание TIMER2_COMPB_vect начиная от каждые 6.4 МИКРОсекунды (1 тик таймера), до 1632 (1.6 миллисекунд) микросекунды (1 тик таймера * 255), диапазон частоты довольно широкий. К примеру решили что декрементим счетчик форсунок каждые 100 микросекунд, ближайшее целое которое можем установить в качестве compare match регистра - 15, дает нам дергание прерывания каждые 96 микросекунд, соответсвенно и декрементим счетчики форсунок в прерывании на эти 96 микросекунд.

Любое срабатывание на основе большого фиксированного интервала приведет к понижению точности дозирования. Алгоритм способен дозировать топливо с дискретностью 3.2мкс (или 6.4мкс?). Уменьшение длительности интервала до разумного приведет к большому оверхеду входа/выхода прерывания и перебор структур цилиндров в поисках сработавшей форсунки. Нужна очередь из которой будет загружаться очередной интервал в таймер и вызываться callback по срабатыванию.
Москвич 2141 УЗАМ 1.7л. Платформа STM32F103RET6. Идеи secu-3. Peak&Hold. Автоматическое вычисление первого цилиндра. Фазированный впрыск.
<<

Pavel Buyevich

User avatar

Posts: 30

Joined: 30 Aug 2014, 09:56


Has thanked: 0 time
Been thanked: 4 times

Post 23 Sep 2015, 22:07

Re: Добавл. в прошивку возможностей одновременного/моно впры

AlxSh wrote:
Pavel Buyevich wrote:
STC wrote:Дискретность времени 1мс? Это же слишком много, за 1мс форсунка нальет много топлива.
Поэтому я и сказал - "грубый", сугубо для примера =) Отталкиваясь от того как сейчас сконфигурирован таймер, мы можем дергать прерывание TIMER2_COMPB_vect начиная от каждые 6.4 МИКРОсекунды (1 тик таймера), до 1632 (1.6 миллисекунд) микросекунды (1 тик таймера * 255), диапазон частоты довольно широкий. К примеру решили что декрементим счетчик форсунок каждые 100 микросекунд, ближайшее целое которое можем установить в качестве compare match регистра - 15, дает нам дергание прерывания каждые 96 микросекунд, соответсвенно и декрементим счетчики форсунок в прерывании на эти 96 микросекунд.

Любое срабатывание на основе большого фиксированного интервала приведет к понижению точности дозирования. Алгоритм способен дозировать топливо с дискретностью 3.2мкс (или 6.4мкс?). Уменьшение длительности интервала до разумного приведет к большому оверхеду входа/выхода прерывания и перебор структур цилиндров в поисках сработавшей форсунки. Нужна очередь из которой будет загружаться очередной интервал в таймер и вызываться callback по срабатыванию.

6/1000 миллисекунды - большой интервал?
<<

AlxSh

User avatar

Posts: 92

Joined: 14 Jul 2014, 12:52

Location: Ивановская область, Кинешма

Your CAR: 2141 1.7

SECU version: DIY SECU-3


Has thanked: 2 times
Been thanked: 24 times

Post 23 Sep 2015, 22:34

Re: Добавл. в прошивку возможностей одновременного/моно впры

Pavel Buyevich wrote:
AlxSh wrote:Любое срабатывание на основе большого фиксированного интервала приведет к понижению точности дозирования. Алгоритм способен дозировать топливо с дискретностью 3.2мкс (или 6.4мкс?). Уменьшение длительности интервала до разумного приведет к большому оверхеду входа/выхода прерывания и перебор структур цилиндров в поисках сработавшей форсунки. Нужна очередь из которой будет загружаться очередной интервал в таймер и вызываться callback по срабатыванию.

6/1000 миллисекунды - большой интервал?

100мкс большой интервал! Про то что 6мкс это большой интервал, я ни чего не писал. Сохранение состояния регистров в стек, разрешение других прерываний, загрузкой указателей, декремент 16битных счетчиков с проверкой сработавших форсунок т.д., возможно съедят все ресурсы процессора.
Зачем так делать? Форсунки открываются при прохождении нужного зуба и в очередь ставится время выключения. Счетчики времени уменьшаются на 0x100 по переполнению аппаратного счетчика при TOP=0xFF. Остаток загружается в модуль сравнения и по срабатыванию вызывается процедура которая гасит форсунку. Так сделан УОЗ. Почему так же не сделать управление форсунками?
Москвич 2141 УЗАМ 1.7л. Платформа STM32F103RET6. Идеи secu-3. Peak&Hold. Автоматическое вычисление первого цилиндра. Фазированный впрыск.
<<

Pavel Buyevich

User avatar

Posts: 30

Joined: 30 Aug 2014, 09:56


Has thanked: 0 time
Been thanked: 4 times

Post 23 Sep 2015, 23:20

Re: Добавл. в прошивку возможностей одновременного/моно впры

AlxSh wrote:
Pavel Buyevich wrote:
AlxSh wrote:Любое срабатывание на основе большого фиксированного интервала приведет к понижению точности дозирования. Алгоритм способен дозировать топливо с дискретностью 3.2мкс (или 6.4мкс?). Уменьшение длительности интервала до разумного приведет к большому оверхеду входа/выхода прерывания и перебор структур цилиндров в поисках сработавшей форсунки. Нужна очередь из которой будет загружаться очередной интервал в таймер и вызываться callback по срабатыванию.

6/1000 миллисекунды - большой интервал?

100мкс большой интервал! Про то что 6мкс это большой интервал, я ни чего не писал. Сохранение состояния регистров в стек, разрешение других прерываний, загрузкой указателей, декремент 16битных счетчиков с проверкой сработавших форсунок т.д., возможно съедят все ресурсы процессора.
Зачем так делать? Форсунки открываются при прохождении нужного зуба и в очередь ставится время выключения. Счетчики времени уменьшаются на 0x100 по переполнению аппаратного счетчика при TOP=0xFF. Остаток загружается в модуль сравнения и по срабатыванию вызывается процедура которая гасит форсунку. Так сделан УОЗ. Почему так же не сделать управление форсунками?
Все приводимые мной цифры выбраны навскидку, без учета производительности контроллера, требования к точности дозирования каждым двигателем, думаю что можно найти разумное соотношение. Насчет применения/неприменения тех, или иных решений я, увы ничего не могу сказать, поскольку в коде эбу разбираюсь весьма поверхностно, как и в embedded программировании в целом. Предлагаю на мой взгляд самое простое, даже примитивное решение, не требующее (по моему скромному мнению) радикальных изменений\дополнений в коде\инвестирования временных ресурсов.
<<

STC

User avatar

Posts: 6560

Joined: 30 Apr 2013, 23:41

Location: Ukraine

Your CAR: AZLK 2140

SECU version: DIY SECU-3


Has thanked: 804 times
Been thanked: 1321 times

Post 24 Sep 2015, 16:47

Re: Добавл. в прошивку возможностей одновременного/моно впры

Pavel Buyevich, чисто теоритически, то что ты предложил будет работать. Но прерывания каждые 6 и даже 30 мкс это съедание всего процессорного времени на вход/выход и обработку только этого прерывания.

Зачем так делать? Форсунки открываются при прохождении нужного зуба и в очередь ставится время выключения. Счетчики времени уменьшаются на 0x100 по переполнению аппаратного счетчика при TOP=0xFF. Остаток загружается в модуль сравнения и по срабатыванию вызывается процедура которая гасит форсунку. Так сделан УОЗ. Почему так же не сделать управление форсунками?

В зажигании не предусмотрено перекрытие на накопление.
Author of the SECU-3™ project http://SECU-3.org. An open source engine control unit / Ignition control system, (C) 2007.
Клуб проекта в Facebook https://www.facebook.com/groups/secu3club
Клуб проекта ВКонтакте https://vk.com/secu3club (вступаем!)
<<

AlxSh

User avatar

Posts: 92

Joined: 14 Jul 2014, 12:52

Location: Ивановская область, Кинешма

Your CAR: 2141 1.7

SECU version: DIY SECU-3


Has thanked: 2 times
Been thanked: 24 times

Post 24 Sep 2015, 20:43

Re: Добавл. в прошивку возможностей одновременного/моно впры

STC wrote:Pavel Buyevich, чисто теоритически, то что ты предложил будет работать. Но прерывания каждые 6 и даже 30 мкс это съедание всего процессорного времени на вход/выход и обработку только этого прерывания.

Зачем так делать? Форсунки открываются при прохождении нужного зуба и в очередь ставится время выключения. Счетчики времени уменьшаются на 0x100 по переполнению аппаратного счетчика при TOP=0xFF. Остаток загружается в модуль сравнения и по срабатыванию вызывается процедура которая гасит форсунку. Так сделан УОЗ. Почему так же не сделать управление форсунками?

В зажигании не предусмотрено перекрытие на накопление.


Как-то так не пойдет? Здесь не учтен вариант когда время впрыска стало меньше чем в предыдущем пуске и группа форсунок должна выключится раньше чем уже есть запрограммированный интервал, но это можно исправить. Не вникал в то как сейчас все вертится в проекте, поэтому регистры абстрактные. Числа тоже от фонаря.
  Code:
// Время презагрузки таймера новым значением
#define RELOAD_TIME 5

typedef struct inj_event_t {
  uint16_t time;
  uint8_t mask;
} inj_event_t;

inj_event_t ev[NUM_CIL];

uint8_t inj_event_idx;

void inj_Start(uint8_t mask, uint16_t time){
  uint8_t free_event = -1;
  if (mask & 0x1) IO_SET(INJ1);
  if (mask & 0x2) IO_SET(INJ2);
  if (mask & 0x4) IO_SET(INJ3);
  if (mask & 0x8) IO_SET(INJ4);

  time -= TIM_CNT;

  for (uint8_t i=0; i<NUM_CIL; i++){
    if (free_event == -1){
      if (!ev[i].mask) free_event = i;
    }
    if (abs(ev[i].time - time) < RELOAD_TIME){
      ev[i].mask |= mask;
      return;
    }
  }
  ev[i].mask = mask;
  ev[i].time = time;
}

void tim_irq_ovf(void){
  uint8_t lock = 0;
  for (uint8_t i=0; i<NUM_CIL; i++){
    if (ev[i].time){
      ev[i].time -= 0x100;
      if (ev[i].time < 0x100 && !lock){
        TIM->OCR = ev[i].time;
        ev[i].time = 0;
        lock = 1;
      }
    }
  }
}

void tim_irq_compare(void){
  uint8_t inj_off_mask = ev[inj_event_idx].mask;
  if (inj_off_mask & 0x1) IO_CLR(INJ1);
  if (inj_off_mask & 0x2) IO_CLR(INJ2);
  if (inj_off_mask & 0x4) IO_CLR(INJ3);
  if (inj_off_mask & 0x8) IO_CLR(INJ4);
  ev[inj_event_idx].mask = 0;

  // Ищем следующее событие в пределах одного цикла таймера
  for (uint8_t i=0; i<NUM_CIL; i++){
    if (ev[i].time && ev[i].time < 0x100){
      TIM_OCR = ev[i].time;
      ev[i].time = 0;
      return;
    }
  }
}
Москвич 2141 УЗАМ 1.7л. Платформа STM32F103RET6. Идеи secu-3. Peak&Hold. Автоматическое вычисление первого цилиндра. Фазированный впрыск.
<<

Nikola

User avatar

Posts: 143

Joined: 27 May 2014, 00:24

Location: Pskov

Your CAR: ВАЗ-2115 21083V8-1.5

SECU version: DIY SECU-3T


Has thanked: 34 times
Been thanked: 84 times

Post 27 Sep 2015, 01:10

Re: Добавл. в прошивку возможностей одновременного/моно впры

не перечитывал всю тему..., вопрос:
сейчас секу в роли эбу впрыска уже может полноценно заменить карбюратор, критерии: мощность/ расход (что бы было не хуже), или алгоритм еще требует доработки?
<<

wunder

User avatar

Posts: 1400

Joined: 19 Mar 2015, 16:50

Location: Ukraine

Your CAR: ВАЗ 2107 1,8L

SECU version: official SECU-3T


Has thanked: 40 times
Been thanked: 131 times

Post 27 Sep 2015, 14:40

Re: Добавл. в прошивку возможностей одновременного/моно впры

Nikola wrote:не перечитывал всю тему..., вопрос:
сейчас секу в роли эбу впрыска уже может полноценно заменить карбюратор, критерии: мощность/ расход (что бы было не хуже), или алгоритм еще требует доработки?

может.. но сыровато :?
<<

mmlevin

User avatar

Posts: 245

Joined: 13 May 2013, 09:44

Location: Россия, Воронеж


Has thanked: 2 times
Been thanked: 61 times

Post 27 Sep 2015, 17:56

Re: Добавл. в прошивку возможностей одновременного/моно впры

А что сыровато? А то я зимой собирался переоборудоваться.
<<

darxfame

User avatar

Posts: 859

Joined: 10 Jul 2015, 19:12

Location: Москва

Your CAR: ИЖ 2126 УМПО 1,7

SECU version: official SECU-3T


Has thanked: 118 times
Been thanked: 125 times

Post 27 Sep 2015, 19:05

Re: Добавл. в прошивку возможностей одновременного/моно впры

mmlevin wrote:А что сыровато? А то я зимой собирался переоборудоваться.


Человек наверное о распределенном впрыске...а так не знаю... сам буду переоборудоваться-пробывать
VETune - Тюнер таблиц VE - http://secu-3.org/forum/viewtopic.php?f=9&t=753
S3Emul - Secu3/MS Bridge(онлайн откатка VE) - http://secu-3.org/forum/viewtopic.php?f=9&t=1089
ИЖ 2126 Ода, УМПО 3317, Secu-3T M644, Моновпрыск C16NZ
PreviousNext

Return to Прошивки

Who is online

Users browsing this forum: No registered users and 4 guests

Powered by phpBB® Forum Software © phpBB Group.