İlk değişiklik

Dört boyutlu haritanın şimdilik gereksiz olduğuna karar verdim. Çok fazla veri vardı ve CPU utilizasyonunu arttırıyordu. Ben de daha basit bir yol seçmeyi düşündüm. (Şimdilik:) )

Kafamdaki tam olarak şu;

Öncelikle yakıt için 3 boyutlu bir haritadan verileri MAP ve RPM e dayalı olarak veriyi çekecek. Daha sonra kendi hesapladığı süre ile karşılaştırıp OEM ECU ‘larda olduğu gibi trimler kullanarak püskürtme süresini ayarlayacak.

Bunun için taslak scriptte şöyle bir değişikliğe gittim.

  • Öncelikle global değişkenler tanımlamam gerekti.

int XCount;
float LTFTrim;
float Total_Trim;

  • Bir sayıcı eklemek zorunda kaldım

Adından da anlaşılacağı üzere XCount değişkeni sayıcım. Beş kez STFT değeri yüksek çıkarsa LTFT değerini %5 arttırıyor/eksiltiyor.

  • Trim değerleri için karşılaştırma satırları eklendi.

if (STFTrim <= -20)
{
STFTrim = -20;
XCount = ++XCount;
if (XCount > 5)
{
XCount = 0;
LTFTrim = LTFTrim – 5;
if (LTFTrim <= – 20)
{
LTFTrim = -20;
}
}
}
if (STFTrim >= 20)
{
STFTrim = 20;
XCount = ++XCount;
if (XCount > 5)
{
XCount = 0;
LTFTrim = LTFTrim + 5;
if (LTFTrim >= 20)
{
LTFTrim = 20;
}
}
}

    Buna göre kısa vadeli düzeltme değerine göre %5 lik dilimler halinde kalıcı değişkenin değeri değişiyor. Her beş veri okumanın sonunda artış/eksilme yapılıyor. Her iki değer de %20 ile sınırlı. İleride buna hata kodu eklemeyi planlıyorum.

 

  • Son PWM değerini hesaplamak için eklentiler yaptım. Osilaskopta okuduğum duty-cycle değeri hesapladığımla birebir örtüşüyor.:)
  Total_Trim = LTFTrim + STFTrim;
Inj_Value = fuel_Value + Total_Trim;

  pwmvalue = map(Inj_Value, 0, 99, 0 ,255);

analogWrite(11, pwmvalue);

 

Başladık bakalım

İlk denemeler başarılı.
İki tane potansiyometre alıp adruino uno nun analog girişlerine bağladım. Bunlar temsili sensörlerim olacak.:) Bunlardan gelen verilere göre 4 boyutlu haritalarımdan uygun değeri seçerek PC nin comport’una gönderiyorum. Evet daha yolun başında bile sayılmam belki ama yıllar önce öğrencilik yıllarımda öğrendiğim C’yi yeniden keşfetmem gerektiği hesaba katılınca aslında fena da yol almadım hani.:)

Neyse Sketch ime kısaca göz gezdirirsek; Öncelikle haritaları tanımlamakladım.

int fuel_Map[4][10][12] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
1, 10, 10, 12, 12, 12, 12, 13, 12, 12, 10, 0,
2, 10, 11, 20, 13, 15, 15, 20, 25, 15, 10, 0,
3, 10, 12, 14, 18, 18, 18, 30, 25, 15, 10, 0,
4, 10, 15, 18, 20, 22, 35, 30, 25, 15, 10, 0,
5, 10, 22, 20, 22, 25, 35, 30, 25, 15, 10, 0,
6, 10, 20, 22, 25, 28, 35, 30, 25, 15, 10, 0,
7, 10, 22, 25, 30, 30, 35, 30, 25, 15, 10, 0,
8, 10, 15, 20, 33, 35, 35, 32, 25, 15, 10, 0,
9, 10, 15, 25, 35, 40, 40, 35, 25, 15, 10, 0,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
1, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
2, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
3, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
4, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
5, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
6, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
7, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
8, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
9, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
1, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
2, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
3, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
4, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
5, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
6, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
7, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
8, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
9, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
1, 147, 147, 147, 147, 147, 147, 147, 140, 135, 130, 0,
2, 147, 147, 147, 147, 147, 147, 147, 140, 135, 130, 0,
3, 147, 147, 147, 147, 147, 147, 147, 140, 135, 130, 0,
4, 147, 147, 147, 147, 147, 147, 147, 140, 135, 130, 0,
5, 147, 147, 147, 147, 147, 147, 147, 140, 135, 130, 0,
6, 147, 147, 147, 147, 147, 147, 147, 140, 135, 130, 0,
7, 147, 147, 147, 147, 147, 147, 147, 140, 135, 130, 0,
8, 147, 147, 147, 147, 147, 147, 147, 140, 135, 130, 0,
9, 147, 147, 147, 147, 147, 147, 147, 140, 135, 130, 0};
Buna göre 4 ayrı yüzey, 10 satır ve 12 sütundan oluşan 4 boyutlu harita hazırlanmış oldu. Değerler tamamen afaki tabi.

