Любое срабатывание на основе большого фиксированного интервала приведет к понижению точности дозирования. Алгоритм способен дозировать топливо с дискретностью 3.2мкс (или 6.4мкс?). Уменьшение длительности интервала до разумного приведет к большому оверхеду входа/выхода прерывания и перебор структур цилиндров в поисках сработавшей форсунки. Нужна очередь из которой будет загружаться очередной интервал в таймер и вызываться callback по срабатыванию.Pavel Buyevich wrote:Поэтому я и сказал - "грубый", сугубо для примера =) Отталкиваясь от того как сейчас сконфигурирован таймер, мы можем дергать прерывание TIMER2_COMPB_vect начиная от каждые 6.4 МИКРОсекунды (1 тик таймера), до 1632 (1.6 миллисекунд) микросекунды (1 тик таймера * 255), диапазон частоты довольно широкий. К примеру решили что декрементим счетчик форсунок каждые 100 микросекунд, ближайшее целое которое можем установить в качестве compare match регистра - 15, дает нам дергание прерывания каждые 96 микросекунд, соответсвенно и декрементим счетчики форсунок в прерывании на эти 96 микросекунд.STC wrote:Дискретность времени 1мс? Это же слишком много, за 1мс форсунка нальет много топлива.
Добавл. в прошивку возможностей одновременного/моно впрыска
-
- 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: Добавл. в прошивку возможностей одновременного/моно впры
Москвич 2141 УЗАМ 1.7л. Платформа STM32F103RET6. Идеи secu-3. Peak&Hold. Автоматическое вычисление первого цилиндра. Фазированный впрыск.
-
- 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: Добавл. в прошивку возможностей одновременного/моно впры
6/1000 миллисекунды - большой интервал?AlxSh wrote:Любое срабатывание на основе большого фиксированного интервала приведет к понижению точности дозирования. Алгоритм способен дозировать топливо с дискретностью 3.2мкс (или 6.4мкс?). Уменьшение длительности интервала до разумного приведет к большому оверхеду входа/выхода прерывания и перебор структур цилиндров в поисках сработавшей форсунки. Нужна очередь из которой будет загружаться очередной интервал в таймер и вызываться callback по срабатыванию.Pavel Buyevich wrote:Поэтому я и сказал - "грубый", сугубо для примера =) Отталкиваясь от того как сейчас сконфигурирован таймер, мы можем дергать прерывание TIMER2_COMPB_vect начиная от каждые 6.4 МИКРОсекунды (1 тик таймера), до 1632 (1.6 миллисекунд) микросекунды (1 тик таймера * 255), диапазон частоты довольно широкий. К примеру решили что декрементим счетчик форсунок каждые 100 микросекунд, ближайшее целое которое можем установить в качестве compare match регистра - 15, дает нам дергание прерывания каждые 96 микросекунд, соответсвенно и декрементим счетчики форсунок в прерывании на эти 96 микросекунд.STC wrote:Дискретность времени 1мс? Это же слишком много, за 1мс форсунка нальет много топлива.
-
- 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: Добавл. в прошивку возможностей одновременного/моно впры
100мкс большой интервал! Про то что 6мкс это большой интервал, я ни чего не писал. Сохранение состояния регистров в стек, разрешение других прерываний, загрузкой указателей, декремент 16битных счетчиков с проверкой сработавших форсунок т.д., возможно съедят все ресурсы процессора.Pavel Buyevich wrote:6/1000 миллисекунды - большой интервал?AlxSh wrote:Любое срабатывание на основе большого фиксированного интервала приведет к понижению точности дозирования. Алгоритм способен дозировать топливо с дискретностью 3.2мкс (или 6.4мкс?). Уменьшение длительности интервала до разумного приведет к большому оверхеду входа/выхода прерывания и перебор структур цилиндров в поисках сработавшей форсунки. Нужна очередь из которой будет загружаться очередной интервал в таймер и вызываться callback по срабатыванию.
Зачем так делать? Форсунки открываются при прохождении нужного зуба и в очередь ставится время выключения. Счетчики времени уменьшаются на 0x100 по переполнению аппаратного счетчика при TOP=0xFF. Остаток загружается в модуль сравнения и по срабатыванию вызывается процедура которая гасит форсунку. Так сделан УОЗ. Почему так же не сделать управление форсунками?
Москвич 2141 УЗАМ 1.7л. Платформа STM32F103RET6. Идеи secu-3. Peak&Hold. Автоматическое вычисление первого цилиндра. Фазированный впрыск.
-
- 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: Добавл. в прошивку возможностей одновременного/моно впры
Все приводимые мной цифры выбраны навскидку, без учета производительности контроллера, требования к точности дозирования каждым двигателем, думаю что можно найти разумное соотношение. Насчет применения/неприменения тех, или иных решений я, увы ничего не могу сказать, поскольку в коде эбу разбираюсь весьма поверхностно, как и в embedded программировании в целом. Предлагаю на мой взгляд самое простое, даже примитивное решение, не требующее (по моему скромному мнению) радикальных изменений\дополнений в коде\инвестирования временных ресурсов.AlxSh wrote:100мкс большой интервал! Про то что 6мкс это большой интервал, я ни чего не писал. Сохранение состояния регистров в стек, разрешение других прерываний, загрузкой указателей, декремент 16битных счетчиков с проверкой сработавших форсунок т.д., возможно съедят все ресурсы процессора.Pavel Buyevich wrote:6/1000 миллисекунды - большой интервал?AlxSh wrote:Любое срабатывание на основе большого фиксированного интервала приведет к понижению точности дозирования. Алгоритм способен дозировать топливо с дискретностью 3.2мкс (или 6.4мкс?). Уменьшение длительности интервала до разумного приведет к большому оверхеду входа/выхода прерывания и перебор структур цилиндров в поисках сработавшей форсунки. Нужна очередь из которой будет загружаться очередной интервал в таймер и вызываться callback по срабатыванию.
Зачем так делать? Форсунки открываются при прохождении нужного зуба и в очередь ставится время выключения. Счетчики времени уменьшаются на 0x100 по переполнению аппаратного счетчика при TOP=0xFF. Остаток загружается в модуль сравнения и по срабатыванию вызывается процедура которая гасит форсунку. Так сделан УОЗ. Почему так же не сделать управление форсунками?
- 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: Добавл. в прошивку возможностей одновременного/моно впры
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 (вступаем!)
Клуб проекта в Facebook https://www.facebook.com/groups/secu3club
Клуб проекта ВКонтакте https://vk.com/secu3club (вступаем!)
-
- 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: Добавл. в прошивку возможностей одновременного/моно впры
Как-то так не пойдет? Здесь не учтен вариант когда время впрыска стало меньше чем в предыдущем пуске и группа форсунок должна выключится раньше чем уже есть запрограммированный интервал, но это можно исправить. Не вникал в то как сейчас все вертится в проекте, поэтому регистры абстрактные. Числа тоже от фонаря.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. Автоматическое вычисление первого цилиндра. Фазированный впрыск.
- 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: Добавл. в прошивку возможностей одновременного/моно впры
не перечитывал всю тему..., вопрос:
сейчас секу в роли эбу впрыска уже может полноценно заменить карбюратор, критерии: мощность/ расход (что бы было не хуже), или алгоритм еще требует доработки?
сейчас секу в роли эбу впрыска уже может полноценно заменить карбюратор, критерии: мощность/ расход (что бы было не хуже), или алгоритм еще требует доработки?
- 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: Добавл. в прошивку возможностей одновременного/моно впры
может.. но сыроватоNikola wrote:не перечитывал всю тему..., вопрос:
сейчас секу в роли эбу впрыска уже может полноценно заменить карбюратор, критерии: мощность/ расход (что бы было не хуже), или алгоритм еще требует доработки?
- 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: Добавл. в прошивку возможностей одновременного/моно впры
А что сыровато? А то я зимой собирался переоборудоваться.
- 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: Добавл. в прошивку возможностей одновременного/моно впры
Человек наверное о распределенном впрыске...а так не знаю... сам буду переоборудоваться-пробыватьmmlevin wrote:А что сыровато? А то я зимой собирался переоборудоваться.
ИЖ 2126 Ода, УМПО 3317,Январь 5.1 (Был Secu-3T M644), Фазированный впрыск(ДАД+ДТВ) (был Моновпрыск C16NZ)