Обманка подогрева лямбда зонда

Обманка подогрева лямбда зонда

Обманка подогрева лямбда зонда

Обманка подогрева лямбда зонда

Немного предыстории, чтобы было понятно для чего мне это было нужно:
В общем где -то с года 2 назад заменил дрыгатель F18B2 на F20B. Катался на мозгах от 1,8, но хотелось мне их заменить на соответствующие(не будем говорить об эффекте, просто хотелось и все). В общем поставил мозги от F20B6 и.. начались проблемы:
1) Эти мозги в качестве 1го датчика используют не простой лямбда зонд, а широкополосный laf-датчик(как на тоетах). Делать нечего - заменил ДК. В оригинальном исполнении этот датчик стоит прямо во впускном коллекторе, а у меня под двигателем уже, думал что будет плохо нагреваться, но все нормально, работает и так.
2) Мозги требуют 2й датчик кислорода, который типа диагностирует катализатор.
В моих старых мозгах от 1,8 - 2го датчика после катализатора даже не предусмотрено было(как и в выхлопной системе), варивать гайку в трубу под 2й датчик, как то нехотелось, к тому же сам катализатор у меня уже был удален и заменен на плямягасител. rolleyes.gif
В общем было решено ставить "обманку":

Итак, матчасть:
Обычно для этих целей выносят 2й датчик из основного потока газов путем вкручивания проставки. Либо вводят в цепь датчика простую времязадающую RC-цепочку.
Смысл этих манипуляций в том, чтобы сигнал 2го датчика отличался от 1го, другими словами работал с некоторым запозданием, достаточно даже 0,2-0,3 сек.
Поскольку датчика у меня небыло и даже штатного места под его у становку, вышеописаные способы отпадают. Т.к. ставить датчик ради того чтобы его же потом и обманывать - смысла нет никакого, лишняя деталь кароче.
Единственный вариант остается - взять сигнал с 1го датчика, модифицировать его и заслать на вход 2го датчика. Достаточно было бы опять же поставить RC-цепочку или что-то подобное.
Но! Всегда есть это чертово "НО"! 1й датчик то стоит широкополосный, и сигнал его радикально отличается от сигнала лямбда зонда!
Было испоробована масса вариантов просто тупо "на№ать" мозг подсунув на вход разнообразные сигнала типа "замкнуть на массу, подать 0,8В, подать 0,5В, подать 0,2В, сделать зависимость от форсунок" но все это не принесло успеха, примерно на 2й-3й поездке мозг радостно зажигал джекичана!
Дело в том, что в мозгах заложен очень хитрый алгоритм проверки 2го датчика. Поскольку сигнал 2го датчика в обычном режиме всегда показывает "богатую смесь" 0,7-0,8В, т.к. катализатор дожигает весь остаточный кислород в выхлопных газах.
Чтобы проверить 2й датчик мозги намерянно, при езде по прямой без нагрузки на двигатель, в диапазоне оборотов от 2000 до 4000, игнорируя сигналй 1го датчика, начинают забеднять смесь вплоть до самого минимального прога (-28%) и если при этом никаких изменений сигнала 2го датчика не происходит - сразу смекают, что тут какая то фигня.

Другими словами, нам нужно расшифровать сигнал широкополосного датчика и когда он будет показывать бедную смесь - подать на вход 2го датчика напряжение 0,2В, а когда богатую или нормальную - 0,8В.
Всего то ничего.
А, забыл про ошибку подогрева 2й лямбды, мозги проверяют падения напряжения на шунте сопротивлением 0,1Ом в цепи подогрева лямбды.
Сопротивление подогрева лямбды примерно 10 Ом, сталобыть, когда включен подогрев на нагрев тартится 18Вт-20Вт, чтобы не делать печку из батареи резисторов(лампочек) и не растрачивать попусту такую мощность было решено увеличить сопротивление измерительного шунта в мозгах в 100 раз.
Заменив резистор шунта на 10 Ом, сопротивление подогрева получается 1000 Ом, что дает возможно использовать маленький резистор 0,25 Вт.

С сигналом от лямбды посложнее - Laf-датчик является источником тока в отличии от датчика лямбды, который является источником напряжения. Стало быть мозги меряют не напряжение на датчике, а ток который протекает через него. Ток через датчик колеблется от -20мА до +20мА прямопропорционально степени обеднения или обогащения смеси. Обычно ток протекает от -4 до 4 мА.
Чтобы измерить этот ток, необходимо внести в сигнальную цепть датчика сопротивление шунта и мерять подение на пряжения на нем. Логично что такое вмешательство может внести погрешность в измерении для самих мозгов и они будут формировать неправильную смес. По этому сопротивление шунта должно быть как можно меньше.
Поскольку микросхема Attiny45 способна усиливать сигнал на АЦП в 20 раз, решено было выбрать сопротивление шунта с большим запасом 0,5 Ом.
Вот такая схемка получилась:

Прикрепленное изображение

Как видно на схеме, я использовал еще сигнал тахометра, в основоном это нужно для отключения стартера при автозапуске сигнализации, но так же сигнал тахометра используется для изменения временной задержки формирования сигнала 2го датчика, для пущей правдоподобности. По большому счету эту часть схемы можно исключить.
Сигнал датчика 2го формируется с помошью ШИМ.
Листинг программы на басике:

Содержание:

Код

$regfile = "attiny45.dat"
$crystal = 8000000

Config Pinb.2 = Input
Config Portb.0 = Output
Config Portb.1 = Output
Config Int0 = Falling
Config Timer0 = Pwm , Compare A Pwm = Disconnect , Compare B Pwm = Clear Up , Prescale = 1
Config Timer1 = Timer , Prescale = 64
Adcsra = &B10000111                                         ' делитель 128                                         '
Adcsrb = &B10000000                                         ' 2х полярный вход ADC

