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

Обсуждаем прошивки, алгоритмы работы в разных режимах (например, алгоритм работы автоподсоса).
Наборы тюнингованых прошивок МПСЗ SECU (заточенных под конкретную конфигурацию двигателя)
AlxSh
Posts: 92
Joined: 14 Jul 2014, 12:52
Your CAR: 2141 1.7
SECU version: DIY SECU-3
Location: Ивановская область, Кинешма
Has thanked: 2 times
Been thanked: 25 times
Contact:

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

Post by AlxSh »

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
Posts: 30
Joined: 30 Aug 2014, 09:56
Your CAR: I go on foot
SECU version: DIY SECU-3
Been thanked: 4 times
Contact:

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

Post by Pavel Buyevich »

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
Posts: 92
Joined: 14 Jul 2014, 12:52
Your CAR: 2141 1.7
SECU version: DIY SECU-3
Location: Ивановская область, Кинешма
Has thanked: 2 times
Been thanked: 25 times
Contact:

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

Post by AlxSh »

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
Posts: 30
Joined: 30 Aug 2014, 09:56
Your CAR: I go on foot
SECU version: DIY SECU-3
Been thanked: 4 times
Contact:

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

Post by Pavel Buyevich »

AlxSh wrote:
Pavel Buyevich wrote:
AlxSh wrote:Любое срабатывание на основе большого фиксированного интервала приведет к понижению точности дозирования. Алгоритм способен дозировать топливо с дискретностью 3.2мкс (или 6.4мкс?). Уменьшение длительности интервала до разумного приведет к большому оверхеду входа/выхода прерывания и перебор структур цилиндров в поисках сработавшей форсунки. Нужна очередь из которой будет загружаться очередной интервал в таймер и вызываться callback по срабатыванию.
6/1000 миллисекунды - большой интервал?
100мкс большой интервал! Про то что 6мкс это большой интервал, я ни чего не писал. Сохранение состояния регистров в стек, разрешение других прерываний, загрузкой указателей, декремент 16битных счетчиков с проверкой сработавших форсунок т.д., возможно съедят все ресурсы процессора.
Зачем так делать? Форсунки открываются при прохождении нужного зуба и в очередь ставится время выключения. Счетчики времени уменьшаются на 0x100 по переполнению аппаратного счетчика при TOP=0xFF. Остаток загружается в модуль сравнения и по срабатыванию вызывается процедура которая гасит форсунку. Так сделан УОЗ. Почему так же не сделать управление форсунками?
Все приводимые мной цифры выбраны навскидку, без учета производительности контроллера, требования к точности дозирования каждым двигателем, думаю что можно найти разумное соотношение. Насчет применения/неприменения тех, или иных решений я, увы ничего не могу сказать, поскольку в коде эбу разбираюсь весьма поверхностно, как и в embedded программировании в целом. Предлагаю на мой взгляд самое простое, даже примитивное решение, не требующее (по моему скромному мнению) радикальных изменений\дополнений в коде\инвестирования временных ресурсов.
User avatar
STC
Posts: 13843
Joined: 30 Apr 2013, 23:41
Your CAR: AZLK 2140
SECU version: DIY SECU-3
Location: North Korea
Has thanked: 2160 times
Been thanked: 4335 times
Contact:

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

Post by STC »

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
Posts: 92
Joined: 14 Jul 2014, 12:52
Your CAR: 2141 1.7
SECU version: DIY SECU-3
Location: Ивановская область, Кинешма
Has thanked: 2 times
Been thanked: 25 times
Contact:

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

Post by AlxSh »

STC wrote:Pavel Buyevich, чисто теоритически, то что ты предложил будет работать. Но прерывания каждые 6 и даже 30 мкс это съедание всего процессорного времени на вход/выход и обработку только этого прерывания.
Зачем так делать? Форсунки открываются при прохождении нужного зуба и в очередь ставится время выключения. Счетчики времени уменьшаются на 0x100 по переполнению аппаратного счетчика при TOP=0xFF. Остаток загружается в модуль сравнения и по срабатыванию вызывается процедура которая гасит форсунку. Так сделан УОЗ. Почему так же не сделать управление форсунками?
В зажигании не предусмотрено перекрытие на накопление.
Как-то так не пойдет? Здесь не учтен вариант когда время впрыска стало меньше чем в предыдущем пуске и группа форсунок должна выключится раньше чем уже есть запрограммированный интервал, но это можно исправить. Не вникал в то как сейчас все вертится в проекте, поэтому регистры абстрактные. Числа тоже от фонаря.

Code: Select all

// Время презагрузки таймера новым значением
#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. Автоматическое вычисление первого цилиндра. Фазированный впрыск.
User avatar
Nikola
Posts: 150
Joined: 27 May 2014, 00:24
Your CAR: ВАЗ-2115 21083V8-1.5
SECU version: DIY SECU-3T
Location: Pskov
Has thanked: 38 times
Been thanked: 91 times

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

Post by Nikola »

не перечитывал всю тему..., вопрос:
сейчас секу в роли эбу впрыска уже может полноценно заменить карбюратор, критерии: мощность/ расход (что бы было не хуже), или алгоритм еще требует доработки?
User avatar
wunder
Posts: 6406
Joined: 19 Mar 2015, 16:50
Your CAR: 1gr
SECU version: DIY SECU-3i TBZ
Has thanked: 145 times
Been thanked: 998 times
Contact:

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

Post by wunder »

Nikola wrote:не перечитывал всю тему..., вопрос:
сейчас секу в роли эбу впрыска уже может полноценно заменить карбюратор, критерии: мощность/ расход (что бы было не хуже), или алгоритм еще требует доработки?
может.. но сыровато :?
User avatar
mmlevin
Posts: 245
Joined: 13 May 2013, 09:44
Your CAR: I go on foot
SECU version: DIY SECU-3
Location: Россия, Воронеж
Has thanked: 2 times
Been thanked: 63 times

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

Post by mmlevin »

А что сыровато? А то я зимой собирался переоборудоваться.
User avatar
darxfame
Posts: 901
Joined: 10 Jul 2015, 19:12
Your CAR: ИЖ 2126 УМПО 1,7
SECU version: official SECU-3T
Location: Москва
Has thanked: 122 times
Been thanked: 137 times
Contact:

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

Post by darxfame »

mmlevin wrote:А что сыровато? А то я зимой собирался переоборудоваться.
Человек наверное о распределенном впрыске...а так не знаю... сам буду переоборудоваться-пробывать
ИЖ 2126 Ода, УМПО 3317,Январь 5.1 (Был Secu-3T M644), Фазированный впрыск(ДАД+ДТВ) (был Моновпрыск C16NZ)
Post Reply

Return to “Прошивки”