coil peak and hold current?

Başlatan F®T, 17 Ekim 2018, 19:06:40

F®T



Yukardaki şekil bir dizel motor enjectörünün akım kontrolü ile sürülmesi ile alakalı.
Bu enjectörler düşük empedansa sahip.Benim süreceğim enjectör 0.5 ohm bir omik dirence sahip.
Bu enjectörü 1ms içinde çektirip hold akımı yani tutma akımı ile devam etmem lazım yoksa yüksek akımdan dolayı enjectör bozuluyor.
Neticede 24 vdc 0.5 ohm bir devrede yaklaşık 48 amper bir akım söz konusu.

Şimdi asıl sorunum şu,

Vout kısmındaki dalga şeklini nasıl bir yöntemle elde edebilirim.

500us on sonraki 500us de dutyi oynamam lazım?

Port kesmesi ile dışardan puls giricem.Bu puls geldiği anda 500us on sonraki 500 us de istediğim duty ve frekansta pwm üretecek.Port kesme girişi devre dışı bırakıldığında çıkış sıfır olacak.

Bununla ilgili görüş ihtiyacım var.

"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

F®T

Disable
KESME:
    GIE=0
    INTE=0
    MOSFET=1
    DelayUS 500
    GIT:
    High MOSFET
    DelayUS 10 
    Low MOSFET
    DelayUS 30
    If GIRIS=1 Then GoTo GIT
    INTF = 0
    INTE = 1
Resume
Enable


INT kesmesi ile yaptım bişiler ama ne kadar başarılı olur.Proteuseta tam olayı göremiyorum.
Int yükselen kenar kesmesi geldiği an mossfet 500 us ye iletime griyor.sonrasında 10 us 1 30 us 0 olarak çıkışta 1/4 oranında 10 khz civarı bir kare dalga elde ediyor. Taki Int girişi 0 olana kadar .Int girişi 0 olunca kesmeden sıfırlayıp çıkıyor.
Burda kesme dışında bir program yok.Onun için kesme içinde delay komutu kullandım.Yoksa sıkıntı olur biliyorum.

Bu mantıkta bir sorun varmı?
Yada daha iyi nasıl olabilir?
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

ete

Verdiğin grafiğebakınca şunları görüyorum.
Sistem PWM ile sürülecek bu kesin. Sistem şöyle çalışacak;
- PWM aktif ve Duty=%100 . Bunun anlamı bobine 24V basılacak. Süre yaklaşık 24 ms olmalı.
- Bu işlemden sonra PWM nin duty değeri kademeli olarak 6 ms içinde %35 seviyesine indirilecek. Bunu voltaj seviyesinden aşağı yukarı anlamaya çalışıyorum. Zira 24V luk besleme 6ms sonunda yaklaşık 8,5V seviyelerine düşüyor. Bunun duty karşılığı deneme ile bulunabilir ama teorik olark %35 olmalı diye düşünüyorum.
- 10 ms sonra ise duty değeri %22 ye düşürülecek.(%20 den biraz fazla gözüküyor).  Beslemede yaklaşık 5,2V seviyelerine gelmiş olmalı. Grafik öyle gösteriyor.
- Yaklaşık 20 ms süre içinde bu %22 lik duty değeri %18 lere düşürülecek. Sonunda bu 20 ms lik süre sonunda Duty değeri sıfırlanacak ve volatj kesilmiş olacak. Bobinden kaynaklanan bir dropout iniş çıkışı olduktan sonra sistem kapanmış olacak.,
Bütün senaryo bu. Benim fikrime göre Donanımsal PWM ile yapılmalı bu sistem. Kesme ile hassas değerleri yakalayabilme şansın olmaz diye düşünüyorum. Süreler çok kısa çünki.

Ete


F®T

Hocam doğru diyorsun.
Fakat frekans 1/50 hz arası olacagından dolayı donanımsal kullanma şansım olmuyor.Bir çözümü varmı?
Şöyle olurmu.kesme ile ana frekansı oluştursak.örnegin 10 hz olsun.peryod 100ms oluyor.100 ms içinde 1 ms olan kısmında 500 us yesini duty 100 diğer 500 us de ise duty 25 yapmak için donanımsal pwm için nasıl bir algoritma lazım.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

ete

Frekansın bu işte çok etkili olacağını sanmıyorum. Çünki sonuçta Bobine DC voltaj uyguluyorsun buda PWM den elde ediliyor.
Önemli olan voltajın seviyesi. Bence denemelisin. Yok denedim frekans kritik diyorsan 1Mhz de frekans 61Hz ye kadar düşebiliyor. Onu dene derim. Sonuçta işlemci 1 Mhz de de çalışabilir.
Yine olmaz dersen MIBAM belki çözüm olabilir.(Mirror Image Bit Angle Modulasyon)

