Математического оператора нет, а в форме функции - на то это и язык программирования.
SU-27-16 пишет:
спасибо ! :) лучеееееее 7 нулей дописать.... :)
Не понял. То есть сначала речь шла об экономии ресурсов, о производительности и таймерах, а теперь заставляем контроллер вычислять заранее известную константу (коли выбор стоял - так или эдак)? ;)
Есть микросхема-процессор управления катушкой зажигания. В оригинале это L497 от Томсона, или её аналог 1055хп1, отечественная. В Январях 5.1, которые ставились на Жигули до 2005 года и в Бошах1.5.4 применялась, только не в самом контролере, а в модуле зажигания стояла. L497 выполняет несколько функций, ограничивает ток через катушку, ограничивает время, когда транзистор в линейном режиме находиться, то есть открывает ключ позже, чем приходит команда на его открытие. Отключает катушку зажигания, если сигнал не меняется более 2 секунд... То есть нормальный качественный дрАйвер для управления катушкой зажигания.
Настоятельно рекомендую! Можно взять в виде готового коммутатора, но их надо вскрывать и смотреть, что там стоит, подделка или оригинал. Из отечественного самыми добротными были коммутаторы МЗАТЭ-2, Московский завод автотракторного электрооборудования. Там на керамической плате гибридная схема, резисторы на керамику напылённые...
Олег_Б, это здорово, правда я не совсем понял, причем тут угол опережения.
-
Реально в итоге перешёл к измерению длины отрицательного импульса, правда, ленивым способом. Для вычисления времени опережения состряпал функцию. Действительно кусочно-линейная функция получилась. if-ы идут с высоких оборотов, так как им критично быстрее.
unsigned long advTime(unsigned long period){ //время опережения
unsigned long result; //сравнение с половиной периода для заданных оборотов
if(period<=5000) result=850; //при модуляторе 180-180
else if(period<=7500) result=(250*period+875000)/2500; //участок 4000-6000
else if(period<=15000) result=(400*period+5250000)/7500; //участок 2000-4000
else if(period<=60000) result=(500*period+15000000)/15000; //участок 500-2000
else result=(period/180)*7; //участок до 500, 7 градусов
return result;
}
Графики (правда от оборотов, а не от полупериода - отразить и растянуть).
Каким макаром она на пять значений, серьёзно? Ничего что прямые наклонены? Ничего что переведеный в угол график ниже достаточно выпукл и ровен? Поосторожнее, ну.
А в коде есть такие штуки, неравенствами называются. Предпологаю, что вы не разглядели знаки "<" и, поторопившись с выводами, решили, что я ошибся.
Олег_Б, это здорово, правда я не совсем понял, причем тут угол опережения.
Прошу прощения, я думал, что это устройство какое-то практическое применение будет иметь. Если чисто теоретически, то есть если на самом деле управлять какой то катушкой зажигания не надо, то мой пост был лишним.
Угол зажигания зависит от оборотов и от наполнения цилиндра. Чем сильнее открыта дроссельная заслонка, тем больше свежей смеси попадает в цилиндр, смесь горит быстрее и УОЗ (угол опережения зажигания) должен быть позже. В механических трамблёрах есть центробежный регулятор и вакуумный регулятор опережения. Центробежный - это вот то, что тут разрабатывается, а вакуумный как раз корректирует УОЗ в зависимости от нагрузки. Чем больше давление в ресивере перед клапанами, тем больше свежей смеси попадает в цилиндр, и зажигание надо делать позже. По крайней мере хотя бы корректор сделать на переменном резисторе, который тупо сдвигал бы полученный УОЗ на всём диапазоне +/- 10...20 градусов.
Прошу прощения, я думал, что это устройство какое-то практическое применение будет иметь. Если чисто теоретически, то есть если на самом деле управлять какой то катушкой зажигания не надо, то мой пост был лишним.
То есть мы тут неприменяемую фигню делаем? ;)
Задача моего устройства, например, как первом посте описано - это имитировать импульсы с датчика Холла, но со сдвигом. Они пойдут на коммутатор, в котором, я так понял, уже и стоит ваш L497 или как его там. То есть готовое устройство.
Угол зажигания зависит от оборотов и от наполнения цилиндра. Чем сильнее открыта дроссельная заслонка, тем больше свежей смеси попадает в цилиндр, смесь горит быстрее и УОЗ (угол опережения зажигания) должен быть позже. В механических трамблёрах есть центробежный регулятор и вакуумный регулятор опережения. Центробежный - это вот то, что тут разрабатывается, а вакуумный как раз корректирует УОЗ в зависимости от нагрузки. Чем больше давление в ресивере перед клапанами, тем больше свежей смеси попадает в цилиндр, и зажигание надо делать позже. По крайней мере хотя бы корректор сделать на переменном резисторе, который тупо сдвигал бы полученный УОЗ на всём диапазоне +/- 10...20 градусов.
есть две зависимости УОЗ - от оборотов и от нагрузки
скорость объёмного сгорания - СОС ( названия мои, для краткости ) - одинакова на всех оборотах, но на 600 при УОЗ она оптимальна ( давление газов достигнет макс значения когда поршень пройдёт ВМТ градусов на 5....10 и газы будут толкать поршень вниз ). при оборотах 3000, например, давление газов достигнет макс значения когда поршень пройдёт ВМТ градусов на 40....90 и газы будут расширяться за поршнем просто так, чуть-чуть нажимая на него ( позднее зажигание ). способ устранить это - РАНЬШЕ поджигать смесь, ибо скорость поршня велика... для этого служил раньше центробежный регулятор УОЗ - больше скорость поршня - раньше поджигаем... Вот этим и занимается топикстартер - созданием ЭЛЕКТРОННОГО регулятора УОЗ в зависимости от оборотов....
мощность.... её характеризует разрежение во впускном коллекторе движка.... чем больше газу, тем большее разрежение во впускном тракте двигателя, тем больший УОЗ надо выставить, чтобы обеспечить наискорейшее увеличение оборотов движка ( обороты пропорциональны отдаваемой мощности )
применение :
0 - ни одна регулировка не применяется
1 - УОЗ от оборотов
2 - УОЗ от вакуумного датчика ( мехиническая связь )
3 - УОЗ от оборотов И УОЗ от вакуумного датчика ( самое оптимальное )
....вот ТС и мутит здесь тему #1 ( хотя, если пришпандорить к моцику датчик искрообразования от "ОКИ" с вакуумным опереженим УОЗ ( от впускного тракта ) - будет тема #3 :) если шишка справа на движке не будет мозолить глаза )
есть две зависимости УОЗ - от оборотов и от нагрузки
скорость объёмного сгорания - СОС ( названия мои, для краткости ) - одинакова на всех оборотах,
......
мощность.... её характеризует разрежение во впускном коллекторе движка.... чем больше газу, тем большее разрежение во впускном тракте двигателя, тем больший УОЗ надо выставить, чтобы обеспечить наискорейшее увеличение оборотов движка ( обороты пропорциональны отдаваемой мощности )
Скорость сгорания смеси зависит от наполнения цилиндра, то есть от "нагрузки". Чем больше свежей смеси попадает в цилиндр, тем меньше остаётся в нём отработанных с прошлого цикла газов, и смесь горит быстрее. Кроме того при одном и том же ходе поршня и одной и той же степени сжатия из-за различного разряжения во ресивере в цилиндр попадает разное количество смеси.
Например, дроссель закрыт, в ресивере разряжение в пол-атмосферы, в цилиндр что-то всасывается, сжимается, причём будет всасываться и то, что только что улетело в колектор, во время перекрытия клапанов, и в то же время при полностью открытом дросселе в ресивере почти атмосферное давление, остатки сгоревших газов лучше выталкиваются в выхлопную трубу, и после зжатия в цилиндре молекулы топлива и окислителя плотнее расположены друг другу. В таком виде смесь сгорает быстрее, чем при закрытом дросселе, разряжении в ресивере и меньшем наполнении цилиндра.
Вот к примеру таблицы УОЗ из контролера Январь5.1. Цикловое наполнение - это количество смеси, попадающее в цилиндр в одном такте. Собственно все автомобильные компьютеры в мире в первую очередь вычисляют, сколько именно смеси попало в цилиндр, или попадёт, и вот на эту порцию смеси рассчитывают количество топлива и какое опережение зажигания должно быть.
***********
Так, таблицу чуть позже, не смог вставить картинку, её надо куда-то разместить оказывается...
Запускаем в программе СТР.ехе и открываем файл j5v13i02, который уже разархивировали.
В программе жмём кнопку "Настроить", в выпавшем меню - "Зажигание" - в выпавшем меню - "УОЗ какой-нибудь"
На получившемся графике внизу убираем галочку "все", и движком меняем наполнение цилиндра, то есть расход воздуха.
Наблюдаем зависимость Угла Опережения Зажигания от оборотов при различной нагрузке на двигатель. В данной прошивке используются только "УОЗ для мощностного" и "УОЗ для экономичного режима без ДК", и это одна из самых удачных заводских прошивок, то есть и топливо, и УОЗ там очень хорошо сделаны. Двигатель ВАЗ, 1.5 литра, впрыск одновременный, но собственно интересует пример реализации УОЗ.
"..........тем больше свежей смеси попадает в цилиндр, смесь горит быстрее и УОЗ........"
жиклёры на то и стоят, чтобы смесь всегда была ОПТИМАЛЬНАЯ, поэтому и скорость её сгорания - постоянная величина !
...и уж потом придумали датчики кислорода, регулировать качество смеси
Да, ошибка здесь. Жиклёры, датчики кислорода, это для того, чтобы на 14.7 литра свежего воздуха влить 1 литр чистого бензина. И примерно такая же смесь плюс минус содержится в ресивере. Но в самом цилиндре свежая смесь смешивается с остатками отработанных газов, особенно на малых нагрузках, и в зависимости от нагрузки на двигатель, а именно разряжения в ресивере, после закрытия клапанов и сжатия смеси смесь может иметь различную плотность. Причём чем меньше плотность смеси, тем больше в ней остатков продуктов сгорания от предидущего цикла, и такая разбавленная неплотная смесь горит медленнее, чем сильнее сжатая чистая смесь бензина и воздуха. То есть при большой нагрузке давление в ресивере максимальное и в цилиндр попадает много свежей смеси при большем давлении, чем при малой нагрузке.
Параметр, меняющий УОЗ из-за нагрузки, как раз и учитывает скорость горения смеси, чтобы получить максимальный пик давления в цилиндре сразу после прохождения поршнем верхней мёртвой точки
Я диагностикой и ремонтом инжекторных двигателей занимаюсь с 1992 года, разве что в Си полный дурак. Но на ассемблере для 8051 несколько программ и устройств сделал, вот типа такого:
Но в принципе, на сайте Алмисофт.ру есть фриварный СТР, можно скачать прошивку для того же Января5.1 и посмотреть в нём.
моя не против ВСЕХ поправок.... вы спец по ДВС.... моя пока только хочет создать систему, которая будет работать на ардуине... через таблицу !!!!!! как моя и говорила раньшеееее - настройка системы будет заключаться в СОСТАВЛЕНИИ ТАБЛИЦЫ ! изменение этой таблицы - есть ЧИПТЮНИНГ.... а код программы менять не нужно...
моя не знает, что есть Января5.1 :( и не хочЮ знать ( нет времени )
Бензин в цилиндре на всех ДВС горит по одним и тем же законам.
Ещё в начале 90-х видел у кого-то на мотоцикле тумблер, УОЗ раньше-позже. На разгон, когда обороты низкие, ставит позже, от светофора, и разогнался, обороты выше - переключил на более ранний угол. Но, собственно, хотел подсказать, что требуется два параметра, обороты и давление в ресивере (нагрузка), можно сделать только по оборотам (ваше дело), а можно сразу закладывать возможность расширения, и после отладки УОЗ по оборотам добавлять коррекцию по нагрузке.
Олег_Б, как говорится: "Лучшее - враг хорошего". К совершенству-то можно бесконечно стремиться, только игра не стоит свеч. Дефолтный тупой прерыватель заменить и ладно. :) А так вы конечно правы, наверное.
Вот какая мысль промелькнула - надо занизить характеристику, потому что БСЗ итак на некоторый угол ставится (16 градусов например), и это надо будет компенсировать.
Железки кажись сделал, теперь надо некоторый минимум корпуса, чтобы можно было проверять всё это.
> вот какая мысль промелькнула - надо занизить характеристику, потому что БСЗ итак на некоторый угол ставится (16 градусов например), и это надо будет компенсировать.
Реальный датчик Холла ставится на самое раннее зажигание, а контролер просто отрабатывает задержку. Так результат точнее.
Вполне может быть, только фишка в том, что может понадобиться вырубить девайс и ездить на голом БСЗ, а если оно по дефолту будет на 30-40 градусов, то пинаться будет неслабо. Да и для движка вряд ли полезно.
Пока что обвес такой получается (если не показывать стабилизатор и тумблер). Резисторы по 1.5К, конд 10нФ, транзистор 2SC2274F.
Схема индикатора обычная. Так как индикатор двузначный, сэкономил ногу и выбор сделал по одному сигналу, а VT1 - инвертор (КТ312Б). VT2 и VT3 другие, с предельным Iк 150 мА. Резисторы по 270 и 330 Ом.
(Пока код от комментариев и дебажных строк чистил, мог что-нить удалить случайно)
byte indicator,sel,digit[2]; //выбор индикатора и 2 отображаемые цифры
unsigned int rpm; //частота оборотов
unsigned long period,prevPeriod; //период вращения
volatile byte flag; //признак прерывания
volatile byte flagCharge; //признак второго прерывания
unsigned long tCur,tSw,tHallFall,tHallRise; //время текущее, переключения индикатора, срабатывания датчиков (на задний и передний)
unsigned long tAdvance; //время измерения периода и время с опережением
long deltaP; //разница периодов
byte outStatus; //флаг состояния выхода
byte edgeStatus; //состояние "истинности" для заднего фронта (чтобы передний фронт обрабатывался только когда надо)
void Print7seg(char a){
PORTD=PORTD&0x0F;
PORTB=PORTB&0xF8;// сброс
switch(a) {
case 0: {
PORTD=PORTD|0xF0;
PORTB=PORTB|0x03; //вывод
break;
}
case 1: {
PORTD=PORTD|0x60;
break;
//PORTB=PORTB|0x00;
}
case 2: {
PORTD=PORTD|0xB0;
PORTB=PORTB|0x05;
break;
}
case 3: {
PORTD=PORTD|0xF0;
PORTB=PORTB|0x04;
break;
}
case 4: {
PORTD=PORTD|0x60;
PORTB=PORTB|0x06;
break;
}
case 5: {
PORTD=PORTD|0xD0;
PORTB=PORTB|0x06;
break;
}
case 6: {
PORTD=PORTD|0xD0;
PORTB=PORTB|0x07;
break;
}
case 7: {
PORTD=PORTD|0x70;
break;
//PORTB=PORTB|0x07;
}
case 8: {
PORTD=PORTD|0xF0;
PORTB=PORTB|0x07;
break;
}
case 9: {
PORTD=PORTD|0xF0;
PORTB=PORTB|0x06;
break;
}
}
}
void setup()
{
delay(250); /* -- начальная установка и сброс -- */
DDRD=DDRD|0xF0; //OUT - 4..7
DDRD=DDRD&0xF3; //IN - 2,3
DDRB=DDRB|0x3F; //OUT - 8..13
tCur=micros();
tSw=tCur;
rpm=0; //частота вращения - сброс
indicator=0; //начальный отсчет для динамической индикации
sel=0;
attachInterrupt(0,detectSpark,FALLING); //прерывание на 2 по заднему фронту
attachInterrupt(1,detectCharge,RISING); //прерывание на 3 по переднему
flag=0; //флаги
flagCharge=0;
period=0;
prevPeriod=0; //периоды (частичные)
tHallFall=0; //время срабатывания датчиков
tHallRise=0;
tAdvance=0; //опережение
deltaP=0; //поправка
outStatus=0;
edgeStatus=0;
PORTB=PORTB|0x20; //снять сигнал с ноги 13 с учетом инверсии
}
void detectSpark(){ //обработчик прерывания
flag=1; //оборот был
}
void detectCharge(){
PORTB=PORTB&0xD7; //установить сигнал на ногу 13 c учетом инверсии
flagCharge=1;
}
long advTime(){ //время опережения
unsigned long result; //сравнение с половиной периода для заданных оборотов
unsigned long corrPeriod;
corrPeriod=period-deltaP;
if(corrPeriod<=5000) result=850; //при модуляторе 180-180
else if(corrPeriod<=7500) result=(250*period+875000)/2500; //участок 4000-6000
else if(corrPeriod<=15000) result=(400*period+5250000)/7500; //участок 2000-4000
else if(corrPeriod<=60000) result=(500*period+15000000)/15000; //участок 500-2000
else result=(corrPeriod/180)*7; //участок до 500, 7 градусов
result=result-((corrPeriod/180)*16); //поправка на обычную БСЗ
return result;
}
void ignite(){ //основные вычисления, связанные с зажиганием
if(!prevPeriod){ //еще нельзя вычилить разницу между периодами
period=tHallRise-tHallFall; //получим период (50% для предварительно выбранной формы модулятора)
prevPeriod=period;
//Serial.print("On -if(!period)- ");
}
else{ //если период n-1 - не "пустышка"
prevPeriod=period;
period=tHallRise-tHallFall; //получим период
//Serial.print("On -else- ");
}
deltaP=((long)prevPeriod-(long)period)/2; //коэффициент 0.5. не делить сдвигом, тип со знаком
tAdvance=tHallRise+period/*-deltaP*/-advTime();
tAdvance=tAdvance-deltaP;
}
void loop()
{
tCur=micros();
if(tCur>=tAdvance&&outStatus) {
PORTB=PORTB|0x20; //снять сигнал с ноги 13 с учетом инверсии
outStatus=0;
}
//индикация
if(tCur-tSw>55556){ //смена через 1/18 секунды
if(tCur-tHallFall>2500000){ //сброс при ПРОСТОЕ
rpm=0; //отображать 0 на дисплее
period=0;
prevPeriod=0;
edgeStatus=0;
}
else {
if(!period) rpm=0;
else rpm=(1000000/(period<<1))*60; //Нахождение числа оборотов. Сдвиг влево на 1 = умножение на 2 (для модулятора 180-180)
rpm=rpm/100; //под двухзначный индикатор
}
if(rpm/10>0) digit[1]=rpm/10;
else digit[1]=0; //десятки (тысячи)
digit[0]=rpm%10; //единицы (сотни)
indicator++;
sel=indicator%2;
if(sel) PORTB=PORTB|0x18;
else PORTB=PORTB&0xE7; //управляющий сигнал - снимать с 12 или 11
Print7seg(digit[sel]);
tSw=tCur;
}
if(flag){ //если был оборот (задний фронт)
//ignite();
tHallFall=micros();
flag=0;
edgeStatus=1;
//Serial.println("FLAG");
}
if(flagCharge){
if(edgeStatus) {//если был второй фронт после первого
tHallRise=micros();
ignite();
outStatus=1;
}
flagCharge=0;
}
}
да НЕТ...... я учусь в чём-то.... хотел вникнуть....
всегда есть три основных персонажа - генератор идей, критик и исполнитель :)
...первым моя чуть раньше был, щас пока вторым действую....
ближе к теме - вы отжали одну ногу ( транзистором ) , итого 7 линий - данные, VCC, GND и управление ( через инвертор ) = 10 линий
а почему бы тогда не поставить сдвиговый резистор ?
...такт, данные, VCC, GND = 4 ( против 10 )
от дуни к индикатору - 4 провода.... а уже там на своей плате от регистра - 7 линий данные , 1 линия управление через тот же инвертор транзисторный....
про прототип понятно..... ещё - тахометр из #16 !!!!!! посмотрите на К155ИД11 - 4 корпуса и 32 светодиода - тахометр 0.......6400 rpm ( каждый светик - 200 rpm ).... красиво...
код очень сложно читаемый..... комментов мало.... И на мой взгляд - избыточен....
задач-то всего две : от ДХ замерить RPM и в зависимости от RPM выдать на какой-то пин ( на коммутатор ) задержанный фронт
а почему бы тогда не поставить сдвиговый резистор ?
Сдвиговый регистр SIPO. Во-первых, тогда придётся программой такт отбивать и по одному биту скармливать - это и время выполнения, это и код сложнее будет... я так себе это представляю, а в "релизе" может и следует так сделать. Во-вторых, регистр ещё найти надо. :)
SU-27-16 пишет:
ещё - тахометр из #16 !!!!!! посмотрите на К155ИД11 - 4 корпуса и 32 светодиода - тахометр 0.......6400 rpm ( каждый светик - 200 rpm ).... красиво...
Ну так... видел. И взял на вооружение. :) Я ж примерно так конечное и представляю себе. На левой части приборной панели круг прорезать, платы заказать уже, а не с хлорным мучаться без металлизированных отверстий...
SU-27-16 пишет:
код очень сложно читаемый..... комментов мало.... И на мой взгляд - избыточен....
Не всё так плохо, видали и хуже. :) Где комента не хватает - попробуйте спросить. А избыточен-то в каком плане? Каждой переменной применение находится... А так вы может просто со своим проектом сравниваете, у вас алгоритм другой.
SU-27-16 пишет:
значит в коде недосмотрели - если обороты менее 500, например - искру душим
Эм... может быть дело где-то в обвесе. Или вообще луна в сатурне была. Когда я писал прогу, я предполагал, что искра должна выдаваться один раз через некоторое время после переднего фронта (начало зарядки) только при условии, что до этого засекли задний фронт (следовательно, смогли померять время между фронтами и получить полупериод).
SU-27-16 пишет:
R3 - лучше 10 килоом ( зачем ДХ мучить током таким )
От стабилизатора ардуины напряжение в 3 раза меньше, чем в бортовой сети. Ничо не случится с ДХ от 3 мА. :)
SU-27-16 пишет:
атаки и кипячения не нужны ни вам, ни мине ! :)
Ну это радует. Но на атаку всё равно было похоже :D Стройте предложения как-нить так, чтоб не пугать лишний раз.
Датчик Холла на Планете это плохо. Генератор то с обмоткой возбуждения постоянкой, то есть электромагнит. Много-много лет томя я заморачивался на эту тему, даже годный оптический датчик в замену ДХ сотворил. http://www.motoizh.ru/index.php/component/content/article?id=656
А с ФУОЗ в то же самое время Саруман с оппозита занимался вполне удачно. Исходную тему не нашел, но нашел в ВК страницу вроде оно. http://vk.com/fuoz_saruman
Извиняюсь за некропостинг, но крайне интересна сия тема.
Топик стартер реализовал свой проект ? Как себя показало ? Тут высказыют мнение, что ардуино нано не справиться вот видео, где человек проводит нагрузочное тестирование (мутит я так понял приблуду, чтобы отказаться от трамблера, подробностей не знаю)
У меня идея реализовать ФУОЗ с регулровкой на переменном резистрое угла УОЗ, все в общем-то как у автора, но сделать я хочу это для автомобиля (для использования с ГБО, там медленнее горит, чем бензин). Алгоритм я вижу такой берем сигнал с датчика Холла, вносим временную задержку до 900 оборотов 0 градусов (заводится на бензине), до 2000 об, например 3 градуса, 2000-3500 5 градусов, ну и 3500-6000 7 градусов. Цифры пока условны. Далее подаем откорректированный импульс на штатный ЭБУ машины. Ключевой является возможность изменять градус переменным резистором. Какие изменения нужно внести в код, чтобы получить данный функционал ? Может быть за год кто-то реализовал подобное ?
Далее подаем откорректированный импульс на штатный ЭБУ машины. Ключевой является возможность изменять градус переменным резистором. Какие изменения нужно внести в код, чтобы получить данный функционал ? Может быть за год кто-то реализовал подобное ?
Топик стартер проект не реализовал ещё :( И фиг знает когда возьмется.
Хотя блок и был собран, но испытания на "стенде" пока не удались. Свеча то молчала, то строчила как пулемёт (причём в обоих режимах - с мозгами и без). Как мне подсказал сенсей, такой результат мог быть из-за сдохшего аккумулятора (я тогда зажигание забыл выключить на пару дней). Новый аккум на зиму покупать я тогда, понятно, не стал.
Какие изменения нужно внести? Если смотреть на моем коде, то заменить нутро функции advTime(). С переменным резистором... ну, AnalogRead() c нужной ноги и в том же advTime делаем что хотим.
Прикольно что кто-то на видео эксперименты с похожим устройством снял, только длинновато оно и характер как у "заметки для личных целей", тяжело улавливать инфу. Что утверждается и на какой минуте смотреть?
В Си вообще степени нет. Ну ардуиновскую функцию pow можно применить, но она универсальная, про вещественные. Свою написать можно.
спасибо ! :) лучеееееее 7 нулей дописать.... :)
> В Си вообще степени нет. Ну ардуиновскую функцию pow можно применить
" Не путай миня, Алиса ! " - как это в языке нет степени ?!!!!!!!!!!!!!!!
Математического оператора нет, а в форме функции - на то это и язык программирования.
спасибо ! :) лучеееееее 7 нулей дописать.... :)
Не понял. То есть сначала речь шла об экономии ресурсов, о производительности и таймерах, а теперь заставляем контроллер вычислять заранее известную константу (коли выбор стоял - так или эдак)? ;)
Кстати о степенях, компилятор вроде должен понимать какую-то форму этого - http://ru.wikipedia.org/wiki/Экспоненциальная_запись
Есть микросхема-процессор управления катушкой зажигания. В оригинале это L497 от Томсона, или её аналог 1055хп1, отечественная. В Январях 5.1, которые ставились на Жигули до 2005 года и в Бошах1.5.4 применялась, только не в самом контролере, а в модуле зажигания стояла. L497 выполняет несколько функций, ограничивает ток через катушку, ограничивает время, когда транзистор в линейном режиме находиться, то есть открывает ключ позже, чем приходит команда на его открытие. Отключает катушку зажигания, если сигнал не меняется более 2 секунд... То есть нормальный качественный дрАйвер для управления катушкой зажигания.
Настоятельно рекомендую! Можно взять в виде готового коммутатора, но их надо вскрывать и смотреть, что там стоит, подделка или оригинал. Из отечественного самыми добротными были коммутаторы МЗАТЭ-2, Московский завод автотракторного электрооборудования. Там на керамической плате гибридная схема, резисторы на керамику напылённые...
Олег_Б, это здорово, правда я не совсем понял, причем тут угол опережения.
-
Реально в итоге перешёл к измерению длины отрицательного импульса, правда, ленивым способом. Для вычисления времени опережения состряпал функцию. Действительно кусочно-линейная функция получилась. if-ы идут с высоких оборотов, так как им критично быстрее.
Графики (правда от оборотов, а не от полупериода - отразить и растянуть).
расчёты - это запоздание....
я пошёл по пути привлечения железа, а не скетча
T1 - в режиме захвата, предделитель = 64 , по нарастающему фронту. значение счетчика это время оборота, т.е. - обороты.
Т2 - отсчёт задержки фронта в зависимости от оборотов ( из таблицы )
вот таблица :
верхняя строка - номер выборки из таблицы, массива УОЗ ( вычисляется делением захваченного значения Т1 на 500 )
строка n - количество тиков посчитанных Т1 за оборот
строка t - время одного оборота
строка УОЗ - ....... заполнял с графика, пустые клетки - пока в лом считать ( потом, через экспоненту )
осталось пересчитать-определить предделитель Т2 и углы пересчитать в тики Т2
итоговая таблица : ( n / 500 ) ---> ( УОЗ ) - одномерный массив на 51 значение
можно
итоговая таблица : ( n / 250 ) ---> ( УОЗ ) - одномерный массив на 101 значение
итоговая таблица : ( n / 200 ) ---> ( УОЗ ) - одномерный массив на 126 значений
итоговая таблица : ( n / 100 ) ---> ( УОЗ ) - одномерный массив на 251 значение
ваш #56 - это и есть таблица соответсвия, но только на 5 значений И ПОСТОЯННО ВЫСЧИТЫВАЕМАЯ :(
"... Действительно кусочно-линейная функция получилась. ..."
у вас - кусочно-ступенчатая !!!!!! вы не правильно графики нарисовали :(
(/)_0)
Каким макаром она на пять значений, серьёзно? Ничего что прямые наклонены? Ничего что переведеный в угол график ниже достаточно выпукл и ровен? Поосторожнее, ну.
А в коде есть такие штуки, неравенствами называются. Предпологаю, что вы не разглядели знаки "<" и, поторопившись с выводами, решили, что я ошибся.
мой пардон :) заработался, не увидел что после результ= - формула, а не значение :(
Прошу прощения, я думал, что это устройство какое-то практическое применение будет иметь. Если чисто теоретически, то есть если на самом деле управлять какой то катушкой зажигания не надо, то мой пост был лишним.
Угол зажигания зависит от оборотов и от наполнения цилиндра. Чем сильнее открыта дроссельная заслонка, тем больше свежей смеси попадает в цилиндр, смесь горит быстрее и УОЗ (угол опережения зажигания) должен быть позже. В механических трамблёрах есть центробежный регулятор и вакуумный регулятор опережения. Центробежный - это вот то, что тут разрабатывается, а вакуумный как раз корректирует УОЗ в зависимости от нагрузки. Чем больше давление в ресивере перед клапанами, тем больше свежей смеси попадает в цилиндр, и зажигание надо делать позже. По крайней мере хотя бы корректор сделать на переменном резисторе, который тупо сдвигал бы полученный УОЗ на всём диапазоне +/- 10...20 градусов.
Прошу прощения, я думал, что это устройство какое-то практическое применение будет иметь. Если чисто теоретически, то есть если на самом деле управлять какой то катушкой зажигания не надо, то мой пост был лишним.
Задача моего устройства, например, как первом посте описано - это имитировать импульсы с датчика Холла, но со сдвигом. Они пойдут на коммутатор, в котором, я так понял, уже и стоит ваш L497 или как его там. То есть готовое устройство.
Угол зажигания зависит от оборотов и от наполнения цилиндра. Чем сильнее открыта дроссельная заслонка, тем больше свежей смеси попадает в цилиндр, смесь горит быстрее и УОЗ (угол опережения зажигания) должен быть позже. В механических трамблёрах есть центробежный регулятор и вакуумный регулятор опережения. Центробежный - это вот то, что тут разрабатывается, а вакуумный как раз корректирует УОЗ в зависимости от нагрузки. Чем больше давление в ресивере перед клапанами, тем больше свежей смеси попадает в цилиндр, и зажигание надо делать позже. По крайней мере хотя бы корректор сделать на переменном резисторе, который тупо сдвигал бы полученный УОЗ на всём диапазоне +/- 10...20 градусов.
есть две зависимости УОЗ - от оборотов и от нагрузки
скорость объёмного сгорания - СОС ( названия мои, для краткости ) - одинакова на всех оборотах, но на 600 при УОЗ она оптимальна ( давление газов достигнет макс значения когда поршень пройдёт ВМТ градусов на 5....10 и газы будут толкать поршень вниз ). при оборотах 3000, например, давление газов достигнет макс значения когда поршень пройдёт ВМТ градусов на 40....90 и газы будут расширяться за поршнем просто так, чуть-чуть нажимая на него ( позднее зажигание ). способ устранить это - РАНЬШЕ поджигать смесь, ибо скорость поршня велика... для этого служил раньше центробежный регулятор УОЗ - больше скорость поршня - раньше поджигаем... Вот этим и занимается топикстартер - созданием ЭЛЕКТРОННОГО регулятора УОЗ в зависимости от оборотов....
мощность.... её характеризует разрежение во впускном коллекторе движка.... чем больше газу, тем большее разрежение во впускном тракте двигателя, тем больший УОЗ надо выставить, чтобы обеспечить наискорейшее увеличение оборотов движка ( обороты пропорциональны отдаваемой мощности )
применение :
0 - ни одна регулировка не применяется
1 - УОЗ от оборотов
2 - УОЗ от вакуумного датчика ( мехиническая связь )
3 - УОЗ от оборотов И УОЗ от вакуумного датчика ( самое оптимальное )
....вот ТС и мутит здесь тему #1 ( хотя, если пришпандорить к моцику датчик искрообразования от "ОКИ" с вакуумным опереженим УОЗ ( от впускного тракта ) - будет тема #3 :) если шишка справа на движке не будет мозолить глаза )
так что юзание L497 отпадает.... будет использоваться штатный коммутатор....
за схему "L497 от Томсона" - спасибо ! есть их 8 штук аж - пойду сломаю.....
не нано горячицца ! "......То есть мы тут неприменяемую фигню делаем? ;) .....) а то получится как здесЯ - http://arduino.ru/forum/otvlechennye-temy/zlye-lyudi
"..........тем больше свежей смеси попадает в цилиндр, смесь горит быстрее и УОЗ........"
жиклёры на то и стоят, чтобы смесь всегда была ОПТИМАЛЬНАЯ, поэтому и скорость её сгорания - постоянная величина !
...и уж потом придумали датчики кислорода, регулировать качество смеси
это не рабочий код, так.... подготовка....
пока - 908 байт :) и тинька потяне такое..... :)
есть две зависимости УОЗ - от оборотов и от нагрузки
скорость объёмного сгорания - СОС ( названия мои, для краткости ) - одинакова на всех оборотах,
......
мощность.... её характеризует разрежение во впускном коллекторе движка.... чем больше газу, тем большее разрежение во впускном тракте двигателя, тем больший УОЗ надо выставить, чтобы обеспечить наискорейшее увеличение оборотов движка ( обороты пропорциональны отдаваемой мощности )
Скорость сгорания смеси зависит от наполнения цилиндра, то есть от "нагрузки". Чем больше свежей смеси попадает в цилиндр, тем меньше остаётся в нём отработанных с прошлого цикла газов, и смесь горит быстрее. Кроме того при одном и том же ходе поршня и одной и той же степени сжатия из-за различного разряжения во ресивере в цилиндр попадает разное количество смеси.
Например, дроссель закрыт, в ресивере разряжение в пол-атмосферы, в цилиндр что-то всасывается, сжимается, причём будет всасываться и то, что только что улетело в колектор, во время перекрытия клапанов, и в то же время при полностью открытом дросселе в ресивере почти атмосферное давление, остатки сгоревших газов лучше выталкиваются в выхлопную трубу, и после зжатия в цилиндре молекулы топлива и окислителя плотнее расположены друг другу. В таком виде смесь сгорает быстрее, чем при закрытом дросселе, разряжении в ресивере и меньшем наполнении цилиндра.
Вот к примеру таблицы УОЗ из контролера Январь5.1. Цикловое наполнение - это количество смеси, попадающее в цилиндр в одном такте. Собственно все автомобильные компьютеры в мире в первую очередь вычисляют, сколько именно смеси попало в цилиндр, или попадёт, и вот на эту порцию смеси рассчитывают количество топлива и какое опережение зажигания должно быть.
***********
Так, таблицу чуть позже, не смог вставить картинку, её надо куда-то разместить оказывается...
Но в принципе, на сайте Алмисофт.ру есть фриварный СТР, можно скачать прошивку для того же Января5.1 и посмотреть в нём.
Картинки надо где-то положить, а потом тут ссылка?
ChipTuningPRO 2.15 freeware Качаем программу
http://chiptuner.ru/download/serecu/j5v13i02.zip Качаем прошивку для Января5.1.1
Запускаем в программе СТР.ехе и открываем файл j5v13i02, который уже разархивировали.
В программе жмём кнопку "Настроить", в выпавшем меню - "Зажигание" - в выпавшем меню - "УОЗ какой-нибудь"
На получившемся графике внизу убираем галочку "все", и движком меняем наполнение цилиндра, то есть расход воздуха.
Наблюдаем зависимость Угла Опережения Зажигания от оборотов при различной нагрузке на двигатель. В данной прошивке используются только "УОЗ для мощностного" и "УОЗ для экономичного режима без ДК", и это одна из самых удачных заводских прошивок, то есть и топливо, и УОЗ там очень хорошо сделаны. Двигатель ВАЗ, 1.5 литра, впрыск одновременный, но собственно интересует пример реализации УОЗ.
"..........тем больше свежей смеси попадает в цилиндр, смесь горит быстрее и УОЗ........"
жиклёры на то и стоят, чтобы смесь всегда была ОПТИМАЛЬНАЯ, поэтому и скорость её сгорания - постоянная величина !
...и уж потом придумали датчики кислорода, регулировать качество смеси
Да, ошибка здесь. Жиклёры, датчики кислорода, это для того, чтобы на 14.7 литра свежего воздуха влить 1 литр чистого бензина. И примерно такая же смесь плюс минус содержится в ресивере. Но в самом цилиндре свежая смесь смешивается с остатками отработанных газов, особенно на малых нагрузках, и в зависимости от нагрузки на двигатель, а именно разряжения в ресивере, после закрытия клапанов и сжатия смеси смесь может иметь различную плотность. Причём чем меньше плотность смеси, тем больше в ней остатков продуктов сгорания от предидущего цикла, и такая разбавленная неплотная смесь горит медленнее, чем сильнее сжатая чистая смесь бензина и воздуха. То есть при большой нагрузке давление в ресивере максимальное и в цилиндр попадает много свежей смеси при большем давлении, чем при малой нагрузке.
Параметр, меняющий УОЗ из-за нагрузки, как раз и учитывает скорость горения смеси, чтобы получить максимальный пик давления в цилиндре сразу после прохождения поршнем верхней мёртвой точки
Я диагностикой и ремонтом инжекторных двигателей занимаюсь с 1992 года, разве что в Си полный дурак. Но на ассемблере для 8051 несколько программ и устройств сделал, вот типа такого:
http://chiptuner.ru/content/pub_03/
Но в принципе, на сайте Алмисофт.ру есть фриварный СТР, можно скачать прошивку для того же Января5.1 и посмотреть в нём.
моя не против ВСЕХ поправок.... вы спец по ДВС.... моя пока только хочет создать систему, которая будет работать на ардуине... через таблицу !!!!!! как моя и говорила раньшеееее - настройка системы будет заключаться в СОСТАВЛЕНИИ ТАБЛИЦЫ ! изменение этой таблицы - есть ЧИПТЮНИНГ.... а код программы менять не нужно...
моя не знает, что есть Января5.1 :( и не хочЮ знать ( нет времени )
"...........Я диагностикой и ремонтом инжекторных двигателей......."
щас речь идёт про моцоцикл.... читайте выше :)
Бензин в цилиндре на всех ДВС горит по одним и тем же законам.
Ещё в начале 90-х видел у кого-то на мотоцикле тумблер, УОЗ раньше-позже. На разгон, когда обороты низкие, ставит позже, от светофора, и разогнался, обороты выше - переключил на более ранний угол. Но, собственно, хотел подсказать, что требуется два параметра, обороты и давление в ресивере (нагрузка), можно сделать только по оборотам (ваше дело), а можно сразу закладывать возможность расширения, и после отладки УОЗ по оборотам добавлять коррекцию по нагрузке.
Олег_Б, как говорится: "Лучшее - враг хорошего". К совершенству-то можно бесконечно стремиться, только игра не стоит свеч. Дефолтный тупой прерыватель заменить и ладно. :) А так вы конечно правы, наверное.
Вот какая мысль промелькнула - надо занизить характеристику, потому что БСЗ итак на некоторый угол ставится (16 градусов например), и это надо будет компенсировать.
Железки кажись сделал, теперь надо некоторый минимум корпуса, чтобы можно было проверять всё это.
Всё в стиле первого блина.
Интересная реакция - если оставить модулятор в датчике Холла, то искрой будет бить постоянно, как из пулемёта. Протеус меня к такому не готовил. :)
давненько вас не было здесЯ.....
Протеус - отстой, не всё показывает - осциллограф лучшеееееее
> вот какая мысль промелькнула - надо занизить характеристику, потому что БСЗ итак на некоторый угол ставится (16 градусов например), и это надо будет компенсировать.
поточнее вопрос задайте
Реальный датчик Холла ставится на самое раннее зажигание, а контролер просто отрабатывает задержку. Так результат точнее.
поточнее вопрос задайте
Реальный датчик Холла ставится на самое раннее зажигание, а контролер просто отрабатывает задержку. Так результат точнее.
Пока что обвес такой получается (если не показывать стабилизатор и тумблер). Резисторы по 1.5К, конд 10нФ, транзистор 2SC2274F.
Реальный датчик Холла ставится на самое раннее зажигание, а контролер просто отрабатывает задержку. Так результат точнее.
реальный датчик нуно ставить на УОЗ 2....3 градуса ( чтобы при выходе из строя устройства продолжать ездить )
а вот задержку нужно формировать от ВМТ ПРЕДЫДУЩЕГО оборота ! задержка на 357...358 градусов даст опережение на - выше....
задержка на 325 градусов даст опережение 35 градусов, а точность нисколько не пострадает....
R3 - лучше 10 килоом ( зачем ДХ мучить током таким ) и зачем сигнал подан на ДВА пина сразу ?
а как индикатор реализован ?
скетч итоговый - разместите ? :) или он секретный ? :)
Всё в стиле первого блина.
Интересная реакция - если оставить модулятор в датчике Холла, то искрой будет бить постоянно, как из пулемёта. Протеус меня к такому не готовил. :)
значит в коде недосмотрели - если обороты менее 500, например - искру душим
На два пина - на прерывания по обоим фронтам. Возможно тупо, может можно просто по CHANGE и ногу прочесть, но так понятнее, и код проще. :)
Про скетч и индикатор чуть позже докину.
На два пина - на прерывания по обоим фронтам. Возможно тупо, может можно просто по CHANGE и ногу прочесть, но так понятнее, и код проще. :)
Про скетч и индикатор чуть позже докину.
надо код смотреть.... по CHANGE невозможно определить ВМТ или НМТ.... ждём-ссссс....
Схема индикатора обычная. Так как индикатор двузначный, сэкономил ногу и выбор сделал по одному сигналу, а VT1 - инвертор (КТ312Б). VT2 и VT3 другие, с предельным Iк 150 мА. Резисторы по 270 и 330 Ом.
(Пока код от комментариев и дебажных строк чистил, мог что-нить удалить случайно)
нано ? под ето ? экономить ноги ? ЗАЧЕМ ?
Как зачем, на межплатное соединение. Чтоб один лишний мгтф не припаивать :D
Комбинация вопросов выглядит как атака. Всё равно прототип, чо кипятиться?
да НЕТ...... я учусь в чём-то.... хотел вникнуть....
всегда есть три основных персонажа - генератор идей, критик и исполнитель :)
...первым моя чуть раньше был, щас пока вторым действую....
ближе к теме - вы отжали одну ногу ( транзистором ) , итого 7 линий - данные, VCC, GND и управление ( через инвертор ) = 10 линий
а почему бы тогда не поставить сдвиговый резистор ?
...такт, данные, VCC, GND = 4 ( против 10 )
от дуни к индикатору - 4 провода.... а уже там на своей плате от регистра - 7 линий данные , 1 линия управление через тот же инвертор транзисторный....
про прототип понятно..... ещё - тахометр из #16 !!!!!! посмотрите на К155ИД11 - 4 корпуса и 32 светодиода - тахометр 0.......6400 rpm ( каждый светик - 200 rpm ).... красиво...
а почему бы тогда не поставить сдвиговый резистор ?
ещё - тахометр из #16 !!!!!! посмотрите на К155ИД11 - 4 корпуса и 32 светодиода - тахометр 0.......6400 rpm ( каждый светик - 200 rpm ).... красиво...
код очень сложно читаемый..... комментов мало.... И на мой взгляд - избыточен....
значит в коде недосмотрели - если обороты менее 500, например - искру душим
R3 - лучше 10 килоом ( зачем ДХ мучить током таким )
атаки и кипячения не нужны ни вам, ни мине ! :)
Датчик Холла на Планете это плохо. Генератор то с обмоткой возбуждения постоянкой, то есть электромагнит. Много-много лет томя я заморачивался на эту тему, даже годный оптический датчик в замену ДХ сотворил. http://www.motoizh.ru/index.php/component/content/article?id=656
А с ФУОЗ в то же самое время Саруман с оппозита занимался вполне удачно. Исходную тему не нашел, но нашел в ВК страницу вроде оно. http://vk.com/fuoz_saruman
... а потом я пересел на японца.
Извиняюсь за некропостинг, но крайне интересна сия тема.
Топик стартер реализовал свой проект ? Как себя показало ? Тут высказыют мнение, что ардуино нано не справиться вот видео, где человек проводит нагрузочное тестирование (мутит я так понял приблуду, чтобы отказаться от трамблера, подробностей не знаю)
https://www.youtube.com/watch?v=QQTXMVakvS4
У меня идея реализовать ФУОЗ с регулровкой на переменном резистрое угла УОЗ, все в общем-то как у автора, но сделать я хочу это для автомобиля (для использования с ГБО, там медленнее горит, чем бензин). Алгоритм я вижу такой берем сигнал с датчика Холла, вносим временную задержку до 900 оборотов 0 градусов (заводится на бензине), до 2000 об, например 3 градуса, 2000-3500 5 градусов, ну и 3500-6000 7 градусов. Цифры пока условны. Далее подаем откорректированный импульс на штатный ЭБУ машины. Ключевой является возможность изменять градус переменным резистором. Какие изменения нужно внести в код, чтобы получить данный функционал ? Может быть за год кто-то реализовал подобное ?
Далее подаем откорректированный импульс на штатный ЭБУ машины. Ключевой является возможность изменять градус переменным резистором. Какие изменения нужно внести в код, чтобы получить данный функционал ? Может быть за год кто-то реализовал подобное ?
Топик стартер проект не реализовал ещё :( И фиг знает когда возьмется.
Хотя блок и был собран, но испытания на "стенде" пока не удались. Свеча то молчала, то строчила как пулемёт (причём в обоих режимах - с мозгами и без). Как мне подсказал сенсей, такой результат мог быть из-за сдохшего аккумулятора (я тогда зажигание забыл выключить на пару дней). Новый аккум на зиму покупать я тогда, понятно, не стал.
Какие изменения нужно внести? Если смотреть на моем коде, то заменить нутро функции advTime(). С переменным резистором... ну, AnalogRead() c нужной ноги и в том же advTime делаем что хотим.
Прикольно что кто-то на видео эксперименты с похожим устройством снял, только длинновато оно и характер как у "заметки для личных целей", тяжело улавливать инфу. Что утверждается и на какой минуте смотреть?
С третьей минуты смотрите. Задержка 20микросекунд, при 8000 об/мин это около 1 градуса.