Адаптация Микас-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 лога запихал в один, т.к. я много не записывал и цель была просто примерные кривые ЦН и расхода воздуха(крутящего момента и мощности
П.С. Не желаешь продать РВ 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) писал:
Э.. э... поиду тихонько, посижу в углу и пожую радугу, я лишний на этом празднике жизни.
Заряжу пистолет
ЖЖОШ

Вход
Регистрация
Помощь


Цитата