Daha sonra analog portlardan gelen veriyi okumaya geldi sıra.

int fuel_Value = 0;
int MapSensorVal = analogRead(A0);
int RpmSensorVal = analogRead(A1);
// int TpsSensorVal = analogRead(A2); Üçüncü potansiyometreyi alana kadar buna sabit değer atamak durumunda kaldım.:)
int TpsSensorVal = 0 ;

Malum 8 bit ADC kullanılan portlarda 0-1023 arası değer çevrimi yapılabiliyor. Yani sizin porta gönderdiğiniz 5 ya da 3.3V u 8 bit data olarak çevirdiğimiz için öncelikle bunu scale etmek gerekiyordu. Bunun için map fonksiyonunu kullandım ki faydalı bir eser zira ara değerlerde kendi yuvarlama yaptığı için çok fazla gereksiz veri girişine gerek kalmıyor.

RpmSensorVal = map(RpmSensorVal, 0, 1023, 0, 11);
MapSensorVal = map(MapSensorVal, 0, 1023, 0, 9);
TpsSensorVal = map(TpsSensorVal, 0, 1023, 0, 4);

 

Hadi şimdi sensörlerden gelen verilere göre haritamızdan uygun değeri çekip com
portuna gönderelim. Veri sıralaması [yüzey][satır][sütun] olacak şekilde

fuel_Value = fuel_Map[TpsSensorVal][MapSensorVal][RpmSensorVal];
Serial.print(“MAP value : “);
Serial.println(MapSensorVal);Serial.print(“RPM value : “);
Serial.println(RpmSensorVal);

Serial.println(” “);
Serial.print(“PWM value : “);
Serial.println(fuel_Value);
Serial.println(” “);
Serial.println(“—————– “);

ComPort görüntüsü şöyle bir şey oldu.

 

map1

Genel strateji

Başlangıçta sadece yakıt kontrolünü yapabilmeyi planlıyorum. Bunun için çok kullanılan üç ayrı yöntem var.

Birincisi motorun hacimsel verimliliğinin haritasını çıkartıp kaydederek sensörlerden gelen veriye göre püskürtme süresini hesaplayarak enjektör sinyalini oluşturmak. Bunun kendine göre kolaylıkları ve kısıtlamaları var. Avantaj kısmında çok fazla bir şey bilmeye gerek kalmaksızın temel bir V E (Volumetric Efficiency = Hacimsel verimlilik) haritası ile bile marşa basabiliyor olmanız.  Tabi bu büyük kolaylık sağlıyor. En önemli sıkıntısı ise her döngüde tek tek tüm verileri kontrol edip hesaplama yapması nedeni ile işlemci ve RAM kaynaklarına ihtiyaç duyuyor olması. Gerçi işlemcilerin üç otuz paraya satılmaya başlandığı şu günlerde bu pek sıkıntı değil artık ama en büyük dezavantajı bu. Megasquirt ve benzeri ECU lar

İkinci yöntem ise basit haritalar hazırlayarak, kullanılan sensörlere göre bunların değerlerini el ile girerek statik püskürtme süreleri ile çalışmak. Genelde Piggy-back ve LPG ECU ları falan bu tip püskürtme yapıyor.

Üçüncü yöntem ise (ki bu OEM üreticilerin kullandığı yöntem) sabit haritalar kullanarak sabit değerler verip ek olarak sensörlerden gelen verilerle hesaplama yapıp tablodaki hazır değerler ile karşılaştırılarak püskürtmenin sağlanması ve trimler kullanarak sürekli sistem kontrolünün sağlanması.

Benim yapmak istediğim üçüncü yöntem elbette ancak daha henüz işin ABC sinde olduğum için ikinci yöntem ile başlayıp sonrasında birincisi ile hibritleyerek üçüncüye ulaşmak. Tabi bu noktada closed loop correction stratejisini oluşturabilmem feedback interfacelerini hazırlamam ve scripte onları da dahil etmem gerekiyor. Acelem yok elbet bitecek. Başladık…

Yolum uzun hadi tutmayın beni. :))

 

Enjektör kontrolü

Merhaba,

Epeydir aklımda olup bir türlü başlamadığım, elimin varmadığı, zaman bulamadığım kısacası yapmadığım enjektör kontrol devresi projeme başladım. Başlangıçta C ile firmware i hazırlayıp arduino ile test ettikten sonra gerekirse başka bir işlemci kullanıp onun için compile etmeyi planlıyorum. Ama temelde strateji belirlemem gerekiyor. Onun içinde ABC den başlayacağım.

Neden arduino? Çünkü açık kaynak kodlu olduğu için internette zilyon tane kaynak var. Neredeyse her ne isterseniz bulabiliyorsunuz. Bulamasanız bile yazabiliyorsunuz. Bellek adreslemeleri falan binlerce kez paylaşılmış. O nedenle temelde onunla başlayıp gerekirse ileride işlemciyi değiştiririm diye düşündüm. Halihazırda Arduino Uno üzerinde ilk denemelerimi yapıyorum. Elimde hazırda Mega ve Due de var. Nihai hedef olarak Due üzerinde çalıştırmayı düşünüyorum. Mega ile çevrebirimleri kontrol edeceğim. Interface lerin I/O devreleri zaten daha önce başkaları tarafından geliştirildiği için sıkıntı yok. Sadece onları daughter board olarak kullanılabilmesi için yeniden hazırlamam gerekecek.

Neyse velhasıl-ı kelam bindik bir alamete gidiyoruz kıyamete bakalım. Umarım maymun iştahımın kurbanı olmaz bitiririm.:)

CBX750p

Benim CBX maceram ilanları araştırırken rastgelmemle başladı. İlk CBX i Aksaray’dan satın aldım. Yıllarca polis teşkilatında kullanıldıktan sonra emekliye ayrılmıştı. Bir süre kullandıktan sonra yenilemeye karar verdim. Ne de olsa 20 yaşını geçmiş bir motosikletti ve doğru dürüst bakım kaydı olmadığı içinde geçmişi hakkında bir bilgiye sahip değildim. Dolayısı ile yenilemek istedim. Tabi buna karar vermemde benim birşeyleri söküp takmaktan tuhaf bir zevk alıyor olmamda önemli bir etken oldu. CBX750p ye gelince;

Polis teşkilatlarında kullanılmak üzere Honda tarafından imal edilmiş, minimum bakım maliyeti ve uzun bakım aralıkları gibi özelliklerle beraber farklı teknik ayrıntıları olan bir motosiklet. Sivil versiyonlarındaın farklı olarak ön süspansiyonda anti-diving sistemi var. Ek olarak zincir yerine şaftla aktarım sözkonusu. Arka fren sistemi disk değil kampana. Ve gücü sivil versiyonlara göre daha yüksek. (CB750FE 71 hp, CBX750p 90 hp) Karbüratörleri daha büyük, overdrive 6 ileri vites kutusuna sahip.(Sivil ver 5 ileri vites kutusu) Tüm vites dişli oranları farklı ve motor ters yönde dönüyor. Dolayısı ile ateşleme sırasıda ters. Debriyajı hidrolik. (Sivil versiyonlarda telli)

CBX750 kullanılması çok keyifli bir motosiklet. Bunda ön lastiklerin 18 inç olması önemli etkenlerden birisi. Aynı zamanda ağırda bir motosiklet. (270 kg.) Hava soğutmalı 747 cc 91 hp motor bu ağırlıkla rahatlıkla başedebiliyor. Gerek performans gerekse sarsıntısız olması açısından sıralı 4 silindirli motor gayet başarılı. Tek handikapı hava soğutmalı olması bence. Zira sıcak havalarda trafikte dur kalk yapmak zorunda kalırsanız bacaklarınızın iç kısmı pişebilir..:) Keşke Honda buna bir çözüm bulabilseymiş. Ancak herşeye rağmen çift egzosttan çıkan ses insanı baştan çıkartmaya yetiyor.

HONDA CBX750PE, CBX750P2H (1991) Teknik Özellikler

BOYUTLAR
Uzunluj 2,290 mm
Genişlik 880 mm
Yükseklik 1,190 mm
Tekerler arası mesafe 1,515 mm
Sele yüksekliği 800 mm
Ayak pedalı yüksekliği 340 mm
GroYerden yükseklik 140 mm
Kuru ağırlık 229 kg
Tüm sıvılar ile ağırlık 248 kg
ŞASE
Tip Çift iskelet
Ön Suspansiyon , Taşıyıcı Teleskopik Çatal, 150 mm
Arka Süspansiyon, Taşıyıcı Kollu taşıyıcı/amortisör, 120 mm
Ön Süspansiyon Hava basıncı 0-40 kPa, 0-0.4 kg/cm2, 0-6 psi
Ön Lastik Ebad 110/90-18 61H Tubeless
Arka Lastik ebadı 130/90-16 67H Tubeless
Soğuk lastik havası(Ön) 250 kPa, 2.50 kg/cm2, 36 psi
Soğuk lastik havası(Arka) 250 kPa, 2.50 kg/cm2, 36 psi
Ön Fren Çift Disk, 904 cm2
Arka Fren Kampana, 245 cm2
Yakıt kapasitesi 20.5 Lite
Yedek depo kapasitesi 2.5 Lite
Kaster açısı 60o00′
İz 111 mm
Ön Çatal Yağ kapasitesi Sağ: 470 cc, Sol: 490 cc
MOTOR
Tip HAva soğutmalı 4-Zamanlı, DOHC
Silindir konumlandırması Dikine konumlandırılmış sıralı tip
Çap ve Strok 67.0 mm X 53.0 mm
Hacim 747 cm3
Sıkıştırma oranı 9.3:1
Süpap tahriki Zİncir aktarmalı DOHC, Silindir başına 4 Süpap
Maksimum Güç (DIN) 65.4 kW (89 ps) / 9,500 rpm
MaMaksimum Tork 69.8 N-m (7.12 kg-m) /8.000 rpm
Emme süpap açılma zamanı 10o BTDC @ 1 mm Lift
Emme süpap kapanma zamanı 40o ABDC  @ 1 mm Lift
Egzost süpap açılma zamanı 45o BBDC @ 1 mm Lift
Egzost süpap kapanma zamanı 5o ATDC @ 1 mm Lift
Motor kuru ağırlığı 82 kg
Rölanti deviri 1,000 +/- 100 rpm
YAKIT SİSTEMİ
Karburatör Tipi / Kelebek Çapı KEIHIN VE / 34 mm
Tanımlama Numarası VE65B
Pilot Vidası İlk Ayarı 2-1/8 Tur dışarıda
Taşma Sınırı (Gösterge Seviyesi) 18.5 mm
AKTARMA
Debriyaj Islak tip çoklu balata
Vites Kutusu 5-Vites  + O.D.
İlk çevrim oranı 1.780
Son dişli oranı 3.670
I nci vites dişlisi 2.235
II nci vites dişlisi 1.545
III nci vites dişlisi 1.240
IV nci vites dişlisi 1.037
V nci vites dişlisi 0.866
VI nci vites dişlisi 0.750
Vites sıralaması Sol ayak kontrollü, 1-N-2-3-4-5-O.D.
ELEKTRiK
Ateşleme Transistörlü elektronik ateşleme / Waste Spark
“F” noktasındaki ateşleme avansı 10o BTDC @ Rölanti
Full Avans 32o BTDC @ 3,150 rpm
Başlatma sistemi Marş motoru
Alternatör 280 W / 6,000 rpm
Akü 12 V – 14 AH
Standart Buji NGK-DPR8EA-9 / ND-X24EPR-U9
Buji (Soğuk Bölge (5oC altı ısı) NGK-DPR7EA-9 / ND-X22EPR-U9
Buji (Yüksek performans) NGK-DPR9EA-9 / ND-X27EPR-U9
Buji tırnak aralığı 0.8 – 0.9 mm
Ateşleme sırası 1-2-4-3
Sigorta/Ana sigorta 10A X 3, 15A X 3 / 30A
LAMBALAR
Far (Uzun/ Kısa Hüzme) 60/55W Halojen
Park/Stop Lambası 8/23W
Ön Sinyal 23W
Arka Sinyal 23W
Gösterge lambaları 3.4W
Vites Boş Gösterge lambası 3.4W
Sinyal Gösterge Lambası 3.4W
Uzun Hüzme Lambası 3.4W
Pozisyon Lambası 8W