Kesme ile bu işi yapmak epeyce zor bir iş. İmkansız demiyorum ama. zorluk kademeli inişlerdenkaynaklanıyor.
Çıkarmamız gereken 4 çeşit sinyal var.
1. Duty=100 burada direk çıkışı HIGH yapmak yeterli olacak. 24 ms boyunca.
2. Sonra 6 ms içinde Duty=%100 den %35 e düşecek bu 100-35=%65 lik bir düşmeye tekabül eder. Süreyi 6,5ms alırsak işimiz kolaylaşır. Her 10 ms de bir duty değeri %10 eksiltilerek 6,5ms içinde %35'e ulaşırız.
3. Sonra 10 ms içinde %35 den %22 ye düşeceğiz bu 35-22=%13 birimlik bir düşüş olacaktır. her 1 ms de bir %1,3 lük bir düşüş gerekir ki çözünürlük buna müsaade edermi bilemiyorum. Böyle işler ancak 10-12 bitlik PWM duty çözünürlüklerinde mümkün olabilir diye düşünürüm.
4. Daha sonra 20 ms içinde %22 lik değer %18 e düşecek buda 22-18=4 birimlik bir düşüş demektir. 20/4=5 olduğundan her 5 ms de bir %1 lik düşüş sağlanarak buda halledilebilir.
Birinciyi atlarsak elimizde 3 çeşit sinyal olacak ama ara geçiş kademeleri işi bozacaktır. Bana kalırsa bu işi ya başka şekilde hallet yada HPWM kullanmanın bir yolunu bulmaya çalış derim.
Ete




F®T

#5
Ete hocam sadece bobin kontrol etmediğim için diğer işlerede zaman ayırmam lazım.Bu işi sadece tek entegre ile yapayım diye düşünüyorum.Bana sadece aslında 2 kademe yetiyor.Ben donanımsalda frekansı düşemediğim için tmr1 16 bit kesmesi kullandım.İstediğim  frekansları bu şekilde yakaladım.istediğim frekansı ve puls genişliğini sağlayabildim.Sıra bu puls gemişliğinin içine bu kademeleri koymak geldi orda tıkandım.Aslında ana kontrol entegresinde freaknsı ayarlayabiliyorum.Bunu bir porttan alıp başka bir işlemciye bu dediğimiz kademeyi Int kesmesini yada port değişim kesmesini aktif edip hpwm duty 100 bekleme sonra ikinci kademe duty 25 bekleme sonra 3. kademe duty 20 bekleme ve kontrol entegresi puls genişliği sonunda 2. entegre değerleri ssıfırlanıp çıkış yapılması şeklinde ayarlama yapsam nasıl olur.Bu düşünce doğrumu.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Hattuşa

slm ustalarım; nacizane bende fikrimi söylemek isterim.
şimdi resimde 100ms lik bir zaman görüyorum. bu zaman işlemci için interrupta çok kolay sayılacak uzun bir dilim. şimdi atıyorum 100mS lik zaman sizin frekansınızın duty süresi olsun ve bu süreyi dilimli olarak kullanmayı isteyelim. yani 100mS frekansın duty değerinin %100 ise %50 si 50mS yapmazmı? ve bize 1mS lik dilimler yeterli mi? eğer öyleyse;
peryodumuz 200ms ve bunun duty-cycle %50 ye %50 lisi 100ms değilmi? peki ben interrupta 1mS lik bir timer kesmesi oluştursam. her kesmede de bir sayaç çalıştırsam:
sayac =1 de pini high yapsam
sayac =100 de pini low yapsam
sayac =200 de sayacı sıfırlasam 200mS lik peryodu oluşturmuş olurum.
peki ben her sayac =1 de pini high yaptığımda,
sayac =10 da pini kapatırsam %10
sayac =20 de pini kapatırsam %20
sayac =30 da pini kapatırsam%30 ...... gibi duty oranını istediğim gibi duty oranı ile oynamış olmazmıyım ve bu işlem işlemciye ne kadaar yük getirir. bence hiç zorlamaz

olabilir mi? sizce


F®T

#7
Selami hocam merhaba.
Zaten 1-50 hz arası tmr1 kesmesi ile halletmiştik.
100ms lik zaman bu grafikte o şekilde ama 1 ms içinde yapacaz bunu.
Ama bu peryodun içine pwm koymalıyız ki mosfet ile akımı ayarlayalım.Pwm dutysini oynamamız lazım.Kesmede oyalanamayız.Nasıl olacak.Aklıma şu geliyor zaten ana kontrol işlemcisi frekansı ayarlıyor diğer işleride yapıyor.Başka bir işlemciye kesme ile çıkan sinyali girsek o işlemcide hpwm ile bu işi çözemezmiyiz.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

ete

Ferit,
Bu işle ilgili bir çok algoritma üretilebilir ama hiç birisine şu çalışır diyemeyiz. Sebebi bi rçok işin çok dar bir zaman aralığında yapılacak olması. Bence aklına gelen yada önerilen her yolu teker teker denemektenbaşka çare yok.