Dim Cont_t1 As Byte
Dim Cont_imp As Byte
Dim Tacho(20) As Word
Dim Tachobuff As Byte
Dim Tachoready As Byte
Dim I As Byte
Dim Ti As Byte
Dim Rpm As Long
Dim Adczero As Integer
Dim Oxytime As Word
Dim Oxybuff(25) As Integer
Dim Oxypwm As Integer
Dim Oxymaxbuff As Byte
Dim Oxysum As Integer
Dim Oxystat(10) As Integer
Dim Stattime As Byte
Dim Stati As Byte
Dim Adctime As Byte
Dim Laflo As Byte
Dim Lafhi As Byte
Dim Reg As Byte

On Int0 Int0_int
On Timer1 Tim1_ovf

For I = 1 To 20
   Tacho(i) = 65535
Next I
Tachobuff = 4
Tachoready = 5

Oxymaxbuff = 25
Oxytime = 6120                                              'Время на "прогрев" 2го ДК

Enable Int0
Enable Timer1
Enable Interrupts
Config Watchdog = 1024
Reset Watchdog
Start Watchdog

Do
   Rpm = 0
   For I = 1 To Tachoready
      Rpm = Rpm + Tacho(i)
   Next I
   Decr I
   Rpm = Rpm / I
   Rpm = 3750000 / Rpm
   If Rpm > 350 Then Portb.0 = 1
   If Rpm < 270 Then Portb.0 = 0
   If Rpm > 1500 Then
      If Rpm > 2500 Then
         If Rpm > 3500 Then
            If Rpm > 4500 Then
               Tachobuff = 19
               Oxymaxbuff = 12
            Else
               Tachobuff = 17
               Oxymaxbuff = 16
            End If
         Else
            Tachobuff = 14
            Oxymaxbuff = 19
         End If
      Else
         Tachobuff = 9
         Oxymaxbuff = 22
      End If
   Else
      Tachobuff = 4
      Oxymaxbuff = 25
   End If
   If Adctime > 15 Then
      Adctime = 0
      Incr Stattime
      For I = 25 To 2 Step -1
         Oxybuff(i) = Oxybuff(i - 1)
      Next I
      Admux = &B10010111                                            'Усиление 20x, 2,56V
      Set Adcsra.6
      Bitwait Adcsra.6 , Reset
      Laflo = Adcl
      Lafhi = Adch
      If Lafhi.1 = 1 Then
         Lafhi = Lafhi Or 252
      End If
      Oxybuff(1) = Lafhi 256
      Oxybuff(1) = Oxybuff(1) + Laflo
      Oxybuff(1) = Oxybuff(1) + Adczero
      Oxysum = 0
      For I = 5 To Oxymaxbuff
         Oxysum = Oxysum + Oxybuff(i)
      Next I
      Oxysum = Oxysum / Oxymaxbuff
      If Oxytime < 1656 Then
         If Oxysum > 0 Then
            Oxypwm = 70 + Oxysum
         End If
         If Oxysum < 0 Then
            Oxypwm = 20 + Oxysum
         End If
         If Oxypwm < 0 Then Oxypwm = 0
         If Oxypwm > 90 Then Oxypwm = 90
      Else
         Oxypwm = Oxytime / 24
'         I = Rnd(10)
'         Oxypwm = Oxypwm + I
      End If
      Pwm0b = Oxypwm
      If Stattime > 30 Then                                 ' коррекция "нуля" на +/- 5 отчетов, каждые 30 сек
         Stattime = 0
         Incr Stati
         Admux = &B10010101                                 ' Калибровка входа PB4, 2,56V
         Set Adcsra.6
         Bitwait Adcsra.6 , Reset
         Laflo = Adcl
         Lafhi = Adch
         If Lafhi.1 = 1 Then
            Lafhi = Lafhi Or 252
         End If
         Adczero = Lafhi 256
         Adczero = Adczero + Laflo
         Oxystat(stati) = Adczero
         Adczero = 0
         For I = 1 To 10
            Adczero = Adczero + Oxystat(i)
         Next I
         Adczero = Adczero / 10
         If Stati > 9 Then
            Stati = 0
         End If
      End If
   End If
   Reset Watchdog
Loop

Int0_int:

   Stop Timer1
   If Cont_t1 > 0 Then
      Incr Cont_imp
      Tacho(cont_imp) = Cont_t1 256
      Tacho(cont_imp) = Tacho(cont_imp) + Timer1
      If Cont_imp > Tachobuff Then
         Tachoready = Cont_imp
         Cont_imp = 0
      End If
   End If
   Timer1 = 0
   Cont_t1 = 0
   Start Timer1

Return

Tim1_ovf:

   Incr Cont_t1
   If Oxytime > 0 Then Decr Oxytime
   Incr Adctime
   If Cont_t1 > 250 Then
      For Ti = 1 To 20
         Tacho(ti) = 65535
      Next Ti
      Tachobuff = 4
      Tachoready = 5
      Cont_t1 = 0
   End If

Return


Программа обкатана уже около 1000 км, все в норме, джекичан повержен.

Скомпиленая прошивка:
Прикрепленный файл   ( 2,41 килобайт ) Кол-во скачиваний: 598

Сообщение отредактировал Renemen - 09.08.12 - 12:01


Источник: http://hondamotor.ru/board/index.php?showtopic=118711


Обманка подогрева лямбда зонда

Обманка подогрева лямбда зонда

Обманка подогрева лямбда зонда

Обманка подогрева лямбда зонда

Обманка подогрева лямбда зонда

Обманка подогрева лямбда зонда

Обманка подогрева лямбда зонда