Как видно в графике желтый сигнал у нас импулсь подаваемый на катушки форсунки,синий отображает открытие и закрытие форсунки (пьезо датчик срабатывает по шелчку форсунки).Подаваемый сигнал на ардуино 8мс по графику видно что на 2мс позже закрывается форсунка
Чет я не вижу никаких 2мс там. Пьеза начинает регистрировать сильный акустический сигнал сразу по заднему фронту импульса. Стало быть, клапан форсунки пришел в движение.
при резком нажатии на педаль газа обороты с трудом поднимаются заметно что газа не хватает это потверждает и лямбда зонд который показывает бедную смесь.Как видно синий у нас импулсь с блока ECUа желтый с ардуино который подается на форсунки.Если плавно нажимать на педаль газа обороты нормально поднимается без всяких провалов
Протестировал с осцилографом только на один канал подавал импулсь с частотой который показан на фото ардуино успевает обратывать и выдавть точно такой сигнал на выходе,помоему если подаешь одновременно с большой частотой сразу на шесть входов то тогда ардуино не успеет обработать
Протестировал с осцилографом только на один канал подавал импулсь с частотой который показан на фото ардуино успевает обратывать и выдавть точно такой сигнал на выходе,помоему если подаешь одновременно с большой частотой сразу на шесть входов то тогда ардуино не успеет обработать
Ну это можно и так посчитать, максимально возьмем 6000 об/мин, это 600 в секунды. За каждый оборот шесть импульсов, получаем 3600 в сек. 1/3600 =0.00027777 сек, если я не где не ошибся то на обработку одного импульса на максимальных оборотах у вас есть минимум ~277 мксек. Остается определить сколько реально времени выполняется обработка ширины одного импульса.
при резком нажатии на педаль газа обороты с трудом поднимаются заметно что газа не хватает это потверждает и лямбда зонд который показывает бедную смесь.Как видно синий у нас импулсь с блока ECUа желтый с ардуино который подается на форсунки.Если плавно нажимать на педаль газа обороты нормально поднимается без всяких провалов
Тут дело может быть не в дуине а редукторе, при резком нажатии на газ может неуспевать удерживать постоянным диф давление, надо давление перед форсунками мерять.
Вы все время исследуете один канал управления. Для полного понимания картины вам надо измерять все шесть каналов. Импульсы поступают со сдвигом, а не следуют по алгоритму закончился один пришел следующий. Если вы используете програмный метод измерения ширины импульса то так и будет работать ваш блок управления. Здесь нужна аппаратная обработка входящего сигнала и это непосильная задача для mega328. Уверен что данный вопрос можно решить применив процессор с необходимым количеством таймеров в режиме захвата и выдающих на выходе ширину импульса по регистру сравнения. Посмотрите схему на 555 которую вы привели как пример. Там на каждую форсунку работает отдельны одновибратор.
как можно сделать так чтобы каждый канал опрашивать отдельно и выдавать на соответстуюшей выход не используя delay и while чтобы цикл программы останавливался
Алгоритм не отслеживает ситуацию, когда по следующему каналу импульс приходит раньше, чем закончилось формирование длительности по предыдущему. Такая задача изначально не ставилась, а предвосхищать все мыслимые и немыслимые хотелки алгоритм не обучен.
Убирать delayMicroseconds по смыслу близко к соединению прямым проводом, минуя ардуину.
В первую очередь нужно правильно вычислять длительность этой задержки, ориентируюясь, возможно и на обороты. А так у вас ерунда получается. Если формирование "добавки" к импульсу еще не закончилось, а пришел уже импульс по соседнему каналу, то значит вы все еще подаете газ в цилиндр, где давно уже рабочий ход идет во всю.
Здесь нужна аппаратная обработка входящего сигнала и это непосильная задача для mega328. Уверен что данный вопрос можно решить применив процессор с необходимым количеством таймеров в режиме захвата и выдающих на выходе ширину импульса по регистру сравнения. Посмотрите схему на 555 которую вы привели как пример. Там на каждую форсунку работает отдельны одновибратор.
Не буду говорить какой именно это МК, это и так уже все знают. )))
В первую очередь нужно правильно вычислять длительность этой задержки, ориентируюясь, возможно и на обороты.
В первую очередь нужно досконально знать как это всё работает, а не давать кучу глупых советов. Обычно снимают и записывают осциллограммы сигналов на исправно работающем аппарате при разных режимах двигателя, а потом уже, руководствуясь этим, добиваются такой же картинки на своём девайсе. И только потом, когда уже основная цель достигнута можно поварьировать параметрами для достижения наилучшей работы двигателя.
Ориентироваться на обороты не вопрос. Обороты не имеют мгновенно изменяющейся тенденции.
Ну вот понемногу у програмулькиных прходит понимание того, что без набора сигналов датчиков обратной связи сделать полноценно работающее устройство невозможно.
Ну вот понемногу у програмулькиных прходит понимание того, что без набора сигналов датчиков обратной связи сделать полноценно работающее устройство невозможно.
А где вы узрели обратную связь? Пока не будет полного понимания "как оно работает" говорить что-то вообще бесполезно, это сродни гаданию на кофейной гуще.
А где вы узрели обратную связь? Пока не будет полного понимания "как оно работает" говорить что-то вообще бесполезно, это сродни гаданию на кофейной гуще.
В данном проекте зти сигналы не фигурируют, а под капотом их до дури. лямбдо зонды, датчик оборотов, датчик детонаций итд. Помнитсяя гдето в начале этой темы меня освистали с гиганьем и улюлюканьем, профри БЛЯ.....
А где вы узрели обратную связь? Пока не будет полного понимания "как оно работает" говорить что-то вообще бесполезно, это сродни гаданию на кофейной гуще.
В данном проекте зти сигналы не фигурируют, а под капотом их до дури. лямбдо зонды, датчик оборотов, датчик детонаций итд.
Дык, даже если обратная связь существует, доступна ли она в прямом виде? Нужна ли ещё обратная связь на уже существующую обратную связь? Можно ли выделить существующую обратную связь на основе существующего сигнала? Если приходящие импульсы уже являются результатом этой обратной связи и нужно просто расширить импульс, то о какой обратной связи мы ещё ведём речь?
Если приходящие импульсы уже являются результатом этой обратной связи и нужно просто расширить импульс, то о какой обратной связи мы ещё ведём речь?
Просто расширить импульс это лажа, сигналы все же необходимы, потому как физикохимические свойства у бензина и газа абсолютно разные. Как минимум надо создавать массив кэффициентов и использовать их совместно с частотой оборотов.
Если приходящие импульсы уже являются результатом этой обратной связи и нужно просто расширить импульс, то о какой обратной связи мы ещё ведём речь?
Просто расширить импульс это лажа, сигналы все же необходимы, потому как физикохимические свойства у бензина и газа абсолютно разные. Как минимум надо создавать массив кэффициентов и использовать их совместно с частотой оборотов.
А разве входной сигнал никак не привязан к частоте оборотов?
А разве входной сигнал никак не привязан к частоте оборотов?
Ну так то да.... Но все равно надо не единожды сменить ширину импульса, желательно корректировать в процессе изменения кол-ва оборотов. Мне так кажется это поможет оптимизировать расход газа.
Получается, что у него изначально 3мс + "добавка" в размере 1/6. Размер добавки уменьшается по мере роста нагрузки и на 70% становится равной 0, а дальше отрицательной. По такой логике "уширение" должно быть не множителем к продлолжительности исходного импульса, а некой функцией от него.
Как при росте нагрузки может уменшатся импульс газа так как КПД меньше по сравнению бензина.если получится завтра проверю на осцилограмме stag как работает на разных оборотах
Я посчитал вашу картинку (осциллограму) и там получается довольно странная вещь:
по синему графику при частоте 15,773 Гц (период 63,4 мс) и коэфф. заполнения 81,3%, длительность управляющего импульса составляет 11,85 миллисекунд. Если импульсы по всем каналам одинаковые, то уложится в 63,4мс они могут только с перекрытием друг друга на (11,85 * 6 - 63,4) / 6 = 1,3мс. Импульс по следующему каналу приходит за 1.3мс до окончания импульса по текущему каналу.
Если импульсы могут перекрываться, тогда требуется совершенно иной функционал скетча и, соответственно, другой алгоритм.
Я посчитал вашу картинку (осциллограму) и там получается довольно странная вещь:
по синему графику при частоте 15,773 Гц (период 63,4 мс) и коэфф. заполнения 81,3%, длительность управляющего импульса составляет 11,85 миллисекунд. Если импульсы по всем каналам одинаковые, то уложится в 63,4мс они могут только с перекрытием друг друга на (11,85 * 6 - 63,4) / 6 = 1,3мс. Импульс по следующему каналу приходит за 1.3мс до окончания импульса по текущему каналу.
Если импульсы могут перекрываться, тогда требуется совершенно иной функционал скетча и, соответственно, другой алгоритм.
А для вас это открытие что впрыск идет с небольшим наложением друг на друга.
Судя по твоим постам ты сначала пишешь что думаешь. а потом спохватившись лезишь в википедию и читаешь как есть на самом деле. Так что пальце в носу ковыряешь ты.
Я переделал скетч так как тот который вы написали имел недостаток если один канал входа будет в обрыве то ардуино ничего не выдаст на выходе.Может даже через чур простой но работает теперь мне нужно каждый каналы выхода сделать задержку.Пока не получается нужно обойтис без delay() может по советуйте.Заранее спасибо
До задержки вы в своем алгоритме еще не дошли. Сначала вам нужно измерить длительность импульса по входу. Придумайте алгоритм измерения длительности по одному каналу, потом смасштабируйте это решение для всех шести.
Я переделал скетч так как тот который вы написали имел недостаток если один канал входа будет в обрыве то ардуино ничего не выдаст на выходе.Может даже через чур простой но работает теперь мне нужно каждый каналы выхода сделать задержку.Пока не получается нужно обойтис без delay() может по советуйте.Заранее спасибо.
Интересно, а в вашем алгоритме из чего следует, что при отсутствии сигнала на одном из входов на привязаном к нему выходе будет формироваться импульс?
Писалось не единожды, только аппаратное решение, используйте таймер в режиме сравнения. Можно конечно попробовать milles(). Но это сработает только на низких оборотах. На высоких может не успевать. И еще вопрос, для вас так принципиально сделать модуль управления впрыском на arduino(на микроконтроллере)? Чем вас неустраивает схема на 555?
Собирать целую схему на 555 тригере не выход,тем более что я подал на аналоговый вход термодатчик с редуктора при достижении 50гр переключает на газ все отлично работает.Как сказал a5021 нужно написать алгоритм задержку включения
Собирать целую схему на 555 тригере не выход,тем более что я подал на аналоговый вход термодатчик с редуктора при достижении 50гр переключает на газ все отлично работает.Как сказал a5021 нужно написать алгоритм задержку включения
Вы упорно не хотите понять, что задержка это фактически цикл во время которого процессор больше ни чего не делает кроме как ожидает окончание задержки. Единственный способ решения аппаратный, т.е. вам надо как минимум 3 таймера работающих в режиме сравнения и использовать прирывания. Это вам не светодиодом помигать. А а5021 похоже имеет поверхностное понимание о квазипаралельном програмировании, отсюда и решения типа предложенного.
Не утомились ли вы своей мудростью невостребованной, квазипараллельной одному месту, фонтанировать? "Единственный способ", "минимум три таймера", "это вам не светодиодом помигать", "сработает только на низких оборотах" -- тфу, глупость какая.
Все делается без таймеров совсем. На одном ардуино-костыльном micros-е. Просто нужно не таймерами трясти, а немного подумать.
Yer пишет:
Пока не получается нужно обойтис без delay() может по советуйте
Я когда писал прошлый скетч, то еще в самом начале прикинул, как будет лучше -- последовательно импульсы обрабатывать или параллельно. Последовательная схема получалась проще для понимания и я сделал выбор в ее пользу. Условия, что импульсы могут накладываться вы тогда не озвучивали.
Раз условия изменились, то можно вернуться и к параллельной. Несмотря на то, что скетч не сильно увиличился в размерах, логика его работы заметно усложнилась. Мне сложно оценить, насколько она будет понятна, но предлагаю взглянуть:
/* Main.ino file generated by New Project wizard
*
* Processor: ATmega328P
* Compiler: Arduino AVR
*/
#define IN_1_PIN 2
#define IN_2_PIN 3
#define IN_3_PIN 4
#define IN_4_PIN 5
#define IN_5_PIN 6
#define IN_6_PIN 7
#define OUT_1_PIN 8
#define OUT_2_PIN 9
#define OUT_3_PIN 10
#define OUT_4_PIN 11
#define OUT_5_PIN 12
#define OUT_6_PIN 13
void setup() {
// инициализируем выходы
for (int i = OUT_1_PIN; i < OUT_6_PIN + 1; i++) {
digitalWrite(i, LOW);
pinMode(i, OUTPUT);
}
// инициализируем входы
for (int i = IN_1_PIN; i < IN_6_PIN + 1; i++) {
pinMode(i, INPUT);
}
}
// p_mul -- массив индивидуальных значений для каждого канала
// сколько длительности добавить к входному мпульсу
//значения в процентах 33.3%, 66.6%, 99.9% 133.3% и т.п.
uint16_t p_mul[6] = {333, 333, 333, 333, 333, 333};
static uint32_t pulse[6];
uint8_t prev_in_state = 0xFF;
void loop(){
while (1) {
uint8_t in_state = PIND; // фиксируем состояние всех 6-х входов
uint32_t currMicros = micros(); // запоминаем текущее время
uint8_t currBit = 2; // бит вх. порта, минус один
for (int i = 0; i < 6; i++) { // сканируем все каналы
currBit <<= 1; // бит влево к тек. каналу
if ((in_state & currBit) != currBit) { // если на канале низкий уровень
if ((prev_in_state & currBit) == currBit) { // если в прошлый раз был высокий
pulse[i] = currMicros; // фиксируем начало импульса по каналу
PORTB |= (1 << i); // ставим высокий уровень на соотв. выходе
}
} else if ((prev_in_state & currBit) != currBit) { // вх. импульс закончился ?
// вычисляем, при каком знач.счетчика micros надо гасить соотв. выход
pulse[i] = ((currMicros - pulse[i]) * p_mul[i] / 1000) + currMicros;
} else if (currMicros >= pulse[i]) { // не надо ли гасить выход?
PORTB &= ~(1 << i); // гасим выход
}
}
prev_in_state = in_state; // сохраняем текущее состояние входов
}
}
В качестве начальных условий считаем максимальную оборотистость двигателя равной 5500 об/мин. Распредвал вращается в два раза медленне коленчатого вала, стало быть на нем обороты будут 2750 об/мин. или 45,83 об/сек. Отсюда период вращения составляет 1/45,83 = 21,8мс. Так как цилиндров шесть, то импульсы на форсунки при таких оборотах будут следовать через 21,8/6 = 3,6мс. Длительность входного импульса примем за 15мс, а уширение на 1/3.
Моделирование в протеусе показывает, что даже 8мгц ардуино справляется с поставленной задачей. Протеусу, разумеется верить можно не всегда, но в качестве прикидочного подхода он годится. Вот такую картинку он рисует в логическом анализаторе (диаграммы А0-А5 -- это входы, А6-А11 -- выходы):
Здесь видно, что перекрываются аж пять каналов сразу, но на выходные импульсы это не оказывает никакго влияния. Проверьте, вроде бы должно работать.
Большое спасибо за скетч все отлично работает.Вы импульсы увеличиваете в процентных соотношениях при резко нажатии на педаль газа импульс ECU становится где то 15мс тогда в процентных соотношениях у нас на газ поступает уже больше 20мс что приводит к перерасходу газа.В холостом ходу когда у нас импульс ECU 3мс на газ должно поступат 5мс.Увеличение должно быть все лишь на 2-2,5мс, во всех режимах двигателя.Если такое возможно сделать буду признателень с уважением Yer
Сколько времени импульс должен продолжаться на выходе, после того, как входящий импульс уже прекратился, задается в строке №56 вышеприведенного скетча. Если нужно, чтобы независимо ни от чего ширина импульса просто увеличивалась на какую-то фиксированную величину, то строка 56 должна выглядеть как-то так:
В таком виде длительность импульсов увеличивается на одну и ту же величину для всех каналов. Если "добавка" должна быть для каждого канала индивидуальной, то можно использовать "освободившийся" массив p_mul, хотя лучше бы его назвать теперь по другому, чтобы не путал. Строка № 36 может приобрести такой вид:
Как видно в графике желтый сигнал у нас импулсь подаваемый на катушки форсунки,синий отображает открытие и закрытие форсунки (пьезо датчик срабатывает по шелчку форсунки).Подаваемый сигнал на ардуино 8мс по графику видно что на 2мс позже закрывается форсунка
так всетаки калибровка будет? или все так на глазок?
Вопрос пожалуйста уточните
Вопрос пожалуйста уточните
Калибровка по качеству смеси (т.е. стереохимического соотношения газа и воздуха)
Чет я не вижу никаких 2мс там. Пьеза начинает регистрировать сильный акустический сигнал сразу по заднему фронту импульса. Стало быть, клапан форсунки пришел в движение.
самоиндукции в катушке по схеме гасится по диоду,а блоках гбо-4 стаг гасится со вторым прямым транзистором
при резком нажатии на педаль газа обороты с трудом поднимаются заметно что газа не хватает это потверждает и лямбда зонд который показывает бедную смесь.Как видно синий у нас импулсь с блока ECUа желтый с ардуино который подается на форсунки.Если плавно нажимать на педаль газа обороты нормально поднимается без всяких провалов
Протестировал с осцилографом только на один канал подавал импулсь с частотой который показан на фото ардуино успевает обратывать и выдавть точно такой сигнал на выходе,помоему если подаешь одновременно с большой частотой сразу на шесть входов то тогда ардуино не успеет обработать
Протестировал с осцилографом только на один канал подавал импулсь с частотой который показан на фото ардуино успевает обратывать и выдавть точно такой сигнал на выходе,помоему если подаешь одновременно с большой частотой сразу на шесть входов то тогда ардуино не успеет обработать
Ну это можно и так посчитать, максимально возьмем 6000 об/мин, это 600 в секунды. За каждый оборот шесть импульсов, получаем 3600 в сек. 1/3600 =0.00027777 сек, если я не где не ошибся то на обработку одного импульса на максимальных оборотах у вас есть минимум ~277 мксек. Остается определить сколько реально времени выполняется обработка ширины одного импульса.
при резком нажатии на педаль газа обороты с трудом поднимаются заметно что газа не хватает это потверждает и лямбда зонд который показывает бедную смесь.Как видно синий у нас импулсь с блока ECUа желтый с ардуино который подается на форсунки.Если плавно нажимать на педаль газа обороты нормально поднимается без всяких провалов
Тут дело может быть не в дуине а редукторе, при резком нажатии на газ может неуспевать удерживать постоянным диф давление, надо давление перед форсунками мерять.
давление просаживается с 1,20кг/см2 на 1кг/см2, почему у нас импульсы ардуино не успевают за импульсами ЕСU как показана на фото.
Если бы ардуино выдавал точно такие импульсы как ECU я бы точно винил редуктор.Синий у нас ECU сигнал,желтый ардуино
давление просаживается с 1,20кг/см2 на 1кг/см2, почему у нас импульсы ардуино не успевают за импульсами ЕСU как показана на фото.
Если бы ардуино выдавал точно такие импульсы как ECU я бы точно винил редуктор.Синий у нас ECU сигнал,желтый ардуино
Вы все время исследуете один канал управления. Для полного понимания картины вам надо измерять все шесть каналов. Импульсы поступают со сдвигом, а не следуют по алгоритму закончился один пришел следующий. Если вы используете програмный метод измерения ширины импульса то так и будет работать ваш блок управления. Здесь нужна аппаратная обработка входящего сигнала и это непосильная задача для mega328. Уверен что данный вопрос можно решить применив процессор с необходимым количеством таймеров в режиме захвата и выдающих на выходе ширину импульса по регистру сравнения. Посмотрите схему на 555 которую вы привели как пример. Там на каждую форсунку работает отдельны одновибратор.
как можно сделать так чтобы каждый канал опрашивать отдельно и выдавать на соответстуюшей выход не используя delay и while чтобы цикл программы останавливался
Решил проблему убрав delayMicroseconds теперь сигналы точно совпадают с блоком ECU и никаких провалов при резком нажатий
на газ отсутвует
Алгоритм не отслеживает ситуацию, когда по следующему каналу импульс приходит раньше, чем закончилось формирование длительности по предыдущему. Такая задача изначально не ставилась, а предвосхищать все мыслимые и немыслимые хотелки алгоритм не обучен.
Убирать delayMicroseconds по смыслу близко к соединению прямым проводом, минуя ардуину.
Тогда задержку включение без delayMicroseconds нужно сделать
В первую очередь нужно правильно вычислять длительность этой задержки, ориентируюясь, возможно и на обороты. А так у вас ерунда получается. Если формирование "добавки" к импульсу еще не закончилось, а пришел уже импульс по соседнему каналу, то значит вы все еще подаете газ в цилиндр, где давно уже рабочий ход идет во всю.
Здесь нужна аппаратная обработка входящего сигнала и это непосильная задача для mega328. Уверен что данный вопрос можно решить применив процессор с необходимым количеством таймеров в режиме захвата и выдающих на выходе ширину импульса по регистру сравнения. Посмотрите схему на 555 которую вы привели как пример. Там на каждую форсунку работает отдельны одновибратор.
Не буду говорить какой именно это МК, это и так уже все знают. )))
В первую очередь нужно правильно вычислять длительность этой задержки, ориентируюясь, возможно и на обороты.
В первую очередь нужно досконально знать как это всё работает, а не давать кучу глупых советов. Обычно снимают и записывают осциллограммы сигналов на исправно работающем аппарате при разных режимах двигателя, а потом уже, руководствуясь этим, добиваются такой же картинки на своём девайсе. И только потом, когда уже основная цель достигнута можно поварьировать параметрами для достижения наилучшей работы двигателя.
Ориентироваться на обороты не вопрос. Обороты не имеют мгновенно изменяющейся тенденции.
Вы сами с собой разговариваете? Про "кучу глупых советов" и где вы их нашли, даже не спрашиваю. Бестолку.
Ну вот понемногу у програмулькиных прходит понимание того, что без набора сигналов датчиков обратной связи сделать полноценно работающее устройство невозможно.
Про "кучу глупых советов"
Убейся, дятел! )))))))))
Ну вот понемногу у програмулькиных прходит понимание того, что без набора сигналов датчиков обратной связи сделать полноценно работающее устройство невозможно.
А где вы узрели обратную связь? Пока не будет полного понимания "как оно работает" говорить что-то вообще бесполезно, это сродни гаданию на кофейной гуще.
А где вы узрели обратную связь? Пока не будет полного понимания "как оно работает" говорить что-то вообще бесполезно, это сродни гаданию на кофейной гуще.
В данном проекте зти сигналы не фигурируют, а под капотом их до дури. лямбдо зонды, датчик оборотов, датчик детонаций итд. Помнитсяя гдето в начале этой темы меня освистали с гиганьем и улюлюканьем, профри БЛЯ.....
А где вы узрели обратную связь? Пока не будет полного понимания "как оно работает" говорить что-то вообще бесполезно, это сродни гаданию на кофейной гуще.
В данном проекте зти сигналы не фигурируют, а под капотом их до дури. лямбдо зонды, датчик оборотов, датчик детонаций итд.
Дык, даже если обратная связь существует, доступна ли она в прямом виде? Нужна ли ещё обратная связь на уже существующую обратную связь? Можно ли выделить существующую обратную связь на основе существующего сигнала? Если приходящие импульсы уже являются результатом этой обратной связи и нужно просто расширить импульс, то о какой обратной связи мы ещё ведём речь?
Ещё одну нормальную тему можно хоронить. И когда уж этого мудака забанят? Ну ни одного вопроса нормально обсудить нельзя.
"Гильотина - лучшее средство от вашей головной боли!"(с).
Прахвэссар, у вас есть что сказать или просто выползли из норки своё лицо показать? )))))))
Ну-ка, вставьте своё умное слово! ("А в ответ - тишина!"(с))
Если приходящие импульсы уже являются результатом этой обратной связи и нужно просто расширить импульс, то о какой обратной связи мы ещё ведём речь?
Просто расширить импульс это лажа, сигналы все же необходимы, потому как физикохимические свойства у бензина и газа абсолютно разные. Как минимум надо создавать массив кэффициентов и использовать их совместно с частотой оборотов.
гбо-4 поколение stag не использует сигнал оборотов.он расширяет или уменшает приходяший импульс ничего не надо гадать и спорит
Если приходящие импульсы уже являются результатом этой обратной связи и нужно просто расширить импульс, то о какой обратной связи мы ещё ведём речь?
Просто расширить импульс это лажа, сигналы все же необходимы, потому как физикохимические свойства у бензина и газа абсолютно разные. Как минимум надо создавать массив кэффициентов и использовать их совместно с частотой оборотов.
А разве входной сигнал никак не привязан к частоте оборотов?
А разве входной сигнал никак не привязан к частоте оборотов?
Ну так то да.... Но все равно надо не единожды сменить ширину импульса, желательно корректировать в процессе изменения кол-ва оборотов. Мне так кажется это поможет оптимизировать расход газа.
Вон, что они -- владельцы ГБО-4 -- пишут:
Время впрыска бензина на ХХ 3 мс, на максимальной нагрузке 17-18 мс. Время газового впрыска на ХХ получилось 3,5 мс. По достижении нагрузки 70% (разряжение 0,7 атмосферы) время газового впрыска равняется времени бензинового впрыска, на нагрузке выше 70% время газового впрыска становится меньше бензинового впрыска.
Получается, что у него изначально 3мс + "добавка" в размере 1/6. Размер добавки уменьшается по мере роста нагрузки и на 70% становится равной 0, а дальше отрицательной. По такой логике "уширение" должно быть не множителем к продлолжительности исходного импульса, а некой функцией от него.
Меньше чем 5мс не подают на газовые форсунки так как не успеют полностю открытся исключение только hana форсункам можно подавать до 2мс
Как при росте нагрузки может уменшатся импульс газа так как КПД меньше по сравнению бензина.если получится завтра проверю на осцилограмме stag как работает на разных оборотах
Я посчитал вашу картинку (осциллограму) и там получается довольно странная вещь:
по синему графику при частоте 15,773 Гц (период 63,4 мс) и коэфф. заполнения 81,3%, длительность управляющего импульса составляет 11,85 миллисекунд. Если импульсы по всем каналам одинаковые, то уложится в 63,4мс они могут только с перекрытием друг друга на (11,85 * 6 - 63,4) / 6 = 1,3мс. Импульс по следующему каналу приходит за 1.3мс до окончания импульса по текущему каналу.
Если импульсы могут перекрываться, тогда требуется совершенно иной функционал скетча и, соответственно, другой алгоритм.
Я посчитал вашу картинку (осциллограму) и там получается довольно странная вещь:
по синему графику при частоте 15,773 Гц (период 63,4 мс) и коэфф. заполнения 81,3%, длительность управляющего импульса составляет 11,85 миллисекунд. Если импульсы по всем каналам одинаковые, то уложится в 63,4мс они могут только с перекрытием друг друга на (11,85 * 6 - 63,4) / 6 = 1,3мс. Импульс по следующему каналу приходит за 1.3мс до окончания импульса по текущему каналу.
Если импульсы могут перекрываться, тогда требуется совершенно иной функционал скетча и, соответственно, другой алгоритм.
А для вас это открытие что впрыск идет с небольшим наложением друг на друга.
Вы еще не устали тыкать пальцем в небо?
Вы еще не устали тыкать пальцем в небо?
Судя по твоим постам ты сначала пишешь что думаешь. а потом спохватившись лезишь в википедию и читаешь как есть на самом деле. Так что пальце в носу ковыряешь ты.
Я правильно понимаю, что вам совершенно все равно о чем галлюцинировать?
Я переделал скетч так как тот который вы написали имел недостаток если один канал входа будет в обрыве то ардуино ничего не выдаст на выходе.Может даже через чур простой но работает теперь мне нужно каждый каналы выхода сделать задержку.Пока не получается нужно обойтис без delay() может по советуйте.Заранее спасибо
До задержки вы в своем алгоритме еще не дошли. Сначала вам нужно измерить длительность импульса по входу. Придумайте алгоритм измерения длительности по одному каналу, потом смасштабируйте это решение для всех шести.
Я переделал скетч так как тот который вы написали имел недостаток если один канал входа будет в обрыве то ардуино ничего не выдаст на выходе.Может даже через чур простой но работает теперь мне нужно каждый каналы выхода сделать задержку.Пока не получается нужно обойтис без delay() может по советуйте.Заранее спасибо.
Интересно, а в вашем алгоритме из чего следует, что при отсутствии сигнала на одном из входов на привязаном к нему выходе будет формироваться импульс?
Писалось не единожды, только аппаратное решение, используйте таймер в режиме сравнения. Можно конечно попробовать milles(). Но это сработает только на низких оборотах. На высоких может не успевать. И еще вопрос, для вас так принципиально сделать модуль управления впрыском на arduino(на микроконтроллере)? Чем вас неустраивает схема на 555?
Собирать целую схему на 555 тригере не выход,тем более что я подал на аналоговый вход термодатчик с редуктора при достижении 50гр переключает на газ все отлично работает.Как сказал a5021 нужно написать алгоритм задержку включения
Собирать целую схему на 555 тригере не выход,тем более что я подал на аналоговый вход термодатчик с редуктора при достижении 50гр переключает на газ все отлично работает.Как сказал a5021 нужно написать алгоритм задержку включения
Вы упорно не хотите понять, что задержка это фактически цикл во время которого процессор больше ни чего не делает кроме как ожидает окончание задержки. Единственный способ решения аппаратный, т.е. вам надо как минимум 3 таймера работающих в режиме сравнения и использовать прирывания. Это вам не светодиодом помигать. А а5021 похоже имеет поверхностное понимание о квазипаралельном програмировании, отсюда и решения типа предложенного.
Не утомились ли вы своей мудростью невостребованной, квазипараллельной одному месту, фонтанировать? "Единственный способ", "минимум три таймера", "это вам не светодиодом помигать", "сработает только на низких оборотах" -- тфу, глупость какая.
Все делается без таймеров совсем. На одном ардуино-костыльном micros-е. Просто нужно не таймерами трясти, а немного подумать.
Я когда писал прошлый скетч, то еще в самом начале прикинул, как будет лучше -- последовательно импульсы обрабатывать или параллельно. Последовательная схема получалась проще для понимания и я сделал выбор в ее пользу. Условия, что импульсы могут накладываться вы тогда не озвучивали.
Раз условия изменились, то можно вернуться и к параллельной. Несмотря на то, что скетч не сильно увиличился в размерах, логика его работы заметно усложнилась. Мне сложно оценить, насколько она будет понятна, но предлагаю взглянуть:
В качестве начальных условий считаем максимальную оборотистость двигателя равной 5500 об/мин. Распредвал вращается в два раза медленне коленчатого вала, стало быть на нем обороты будут 2750 об/мин. или 45,83 об/сек. Отсюда период вращения составляет 1/45,83 = 21,8мс. Так как цилиндров шесть, то импульсы на форсунки при таких оборотах будут следовать через 21,8/6 = 3,6мс. Длительность входного импульса примем за 15мс, а уширение на 1/3.
Моделирование в протеусе показывает, что даже 8мгц ардуино справляется с поставленной задачей. Протеусу, разумеется верить можно не всегда, но в качестве прикидочного подхода он годится. Вот такую картинку он рисует в логическом анализаторе (диаграммы А0-А5 -- это входы, А6-А11 -- выходы):
Здесь видно, что перекрываются аж пять каналов сразу, но на выходные импульсы это не оказывает никакго влияния. Проверьте, вроде бы должно работать.
Большое спасибо за скетч все отлично работает.Вы импульсы увеличиваете в процентных соотношениях при резко нажатии на педаль газа импульс ECU становится где то 15мс тогда в процентных соотношениях у нас на газ поступает уже больше 20мс что приводит к перерасходу газа.В холостом ходу когда у нас импульс ECU 3мс на газ должно поступат 5мс.Увеличение должно быть все лишь на 2-2,5мс, во всех режимах двигателя.Если такое возможно сделать буду признателень с уважением Yer
Сколько времени импульс должен продолжаться на выходе, после того, как входящий импульс уже прекратился, задается в строке №56 вышеприведенного скетча. Если нужно, чтобы независимо ни от чего ширина импульса просто увеличивалась на какую-то фиксированную величину, то строка 56 должна выглядеть как-то так:
где PULSE_EXT -- числовое значение времени в микросекундах, которое нужно добавить к входному импульсу. Например,
"расширит" импульс на 2,2 миллисекунды.
В таком виде длительность импульсов увеличивается на одну и ту же величину для всех каналов. Если "добавка" должна быть для каждого канала индивидуальной, то можно использовать "освободившийся" массив p_mul, хотя лучше бы его назвать теперь по другому, чтобы не путал. Строка № 36 может приобрести такой вид:
а строка № 56 такой:
Большое спасибо завтра попробую загрузит и проверит