ADC ÖLÇÜM VE SOLAR PANEL ŞARJ

Başlatan eprom_20, 14 Nisan 2014, 14:24:24

eprom_20

Hocam ekteki devrede akü voltajını takip ve gündüz güneş paneli şarja başladığında yük beslemesini kesmesi yönünde bir çalışma yaptım acaba eksiklerim nelerdir kontrol edebilirmisiniz?

Buton_1 bir başka devre tarafından yaklaşık 10-12 dk da bir tetiklenerek devremizin akü voltajını ölçmesini ve ayarlanan değerden (örneğin 10,7v) aşağı düştüğünde yük beslemesini kesmesini sağlayacak

LDR gündüz olduğunu ve shottky diyot önünden alacağım voltaj ile de  solar panelin voltaj üretmeye başladığını dolayısıyla yük beslemesinin kesilmesini ve gün boyunca sistemin şarjda tutulmasını amaçlıyorum (gündüz sistemin durması istenilen bir çalışma için)

Yalnız hocam güneş panelinden şarj bitimi nasıl geri dönebilirim yardım edermisiniz

ete

BU projeyi ikimiz birlikte projelendirmediğimize göre kafandan geçenlerin hepsini programa bakarak anlamam mümkün değil.
Üstelik devre şemasıda eklenmemiş. Bu durumda programda genel hataları kontrol edebilirim ancak. Mantık hatalarına bakmam mümkün olamayacak.
Gördüklerim şunlar,
1. Kullanılan işlemci 16F877A olup bu işlemcide A portu default olarak komparatör olarak açılır. Bu nedenle programın başına CMCON=7 komutu eklenmesi gerekir. Aksi halde A portu pinleri istenildiği gibi çalışmaz.

2. IF BUTON_1=0 THEN TAKIP komut satırı ile butona basılınca program TAKIP etiketine gidiyor. Orada yeniden aynı IF satırı yer alıyor. Program zaten Buton_1 'e basılmış ise oraya gidecektir. Orada yeniden butona basılmış mı diye if kullanmak bana göre yersiz.
Buradaki amaç şayet butona hala basılıyormu onu kontrol ederek bu işi yapmak ise neden işin sonunda buton bırakılmışmı diye kontrol etmiyorsunda döndüğün yerde kontrol ediyorsun?. Bana kalırsa başta yer alan IF BUTON_1=0 ifadesini kaldırıp TAKIP kısmının sonunda WHILE BUTON_1=0:WEND ile butonun bırakıldığını kontrol etmen daha doğru olurdu. Bunu yapınca da başla satırının altındaki WHILE BUTON_1=0:WEND satırına hiç gerek kalmaz onuda silmen gerekir.

3. Programda ne LDR kontrolü ne voltaj kontrolü göremedim. Bir pinden LDR=0 ise denilmiş. LDR normalde sıfır olmaz onunda bir ADC okuması olması gerekmezmi? Lojik olarak (HIGH-LOW) şeklinde kontrol ediliyor galiba.
Bazı ADC okumaları var ama bir kalıba sokamadım.
Örneğin Gündüz kısmında bir ADC okuması yapılıyor ve okunan değer 48 ile çarpılıp 10 a bölünüyor. Makismum değer 1023 olduğuna göre hesaplanacak değer 4910 gibi alakasız bir değer oluyor aslında. Buraya belkide 5V dan daha küçük bir değer geliyor belkide ama aksine bir yorum yapmam mümkün değil maalesef.

Ete



eprom_20

Hocam söylediğiniz değişiklikleri yaptım,ayrıca klasörün içinde isis şeması var hocam yalnız proteus 8 de yapılmış bir çalışma görünmemesi ondan olabilir mi,,,,  Şemadan da görebileceğiniz gibi LDR=0 komutunu ldr li devredeki transistörden almıştım,

hesap konusunda yanlışım olabilir adc girişindeki potansiyometrenin orta ucundan okuduğum ve akünün yaklaşık 10,7 volt karşığını baz almıştım

ete

Versiyon 8 kullanmadığım için göremiyorum. En azından jpg olarak şemayı ekleyebilirsin.

Yaptığın değişiklikleride pek gözüm tutmadı. Birlikte sesli düşünelim.
Takip kısmında şunları yazdın;
TAKIP:
ADCIN 0,ADC_DEGERI0             'PORTA.0 DAKİ GERILIM DEĞERINI OKU
GERILIM0=ADC_DEGERI0*48/10      'MV ÇEVİR
IF GERILIM0<2350 THEN           'ÇIKAN SONUÇ  KÜÇÜKSE ALT SATIRA GEÇ
    LED_1=1
ELSE                            'DEĞİLSE
    LED_1=0
    WHILE BUTON_1=0:WEND
    GOTO TAKIP
ENDIF                    'IF İŞLEMİNİN SONU     
GOTO BASLA

Burada okunan ADC değeri şayet Akü den okunan değer ise şöyle bir formül kullan bence;
VOLT=(ADC_DEGERI0+1)*/30
Bu hesap sana direk akü voltajını 10 ile çarpılmış olarak verecektir. Kısaca akü 10,7V ise sen hesap sonucunda VOlt=107 olarak hesaplayacaksın. Formülü akü voltajını maksimum 12V olacağını kabul ederek hesapladım. Ancak şemayı göremedim. Bu voltajı nasıl pic'e veriyorsun. Yaptığın gerilim bölücü nasıl bir şey sonuçta akü'ninmaksimum değerinde Pic ADC girişinde kaç volt olacak bunları bilemiyorum. Benim hesabımda 12V luk maksimum değerde ADC girişinde 5V olacak şekildedir.