Benim önerebileceğim yazılmsal bir yol da şu olabilir.
Her 20 ms de bir kesme oluştursan. Bu senin duty saykıl başlangıç noktan olur.
20 ms lik peryodun tamamında çıkışı HIGH edersen duty=100 olacaktır.
Duty=35 için hemen hesap yapalım BEKLE=20*35/100=7 O hlade her biri 1000 ms lik dilimler halinde 7 adet (7000us) bekleme yaparsan ve bu esnada da çıkışın HIGH olursa duty oranını tutturacaksın demektir. Küsüratlı bekleme işleri için bekleme işini us seviyesine indirgersek ve döngü içine 1 adet NOP koyarsak bu 1us ye ye eşit olacaktır. Biraz komut gecikmesi gelebilir ama gerekirse hesapla oynayarak bunuda aşabilirsin.
O halde BEKLE=(200*35) (yani 20.000*duty/100)=7000 bulunacaktır.
Kesmede
CIKIS=1
FOR I=0 to DUTY
  @NOP
next
CIKIS=0
desen ve kesmeden çıksan.  Bu iş olur gibi geliyor bana. Zira bu gecikme ile 7 ms kadar çıkış HIGH da kalacak ama 13 ms boyunca (ikinci kesme gelinceye kadar) LOW da kalacaktır.
Geriye tek sorun kademe gecikmelerini nasıl yaratacağın kalır. Onuda Timer1 gecikmesi kullansan olabilir derim. Bu duurmda kesmeyi TMR0 ile yapacaksın demektir. Kademeli geçişleri iyi ayarlayabilmek için programı etaplara bölmelisin.
1. Etap DUTY=100 , 24 ms sürecek. Ardından sistem 2. etap a geçecek.
2. Etap DUTY=35  , 6 ms sürecek. ama bu süre aslında 100 den 35 e düşüş şeklinde uygulanacak. Düşülecek oran %65 her 1000 us de bir %10 düşeceksin duty değerinden. Bir döngü kur 1 den 6 ya kadar ve araya 1000 us lik gecikme koy yada 1 ms lik gecikme koy. Komut gecikmesi ile birlikte bu 6,5 ms eder sanırım. döngü içinde gecikmeden sonra Duty=duty-10 yaz kesme gerisini halleder.
3. Etap da benzer işi DUTY=22 ye düşmek için uygula
4. etap benzer şekilde %18 e düş ve döngü sonunda kesmeleri kapatıp çıkışı off yap olsun bitsin.

Ete

F®T

Hocam dediğiniz gibi denemeler yapıyorum.Sadece 1 işlemciyi bu iş için feda edicem.Çünkü bu iş önemli sağlam çıkış almam lazım.
Teşekkür ediyorum.
Tecrübelere devam ediyorum.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

F®T

Şunu yapmaya çalışıyorum.

tmr1 kesmesi ile 50 us kesme yaptım.Bu benim asıl frekansımı oluşturuyor.

tmr5 kesmesinide tmr1 kesmesi ile oluşturduğum frekansın peryod yükselme noktasında devreye sokarak 500us sonra çıkışı pwm ile %25 duty oranında yaklaşık 10 khz bir pwm oluşturarak sürücem.Buda 500 us süreceek.Sonra çıkışı diğer peryod başına kadar 0 da tutcam.diğer peryod başında yine aynı olaylar tekrar edecek.

Şimdi sorunum tmr1 ve tmr5 kesmesini beraber çalıştıramamam.tmr1 kesmesi istediğim sürede kesme oluşturup işini yapıyor.Ama tmr5 kesmeye girmiyor bir türlü.Kodlarım aşağıda sorunumu anlayamadım.

İki kesme aynı anda çalışmıyor.Sebebi ne olabilir.


KESME:

Context Save

If TMR1IF =1 Then
Inc KS
If KS=1 Then ENJEKTOR =1
DelayUS 1
If KS >DUTY Then ENJEKTOR =0 
If KS >=PERYOD Then KS =0:SAY=0   'burda ana peryodumu oluşturuyorum çıkışım enjektor.
TMR1IF =0
TMR1L =fR1.LowByte
TMR1H =fR1.HighByte
EndIf


If TMR5IF=1  and ENJEKTOR=1 Then
Inc SAY
If SAY<50 Then ENJEKTOR=1
If SAY>50 Then ENJEKTOR=0   'burdada enjektör devreye girdiği anda oluşan kesme ile istediğim süre sonunda
TMR5IF=0                               'enjektör çıkışı için pwm üretme amacındayım.
TMR5L =fR5.LowByte
TMR5H =fR5.HighByte
EndIf


Context Restore
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Hattuşa

hocam bende senin için basit bir kod yazıyordum. şimdi PC başından kalkmam lazım, gece 24 gibi bi kod paylaşacağım sana bir fikir verir diye düşünüyorum.

F®T

Selami hocam  2 kesme aynı anda olmuyor anlayamadım gitti.Proton saçmalıklarından biri sanki.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Hattuşa

hocam ben 7 tane kesmeyi aynı anda kullandığımı biliyorum. ya ustat derdim matematikte şuan oluşturduğum frekansın zaamaan değerini hz değerine dönüştüremedim şuan onu aşabilirsem bitecek mevzu

F®T

Nasıl bir sorun.neyi neye çeviricen hocam.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Powered by EzPortal