Адаптация Микас-7.1 на V8 О создании переходника который позволит управлять виэйтом
#42
Отправлено 01 Август 2009 - 12:12
Форсунки цепляются парами по 2 на канал? впрыск через 180 грасдусов? ну это элементарно но есть одно но, в четырех цилиндрах смесь будет немного беднее....
Или там впрыск сделали правильно 90-270-90-270 ???
Сообщение отредактировал nikll: 01 Август 2009 - 12:14
#43
Отправлено 18 Август 2009 - 01:10
Теперь осталось дело за малым, мне нужна помощь в схемотехнике для реализации тествого прототипа, и будет всем обладателям виэйтов счастье .
// автор: nikll@rambler.ru // программа написанна на microC (http://www.mikroe.com/), тестировал на симуляторе PIC Simulator IDE (www.oshonsoft.com) // // на PORTA целпяем форсунки (с 1 по 4 контакты) и катушки (с 5 по 8 либо 5 и 6 в зависимости от выводов контроллера) // с PORTB (1-4) идут сигналы на дублирующщие через 90градусов форсунки, и (5-8 или 4-6) сигналы на дублирующщие через 90градусов катушки // // необходимо сделать обвязку на микросхему и чертеж печатной платы для изготовления опытного образца. unsigned long OnTimeFors = 0, // время между открытиями форсунок LastOnTimeFors = 0, // время до открытия дублирующщей форсунки OffTimeFors = 0, // время между закрытиями форсунок LastOffTimeFors = 0, // время до закрытия дублирующщей форсунки OnTimeIng = 0, // время между открытиями форсунок LastOnTimeIng = 0, // время до открытия дублирующщей форсунки OffTimeIng = 0, // время между закрытиями форсунок LastOffTimeIng = 0; // время до закрытия дублирующщей форсунки char lastfors=0, // предыдущщее состояние форсунок diff, // изменение в состоянии форсунок onfors, // включившиися форсунки lastonfors=0, // предыдущщие включившиися форсунки offors, // отключившиися форсунки lastoffors=0, // предыдущщие отключившиися форсунки outfors=0, // состояние дублирующщих форсунок oning, // включившиися катушки lastoning=0, // предыдущщие включившиися катушки offing, // отключившиися катушки lastoffing=0; // предыдущщие отключившиися катушки void interrupt() { if (INTCON.T0IF) { TMR0 = 160; diff = PORTA ^ lastfors; // получаем изменение в состоянии форсунок и катушек onfors = diff & PORTA & 0x0F; // получаем список включившихся форсунок offors = diff & lastfors & 0x0F; // получаем список отключившихся форсунок oning = diff & PORTA & 0xF0; // получаем список включившихся катушек offing = diff & lastfors & 0xF0; // получаем список отключившихся катушек if (onfors>0) { // если есть открывшиеся форсунки то lastonfors = onfors; LastOnTimeFors = OnTimeFors; // сохраняем время между открытиями OnTimeFors = 0; // и обнуляем счетчик. } else OnTimeFors++; // иначе увелчиваем счетчик if (oning>0) { // если есть сигнал на катушки то lastoning = oning; LastOnTimeIng = OnTimeIng; // сохраняем время между сигналами OnTimeIng = 0; // и обнуляем счетчик. } else OnTimeIng++; // иначе увелчиваем счетчик if (LastOnTimeFors>1) { // если время еще не вышло то LastOnTimeFors--; // отматываем таймер с двойной скоростью чтобы получить половиную задержку LastOnTimeFors--; } else outfors = outfors | lastonfors; if (LastOnTimeIng>1) { // если время еще не вышло то LastOnTimeIng--; // отматываем таймер с двойной скоростью чтобы получить половиную задержку LastOnTimeIng--; } else outfors = outfors | lastoning; if (offors>0) { // если есть закрывшиеся форсунки то lastoffors = offors; LastOffTimeFors = OffTimeFors; // сохраняем время между закрытиями OffTimeFors = 0; // и обнуляем счетчик. } else OffTimeFors++; // иначе увелчиваем счетчик if (offing>0) { // если нет сигнала на катушки то lastoffing = offing; LastOffTimeIng = OffTimeIng; // сохраняем время между пропаданиями сигнала OffTimeIng = 0; // и обнуляем счетчик. } else OffTimeIng++; // иначе увелчиваем счетчик if (LastOffTimeFors>1) { // если время еще не вышло то LastOffTimeFors--; // отматываем таймер с двойной скоростью чтобы получить половиную задержку LastOffTimeFors--; } else { if (lastoffors.F0) outfors.F0=0; if (lastoffors.F1) outfors.F1=0; if (lastoffors.F2) outfors.F2=0; if (lastoffors.F3) outfors.F3=0; } if (LastOffTimeIng>1) { // если время еще не вышло то LastOffTimeIng--; // отматываем таймер с двойной скоростью чтобы получить половиную задержку LastOffTimeIng--; } else { if (lastoffing.F4) outfors.F4=0; if (lastoffing.F5) outfors.F5=0; if (lastoffing.F6) outfors.F6=0; if (lastoffing.F7) outfors.F7=0; } //////////////////////////////////////////////////////////////////// lastfors = PORTA; // сохраняем текущщее состояние PORTB = outfors; INTCON = 0x20; // Set T0IE, clear T0IF } } void main() { ANSEL = 0; // Configure AN pins as digital I/O ANSELH = 0; OPTION_REG = 0x80; // Assign prescaler to TMR0 PORTA = 0x00; // init PORTA TRISA = 0xFF; // configure PORTA pins as input PORTB = 0x00; // set PORTB to 0 TRISB = 0x00; // designate PORTB pins as output PORTC = 0x00; // set PORTC to 0 TRISC = 0x00; // designate PORTC pins as output PORTD = 0x00; // set PORTD to 0 TRISD = 0x00; // designate PORTD pins as output TMR0 = 0xFE; // сразу уходим в прерывание INTCON = 0xA0; // Enable TMRO interrupt }
#45
Отправлено 12 Октябрь 2009 - 16:30
#46
Отправлено 12 Октябрь 2009 - 17:47
П.С. А по степень сжария и РВ - это да. Проверено на моём 21 2,9л движке.Ст сж - 9.0 , После 4200 движок умирает конкретно.Рв нужен хороший.
#47
Отправлено 12 Октябрь 2009 - 18:29
С распредвалом надо не переборщить, я эксперементировал с 24д, поставил слижком широкий, в итоге получилось жужжалка хуже тазика, хотя и бегала хорошо но по городу жрала как танк и на низах нетянуля вообще, из за особенностей плавающщих гильз тяжелых шатуов и поршней, ну нижнего распредвала с толкателями и коромыслами эта беда после 6000-6500 тухла, а просыпаласть тока к 4000об. Тут надо скорее сдвинуть макс момент на 3500, тогда будет хорошая тяга от 2000 и до 5000 об. выше эти движки крутить не стоит, т.к. нелюбят обороты и быстро дохнут.
Из за всех этих особенностей конструкции уходящщей в 50тые годы он скорее переварит наддув в 1,5бара избытка чем обороты в 8000prm на холостом ходу.
#48
Отправлено 13 Октябрь 2009 - 18:40
Вот небольшой лог, судя по цикловому наполнению - крутящий момент вроде не собирается падать при 4300.
Прикрепленные файлы
-
_____1_____21.zip (20,55К)
Количество загрузок:: 97
#49
Отправлено 13 Октябрь 2009 - 19:39
Я поставил 45тый и пожелел, на эти движки без увилечения обьема больше 25того ставить не стоит.
#50
Отправлено 13 Октябрь 2009 - 19:56
Блок умз-451
Поршни 100мм - 2,9 литра
Инжектор на базе микас7, ресивер/коллектор от 4213, штаны, облегчённые толкатели и штанги.
Степень сжатия 9 , доработана камера сгорания (около тарелок клапанов удалён лишний металл)
Точёные каналы ГБЦ, Клапана из стока - более тонкая ножка и Т-образная форма
Облегчённые немного шатуны(сточил балансировочные грузы с головок), поршневая ПОН, РВ от 402.
Пока (в целях эксперимента) стоит полностью прямая труба от штанов до багажника
Лог снимал d-tool. Неровный - т.к. там 2 лога запихал в один, т.к. я много не записывал и цель была просто примерные кривые ЦН и расхода воздуха(крутящего момента и мощности ) , и некоторые строки убрал - ХХ, ПХХ. Был бы нормальный лог, смотрел бы в ecuEdit и не парился))
П.С. Не желаешь продать РВ 45 ?
Сообщение отредактировал maikL: 13 Октябрь 2009 - 20:01
#51
Отправлено 14 Октябрь 2009 - 00:00
с 402м валом на 2.9л такое наполнение на верхах???? неверю, чтото у тя с логгером нетак. поидее на таком рв и с таким обьемом он вообще трактором стать должен, тобиш макс мощность на 3500 и макс наполнение на 2000-2500. Хотя нормальный впуск-выпуск несколько выпровят ситуацию, но с теми графиками которые ты показал оно всеравно никак не вяжетсо. ну не может он выдавать с 402м валом бцн в 600-650 на оборотах в 4000-4200, на такое надо либо распред широкий либо движок 406й .
#52
Отправлено 14 Октябрь 2009 - 08:17
На выходных попишу ещё логи, другой программой попробую, посмотрим.. раскручу больше 4500, посмотрю что там с ЦН
ОКБ нормальные валы? т.е. не просто от балды вазы изменённые и подъём увеличен? Какой вал взять, чтоб у меня макс. момент был на 2700-3200 об ?
#56
Отправлено 19 Октябрь 2009 - 10:52
машина сама не ломается - её ломает водятел ... © Сингуринди Э.Г.
Сложное - и дурак придумает ... © Михаил Кошкин (автор легендарного танка Т-34)
No Fate ... But What We Make - Нет судьбы ... кроме той, что мы творим сами ...
#57
Отправлено 19 Октябрь 2009 - 11:53
Вот лог..
П,С, Сегодня смотрел 53 движки в универе, есть 2 типа коллектора - одноплоскостной, и 2-х плоскостной. Какой лучше и проще в плане постановки форсунок?Мне показалось 1 плоскостной. Или лучше сразу нарисовать "правильный" инжекторный коллектор с ресивером ?Можно сделать сварной коллектор из труб, а не как заводскую отливку. Напомню, тема именно "модернизация" 53 ...
Прикрепленные файлы
-
21_.zip (22,17К)
Количество загрузок:: 78
Сообщение отредактировал maikL: 19 Октябрь 2009 - 12:01
#58
Отправлено 21 Декабрь 2009 - 08:02
// автор: nikll@rambler.ru // программа написанна на microC (http://www.mikroe.com/), тестировал на симуляторе PIC Simulator IDE (www.oshonsoft.com) // цилиндры пронумерованны ПО ПОРЯДКУ РАБОТЫ а не по их расположению в двигателе // на PORTA целпяем форсунки (с 1 по 4 контакты) и катушки (с 5 по 8 либо 5 и 6 в зависимости от выводов контроллера) // с PORTB (1-4) идут сигналы на дублирующщие форсунки (цилиндры 2 3 5 6, цилиндры 1 и 3 повторять нам незачем), и (5-8 или 5-6) сигналы на дублирующщие катушки (аналогично цилиндрам) // иначе говоря получаем следующщий расклад: // вход - 4 форсунки по порядку работы цилиндров + 4 или 2 катушки по порядку работы цилиндров. // выход - на 2 3 5 6 цилиднры форсунки и на 2 3 5 6 цилиднры катушки (цилиндрам 1 и 4 6ц мотора соответсвуют цилиндрам 1 и 3 4ц мотора) // // необходимо сделать обвязку на микросхему и чертеж печатной платы для изготовления опытного образца. unsigned long OnTimeFors = 0, // время между открытиями форсунок LastOnTimeFors1 = 0, // время до открытия дублирующщей форсунки (длинное 2/3, на 2 и 5 форсунки) LastOnTimeFors2 = 0, // время до открытия дублирующщей форсунки (короткое 1/3, на 3 и 6 форсунки) OffTimeFors = 0, // время между закрытиями форсунок LastOffTimeFors = 0, // время до закрытия дублирующщей форсунки (длинное 2/3, на 2 и 5 форсунки) LastOffTimeFors2 = 0, // время до закрытия дублирующщей форсунки (короткое 1/3, на 3 и 6 форсунки) OnTimeIng = 0, // время между открытиями катушек LastOnTimeIng1 = 0, // время до открытия дублирующщей катушки (длинное 2/3, на 2 и 5 катушки) LastOnTimeIng2 = 0, // время до открытия дублирующщей катушки (короткое 1/3, на 3 и 6 катушки) OffTimeIng = 0, // время между закрытиями катушек LastOffTimeIng1 = 0, // время до закрытия дублирующщей катушки (длинное 2/3, на 2 и 5 катушки) LastOffTimeIng2 = 0; // время до закрытия дублирующщей катушки (короткое 1/3, на 3 и 6 катушки) char lastfors=0, // предыдущщее состояние форсунок diff, // изменение в состоянии форсунок onfors, // включившиися форсунки lastonfors=0, // предыдущщие включившиися форсунки offors, // отключившиися форсунки lastoffors=0, // предыдущщие отключившиися форсунки outfors=0, // состояние дублирующщих форсунок oning, // включившиися катушки lastoning=0, // предыдущщие включившиися катушки offing, // отключившиися катушки lastoffing=0; // предыдущщие отключившиися катушки void interrupt() { if (INTCON.T0IF) { TMR0 = 96; diff = PORTA ^ lastfors; // получаем изменение в состоянии форсунок и катушек onfors = diff & PORTA & 0x0F; // получаем список включившихся форсунок offors = diff & lastfors & 0x0F; // получаем список отключившихся форсунок oning = diff & PORTA & 0xF0; // получаем список включившихся катушек offing = diff & lastfors & 0xF0; // получаем список отключившихся катушек if (onfors>0) { // если есть открывшиеся форсунки то lastonfors = onfors; if (onfors.F0 || onfors.F2) LastOnTimeFors1 = OnTimeFors; // сохраняем время между открытиями if (onfors.F1 || onfors.F3) LastOnTimeFors2 = OnTimeFors; // сохраняем время между открытиями OnTimeFors = 0; // и обнуляем счетчик. } else { OnTimeFors++; // иначе увелчиваем счетчик OnTimeFors++; } if (oning>0) { // если есть сигнал на катушки то lastoning = oning; if (oning.F4 || oning.F6) LastOnTimeIng1 = OnTimeIng; // сохраняем время между открытиями if (oning.F5 || oning.F7) LastOnTimeIng2 = OnTimeIng; // сохраняем время между открытиями OnTimeIng = 0; // и обнуляем счетчик. } else { OnTimeIng++; // иначе увелчиваем счетчик OnTimeIng++; } if (LastOnTimeFors1>2) { // если время еще не вышло то LastOnTimeFors1 -= 3; // отматываем таймер с тройной скоростью чтобы получить задержку в 2/3 } else { if (lastonfors.F0) outfors.F0=1; if (lastonfors.F2) outfors.F2=1; } if (LastOnTimeIng1>2) { // если время еще не вышло то LastOnTimeIng1 -=3; // отматываем таймер с двойной скоростью чтобы получить половиную задержку } else { if (lastoning.F4) outfors.F4=1; if (lastoning.F6) outfors.F6=1; } if (LastOnTimeFors2>5) { // если время еще не вышло то LastOnTimeFors2 -= 6; // отматываем таймер с тройной скоростью чтобы получить задержку в 2/3 } else { if (lastonfors.F1) outfors.F1=1; if (lastonfors.F3) outfors.F3=1; } if (LastOnTimeIng2>5) { // если время еще не вышло то LastOnTimeIng2 -=6; // отматываем таймер с двойной скоростью чтобы получить половиную задержку } else { if (lastoning.F5) outfors.F5=1; if (lastoning.F7) outfors.F7=1; } if (offors>0) { // если есть закрывшиеся форсунки то lastoffors = offors; if (offors.F0 || offors.F2) LastOffTimeFors1 = OffTimeFors; // сохраняем время между закрытиями if (offors.F1 || offors.F3) LastOffTimeFors2 = OffTimeFors; // сохраняем время между закрытиями OffTimeFors = 0; // и обнуляем счетчик. } else { OffTimeFors++; // иначе увелчиваем счетчик OffTimeFors++; } if (offing>0) { // если есть сигнал на катушки то lastoffing = offing; if (offing.F4 || offing.F6) LastOffTimeIng1 = OffTimeIng; // сохраняем время между открытиями if (offing.F5 || offing.F7) LastOffTimeIng2 = OffTimeIng; // сохраняем время между открытиями OffTimeIng = 0; // и обнуляем счетчик. } else { OffTimeIng++; // иначе увелчиваем счетчик OffTimeIng++; } if (LastOffTimeFors1>2) { // если время еще не вышло то LastOffTimeFors1 -= 3; // отматываем таймер с тройной скоростью чтобы получить задержку в 2/3 } else { if (lastoffors.F0) outfors.F0=0; if (lastoffors.F2) outfors.F2=0; } if (LastOffTimeIng1>2) { // если время еще не вышло то LastOffTimeIng1 -= 3; // отматываем таймер с тройной скоростью чтобы получить задержку в 2/3 } else { if (lastoffing.F4) outfors.F4=0; if (lastoffing.F6) outfors.F6=0; } if (LastOffTimeFors2>5) { // если время еще не вышло то LastOffTimeFors2 -= 6; // отматываем таймер с тройной скоростью чтобы получить задержку в 2/3 } else { if (lastoffors.F1) outfors.F1=0; if (lastoffors.F3) outfors.F3=0; } if (LastOffTimeIng2>5) { // если время еще не вышло то LastOffTimeIng2 -= 6; // отматываем таймер с тройной скоростью чтобы получить задержку в 2/3 } else { if (lastoffing.F5) outfors.F5=0; if (lastoffing.F7) outfors.F7=0; } //////////////////////////////////////////////////////////////////// lastfors = PORTA; // сохраняем текущщее состояние PORTB = outfors; INTCON = 0x20; // Set T0IE, clear T0IF } } void main() { ANSEL = 0; // Configure AN pins as digital I/O ANSELH = 0; OPTION_REG = 0x80; // Assign prescaler to TMR0 PORTA = 0x00; // init PORTA TRISA = 0xFF; // configure PORTA pins as input PORTB = 0x00; // set PORTB to 0 TRISB = 0x00; // designate PORTB pins as output PORTC = 0x00; // set PORTC to 0 TRISC = 0x00; // designate PORTC pins as output PORTD = 0x00; // set PORTD to 0 TRISD = 0x00; // designate PORTD pins as output TMR0 = 0xFE; // сразу уходим в прерывание INTCON = 0xA0; // Enable TMRO interrupt }
nikll сказал:
Исходные данные, прошивка микас 7.1 либо январь 5.1 (возможно январь 7.2 микас 7.2 и микас 7.6 на тех же процах).
Проц SAFC509-LM, Архетиктура intel 8051.
Для модификациии прошивки потребуются:
IDA (Interactive Dissassembler)
Keil uVision (среда - компилятор - ассемблер - отладчик - симулятор)
WinHEX (чтобы из .hex в формате Intel-HEX получить нормальный .bin файл) Радизить идой, архитектура intel 8051, проц С905L.
В иде зайти в Options -> General, открыть вкладку Analysis и выбрать там ассемблер "8051 Cross-Assembler by MetaLink Corporation".
Сохраняем ассемблерный листинг через File -> Produce file -> Create ASM Теперь создаем проэкт в keil, выбираем наш проц, от всего отказываемся, подключаем в проэкт наш ассемблерный листинг, в свойствах проэкта отключаем дебаг и включаем создание .hex файла.
нажимаем F7, комментим все на что keil ругается и компилим.
после того как без ошибок откомпилется открываем .hex файл WinHEX'ом и конвертим его из Intel-HEX в бинарь.Прошивка готова .
Возможно стоит создать отдельную тему по поводу перепрограммированния инжекторов для адаптации к виэйтам. и там обсуждать это, но смысл в этом будет только в том случае если среди форумчан есть еще программисты т.к. самому с собой разговаривать скучно и вредно.
nikll сказал:
угол впрыска|____ключ форсунки____|__цилиндры
FAZA _______|_________1__________|_____1_____
FAZA + 90___|____________________|__________
FAZA + 180__|_________2__________|_____2____
FAZA + 270__|____________________|__________
FAZA + 360__|_________3__________|_____4____
FAZA + 450__|____________________|__________
FAZA + 540__|_________4__________|_____3____
FAZA + 630__|____________________|__________
FAZA + 720__|_________1__________|_____1____
надо сделать:
угол впрыска|____ключ форсунки____|__цилиндры
FAZA _______|_________1__________|_____1,6___
FAZA + 90___|_________4__________|_____5,3___
FAZA + 180__|_________2__________|_____4,7___
FAZA + 270__|_________3__________|_____8,2___
FAZA + 360__|_________1__________|_____1,6___
FAZA + 450__|_________4__________|_____5,3___
FAZA + 540__|_________2__________|_____4,7___
FAZA + 630__|_________3__________|_____8,2___
FAZA + 720__|_________1__________|_____1,6___
на ключ 1-ой форсунки подключить форсунки 1 и 6 цилиндров
на ключ 2-ой форсунки 4,7
на ключ 3-ой форсунки 8,2
на ключ 4-ой форсунки 5,3
Вот именно для 5-3,8-2 цилиндров и надо ввести в программу еще два впрыска
на 90 и на 270 градусах.
Тогда все цилиндры будут наполнятся однинакого два раза за цикл (обычный ПП
получается тока для виэйта).
На 4ц движке в ПП режиме топливоподача на умеренно больших форсунках
настраивается же (на 340cc к примеру) и тут настроится, главное сделать
чтобы форсунки по очереди через 90 градусов открывались, т.к. это совсем не просто ибо все напроч заточенно на 180гр, а нам надо через 90, придется переделать довольно большую часть кода и жестко занятся оптимизацией, в коде микаса есть много косяков которые здорого уменьшают производительность (со слов almi), а т.к. мы удвоим нагрузку на выходные порты и и почти удвоим количество прерываний нам точно придется оптимизировать прошивку иначе упремся в 3500-4000об (если не пожертвовать частью функционала то и вовсе 2500-3000об).
Перенес все это в более подходящщую тему.
#59
Отправлено 21 Декабрь 2009 - 11:20
nikll (21 Декабрь 2009 - 08:02) писал:
многоПеренес все это в более подходящщую тему.
+1
Э.. э... поиду тихонько, посижу в углу и пожую радугу, я лишний на этом празднике жизни.
Заряжу пистолет
#60
Отправлено 21 Декабрь 2009 - 11:26
Frol (21 Декабрь 2009 - 13:20) писал:
Э.. э... поиду тихонько, посижу в углу и пожую радугу, я лишний на этом празднике жизни.
Заряжу пистолет
ЖЖОШ , это обращщение было к программистам а не к маньякам "надо бы вкрутить пару гаек в подвеску, ломом, т.к. кувалда сломалась еще вчела пока карбюратор откручивал" (хотя я и сам так люблю делать ).