Yukarıdaki TAKIP sisteminin mantığını anlamadım. Çünki sanal değerler kullanmışsın. Benim formülü kullanmış olsan xxx voltun altını okursan Led yanacak üstünü okursan led sönecek şeklinde anlardım.
Bir anlamadığım şeyde neden okunan değer istenen değerden büyük ise program yeniden ADC okumaya gönderiliyor. ?
En iyisi bu takip mantığını açıkla sen.
Tuş kontrolüde yanlış yerde ENDIF ten sonra o kontrolü koymak daha uygun olur.

Diğerlerine bakmıyorum artık.

Ete


eprom_20

Hocam ilginiz için teşekkür ederim,,

TAKİP sistemini eğer akü voltajı 10,7 V'un  altına düşer ise LED_1 (yani PORTD.0) bağlı olan yükü devre dışı bırakmak için kullanmıştım bunu da BUTON_1 pullup (PORTB.1) 'e belirli zamanlarda başka bir devre ile tetikleyip akü voltajını takip ve kontrol etsin diye düşünmüştüm,,,
Hocam şemedan da göreceğiniz gibi pic bacaklarına max voltajda 5V geçmeyecek şekilde pot ve direnç kullandım,umarım yanlış yapmamışımdır,,,

Hesabınızıda uygulamaya çalıştım Hocam acaba mantığınız yine (ADC_DEGERI0+1)*1024/30 şeklinde midir,, Teşekkür ederim

ete

Şema ile birlikte pek çok şey netleşmiş oldu.
Öncelikle hesap mantığımı vereyim.
Okunacak maksimum voltaj (12V da) 5V olacaktır. Bu ise ADC okumasında 1023 değerini üretir.
sıfır ile birlikte 1024 okuma kademesine eşdeğerdir. o halde okunan voltaj 12/1024=0,01171875 gibi bir değer verir bize.
Şayet ondaloklı sayı kullanabilsek bu değeri sabit çarpan olarak kabul edip okuduğumuz ADC değeri ile çarparsak bize direk VOLT değerini verecek idi. Örnek verelim 511 okuduğunuz zaman buna 1 eklerseniz 512 edecektir. 512 * 0,01171875=6V verecektir.
Ondalıklı sayılarla çalışamadığımıza göre bu sabit çarpanı bir şekilde virgülden kurtarılmış hale dönüştürmemiz gerekiyor.
Basic de */ operatörü bir sayının çarpılarak elde edilen 32 bitlik verinin 256 ya bölünmüş halini bize verir.
O halde sabit çarpanımızı 256 ile çarparsak bize 3 değerini verir. Ölçmek istediğimiz voltajlardan birisi 10,7V olacağı için bu sayının virgülden kurtulmuş hali 107 olacaktır. O halde sonucu 10 ile çarpılmış olarak bulabilmek için 3 yerine 30 rakamını sabit çarpan olarak kullanacağız ama çarpma operatörümüz */ olacaktır.
O halde formül VOLT=(ADC+1)*/30 şeklinde uygulanacaktır. Bunun normal matematikteki gösterimi,
VOLT=(ADC+1)*30/256 şeklindedir.
256 ya bölme işlemini pic otomatik yaptığı için bunu formülümüze eklemiyoruz.

Programda anlamadığım bir husus da bir çok işlevin tuşa basma ile sınırlandırılmış olmasıdır. Bu tür işlerde bazı şeylerin otomatik olması beklenir. Yanlış da değerlendirmiş olabilirim ama programdan onu anlıyorum.
Anlattığın senaryoya bakılırsa yada mantığımıza göre;
- Önce gece mi gündüzmü ona bakılır , gündüz ise yük kapatılır sistem şarja bağlanır.
- Sonra akü voltajına bakılır 10,7V dan aşağıda ise yük yine kapatılır gündüz ise şarja bağlanır gece ise gündüz beklenir
- Şarj işlemi otomatik olması gerekir diye düşünüyorum. Yada solra panelin voltajı ölçülerek belirli sınrılar içinde ise şarj yaptırılır değilse şarj işlemi iptal edilir.
Bu 3 ana adımda yüğrütülecek işlemi birde butonlara neden bağlıyoruz bunu anlamıyorum. Bir sebebi olsa gerek.

LDR ye bağlı olan devre öyle kesin olarak şimdi gündüz veya şimdi gece diye çıkış vermez. Histerisiz denilen bir olay vardır.
Sabah ve akşam sularında o devre çıkışı bir gündüz bir gece işareti verir. O nedenle sistem şaşırır. Bu nedenle opamp çıkışının ADC ile okunması taraftarıyım. Bu okumda belirli bir aralık verilerek daha kesin sonuçlar alınabilir.

ETe

eprom_20

Teşekkür ederim Hocam,uyarılarınız doğrultusunda sistemi tekrar düzenleyeceğim çok sağolun,,Selametle

Powered by EzPortal