Управление накопл. энергии катушек зажигания (Dwell control)

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

Moderator: STC

Post Reply
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
Dmitrich2
LQFP112 - Up with the play
Posts: 248
Joined: Tue Dec 07, 2010 9:36 am

Re: Управление накоплением энергии катушек зажигания

Post by Dmitrich2 »

Теперь буду пытаться писать код по алгоритму.
Dmitrich2
LQFP112 - Up with the play
Posts: 248
Joined: Tue Dec 07, 2010 9:36 am

Re: Управление накоплением энергии катушек зажигания

Post by Dmitrich2 »

STC
Что-то не удается реализовать данный алгоритм
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
Dmitrich2
LQFP112 - Up with the play
Posts: 248
Joined: Tue Dec 07, 2010 9:36 am

Re: Управление накоплением энергии катушек зажигания

Post by Dmitrich2 »

Вполне возможно не совсем правильно понял, делал так: в прерывании канала А- запомнил таймер и выставил признак, в опросе зубьев вхожу по признаку в функцию здесь подставляю
Момент нач.накопления = знач.таймера + (Межзубн.период * 30*град.на зуб) / град.на зуб
канал В = Момент нач.накопления - табл. знач.
снять признак
установить флаг
разрешить прерывание канала В
короче вылетают импульсы произвольно.
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 »

Наверное ты неправильно понял суть алгоритма. Для определения момента накопления тебе не нужно отсчитывать зубья. Попробую объяснить еще раз.
- В основном цикле асинхронно расчитываем задержку в зависимости от напряжения бортовой сети и путем вызова функции устанавливаем текущую задержку модулю ckps (он ее сохраняет и использует в прерывании канала А).
- В модуле ckps. Канал А отвечает за выдачу искры (закрывает транзистор). Канал B отвечает за начало накопления энергии (открывает транзистор).
Логику работы канала А трогать не нужно - там должен идти отсчет по зубьям. Настраивать канал B нужно следующим образом:
При входе в прерывание от канала А (момент выдачи искры) считываем текущее значение таймера и запоминаем в локальной переменной, выдаем искру, затем на основе межзудного периода и сохраненного значения таймера высчитываем значение таймера соответствующее моменту выдачи искры в следующем цикле зажигания. Вычитаем из него задержку, ограничиваем полученное значение чтобы оно не было меньше текущего значения таймера и заносим в регистр сравнения канала B.
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
Dmitrich2
LQFP112 - Up with the play
Posts: 248
Joined: Tue Dec 07, 2010 9:36 am

Re: Управление накоплением энергии катушек зажигания

Post by Dmitrich2 »

Понял так:
При входе в прерывание от канала А (момент выдачи искры)
считываем текущее значение таймера и запоминаем в локальной переменной,
выдаем искру,
затем на основе межзубного периода и сохраненного значения таймера высчитываем значение таймера соответствующее моменту выдачи искры в следующем цикле зажигания.
Момент нач.накопления = сохр.знач.таймера + (Межзубн.период * 30*град.на зуб) / град.на зуб

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

Понял так что все надо в сделать обработке прерывании.
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 »

Да, именно так!

Я не подумал о том что можно не использовать деление! Нужно просто использовать для каждого типа двигателя и шкива разные константы.
Тогда формула вообще простая (и главное быстро вычисляемая):

Момент нач.накопления = Тек.знач.таймера + (Межзубн.период * Кол-во зубьев на цикл)

Code: Select all

       4ц     6ц     8ц 
60-2   30     20     15
36-1   18     12     9
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
Dmitrich2
LQFP112 - Up with the play
Posts: 248
Joined: Tue Dec 07, 2010 9:36 am

Re: Управление накоплением энергии катушек зажигания

Post by Dmitrich2 »

получилось так:
//************************************************************************
#define CKPS_COGS 30 //шкив 60 зубов
int16_t nach_nakopl, znach_taym,tdz;
int8_t b_channel;
__flash int16_t set_zad[32] = {2160,2320,2480,2640,2800,2960,3120,3280,3440,3600,3760,3920,4000,4240,4400,4560,
4800,4866,5040,5200,5360,5520,5600,5840,6000,6160,6320,6480,6640,6800,6960,7120};

void td (struct ecudata_t* d)
{
int16_t i;
int16_t rtd = d->sens.voltage;
for(i = 31; i >=0; i--)
{
if(rtd>=set_zad)break;
}
tdz = fwdata.coil_on_time;
}

#pragma vector=TIMER1_COMPB_vect //вектор прерывания по совпадению канала B таймера Т1
__interrupt void timer1_compb_isr(void)
{
TIMSK&= ~(1<<OCIE1B); //запрещаем прерывание

switch(b_channel)
{
#ifndef INVERSE_IGN_OUTPUTS
TURNOFF_IGN_CHANNELS();
#else
TURNON_IGN_CHANNELS();
#endif
}
}
/* * вектор прерывания по совпадению канала А таймера Т1*/

#pragma vector=TIMER1_COMPA_vect
__interrupt void timer1_compa_isr(void)
{
TIMSK&= ~(1<<OCIE1A); //(запрещаем прерывание)
znach_taym = TCNT1;

//(линия порта в низком уровне, теперь переводим её в высокий уровень -
// заставляем коммутатор прекратить
//накопление энергии и закрыть транзистор (искра)).
switch(ckps.channel_mode)
{
#ifndef INVERSE_IGN_OUTPUTS
TURNON_IGN_CHANNELS();
#else
TURNOFF_IGN_CHANNELS();
#endif
default:
return; //none of channels selected (никакой канал не выбран) - CKPS_CHANNEL_MODENA

b_channel = !ckps.channel_mode;
nach_nakopl = znach_taym + ((ckps.period_curr) * CKPS_COGS);
OCR1B = nach_nakopl - tdz;
TIFR = (1 << OCF1B);
TIMSK|= (1<<OCIE1B);
}
}
//************************************************************************
проверю чтобы не осталось лишнего в файле и попробую.
Dmitrich2
LQFP112 - Up with the play
Posts: 248
Joined: Tue Dec 07, 2010 9:36 am

Re: Управление накоплением энергии катушек зажигания

Post by Dmitrich2 »

Вычитаем из него задержку, ограничиваем полученное значение чтобы оно не было меньше текущего значения таймера - (каким образом ограничиваем?)
Post Reply