Like Tree8понравилось
  • 7 сообщение от JetC
  • 1 сообщение от JetC

Преобразователь VQ-таблиц для использования нестандартного ДМРВ (MAF)

Показано с 1 по 10 из 10
  1. #1
    JetC
    Автор темы

    Тема новичка Преобразователь VQ-таблиц для использования нестандартного ДМРВ (MAF)

    Всем привет! Небольшое вступление:
    После безвременной кончины стокового двигателя SR20DE на моей Приме P11 возникло желание извлечь хоть какие то плюсы из данной ситуации, а именно – поднять мощность посредством установки контрактного двигателя SR20VE. Двигатель пришел из Японии со всем навесным, кроме датчика массового расхода воздуха — он же MAF, который, как известно, у двигателя SR20VE имеет характеристику, отличающуюся от ДМРВ SR20DE.
    Поскольку покупать новый ДМРВ в мои планы не входило (ценник в половину стоимости движка казался немного излишним…), а заказывать контрактный не хотелось по причине долгого ожидания, вначале был подключен штатный ДМРВ SR20DE, и он вполне себе работал… но черные свечи и повышенный расход топлива давали о себе знать.
    Поскольку согласно сведениям, найденным в сети, по «производительности» (максимальному расходу воздуха) и корпусу датчики обоих типов были одинаковыми, возникло желание просто перепрошить ECU, он же «мозг» машины, но это, опять же, требовало лишних затрат.
    Встал вопрос, как бы так «обмануть» мозги машины, чтобы все работало как надо, и тут пригодилась плата Arduino Duemilanove (вернее ее отечественный функциональный аналог Freeduino), завалявшаяся в закромах со времен радиолюбительских экспериментов
    Данная плата в различных модификациях представляет собой микроконтроллер Atmega с элементами обвязки (кварцем, интегральным стабилизатором питания и микросхемой интерфейса USB), который можно легко программировать через USB-порт компьютера, управляя входами и выходами МК посредством собственной программы. МК имеет аналоговые входы, позволяющие измерять аналоговые сигналы в диапазоне от 0 до 5 В, но не имеет полноценных аналоговых выходов, зато в нем предусмотрен режим широтно-импульсной модуляции выходных сигналов (PWM), что позволяет, используя очень простую схему на RC-цепочке и буферном операционном усилителе, получить полноценный аналоговый выходной сигнал с приемлемым уровнем пульсаций.
    Самое главное – цена новой платы Freeduino составляет около 600 руб.

    Принцип действия преобразователя заключается в следующем:
    Входной аналоговый сигнал от используемого ДМРВ поступает на вход АЦП микроконтроллера, затем его цифровое значение сопоставляется программой МК с условной величиной расхода воздуха по таблице VQ (Voltage Quantifier) используемого ДМРВ. Затем выполняется поиск полученного значения в таблице VQ в программе МК, соответствующей таблице VQ «мозгов» автомобиля, чтобы найти уровень напряжения для данной величины расхода воздуха. Полученный уровень напряжения затем устанавливается на выходе МК в виде ШИМ-сигнала, который преобразуется в «настоящее» аналоговое напряжение RC-цепочкой и буферным ОУ. При этом в программе на обоих этапах преобразования используется линейная интерполяция – то есть, если уровень входного сигнала соответствует некоему промежуточному значению во входной таблице VQ, из нее берется соответствующее промежуточное значение расхода воздуха, и аналогично, если полученное значение расхода воздуха соответствует промежуточному значению уровня напряжения по выходной таблице VQ, на выходе устанавливается промежуточный уровень напряжения. Таблицы VQ удалось найти в заводских прошивках мозгов в Nistune
    Схема устройства:
    Преобразователь VQ-таблиц для использования нестандартного ДМРВ (MAF)-1.jpg
    Блок включается в разрыв сигнального провода ДМРВ, +12 В можно взять с любой линии зажигания.

    Код программы на языке Си для среды программирования Ардуино с таблицами VQ для преобразования сигнала ДМРВ SR20DE 22680-2J200 в сигнал для блока управления двигателя SR20VE, работающего с датчиком 22680-5J000:
    Код:
    const int PWM_PIN = 3;
    const int AIN_PIN = 0;
    long VQin[64] = {
    271, 
    271, 
    271, 
    271, 
    271, 
    275, 
    297, 
    337, 
    396, 
    475, 
    575, 
    695, 
    837, 
    1002, 
    1190, 
    1402, 
    1639, 
    1901, 
    2190, 
    2506, 
    2850, 
    3224, 
    3628, 
    4063, 
    4530, 
    5030, 
    5565, 
    6135, 
    6741, 
    7385, 
    8068, 
    8790, 
    9554, 
    10360, 
    11209, 
    12104, 
    13045, 
    14087, 
    15169, 
    16308, 
    17507, 
    18766, 
    20087, 
    21473, 
    22925, 
    24444, 
    26034, 
    27695, 
    29429, 
    31238, 
    33125, 
    35090, 
    37136, 
    39265, 
    41479, 
    43779, 
    46168, 
    48647, 
    51219, 
    53885, 
    56648, 
    59509, 
    62471, 
    65535
    };
    
    long VQout[64] = {
    36, 
    36, 
    36, 
    36, 
    36, 
    36, 
    132, 
    232, 
    338, 
    453, 
    578, 
    718, 
    873, 
    1047, 
    1241, 
    1457, 
    1699, 
    1967, 
    2265, 
    2581, 
    2892, 
    3234, 
    3611, 
    4028, 
    4484, 
    4980, 
    5513, 
    6079, 
    6674, 
    7290, 
    7919, 
    8550, 
    9338, 
    10171, 
    11057, 
    11996, 
    12991, 
    14043, 
    15153, 
    16323, 
    17554, 
    18848, 
    20205, 
    21628, 
    23118, 
    24675, 
    26301, 
    27998, 
    29766, 
    31606, 
    33520, 
    35509, 
    37573, 
    39714, 
    41933, 
    44230, 
    46606, 
    49063, 
    51601, 
    54221, 
    56924, 
    59710, 
    62580, 
    65535
    };
    
    void setup()  
    { 
      TCCR2B = TCCR2B & 0b11111000 | 0x02;
    } 
    
    void loop()  
    {
        const int VPWR = 5030;
        const int MAXV = 5120;
        const int MINV = 80;
        int inVoltage = map(analogRead(AIN_PIN), 0, 1023, 0, VPWR);
        int outVoltage = 0;
        long inQ = 0;
        int adrL = constrain(map(inVoltage, MINV, MAXV, 0, 63), 0, 63);
        int adrH = adrL + 1;
        int voltageValueL = map(adrL, 0, 63, MINV, MAXV);
        int voltageValueH = map(adrH, 0, 63, MINV, MAXV);
        int diff = voltageValueH - voltageValueL;
        float k = (float)(inVoltage - voltageValueL) / (float)diff;
        float valL = 0.0;
        float valH = 0.0;
        
        if (inVoltage < MINV)
        {
          inQ = VQin[0];
        }
        else if (adrL < 63)
        {
           valL = VQin[adrL];
           valH = VQin[adrH];
           inQ = valL + ((valH - valL) * k);
           
        }
        else
        {
          inQ = VQin[63];
        }
         
        for (long i = 0; i < 64; i++)
        {
            int outVolL = 0;
            int outVolH = 0;
            long QvalL, QvalH, d;
    
            if (VQout[i] > inQ)
            {
                if (i > 0)
                {
                    outVolH = map(i, 0, 63, MINV, MAXV);
                    outVolL = map(i - 1, 0, 63, MINV, MAXV);
                    QvalH = VQout[i];
                    QvalL = VQout[i - 1];
                    d = QvalH - QvalL;
                    k = (float)(inQ - QvalL) / (float)d;
                    outVoltage = (outVolL + ((outVolH - outVolL) * k));
                }
                else
                {
                    outVoltage = MINV;
                }
        
                break;
            }
        }
          
        analogWrite(PWM_PIN, constrain(map(outVoltage, 0, VPWR, 0, 255), 0, 255));
    }
    Константу VPWR необходимо задать в соответствии с точным напряжением на выходе интегрального стабилизатора платы Ардуино - в данном случае 5030 соответствует напряжению 5,03 В.

    Фото:

    Скрытый текст

    Преобразователь VQ-таблиц для использования нестандартного ДМРВ (MAF)-_dsc9679.jpg Преобразователь VQ-таблиц для использования нестандартного ДМРВ (MAF)-_dsc9680.jpg Преобразователь VQ-таблиц для использования нестандартного ДМРВ (MAF)-_dsc9681.jpg Преобразователь VQ-таблиц для использования нестандартного ДМРВ (MAF)-_dsc9682.jpg
    [свернуть]

    Транзистор на плате не используется — был впаян для других целей

    В начале программы с помощью регистра TCCR2B повышается частота PWM-модуляции для снижения пульсаций выходного напряжения примерно до 0,01 В (по осциллографу). Это следует учитывать при расширении функционала программы - библиотечные функции Delay могут работать неправильно.
    Программа никак не оптимизировалась, при желании есть огромный потенциал для повышения быстродействия и уменьшения размера кода, если возникнет желание расширить функционал блока. На базе этого можно сделать много чего — это и возможности коррекции состава смеси (наподобие Apexi SAFC), для чего достаточно просто менять таблицы VQ, и управление клапанами VVL и т.д. и т.п. Кстати изначально хотел сделать VVL-контроллер, но временно отказался от этой идеи, изучив таблицы угла опрежения зажигания прошивки мозгов — оказывается на 5000 об/мин (при переключении фаз) УОЗ падает на несколько градусов, очевидно, для предотвращения детонации, то есть без коррекции таблиц УОЗ снижение оборотов переключения фаз может привести к детонации.
    Пока что машинка успешно ездит с описанным блоком, расход топлива снизился, хоть и не радикально, нагар свечей принял более естественный цвет. В принципе при наличии таблиц VQ этот блок позволяет использовать любой ДМРВ с любыми мозгами – даже при несовпадении производительности можно пересчитать таблицы, лишь бы этой потоковой производительности датчика вообще хватало для двигателя.
    Последний раз редактировалось JetC; 15.07.2014 в 01:17.

  2. #2
    VOVANыч
    Администрация
    А как узнал какие параметры имеют датчики? для меня программирвание это темный лес ваще..... так что за работу респект яб проще заказал маф и не парился

  3. #3
    JetC
    Автор темы
    Цитата Сообщение от VOVANыч Посмотреть сообщение
    А как узнал какие параметры имеют датчики? для меня программирвание это темный лес ваще..... так что за работу респект яб проще заказал маф и не парился
    В программе Nistune для профессионального чип-тюнинга есть библиотека заводских прошивок, и в демо-режиме вполне можно взять таблицы VQ.
    А насчет заказа МАФа - меня в тот момент просто до крайности поджимало время, пришлоись импровизировать
    К тому же, как уже сказал, было желание расширить функционал до полноценного VVL-контроллера (управлять переключением фаз), но пока временно отказался от этой идеи, хотя всего то надо дополнить схему парой полевиков и подать сигнал тахометра для контроля оборотов.

  4. #4
    yoiri
    Старожил
    Зачетная работа,а можно небольшой ликбез,какие проги нужны,для программирования этого контроллера,и поподробнее,как программу залить в процессор?
    т.е это все руками вбивать?значит нужна программа для эмулирования этой самой среды,которая ещё и работает с этим контроллером?
    зы я тоже чайник в программировании...

  5. #5
    JetC
    Автор темы
    В том и дело, что с Arduino все намного проще, чем при "обычном" программировании МК - это практически устройство и программатор в виде одного модуля, плюс среда разработки и обширная библиотека функций, упрощающих работу с МК.
    По шагам:
    Берется плата, подключается кабелем к USB-порту ПК. Плату себе я заказывал тут http://freeduino.ru/arduino/index.html (не реклама), еще очень давно.
    По этой ссылке http://arduino.cc/en/Main/Software нужно загрузить среду программирования и установить на ПК, вместе со средой будут установлены необходимые драйверы.
    С драйвером плата определится в Диспетчере устройств, как виртуальный COM-порт, номер которого можно узнать, либо поменять, в свойствах в том же Диспетчере устройств.
    Затем нужно запустить среду и указать в меню "Сервис - Последовательный порт" именно этот порт, затем в меню "Сервис - Плата" выбрать соответствующий тип платы (это не обязательно будет Arduino Duemilanove, но при использовании плат других типов возможно потребуется подкорректировать программу, в частности регистр установки частоты PWM и возможно номера линий ввода-вывода).
    После этого в окне среды разработки нужно вставить код программы и нажать кнопку "Загрузить".
    Все - за несколько секунд программа будет загружена в память МК и начнет работу
    Следует учесть, что на плате есть перемычка (джампер), определяющая использование питания от порта USB или от внешнего источника питания. Перед программированием необходимо установить ее в положение USB, а для работы переставить в положение внешнего питания.
    Последний раз редактировалось JetC; 15.07.2014 в 01:13.

  6. #6
    yoiri
    Старожил
    JetC, Спасибо,тож думаю воткнуть ve,весьма полезная инфа.

  7. #7
    Nismo
    Старожил
    Как говорится, мы не ищем простых решений
    За инженерный подход - респект. Но проще было привезти контрактный MAF.

  8. #8
    dmitrap01
    Новичок
    JetC, моё почтение.
    Скажите пожалуйста , как показал себя данный преобразователь в морозы ????

    Спасибо.

  9. #9
    JetC
    Автор темы
    Цитата Сообщение от dmitrap01 Посмотреть сообщение
    JetC, моё почтение.
    Скажите пожалуйста , как показал себя данный преобразователь в морозы ????
    Спасибо.
    Вот как раз на днях вспоминал про эту тему и хотел написать что-то наподобие отчета о работе Преобразователь показал себя отлично, машина и по сей день с ним ездит. Правда, спустя некоторое время, небольшой косяк все же случился - двигатель стал работать неустойчиво, я стал разбираться в чем дело, и обнаружил, что если пошевелить разъем преобразователя, то появляются перебои в работе вплоть до того, что мотор мог заглохнуть. Первым делом разобрал, проверил пайку на предмет трещин, но ничего такого не обнаружил - оказалось дело было банально в окислении контактов разъема. На фото видно, что я применил обычный ВАЗовский разъем, так вот видимо для сигнала уровнем от 0,5 В его контакты не годятся. Поскольку подходящего разъема с посеребреными или позолоченными контактами под рукой не оказалось, я просто припаял блок. С тех пор прошел еще где то год, проблем больше не было никаких. Морозы были до -28, сбоев не наблюдалось.

    Добавлю еще небольшое примечание - "массу" для питания блока нужно брать сигнальную (для ДМРВ), т.е. подключить к тому проводу, который идет к ДМРВ и на котором при включенном зажигании почти 0 В относительно минусовой клеммы аккумулятора.
    Последний раз редактировалось JetC; 23.07.2016 в 20:54.

  10. #10
    dmitrap01
    Новичок
    Скажите пожалуйста , на Ваш взгляд какой можно использовать микропроцессор наиболее маломощный, чтобы удешевить по максимуму данное решение, к примеру на базе ATmega8, возможно ли реализовать , хватит ли производительности ?

    Спасибо.

Похожие темы

  1. преобразователь из 12 вольт в 220
    от anton18379 в разделе Электрооборудование
    Ответов: 20
    Последнее сообщение: 26.12.2016, 00:23
  2. Ответов: 1
    Последнее сообщение: 29.07.2011, 14:33
  3. Замена родного ДМРВ на ДМРВ от ВАЗа.
    от pinkaminarabotu в разделе Тюнинг, доп. оборудование и аксессуары
    Ответов: 1
    Последнее сообщение: 15.04.2011, 10:17
  4. преобразователь из 12 вольт в 220...
    от dimon-pdv в разделе Электроника
    Ответов: 7
    Последнее сообщение: 21.03.2011, 12:10
  5. Преобразователь с 12 на 220 вольт
    от Jimmorrison в разделе Электроника
    Ответов: 20
    Последнее сообщение: 18.04.2010, 10:18

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •