Duty cycle ölçümü ?

Başlatan Maxim, 26 Kasım 2006, 20:08:10

Maxim

Pic ile ,mesela 16F877 ile duty cycle ölçmek istiyorum ,fakat nasıl bir yol izlemeliyim bulamadım (picbasic veya proton +) .

Aracın enjektörlerini ölçmek istiyorum  ,enjektörler çalışırken ms cinsinden açık kalıyor ,% olarak duty cycle okumak için saniyede "ne kadar süre açık" kaldığını ölçmek gerekli heralde .

Zannediyorum ms olarak okuyabilirsem bu değeri ,gerisi kolay olmalı .

Proton daki "counter" komutu ile rpm değeri ölçüyorum ,en azından proteus üzerinde ,zannediyorum gene bu komutu kullanmak gerekiyor ,çünkü anladığım kadarı ile başka bir yolu yok gibi .

Bu konuda fikri olan varmı acaba ?

ipek


ete

Pic Basic Pro da PULSIN komutu bu iş için biçilmiş kaftan.
PULSIN Pin,State,Var
Pin = Sinyalin girdiği Port Pini
State= 0 ise LOW pals , 1 ise HIGH puls süresi ölçülür
Var= ölçülen süre bu değişkene yerleştirilir.
Süre kullanılan osilatöre bağlı olarak;
Şayet 4 MHz kristal kullanılır ise 10 us nin katları şeklinde gelir
Şayet 20 MHz kristal kullanılır ise 2 us nin katları şeklinde gelir.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Maxim

Alıntı yapılan: "ipek"http://www.diy-efi.org/diy_efi/projects/pw_meter1/

sanirim bu sizin icin yeterli kaynak

vay be adam yapmış ,
yanlız picbasic anlıyorum ,o da min seviye ..
Çok teşekkürler .

asm dosyasını mlab ide ile açıp derledim ,doğru yapıyorum heralde ?

peki diyelim ms cinsinden okudum ,onu duty cycle olarak görmem için nasıl bir yol izlemeliyim ?

Maxim

Alıntı yapılan: "ete"Pic Basic Pro da PULSIN komutu bu iş için biçilmiş kaftan.
PULSIN Pin,State,Var
Pin = Sinyalin girdiği Port Pini
State= 0 ise LOW pals , 1 ise HIGH puls süresi ölçülür
Var= ölçülen süre bu değişkene yerleştirilir.
Süre kullanılan osilatöre bağlı olarak;
Şayet 4 MHz kristal kullanılır ise 10 us nin katları şeklinde gelir
Şayet 20 MHz kristal kullanılır ise 2 us nin katları şeklinde gelir.

Ete

Çok teşekkürler ,
aynı soruyu sizede sorsam ?

Maxim

Bende böyle bir devre var ,yani devrenin kendisi var ,
16F84 kullanmışlar devrede ,canavar gibi çalışıyor ,% olarak duty cycle gösteryor ,istenilen set değerine gelindiğinde veya daha aşağıya inildiğinde üstelik histeris ayarlanarak bir röle çektirilebiliyor .



Devrede 10 mhz kristal kullanılmış ,yazdığına göre maximum input frekansı 10 khz diyor buda 600.000 rpm e tekabül ediyormuş .

Anlamadığım şey şu ,
diyelim girişimiz 20 ms , bunu neye göre duty cycle olarak hesaplarızki ?

mmengi

Sanırım araçların ECU su enjektörlere sabit bir frekanslı pwm sinyal gönderilmiyordur motor devrine göre frekansta devamlı değişkenlik göstermekte olduğunu düşünüyorum dolayısıyla değişen bir frekans ortamında % olarak duty cycle ı görmekte zor olacaktır çünkü değişen frekans ta baz alınacak bir saykıl bulmak zor. Mantıklı olan açık ve kapalı süreleri ölçmek daha makul. Çalışmayı mantık yürüterek yaptım ama frekans sabit ise on ve off puls süreleri ölçülüp toplamı alınıp toplam süre üstünden on ve off oranları hesaplanıp lcd ye yazdırılabilir.

z

PMW sinyalini invert et bir daha et. Invertli ve invertsiz halini ayri ayri es RC filitreden gecir. ADC ile kapasitor voltajlarini olc.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mytap

Bu sistemi sanırım dizel araçların enjektörlerinde kullanacaksın. Duty cyle diğer bir arkadaşımızında dediği gibi bu oran motorun devri ile değişir. Pwm sinyalinin high ta kalma süresi sanırım eşittir. Yani misal 1ms highda kalıyor 5ms de belli bi hızda lowda kalıyor. 1ms eşit ise tam bilmiyorum ama bu oranı RB.0 interrupu kurarak yani yükselen kenarda bir kesme oluşturacak şekilde option_reg i ayarlarsak kesme ile bir zamanlayıcı çalıştırıp bulabiliriz.
-------------------------------------------------------- hayırlı günler, iyi çalışmalar..  --------------------------------------------------------

Maxim

Arkadaşlar tabiki pwm sinyali değişiyor ,benzinli bir araç için .
Ben adamlar nasıl hesaplıyor duty cycle anlamadım .
O verdiğim devrede tek giriş var ,yani devir falan ölçülmüyor .

mytap

Benzinle çalışan bir enjektör hiç duymadım.... Enjektörler dizel araçlarda mevcut oldunu sanıyordum... Enteresannn yani
-------------------------------------------------------- hayırlı günler, iyi çalışmalar..  --------------------------------------------------------

Maxim

Alıntı yapılan: "mytap"Benzinle çalışan bir enjektör hiç duymadım.... Enjektörler dizel araçlarda mevcut oldunu sanıyordum... Enteresannn yani

enteresan ? günümüzde üretilen tüm benzinli araçların %99 u enjektörlü .
Heralde farklı şeyleri düşünüyoruz ,
enjektör ; motorda benzini silindirlere püskürten şey (fuel injection)

ete

@Maxiboost,

Verdiğin devreye baktım. Giriş PORTB.0 dan girilmiş. BU demektir ki bir kesme kullanmışlar. Sistem şöyle çalışıyor bana göre;

Kesmenin oluşmadığı durumlarda ekrana değer yazdırıyorlar.
Sinyal low dan high konumuna geçtiğinde kesme devreye giriyor ve kesme bçlümüne geliniyor.
Orada timer0  sıfırlanıyor ve girişin low olması bekleniyor.
low olduğu anda timer0 değeri alınıp DUTY high değeri olarak kabul ediliyor.
Sistem osilatörüne bağlı olarak 4 mhz de 1 komut çevrimi 1 us dir.
Bu durumda TMR0 ın arka planda (ana programdan bağımsız olarak ) sayabileceği değer ise her bir komut çevriminde yani her 1 us de bir sayı artışıdır. 10 MHz de ise  10.000.000 HZ/4=2.500.000 HZ sistem frekansı,
1.000.000 / 2.500.000 = 0,4 us. BU her bir komut çevrimi için geçmesi gereken süredir.
Timer0 8 bitlik bir sayıcıdır. Bu durumda 10 MHz lik osilatör kullanıldığında bölücüsüz olarak 255 x 0,4 us=102 us yi sayabilir. Bu süreden daha fazla süreler sözkonusu olur ise devreye gerekirse prescaler (bölücü) sokulur. Bu durumda sayılan sürede artmış olur.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

mytap

Dizel araçlardaki pistonlara mazotu püskürten enjektörlerlerle karıştırdım enjektör diyince aklıma hemen bu geldi sanırım. Diğer yandan ETE hocamızın dediği gibi RB.0 kesmesi ile timeri çalıştırarak bulmak mantıklı.
-------------------------------------------------------- hayırlı günler, iyi çalışmalar..  --------------------------------------------------------

Maxim

Alıntı yapılan: "ete"@Maxiboost,

Verdiğin devreye baktım. Giriş PORTB.0 dan girilmiş. BU demektir ki bir kesme kullanmışlar. Sistem şöyle çalışıyor bana göre;

Kesmenin oluşmadığı durumlarda ekrana değer yazdırıyorlar.
Sinyal low dan high konumuna geçtiğinde kesme devreye giriyor ve kesme bçlümüne geliniyor.
Orada timer0  sıfırlanıyor ve girişin low olması bekleniyor.
low olduğu anda timer0 değeri alınıp DUTY high değeri olarak kabul ediliyor.
Sistem osilatörüne bağlı olarak 4 mhz de 1 komut çevrimi 1 us dir.
Bu durumda TMR0 ın arka planda (ana programdan bağımsız olarak ) sayabileceği değer ise her bir komut çevriminde yani her 1 us de bir sayı artışıdır. 10 MHz de ise  10.000.000 HZ/4=2.500.000 HZ sistem frekansı,
1.000.000 / 2.500.000 = 0,4 us. BU her bir komut çevrimi için geçmesi gereken süredir.
Timer0 8 bitlik bir sayıcıdır. Bu durumda 10 MHz lik osilatör kullanıldığında bölücüsüz olarak 255 x 0,4 us=102 us yi sayabilir. Bu süreden daha fazla süreler sözkonusu olur ise devreye gerekirse prescaler (bölücü) sokulur. Bu durumda sayılan sürede artmış olur.

Ete

Ete bey ,
Şimdi arabaya test cihazını takıp test ettim ,boşta 2.84 ms - 3 ms aralarında tam gazda ise 20-21 ms aralarında enjektörler açılıyor ,
bide o devreyi yapan adamlar RB0 girişi için "schmit trigger"  demişler ,o yüzden alt taki parazitleri dikkate almıyor anlaşılan .Pici konfugure ederken girişi bu şekilde ayarlamak mümkün olabiliyormu ?