Эта информация имеет больше пользы при выборе форсунок, но так как мы не можем влиять на эти базовые характеристики, то они здесь могут представлять скорее академический интерес.
ну так и дал для справки чтобы было понятно что минимальное время работы форсунки(при полном открытии) 3мс. 1мс на открытие и 2 мс на закрытие.
и мне все интересно когда ТС созреет до того что надо все-таки калибровать форсунки и снимать данные с лямбды, а не носится с шимом или крутить задержки и редуктор наугад.
а как вы смогли на выходе сделать пилу в програмно в скетче, по поводу обратной связи лямбда зонд у дяди stag-4 он вообще не подключен.Подключены только мап сенсор,температурный датчик,датчик давление
На своей осцилограмме по пробовал подать такой сигнал и вот что получилось: осцилограф подает 5 вольт,на 50%-60% уменшается с таким сигналам на 2-2,3 Вольт.Это значит что при такой форме сигнала форсунка открывается на 50% ,вот почему у меня на больших оборотах обогашается смесь.
Просто программную пилу внутри скетча я всерьез и не рассматривал. Так, набросал на скорую руку, чтобы глянуть, насколько стабильно оно вообще может быть. В принципе, подогнать все временные задержки можно было, но малейшая правка кода и все разъезжалось.
Для выдерживания точных временных интервалов предназначены таймеры. На таймере, собственно и построена пила. Смысл в следующем: таймер 2 считает входные импульсы (2мгц) и когда происходит переполнение 8-битного счетчика (каждые 128мкс), случается вызов прерывания, в котором обработчик тупо переворачивает логическое состояние выходов, на которых присутствует активный импульс. Обработчик также отслеживает ситуацию первых 2.5мс импульса и до истечения этого времени пилу не включает. Т.е. формируется "зуб", который полностью открывает форсунку, а потом уж начинается пила.
Вот, например, выходной импульс на макс. оборотах с длительностью 15/16 от входного (в одной клетке одна миллисекунда):
Попутно предусмотрел в алгоритме возможность выставлять величину отрицательного "уширения". Т.е. выходной импульс может быть короче входного, но вместе с тем, как бы ни менялась ширина входных импульсов, выходные будут короче, но с соблюдением параметров, теперь уже, укорочения. Специально взял несколько чудную величину укорочения -- 15/16, чтобы посмотреть, как оно будет выглядеть. Плохо, что не могу посмотреть в динамике, как оно меняется при резких изменениях оборотов и на краях диапазона. Пока не соображу, есть опасность перехлеста или нет.
/* 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
#define CHANNEL_IN_LOW_STATE(STATE, CH) ((STATE & CH) != CH)
#define FALLING_EDGE(STATE, CH) ((STATE & CH) == CH)
#define RISING_EDGE(STATE, CH) ((STATE & CH) != CH)
#define SET_OUTPUT_HIGH(CH) PORTB |= (1 << CH)
#define SET_OUTPUT_LOW(CH) PORTB &= ~(1 << CH)
#define TOGGLE_OUTPUT(CH) PORTB ^= (1 << CH)
#define TOOTH_WIDTH 10
volatile static uint8_t p_bitmap;
volatile static uint8_t tCnt[6];
void setup() {
// переинициализация таймера 2
// частота тактирования -- 2мгц,
// режим прямого счета
// период счета -- 128мкс.
ASSR=(0<<EXCLK) | (0<<AS2);
TCCR2A=(0<<COM2A1) | (0<<COM2A0) | (0<<COM2B1) | (0<<COM2B0) | (0<<WGM21) | (0<<WGM20);
TCCR2B=(0<<WGM22) | (0<<CS22) | (1<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2A=0x00;
OCR2B=0x00;
TIMSK2=(0<<OCIE2B) | (0<<OCIE2A) | (1<<TOIE2); // прерывание по переполнению
// инициализируем выходы
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);
}
}
uint32_t p_start[6] = {0, 0, 0, 0, 0, 0};
// p_len -- ширина импульса для каждого канала в мкс
uint16_t p_width[6] = {5500, 5500, 5500, 5500, 5500, 5500};
static uint32_t pulse[6], p_last[6], mSpeed;
uint8_t prev_in_state = 0xFF;
// процедура формирующая длительность выходного импульса.
uint32_t formPulse(uint8_t ch) {
return p_last[ch] * 15 / 16; // на основании предыдущего имп. по этому каналу
}
void loop(){
while (1) {
uint8_t in_state = PIND; // фиксируем состояние всех 6-х входов
uint8_t currChannel = 2; // бит вх. порта, минус один
for (int i = 0; i < 6; i++) { // сканируем все каналы
currChannel <<= 1; // бит следующего канала
if CHANNEL_IN_LOW_STATE(in_state, currChannel) { // если на канале низкий уровень
if FALLING_EDGE(prev_in_state, currChannel) { // если в прошлый раз был высокий
cli(); // запрещаем прерывания
SET_OUTPUT_HIGH(i); // ставим высокий уровень на соотв. выходе
tCnt[i] = TOOTH_WIDTH; // передаем обработчику ширину "зуба"
sei(); // разрешаем прерывания
uint32_t tStamp = micros(); // текущее время в микросекундах
pulse[i] = formPulse(i) + tStamp; // вычисляем время окончания вых. импульса
mSpeed = micros() - p_start[i]; // берем значени для выч. мгновенной скорости.
p_start[i] = tStamp; // запоминаем время начала имп.
}
} else if RISING_EDGE(prev_in_state, currChannel) { // вх. импульс закончился ?
// здесь можно что нибудь сделать по окончанию вх. импульса
p_last[i] = micros() - p_start[i]; // запоминаем, сколько длился вх. импульс
}
if (pulse[i] != 0) { // если вых. импульс еще не закончился
if ((signed long int)(pulse[i] - micros()) <= 0) { // не надо ли уже гасить выход?
cli(); // запрещаем прерывания
p_bitmap &= ~(1 << i); // отлючаем пилу на канале
SET_OUTPUT_LOW(i); // завершаем вых. импульс
sei(); // разрешаем прерывания
pulse[i] = 0; // зануление, как признак, что имп. окончен
}
}
}
prev_in_state = in_state; // сохраняем текущее состояние входов
}
}
// Обработчик прерывания по переполнению таймера 2
ISR(TIMER2_OVF_vect) {
// просмотр всех элементов массива, которые могут содержать инф. о формировании
// "зуба" импульса
for (uint8_t i = 0; i < 6; i++) {
if (tCnt[i] > 0) { // если найдено ненулевое значение
if (--tCnt[i] == 0) { // уменьшаем счетчик и если он встал в ноль
p_bitmap |= (1 << i); // поднимаем бит канала на котором нужна пила
}
}
}
// переворачиваем все выходы, для которых установлен бит формирования пилы
PORTB ^= p_bitmap;
}
Ширина выходного импульса зависит от значения, возвращаемого функцией formPulse(). Алгоритм того, каким будет импульс и от чего его параметры будут зависеть, можно написать внутри этой функции. Сейчас там для пример код, просто вычисляющий 15/16 длительности от предыдущего импульса по каналу ch.
а как вы смогли на выходе сделать пилу в програмно в скетче, по поводу обратной связи лямбда зонд у дяди stag-4 он вообще не подключен.Подключены только мап сенсор,температурный датчик,датчик давление
Да невлияет ламбда на работу газовых мозгов, на нее надо смотреть чтобы корректировки правильные вносить(ручками) в зависимости от режима работы двигателя, диапазон регулирования у бензиновых мозгов не резиновый чтобы коррекции по лямбде вносить если газовые форсунки переливают или недоливают. и обчно коррекция в бензиновых мозгах по лямбе составляет +- 5% от расхода воздуха.
понятно зачем смотреть на лямбду? праааавильно- чтобы увидель првильный ли коэффициент пересчета с бензиновых импульсов на газовые
Насколько я понимаю, это относится больше к финальному тюнингу, а тут пока стадия начальной разработки.
ну почемуже финальный тюнинг, если ТС на данный момент незнает ботатая у него смесь или нет. он просто думает - а дайка я дам задержку 6мс, офигеть завелась, все у меня теперь все работает. А что такое стереохимический состав смеси и почему его надо поддерживать и как влияет на расход топлива он незнает и нехочет знать. Ведь у дяди лямбда неподключена, так ведь у дяди и не самопал без датчиков, а стаг с который и топливную карту построит в дапазоне регулирования и коррекцию позволит ручками внести, и один фиг надо лямбду подключать чтобы ручками подправлять, для того чтобы и динамика была и расход в порядке.
Хорошо что вы evgta заметили, каким образом можно контролировать стихометрический состав смеси. Алгоритм работы можете предложит как расчет времени импульса ведется, расчет пилы с какого счета начинается и как оно должно длится. С уважением Yer
Хорошо что вы evgta заметили, каким образом можно контролировать стихометрический состав смеси. Алгоритм работы можете предложит как расчет времени импульса ведется, расчет пилы с какого счета начинается и как оно должно длится. С уважением Yer
ручками делаете, подключаем диагностику или осцилограф к лямбде и смотрим, если нет прямоугольных импульсов(пилы) на лямбде, и если напряжение на датчике свыше 0,4в то смесь обедняем( уменьшаем время впрыска форсунки) если напряжение ниже 0,4в то наоборот. смотрим на разных режимах работы что показывает лябда, строим табличку в зависимости от оборотов(что поделать, датчика давления нет) и дальше думаем как делать корректировки.
а от шима на форсунку отстать надо, его можно включать через 1,5 мс. т.к через 1мс форсунка уже открыта и ток для удержания форсунки открытой можно уменьшить
вы говорите 1,5мс это у вас в стаге коэфициент добавление.так как у вас на холостом ходу 4мс подаются на бенз форсунки и того 5,5мс подается на гбо форсунку. если у вас смесь обагашенная вы можете коэфициент 1,5 мс уменшать так вы добиваетесь нормальной смеси.
вы говорите 1,5мс это у вас в стаге коэфициент добавление.так как у вас на холостом ходу 4мс подаются на бенз форсунки и того 5,5мс подается на гбо форсунку. если у вас смесь обагашенная вы можете коэфициент 1,5 мс уменшать так вы добиваетесь нормальной смеси.
Что за полет мысли? я говорю что просто надо уменьшить импульс при богатой смеси, причем тут 1,5мс? Еще раз говорю что шим (ПИЛА )на газовую форсунку нужна только для защиты от перегрева катушки форсунки
a5021 Большое спасибо завтра по пробую запустит и с осцилографом проверю
Я тут тем временем еще кое-что подправил, т.ч. возьмите лучше скетч из этого сообщения. Особо хочу обратить внимание на процедуру формирования импульсов. Изменяя ее содержимое, можно описывать самые замысловатые алгоритмы изменения длительности входных импульсов. В качестве примера я туда сейчас занес формулу, по которой к ширине импульса добавляется 2,5мс на холостых и отнимается 3мс на максимальных оборотах. На других оборотах входной импульс корректируется пропорционально удаленности от крайних значений.
// процедура формирующая длительность выходного импульса.
uint32_t formPulse(uint8_t ch) {
// return p_last[ch] * 15 / 16; // 15/16 предыдущего вх. имп. по этому каналу
// return p_width[ch]; // фиксированные значения из массива
/*
Отношение выходного к входному импульсу плавно изменяется
по мере роста числа оборотов. На холостых оборотах к "бензиновому"
импульсу добавляются 2,5мс, на максимальных оборотах вычитаются 3мс.
*/
return (uint32_t) p_last[ch] + map(mSpeed, 21800, 200000, -3000, 2500);
}
где mSpeed -- переменная, содержащая величину периода вращения распредвала в текущий момент, 21800 -- период распредвала при 5500об/мин, 200000 -- период при 600об/мин, -3000 -- сколько отнимаем от вх. импульса на макс. оборотах, 2500 сколько добавляем на холостых.
21800 и 200000 нет смысла менять, а вот -3000 и 2500 можно поменять по своему усмотрению. Если, например, их поменять местами, то коррекция станет работать наоборот, т.е. вычитать 3мс на холостых и добавлять 2.5мс на максимальных.
/* 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
#define CHANNEL_IN_LOW_STATE(STATE, CH) ((STATE & CH) != CH)
#define FALLING_EDGE(STATE, CH) ((STATE & CH) == CH)
#define RISING_EDGE(STATE, CH) ((STATE & CH) != CH)
#define SET_OUTPUT_HIGH(CH) PORTB |= (1 << CH)
#define SET_OUTPUT_LOW(CH) PORTB &= ~(1 << CH)
#define TOGGLE_OUTPUT(CH) PORTB ^= (1 << CH)
#define TOOTH_WIDTH 10
volatile static uint8_t p_bitmap;
volatile static uint8_t tCnt[6];
void setup() {
// переинициализация таймера 2
// частота тактирования -- 2мгц,
// режим прямого счета
// период счета -- 128мкс.
ASSR=(0<<EXCLK) | (0<<AS2);
TCCR2A=(0<<COM2A1) | (0<<COM2A0) | (0<<COM2B1) | (0<<COM2B0) | (0<<WGM21) | (0<<WGM20);
TCCR2B=(0<<WGM22) | (0<<CS22) | (1<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2A=0x00;
OCR2B=0x00;
TIMSK2=(0<<OCIE2B) | (0<<OCIE2A) | (1<<TOIE2); // прерывание по переполнению
// инициализируем выходы
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);
}
}
uint32_t p_start[6] = {0, 0, 0, 0, 0, 0};
// p_len -- ширина импульса для каждого канала в мкс
uint16_t p_width[6] = {5500, 5500, 5500, 5500, 5500, 5500};
static uint32_t pulse[6], p_last[6], mSpeed;
uint8_t prev_in_state = 0xFF;
// процедура формирующая длительность выходного импульса.
uint32_t formPulse(uint8_t ch) {
// return p_last[ch] * 15 / 16; // 15/16 предыдущего вх. имп. по этому каналу
// return p_width[ch]; // фиксированные значения из массива
/*
Отношение выходного к входному импульсу плавно изменяется
по мере роста числа оборотов. На холостых оборотах к "бензиновому"
импульсу добавляются 2,5мс, на максимальных оборотах вычитаются 3мс.
*/
return (uint32_t) p_last[ch] + map(mSpeed, 21800, 200000, -3000, 2500);
}
void loop(){
while (1) {
uint8_t in_state = PIND; // фиксируем состояние всех 6-х входов
uint8_t currChannel = 2; // бит вх. порта, минус один
for (int i = 0; i < 6; i++) { // сканируем все каналы
currChannel <<= 1; // бит следующего канала
if CHANNEL_IN_LOW_STATE(in_state, currChannel) { // если на канале низкий уровень
if FALLING_EDGE(prev_in_state, currChannel) { // если в прошлый раз был высокий
cli(); // запрещаем прерывания
SET_OUTPUT_HIGH(i); // ставим высокий уровень на соотв. выходе
tCnt[i] = TOOTH_WIDTH; // передаем обработчику ширину "зуба"
sei(); // разрешаем прерывания
uint32_t tStamp = micros(); // текущее время в микросекундах
mSpeed = tStamp - p_start[i]; // берем значени для выч. мгновенной скорости.
pulse[i] = formPulse(i) + tStamp; // вычисляем время окончания вых. импульса
p_start[i] = tStamp; // запоминаем время начала имп.
}
} else if RISING_EDGE(prev_in_state, currChannel) { // вх. импульс закончился ?
// здесь можно что нибудь сделать по окончанию вх. импульса
p_last[i] = micros() - p_start[i]; // запоминаем, сколько длился вх. импульс
}
if (pulse[i] != 0) { // если вых. импульс еще не закончился
if ((signed long int)(pulse[i] - micros()) <= 0) { // не надо ли уже гасить выход?
cli(); // запрещаем прерывания
p_bitmap &= ~(1 << i); // отлючаем пилу на канале
SET_OUTPUT_LOW(i); // завершаем вых. импульс
sei(); // разрешаем прерывания
pulse[i] = 0; // зануление, как признак, что имп. окончен
}
}
}
prev_in_state = in_state; // сохраняем текущее состояние входов
}
}
// Обработчик прерывания по переполнению таймера 2
ISR(TIMER2_OVF_vect) {
// просмотр всех элементов массива, которые могут содержать инф. о формировании
// "зуба" импульса
for (uint8_t i = 0; i < 6; i++) {
if (tCnt[i] > 0) { // если найдено ненулевое значение
if (--tCnt[i] == 0) { // уменьшаем счетчик и если он встал в ноль
p_bitmap |= (1 << i); // поднимаем бит канала на котором нужна пила
}
}
}
// переворачиваем все выходы, для которых установлен бит формирования пилы
PORTB ^= p_bitmap;
}
Ну наконец то, что теперь а5021, любитель научного самотыка скажете?
Вам ничего нового не скажу. Мне ваш скулеж абсолютно побоку. Считал и считаю, что польза от вашего участия в обсуждении лежит в области отрицательных величин.
Цитата:
Вы бы сначала почитали инструкцию по применению,
Уважаемый бредогенератор, о какой инструкции речь?
Цитата:
а потом писали программу основанную на догадках.
Если бы вы обладали хоть каплей наблюдательности, то могли бы заметить (пусть и не сразу), что я не вношу никакой отсебятины в управляющий алгоритм и реализую только тот функционал, который был запрошен. Про какие "догадки" вы тут бредите, мне неведомо.
Я вот что хочу у вас спросить: если вы такой офигенно-разбирающийся в предмете специалист, если мой скетч считаете отборным говнокодом, то почему еще до сих пор не показали класс и не утерли мне нос, просто предложив свой изящный вариант, идеально учитывающий всю необходимую специфику? Вместо того, чтобы написать те самые правильные пару десятков строк, вы тут которую неделю уже исходите на понос и корчите из себя невпупенного спеца, что в программировании, что во всех прочих дисциплинах, не проявив себя в деле вообще никак.
Ты сначала изучи работу двигателя внутреннего сгорания, поговори со спецами в конторах по чипованию двигателей, если они конечно захотять тебе неучу что то рассказать. А потом берись за написание алгоритма. Годание на кофейной гуще твое кредо, на большее ты не способен. Жду очередного гав - гав с твоей стороны. Я вот в этой теме имею поверхностное понятие, говорю только о том о чем имею представление. Ну по той же причине не берусь писать бред.
Ну как вы думаете если пила защита от перегрева катушки в каком состоянии будет форсунка в закрытый или открытый
Уже где то выше писали что пила это своеобразный ШИМ. Его длительность и заполненность выбрана таким образом чтобы удерживать форсунку в открытом состоянии, при этом напряжение подается импульсами и форсунка не так сильно нагревается, ну и снижается потребление в бортовой сети.
Ты сначала изучи работу двигателя внутреннего сгорания,
Вы уже догадываетесь, куда я вас мысленно отправляю в ответ на ваши поучения? Вот туда и ступайте. Больше мне вам сказать нечего.
Ну, ну. Понимаю, тяжело созновать собственную несостаятельность, но это жизнь. Крепись, изучишь вопрос, напишешь правильный скетч, люди тебе скажут спасибо. Ну может и тех кто направлял в нужном напрвления вспомнят.
Спасибо за скетч но при резких поднятия оборотах пила наоборот 2мс добавляется к общему входному импульсу можете увидеть на графике. А вот при плавном поднятие оборотов я еще показание не снимал если сегодня успею сниму
Я тут в скетче немножко добавил чтобы по температуре переключал форсунки и клапан редуктора.Когда начинаешь заводит иногда импульсы появляются в основном их нету. Пробовал запускать убрав регулирование по температуре ничего не изменилось импульсов нету
int temp=analogRead(A1);
if(temp>930){
PORTC |=(1<<PC2);//включит реле на форсунки и на газ клапан
while (1) {
uint8_t in_state = PIND; // фиксируем состояние всех 6-х входов
uint8_t currChannel = 2; // бит вх. порта, минус один
for (int i = 0; i < 6; i++) { // сканируем все каналы
currChannel <<= 1; // бит следующего канала
if CHANNEL_IN_LOW_STATE(in_state, currChannel) { // если на канале низкий уровень
if FALLING_EDGE(prev_in_state, currChannel) { // если в прошлый раз был высокий
cli(); // запрещаем прерывания
SET_OUTPUT_HIGH(i); // ставим высокий уровень на соотв. выходе
tCnt[i] = TOOTH_WIDTH; // передаем обработчику ширину "зуба"
sei(); // разрешаем прерывания
uint32_t tStamp = micros(); // текущее время в микросекундах
pulse[i] = formPulse(i) + tStamp; // вычисляем время окончания вых. импульса
mSpeed = micros() - p_start[i]; // берем значени для выч. мгновенной скорости.
p_start[i] = tStamp; // запоминаем время начала имп.
}
} else if RISING_EDGE(prev_in_state, currChannel) { // вх. импульс закончился ?
// здесь можно что нибудь сделать по окончанию вх. импульса
p_last[i] = micros() - p_start[i]; // запоминаем, сколько длился вх. импульс
}
if (pulse[i] != 0) { // если вых. импульс еще не закончился
if ((signed long int)(pulse[i] - micros()) <= 0) { // не надо ли уже гасить выход?
cli(); // запрещаем прерывания
p_bitmap &= ~(1 << i); // отлючаем пилу на канале
SET_OUTPUT_LOW(i); // завершаем вых. импульс
sei(); // разрешаем прерывания
pulse[i] = 0; // зануление, как признак, что имп. окончен
}
}
}
prev_in_state = in_state; // сохраняем текущее состояние входов
}
}
else
{ PORTC &=~(1<<PC2);PORTB=0x00;
}
}
// Обработчик прерывания по переполнению таймера 2
ISR(TIMER2_OVF_vect) {
// просмотр всех элементов массива, которые могут содержать инф. о формировании
// "зуба" импульса
for (uint8_t i = 0; i < 6; i++) {
if (tCnt[i] > 0) { // если найдено ненулевое значение
if (--tCnt[i] == 0) { // уменьшаем счетчик и если он встал в ноль
p_bitmap |= (1 << i); // поднимаем бит канала на котором нужна пила
}
}
}
// переворачиваем все выходы, для которых установлен бит формирования пилы
PORTB ^= p_bitmap;
}
В фунции formPulse() либо уменьшите значения тех самых -3000 .. 2500, либо совсем закомментируйте строчку return и раскомментируйте один из return-ов выше. Приведенные значения в map() я проверил для высоких оборотов, но в части низких не проверял. Возможно, где-то либо ноль получается, либо перехлест. Вообще, раз пошло дело к настройке, то вам придется многое делать самостоятельно, т.к. в отсутствие реальных данных я не могу предусматривать всех нюансов. Попробуйти вникнуть, что за данные хранятся в переменных (благо комментарии большей частью есть) и как эти данные можно использовать для формирования импульсов. Я настройку выходных импульсов затем и вынес в отдельную функцию, чтобы вы могли экспериментировать с ней, без лишней боязни зацепить что-то в основном цикле. Скорее всего, вам самому придется сочинять формулу, по которой вычисляется оптимальная длительность. Мне отсюда это сделать крайне затруднительно.
Разобрался с богатой смесью, жиклеры были диаметром на 2,7 мм я их рассверлил на 2,2мм. Время импульса уменшил до 2100мс теперь на высоких оборотах смесь диапазоне 0,2-0,8 Вольт но в холстом ходу от 0,2 Вольт не поднимается. Пробовал увеличивать время импульса но высоких оборотах смесь богатая становится а на холостом держится 0,2-0,8 В. Давление тоже уменшал и увеличивал не помогло, осталось только поцепит ардуино к лямбдо зонду и зависомости от смеси уменшать и увеличивать время импульса чтобы добится оптимальной смеси в диапазоне от 0,2-0,8В во всех режимах двигателя
Разобрался с богатой смесью, жиклеры были диаметром на 2,7 мм я их рассверлил на 2,2мм. Время импульса уменшил до 2100мс теперь на высоких оборотах смесь диапазоне 0,2-0,8 Вольт но в холстом ходу от 0,2 Вольт не поднимается. Пробовал увеличивать время импульса но высоких оборотах смесь богатая становится а на холостом держится 0,2-0,8 В. Давление тоже уменшал и увеличивал не помогло, осталось только поцепит ардуино к лямбдо зонду и зависомости от смеси уменшать и увеличивать время импульса чтобы добится оптимальной смеси в диапазоне от 0,2-0,8В во всех режимах двигателя
Радует что понемногу приходит понимание необходимости учитывать измеренные бортовой системой параметры, использовать датчики(обратной связи) для правильного формирования импульсов управления, о чем предлогалось подумат в одном из первых моих постов. Но вы ведь хотели решить вопрос малой кровью и вам с удовольствием помогал любитель научного тыка. Надеюсь у вас получится реализовать вашу идею, нет я просто уверен в этом. Дорогу осилит идущий.
Разобрался с богатой смесью, жиклеры были диаметром на 2,7 мм я их рассверлил на 2,2мм. Время импульса уменшил до 2100мс теперь на высоких оборотах смесь диапазоне 0,2-0,8 Вольт но в холстом ходу от 0,2 Вольт не поднимается. Пробовал увеличивать время импульса но высоких оборотах смесь богатая становится а на холостом держится 0,2-0,8 В. Давление тоже уменшал и увеличивал не помогло, осталось только поцепит ардуино к лямбдо зонду и зависомости от смеси уменшать и увеличивать время импульса чтобы добится оптимальной смеси в диапазоне от 0,2-0,8В во всех режимах двигателя
Неверное решение, мозги двигла корректируют смесь по лямбде в меру допустимого диапазона, а то получится двойное регулирование. увеличение или уменьшения импульса на газовую форсунку надо строить по датчику давления во впускном коллекторе.
И вот тут встает вопрос а сможет ли дуино одновременно и analogread провести и импульсы посчитать и выдать
Неверное решение, мозги двигла корректируют смесь по лямбде в меру допустимого диапазона, а то получится двойное регулирование. увеличение или уменьшения импульса на газовую форсунку надо строить по датчику давления во впускном коллекторе.
И вот тут встает вопрос а сможет ли дуино одновременно и analogread провести и импульсы посчитать и выдать
Может вы и правы по поводу двойного регулирования, но и в этом есть смысл. Хотябы для начала получить значения обогащения смеси, пересчитать их в коэффициэнты и использовать их как корректирующие. Потому как формула заложенная в блоке регулирующем подачу бензина т.е значения подставленные в нее явно отличаются от газового варианта. Идея изначально правильая взять за основу работу штатных мозгов и скорректировать для работы с другим топливом. По сути нам надо соотнести силу в джоуляж или в любых других единицах для получения равного выделения колличества энергии при взрыве бензина или газа в камере сгорания, на одних и техже нагрузках на коленчаты вал, т.е добится создания приблизительно равного крутящего момента и в случае использования бензина и в случае использования газа.
Дело в том что о нагрузке на двигатель ардуине ни лямбда ни обороты не скажут, а вот дачик давления скажет, и тогда по нему и надо будет к бензиновым импульсам добавлять газовые
На движке какие датчики установлены? может стоять либо датчик давления либо датчик расхода воздуха.
И еще, дело в том что лямбда сильно запаздывает, и непосредственного участия в смесеобразования не участвут, с начала снимаются показания с датчиков по которым выдаются импульсы, а уже потом на установившемся режиме вносятся корректировки по лямбде
На движке установлен HFM термоанемометрический пленочный расходомер воздуха. Но могу купит датчик ваккуметр для гбо-4 они у нас продаются. Просто нужно указать в зависимости от разрежение в коллекторе можно узнать какая нагрузка идет к двигателю
Да датчик можно и от газели с 406(409) двиглом взять, он копейки на разборке стоит или бесплатно.
вопрос в одновременом считывании с него параметров и выдаче импульсов
и тогда у дяди снять характеристику по импульсам в зависимости от давления на впуске, как выглядит примерно табличка уже показывал
Хоршо когда есть человек неплохо разбирающийся в сути вопроса, к сожалению я знаю этот вопрос не так глубоко. Одно знаю точно, нужно использовать имеющиеся измерения параметров двигателя для корректировки подачи топлива. По поводу снятия параметров и выдачи импульсов, делать это надо в момент выдачи импульса, то есть если рассматривать "паузу" между началом одного и началом следующего импулса, то может получиться.
с другой стороны по длинне бензиновых импульсов и так понятно какая нагрузка на двигатель, значит надо тупо строить таблицу коэффицентов на основе бензиновых импульсов.
т.е например при бенз импульсе 3мс газа надо 4мс
при 5 надо 8
при 10 надо 12
при 12 надо 16
и т.д
для этого надо либо динамометрический стенд, либо в движении смотреть(что опасно) и по лямбде смотреть на сколько надо корректировать газовый импульс (в+ или -) в зависимости от бензинового.
Разобрался с богатой смесью, жиклеры были диаметром на 2,7 мм я их рассверлил на 2,2мм. Время импульса уменшил до 2100мс теперь на высоких оборотах смесь диапазоне 0,2-0,8 Вольт но в холстом ходу от 0,2 Вольт не поднимается. Пробовал увеличивать время импульса но высоких оборотах смесь богатая становится а на холостом держится 0,2-0,8 В.
Я специально в последнем варианте попробовал изобразить формулу, которая бы вносила коррективы в зависимости от оборотов. С первого раза, как я понял, не получилось, но я бы посоветовал вам обратить внимание на сам принцип и допилить его по месту.
Переменная mSpeed содержит информацию о периоде импульсов по одному (любому) каналу. Чем выше обороты, тем меньше период (значение) и наоборот. По содержимому этой переменной, можно всегда ориентироваться и принимать какое-то решение.
evgta пишет:
с другой стороны по длинне бензиновых импульсов и так понятно какая нагрузка на двигатель, значит надо тупо строить таблицу коэффицентов на основе бензиновых импульсов.
т.е например при бенз импульсе 3мс газа надо 4мс
при 5 надо 8
при 10 надо 12
при 12 надо 16
Именно это я и пытался изобразить в последнем варианте с помощью функции map(). Смысл -- значение из одного диапазона переносится на пропорциональное значение в другой диапазон.
А целевые значения какие должны быть? Что эти вольты вообще значат?
должны быть постоянные прямоугольные импульсы от 0,2 до 0,8 это значит что мозги смесь регулируют правильно, если значение 0,2в то смесь бедная, если 0,8 богатая, просто у датчикас нет промежуточных положений, он только знает бедная или нет, поэтому мозги и постоянно и делают смесь то чуть богаче то чуть беднее
Эта информация имеет больше пользы при выборе форсунок, но так как мы не можем влиять на эти базовые характеристики, то они здесь могут представлять скорее академический интерес.
ну так и дал для справки чтобы было понятно что минимальное время работы форсунки(при полном открытии) 3мс. 1мс на открытие и 2 мс на закрытие.
и мне все интересно когда ТС созреет до того что надо все-таки калибровать форсунки и снимать данные с лямбды, а не носится с шимом или крутить задержки и редуктор наугад.
Да ладно, все делается постепенно. "От простого к сложному" -- вполне себе метод.
а как вы смогли на выходе сделать пилу в програмно в скетче, по поводу обратной связи лямбда зонд у дяди stag-4 он вообще не подключен.Подключены только мап сенсор,температурный датчик,датчик давление
На счет пилы разобрался это скважинность импульсов вот график
На своей осцилограмме по пробовал подать такой сигнал и вот что получилось: осцилограф подает 5 вольт,на 50%-60% уменшается с таким сигналам на 2-2,3 Вольт.Это значит что при такой форме сигнала форсунка открывается на 50% ,вот почему у меня на больших оборотах обогашается смесь.
Просто программную пилу внутри скетча я всерьез и не рассматривал. Так, набросал на скорую руку, чтобы глянуть, насколько стабильно оно вообще может быть. В принципе, подогнать все временные задержки можно было, но малейшая правка кода и все разъезжалось.
Для выдерживания точных временных интервалов предназначены таймеры. На таймере, собственно и построена пила. Смысл в следующем: таймер 2 считает входные импульсы (2мгц) и когда происходит переполнение 8-битного счетчика (каждые 128мкс), случается вызов прерывания, в котором обработчик тупо переворачивает логическое состояние выходов, на которых присутствует активный импульс. Обработчик также отслеживает ситуацию первых 2.5мс импульса и до истечения этого времени пилу не включает. Т.е. формируется "зуб", который полностью открывает форсунку, а потом уж начинается пила.
Вот, например, выходной импульс на макс. оборотах с длительностью 15/16 от входного (в одной клетке одна миллисекунда):
Попутно предусмотрел в алгоритме возможность выставлять величину отрицательного "уширения". Т.е. выходной импульс может быть короче входного, но вместе с тем, как бы ни менялась ширина входных импульсов, выходные будут короче, но с соблюдением параметров, теперь уже, укорочения. Специально взял несколько чудную величину укорочения -- 15/16, чтобы посмотреть, как оно будет выглядеть. Плохо, что не могу посмотреть в динамике, как оно меняется при резких изменениях оборотов и на краях диапазона. Пока не соображу, есть опасность перехлеста или нет.
Ширина выходного импульса зависит от значения, возвращаемого функцией formPulse(). Алгоритм того, каким будет импульс и от чего его параметры будут зависеть, можно написать внутри этой функции. Сейчас там для пример код, просто вычисляющий 15/16 длительности от предыдущего импульса по каналу ch.
а как вы смогли на выходе сделать пилу в програмно в скетче, по поводу обратной связи лямбда зонд у дяди stag-4 он вообще не подключен.Подключены только мап сенсор,температурный датчик,датчик давление
Да невлияет ламбда на работу газовых мозгов, на нее надо смотреть чтобы корректировки правильные вносить(ручками) в зависимости от режима работы двигателя, диапазон регулирования у бензиновых мозгов не резиновый чтобы коррекции по лямбде вносить если газовые форсунки переливают или недоливают. и обчно коррекция в бензиновых мозгах по лямбе составляет +- 5% от расхода воздуха.
понятно зачем смотреть на лямбду? праааавильно- чтобы увидель првильный ли коэффициент пересчета с бензиновых импульсов на газовые
Насколько я понимаю, это относится больше к финальному тюнингу, а тут пока стадия начальной разработки.
Насколько я понимаю, это относится больше к финальному тюнингу, а тут пока стадия начальной разработки.
ну почемуже финальный тюнинг, если ТС на данный момент незнает ботатая у него смесь или нет. он просто думает - а дайка я дам задержку 6мс, офигеть завелась, все у меня теперь все работает. А что такое стереохимический состав смеси и почему его надо поддерживать и как влияет на расход топлива он незнает и нехочет знать. Ведь у дяди лямбда неподключена, так ведь у дяди и не самопал без датчиков, а стаг с который и топливную карту построит в дапазоне регулирования и коррекцию позволит ручками внести, и один фиг надо лямбду подключать чтобы ручками подправлять, для того чтобы и динамика была и расход в порядке.
Хорошо что вы evgta заметили, каким образом можно контролировать стихометрический состав смеси. Алгоритм работы можете предложит как расчет времени импульса ведется, расчет пилы с какого счета начинается и как оно должно длится. С уважением Yer
a5021 Большое спасибо завтра по пробую запустит и с осцилографом проверю
Хорошо что вы evgta заметили, каким образом можно контролировать стихометрический состав смеси. Алгоритм работы можете предложит как расчет времени импульса ведется, расчет пилы с какого счета начинается и как оно должно длится. С уважением Yer
ручками делаете, подключаем диагностику или осцилограф к лямбде и смотрим, если нет прямоугольных импульсов(пилы) на лямбде, и если напряжение на датчике свыше 0,4в то смесь обедняем( уменьшаем время впрыска форсунки) если напряжение ниже 0,4в то наоборот. смотрим на разных режимах работы что показывает лябда, строим табличку в зависимости от оборотов(что поделать, датчика давления нет) и дальше думаем как делать корректировки.
а от шима на форсунку отстать надо, его можно включать через 1,5 мс. т.к через 1мс форсунка уже открыта и ток для удержания форсунки открытой можно уменьшить
Вот же состав многострадальный, как его только не обзовут. Стереохимический, Стихометрический, но только не Стехиометрический. :)
вы говорите 1,5мс это у вас в стаге коэфициент добавление.так как у вас на холостом ходу 4мс подаются на бенз форсунки и того 5,5мс подается на гбо форсунку. если у вас смесь обагашенная вы можете коэфициент 1,5 мс уменшать так вы добиваетесь нормальной смеси.
вы говорите 1,5мс это у вас в стаге коэфициент добавление.так как у вас на холостом ходу 4мс подаются на бенз форсунки и того 5,5мс подается на гбо форсунку. если у вас смесь обагашенная вы можете коэфициент 1,5 мс уменшать так вы добиваетесь нормальной смеси.
Что за полет мысли? я говорю что просто надо уменьшить импульс при богатой смеси, причем тут 1,5мс? Еще раз говорю что шим (ПИЛА )на газовую форсунку нужна только для защиты от перегрева катушки форсунки
Ну как вы думаете если пила защита от перегрева катушки в каком состоянии будет форсунка в закрытый или открытый
a5021 Большое спасибо завтра по пробую запустит и с осцилографом проверю
Я тут тем временем еще кое-что подправил, т.ч. возьмите лучше скетч из этого сообщения. Особо хочу обратить внимание на процедуру формирования импульсов. Изменяя ее содержимое, можно описывать самые замысловатые алгоритмы изменения длительности входных импульсов. В качестве примера я туда сейчас занес формулу, по которой к ширине импульса добавляется 2,5мс на холостых и отнимается 3мс на максимальных оборотах. На других оборотах входной импульс корректируется пропорционально удаленности от крайних значений.
где mSpeed -- переменная, содержащая величину периода вращения распредвала в текущий момент, 21800 -- период распредвала при 5500об/мин, 200000 -- период при 600об/мин, -3000 -- сколько отнимаем от вх. импульса на макс. оборотах, 2500 сколько добавляем на холостых.
21800 и 200000 нет смысла менять, а вот -3000 и 2500 можно поменять по своему усмотрению. Если, например, их поменять местами, то коррекция станет работать наоборот, т.е. вычитать 3мс на холостых и добавлять 2.5мс на максимальных.
Вам ничего нового не скажу. Мне ваш скулеж абсолютно побоку. Считал и считаю, что польза от вашего участия в обсуждении лежит в области отрицательных величин.
Уважаемый бредогенератор, о какой инструкции речь?
Если бы вы обладали хоть каплей наблюдательности, то могли бы заметить (пусть и не сразу), что я не вношу никакой отсебятины в управляющий алгоритм и реализую только тот функционал, который был запрошен. Про какие "догадки" вы тут бредите, мне неведомо.
Я вот что хочу у вас спросить: если вы такой офигенно-разбирающийся в предмете специалист, если мой скетч считаете отборным говнокодом, то почему еще до сих пор не показали класс и не утерли мне нос, просто предложив свой изящный вариант, идеально учитывающий всю необходимую специфику? Вместо того, чтобы написать те самые правильные пару десятков строк, вы тут которую неделю уже исходите на понос и корчите из себя невпупенного спеца, что в программировании, что во всех прочих дисциплинах, не проявив себя в деле вообще никак.
Ты сначала изучи работу двигателя внутреннего сгорания, поговори со спецами в конторах по чипованию двигателей, если они конечно захотять тебе неучу что то рассказать. А потом берись за написание алгоритма. Годание на кофейной гуще твое кредо, на большее ты не способен. Жду очередного гав - гав с твоей стороны. Я вот в этой теме имею поверхностное понятие, говорю только о том о чем имею представление. Ну по той же причине не берусь писать бред.
Вы уже догадываетесь, куда я вас мысленно отправляю в ответ на ваши поучения? Вот туда и ступайте. Больше мне вам сказать нечего.
Уже где то выше писали что пила это своеобразный ШИМ. Его длительность и заполненность выбрана таким образом чтобы удерживать форсунку в открытом состоянии, при этом напряжение подается импульсами и форсунка не так сильно нагревается, ну и снижается потребление в бортовой сети.
Вы уже догадываетесь, куда я вас мысленно отправляю в ответ на ваши поучения? Вот туда и ступайте. Больше мне вам сказать нечего.
Ну, ну. Понимаю, тяжело созновать собственную несостаятельность, но это жизнь. Крепись, изучишь вопрос, напишешь правильный скетч, люди тебе скажут спасибо. Ну может и тех кто направлял в нужном напрвления вспомнят.
Закусывайте.
Спасибо за скетч но при резких поднятия оборотах пила наоборот 2мс добавляется к общему входному импульсу можете увидеть на графике. А вот при плавном поднятие оборотов я еще показание не снимал если сегодня успею сниму
Если analogRead(A1) в строке №2 возвращает значение меньше 930, то на код формирования импульсов скетч вообще не выходит.
930 - это равняется 40градус температуры охлажд жидкости, я все закачал когда температура была уже 70гр.
Еще пробовал убрав весь регулятор температуры оставил только ваш полный скетч, импульсы так и не появились
Если он сначала работал, а потом перестал, проверяйте, где и что могли случайно зацепить.
Загрузил старый скетч все работает.не знаю где ошибся,не может быть что скетч не правильно не написан
Но вы же как-то сняли осциллограмму в сообщении 325.
Нету импульсов
Я загрузил скетч с 307 сообщении там все правильно написана так как вы еще 318 вторую версию указали
В фунции formPulse() либо уменьшите значения тех самых -3000 .. 2500, либо совсем закомментируйте строчку return и раскомментируйте один из return-ов выше. Приведенные значения в map() я проверил для высоких оборотов, но в части низких не проверял. Возможно, где-то либо ноль получается, либо перехлест. Вообще, раз пошло дело к настройке, то вам придется многое делать самостоятельно, т.к. в отсутствие реальных данных я не могу предусматривать всех нюансов. Попробуйти вникнуть, что за данные хранятся в переменных (благо комментарии большей частью есть) и как эти данные можно использовать для формирования импульсов. Я настройку выходных импульсов затем и вынес в отдельную функцию, чтобы вы могли экспериментировать с ней, без лишней боязни зацепить что-то в основном цикле. Скорее всего, вам самому придется сочинять формулу, по которой вычисляется оптимальная длительность. Мне отсюда это сделать крайне затруднительно.
Спасибо по пробую
Разобрался с богатой смесью, жиклеры были диаметром на 2,7 мм я их рассверлил на 2,2мм. Время импульса уменшил до 2100мс теперь на высоких оборотах смесь диапазоне 0,2-0,8 Вольт но в холстом ходу от 0,2 Вольт не поднимается. Пробовал увеличивать время импульса но высоких оборотах смесь богатая становится а на холостом держится 0,2-0,8 В. Давление тоже уменшал и увеличивал не помогло, осталось только поцепит ардуино к лямбдо зонду и зависомости от смеси уменшать и увеличивать время импульса чтобы добится оптимальной смеси в диапазоне от 0,2-0,8В во всех режимах двигателя
Разобрался с богатой смесью, жиклеры были диаметром на 2,7 мм я их рассверлил на 2,2мм. Время импульса уменшил до 2100мс теперь на высоких оборотах смесь диапазоне 0,2-0,8 Вольт но в холстом ходу от 0,2 Вольт не поднимается. Пробовал увеличивать время импульса но высоких оборотах смесь богатая становится а на холостом держится 0,2-0,8 В. Давление тоже уменшал и увеличивал не помогло, осталось только поцепит ардуино к лямбдо зонду и зависомости от смеси уменшать и увеличивать время импульса чтобы добится оптимальной смеси в диапазоне от 0,2-0,8В во всех режимах двигателя
Радует что понемногу приходит понимание необходимости учитывать измеренные бортовой системой параметры, использовать датчики(обратной связи) для правильного формирования импульсов управления, о чем предлогалось подумат в одном из первых моих постов. Но вы ведь хотели решить вопрос малой кровью и вам с удовольствием помогал любитель научного тыка. Надеюсь у вас получится реализовать вашу идею, нет я просто уверен в этом. Дорогу осилит идущий.
Разобрался с богатой смесью, жиклеры были диаметром на 2,7 мм я их рассверлил на 2,2мм. Время импульса уменшил до 2100мс теперь на высоких оборотах смесь диапазоне 0,2-0,8 Вольт но в холстом ходу от 0,2 Вольт не поднимается. Пробовал увеличивать время импульса но высоких оборотах смесь богатая становится а на холостом держится 0,2-0,8 В. Давление тоже уменшал и увеличивал не помогло, осталось только поцепит ардуино к лямбдо зонду и зависомости от смеси уменшать и увеличивать время импульса чтобы добится оптимальной смеси в диапазоне от 0,2-0,8В во всех режимах двигателя
Неверное решение, мозги двигла корректируют смесь по лямбде в меру допустимого диапазона, а то получится двойное регулирование. увеличение или уменьшения импульса на газовую форсунку надо строить по датчику давления во впускном коллекторе.
И вот тут встает вопрос а сможет ли дуино одновременно и analogread провести и импульсы посчитать и выдать
Неверное решение, мозги двигла корректируют смесь по лямбде в меру допустимого диапазона, а то получится двойное регулирование. увеличение или уменьшения импульса на газовую форсунку надо строить по датчику давления во впускном коллекторе.
И вот тут встает вопрос а сможет ли дуино одновременно и analogread провести и импульсы посчитать и выдать
Может вы и правы по поводу двойного регулирования, но и в этом есть смысл. Хотябы для начала получить значения обогащения смеси, пересчитать их в коэффициэнты и использовать их как корректирующие. Потому как формула заложенная в блоке регулирующем подачу бензина т.е значения подставленные в нее явно отличаются от газового варианта. Идея изначально правильая взять за основу работу штатных мозгов и скорректировать для работы с другим топливом. По сути нам надо соотнести силу в джоуляж или в любых других единицах для получения равного выделения колличества энергии при взрыве бензина или газа в камере сгорания, на одних и техже нагрузках на коленчаты вал, т.е добится создания приблизительно равного крутящего момента и в случае использования бензина и в случае использования газа.
Дело в том что о нагрузке на двигатель ардуине ни лямбда ни обороты не скажут, а вот дачик давления скажет, и тогда по нему и надо будет к бензиновым импульсам добавлять газовые
На движке какие датчики установлены? может стоять либо датчик давления либо датчик расхода воздуха.
И еще, дело в том что лямбда сильно запаздывает, и непосредственного участия в смесеобразования не участвут, с начала снимаются показания с датчиков по которым выдаются импульсы, а уже потом на установившемся режиме вносятся корректировки по лямбде
На движке установлен HFM термоанемометрический пленочный расходомер воздуха. Но могу купит датчик ваккуметр для гбо-4 они у нас продаются. Просто нужно указать в зависимости от разрежение в коллекторе можно узнать какая нагрузка идет к двигателю
Да датчик можно и от газели с 406(409) двиглом взять, он копейки на разборке стоит или бесплатно.
вопрос в одновременом считывании с него параметров и выдаче импульсов
и тогда у дяди снять характеристику по импульсам в зависимости от давления на впуске, как выглядит примерно табличка уже показывал
Да датчик можно и от газели с 406(409) двиглом взять, он копейки на разборке стоит или бесплатно.
вопрос в одновременом считывании с него параметров и выдаче импульсов
и тогда у дяди снять характеристику по импульсам в зависимости от давления на впуске, как выглядит примерно табличка уже показывал
Хоршо когда есть человек неплохо разбирающийся в сути вопроса, к сожалению я знаю этот вопрос не так глубоко. Одно знаю точно, нужно использовать имеющиеся измерения параметров двигателя для корректировки подачи топлива. По поводу снятия параметров и выдачи импульсов, делать это надо в момент выдачи импульса, то есть если рассматривать "паузу" между началом одного и началом следующего импулса, то может получиться.
с другой стороны по длинне бензиновых импульсов и так понятно какая нагрузка на двигатель, значит надо тупо строить таблицу коэффицентов на основе бензиновых импульсов.
т.е например при бенз импульсе 3мс газа надо 4мс
при 5 надо 8
при 10 надо 12
при 12 надо 16
и т.д
для этого надо либо динамометрический стенд, либо в движении смотреть(что опасно) и по лямбде смотреть на сколько надо корректировать газовый импульс (в+ или -) в зависимости от бензинового.
Я специально в последнем варианте попробовал изобразить формулу, которая бы вносила коррективы в зависимости от оборотов. С первого раза, как я понял, не получилось, но я бы посоветовал вам обратить внимание на сам принцип и допилить его по месту.
Переменная mSpeed содержит информацию о периоде импульсов по одному (любому) каналу. Чем выше обороты, тем меньше период (значение) и наоборот. По содержимому этой переменной, можно всегда ориентироваться и принимать какое-то решение.
с другой стороны по длинне бензиновых импульсов и так понятно какая нагрузка на двигатель, значит надо тупо строить таблицу коэффицентов на основе бензиновых импульсов.
т.е например при бенз импульсе 3мс газа надо 4мс
при 5 надо 8
при 10 надо 12
при 12 надо 16
Именно это я и пытался изобразить в последнем варианте с помощью функции map(). Смысл -- значение из одного диапазона переносится на пропорциональное значение в другой диапазон.
тобишь нужно писать условие
если бенз импульс до!!! 2мс то коэфф пересчета например 1,15 т.е 2*1,15=длит газового цикла, конец обсчета
если бенз импульс больше 2мс то к следующему условию
если импульс до 3мс, то 3*1,20 например, конец обсчета
если до 4 то коэфф 1,6 и т.д
пока не дойдем до максимально возможной длинны импульса(скорее всего в районе 20мс)
а вот каой коэфф подставлять надо выяснять в натурных испытаниях по лямбде
При езде смотрел на смесь держится от 0.2 до 0.7В.пока расход не могу отследит проеду 100км будет видно
На холостом тоже в диапазоне от 0.2-0.7 Вольт
А целевые значения какие должны быть? Что эти вольты вообще значат?
А целевые значения какие должны быть? Что эти вольты вообще значат?
А целевые значения какие должны быть? Что эти вольты вообще значат?