Auto Start Auto Stop Battery Charger Devresi

Başlatan ghistmanzero, 14 Şubat 2018, 22:39:26

ghistmanzero



Merhabalar,  yukarıdaki devre ile başlıkta belirttiğim şekilde bir şarj aleti yapmaya çalışıyorum. 12v luk bir aküyü 14 v ile şarj ediyorum. akımı ve tam gerilim değeri şuan için önemli değil.Şuan için sıkıntı çektiğim konu akünün şarjı alt sınırın altına düşünce şarjın başlamasını sağlayacak ve akü gerilimi üst sınırı aşınca şarj işlemini sonlandıracak kısım ile ilgili.

şöyle ki devreye iki tane opamp koydum. biri alt sınır için diğeri de üst sınır için. bu opamp çıkışları da bir flip flopa bağlı. alt sınırın altına inince alt sınır opampı çıkış veriyor ve  flip flop set ediliyor. role çekiyor ve aku şarj oluyor. Akü gerilimi üst sınırın üstüne çıkınca da üst sınır opampı çıkış veriyor ve flip flop reset ediliyor. o zaman da role bırakıyor ve şarj kesiliyor. teoride böyle.

Devreyi kurup bir deneyeyim dedim.  Başta şarj gerilimi kısmını takmadım. Akü yerine de gerilimin 0-30 arası değiştiği bir gerilim bağladım. Devre dediğim gibi çalıştı.Sorun olmadı. Aküyü de bağladım. Gerilim yüksek olduğundan röleyi çekmedi. Bu da iyi hoş dedim. Şarj kısmına da lm317 ile 14V verdim. İşte tam bu kısımda başta akıl edemediğim büyük hatamı farkettim.

1) Şarj gerilimi alt sınırın altına düşünce röle çekiyor. alt sınıra 11v diyelim. 11V un altına düşünce röle çekiyor ve 14V devreye giriyor. normalde beklentim gerilimin (11+14)/2=12.5 v  olması. bu durumda da üst sınır(13.8V) aşılamadığı için de üst sınıra ulaşıp devre reset edilene kadar şarja devam etmesini beklerken 14V devreye dahil olur olmaz opamp gerilimi 14V olarak okuyor ve şarj işlemi tamam diyip roleyı bırakıyor ve 14V tu kesmiş oluyor. Bu durumda da gerilim yine 11V a düşüyor. röle yine çekiyor .sonra yine bırakıyor. Bu işlem yaklaşık 50hz de filan devam ediyor :D  Bu sorunu nasıl çözebilirim acaba ?

2) devreye hiç akü bağlamayınca da gerilim 0 okuduğundan şarjı başlatıyor. roleden uçlara 14 v düşünce bırakıyor. yine aynı şekilde çekip bırakıyor  sürekli. bu sorun için 3. bir opamp ekleyip gerilim değeri mesela 3v(akünün bağlanmadığıını analamak için) tan küçük ise set etmemesi için yani röleyi çekmemesi için set hattına basit bir transistor ile and kapısı koymayı düşünüyorum. bu şekilde eğer hem alt sınır opampı hem de 3v opampı çıkış verirse set edecek ve şarj başlayacak. aksi halde başalamayacak. bu işe yarar mı acaba ? ya da daha basit bir yolu var mı bu sorunu çözmenin ?
Baya da uğraştım devre ile. Benzer devreler aradım ama bulamadım. Amacım akuyu devreye bir kere bağlayıp hiç sökmeden otomatık şarj edip otomatik şarjı kesmek. Bu ani gerilim yükselmesini nasıl engellerim veya bu tasarım için farklı bir tavsiyesi olan var mı acaba ? Cevaplar için şimdiden teşekkürler.

yesilu

Birinci sorunu röleye paralel bağlanacak 1000uf çözebilir. 2.sorun beni aşar.birinci için önerdiğim de kesin değil, tahminimce nedeni şarj geriliminin haynağı gereğinden yüksek akım kapasitesine sahip, gerilim çökmüyor.veya akü ölmeye yakın, gerilimi çökertecek akımı çekmiyor. Ama bunları düşünmüşsündür, en olası 3. teorim akü denen alet şarj gerilimi uygulandığı ilk anda içindeki kimyasal olay biraz geç başlıyor, yani doğası gereği ilk anda akım çekmiyor. Kondansatör röleyi akü akım çekene kadar geciktirmek için. (Bu fikirlerimin kaynağının şuan üzerinde oturuyorum, sorumluluk kabul etmem)

yesilu

Kondansatörü röleye bağlasan da flip flopun yine konum değiştirecek. Sen onu röleye değil de seri bir direnç sonrasında opampların sense hattına koy en iyisi...

ipek

refererans gerilimi hariç neredeyse LM555 çizmişsin ,burada window komparator mantığıyla bir uygulama var incele istersen...

http://www.robkalmeijer.nl/techniek/electronica/radiotechniek/hambladen/radcom/1990/12/page32b/index.html

HexfeT

#4
Akü geriliminin 14V a ulaşması tam dolduğu anlamına gelmez, çektiği akıma da bakılmalı. Kurşun asit akü nasıl şarj edilir öncelikle onu araştırmalısın. Akü şarjı için şarj gerilimine ayarlı ve akım sınırlamalı bir güç kaynağı yeterli. Akünün sağlığından endişelenildiği için röle falan işin içine girdiyse hiç gereği yok. Akım ve gerilim kontrol altındaysa ve istisna bir durum yoksa aküyü devreden ayırmaya gerek yok.

ghistmanzero

Alıntı yapılan: yesilu - 15 Şubat 2018, 00:59:20
Kondansatörü röleye bağlasan da flip flopun yine konum değiştirecek. Sen onu röleye değil de seri bir direnç sonrasında opampların sense hattına koy en iyisi...

acaba mikro denetleyici mi kullansam ? hani manyetik alandan çok wetkilenmesin, analog olursa daha sağlam olur diye düşündüm.

ghistmanzero

Alıntı yapılan: ipek - 15 Şubat 2018, 01:40:19
refererans gerilimi hariç neredeyse LM555 çizmişsin ,burada window komparator mantığıyla bir uygulama var incele istersen...

http://www.robkalmeijer.nl/techniek/electronica/radiotechniek/hambladen/radcom/1990/12/page32b/index.html

Doğrudur. Benzer uygulamalar onunla da yapılıyor. Devre zaten schmitt trigger devresi oluyor. ben iki komparator ve bir tane de transistorlerle yapılmış flip flop kullandım. Entegre koymadım. 555 ile de aynısı yapılabiliyor flip flop entegresi kullanılarak da yine yapılabiliyor.

Ama mevcut sıkıntı onlarda da olur diye düşünüyorum. Verdiğiniz linki inceliycem

ghistmanzero

#7
Alıntı yapılan: HexfeT - 15 Şubat 2018, 03:08:12
Akü geriliminin 14V a ulaşması tam dolduğu anlamına gelmez, çektiği akıma da bakılmalı. Kurşun asit akü nasıl şarj edilir öncelikle onu araştırmalısın. Akü şarjı için şarj gerilimine ayarlı ve akım sınırlamalı bir güç kaynağı yeterli. Akünün sağlığından endişelenildiği için röle falan işin içine girdiyse hiç gereği yok. Akım ve gerilim kontrol altındaysa ve istisna bir durum yoksa aküyü devreden ayırmaya gerek yok.

Şarj edeceğim akü bakımsız kuru akü dedikleri akü. Şarj için lm317 kullanıyorum ama lm2576 da olabilir. şarj voltajını sabit 14.4 V a ayarlıyorum. devreye seri bir 5w direnç de koyup onun üzerinden akünün kapasitesinin 1/10 u kadar akımla şarj ediyorum. Akım sürekli aynı kalacağından(direnç sınırlaması ile tabi. gerilim yükseldikçe akım azalacak) 14.4 v ulaştığında doluma çok yaklaşır diye düşünüyorum. devreyi kesince voltaj biraz düşer direk şarj voltajındda kalmaz ama yine de uygun şarj olur diye tahmin ediyordum. eğer sabit akım ve sabit gerilim ve sabit zamanlı olarak 3 aşamada şarj olayını yapmam şart ise direk denetleyici ile yapayım diyorum. Bir sakıncası olur mu acaba? Analog devre olması hem benim kendimi geliştirme çabam hem de denetleyiciden daha kararlı ve daha az uğraşmalı(kod atma,resetlenme olmasın diye türlü türlü önlemler) olmasını istemem.

Şarj olayında, bildiğim kadarıyla önce sabit akım sağlanarak voltaj arttırılıyor. belli bir değere kadar öyle devam ediliyor. sonra sabit gerilim sağlanıp akım 50mA seviyelerine  kadar düşünce bu seviyede belli bir süre daha tampon şarj devam ediyor ve sonra kesiliyor.Ben tasarımı sıfırdan yapamaya çalıştığımdan böyle bir sistemi analog devre elemanalrı ile yapmak biraz zor geliyor bana. adım adım gitmek istedim.belki sonrasından böyle bir şeye de kalkışırım ama şuan o derece bir yeteneğim , tecrübem ve bilgim yok maalesef.
Ama aklıma gelen ilk şey sabit akım için shunt direnci üzerinden belli bir referans gerilimi ile karşılaştırma yaparak bir pwm ile aşağı yukarı gerilimi değiştirip akımı daima sabit tutmak.
Sabit gerilim için ise direk önceden hazırlanmış bir regulatorü gereken zamanda devreye dahil etmek geliyor aklıma. son olarak tampon olayında ise zamanlama önemli . 555 ile en fazla 10sn saydırmıştım devreye. daha uzun süreler için de kulanılır mı bilemiyorum. şarj deşarj için konacak kapasitor çok büyük olmalı o zaman . Yani direk aklıma gelenler bunlar ama ne derece düzgün çalışırdı bilemem

mg1980

@ghistmanzero ,
Arduino biliyorsanız  bir çalışmam var...epeyce özelliği mevcut..benim işimi görüyor. Sizi fazla uğraştırmayacaksa verebilirim.

ghistmanzero

Alıntı yapılan: mg1980 - 15 Şubat 2018, 10:35:14
@ghistmanzero ,
Arduino biliyorsanız  bir çalışmam var...epeyce özelliği mevcut..benim işimi görüyor. Sizi fazla uğraştırmayacaksa verebilirim.

çok teşekkürler. Genelde denetleyici gerektiren işleri ilk olarak arduino ile yapıyorum zaten. Temel olarak program tamamlanınca da pic için revize ediyorum kodu. Koddan ziyade devre olarak nasıl birşey yaptığınızı(akım ölçme, gerilim ölçme ve genel işleyişinde nasıl bir yol izlediğiniz) anlatsanız bile yeter. Mesela adc den okuma alırken her türlü bu bendeki sorun sizde de olmuştur.bunu nasıl hallettiniz. ilk şarj ve akuyu birbirine bağladığınızdaki o gerilşm sıçramasını adc ye delay koyup da mı hallettiniz ? farklı birşey mu koydunuz ?

mg1980

#10
@ghistmanzero ,
Yaptığım çalışmada; Cihaz önce aküyü yüke bindirip bu esnada bir örnekleme ile voltajı ölçüyor.BubleSort yöntemi ile aşırı bir kaç ölçümü ayırıyor. Ölçülen voltajın 1-2 v üzerinde seçtiği voltajla şarja başlıyor. 20 dk.sonra aynı işlemi tekrar yapıyor.Şarj esnasında ACS712 ile sürekli şarj akımını izliyor. Belirli bir sınır altına indiğinde şarj voltajını kendisi bir üst kademeye çıkarıyor. Koyduğum sınıra göre aşırı akım çekişinde kapatıyor.Ayarlanan şarj sınırına gelince kapatıp sesli uyarı da veriyor. LCD ekranda ölçülen voltaj, şarj voltajı,şarj akımı, şarj süresi izlenebiliyor. Güç kaynağı olarak trimpotu ile voltajı 10-28v arası ayarlanabilen bir SMPS (15A) kullandım.Bu trimpotu çıkardım yerine 4551 analog swiç +direnç koydum.Bu sayede bahsettiğim voltaj ayarlaması otomatik olarak yapılabiliyor. Başlangıçta seçim olarak Normal ve Hızlı Şarj alternatifi var.Halen kullanıyorum. Araç aküleri için kalibrasyonunun kontrol edilmesi gerekebilir.

ghistmanzero

Alıntı yapılan: mg1980 - 15 Şubat 2018, 11:23:48
@ghistmanzero ,
Yaptığım çalışmada; Cihaz önce aküyü yüke bindirip bu esnada bir örnekleme ile voltajı ölçüyor.BubleShort yöntemi ile aşırı bir kaç ölçümü ayırıyor. Ölçülen voltajın 1-2 v üzerinde seçtiği voltajla şarja başlıyor. 20 dk.sonra aynı işlemi tekrar yapıyor.Şarj esnasında ACS712 ile sürekli şarj akımını izliyor. Belirli bir sınır altına indiğinde şarj voltajını kendisi bir üst kademeye çıkarıyor. Koyduğum sınıra göre aşırı akım çekişinde kapatıyor.Ayarlanan şarj sınırına gelince kapatıp sesli uyarı da veriyor. LCD ekranda ölçülen voltaj, şarj voltajı,şarj akımı, şarj süresi izlenebiliyor. Güç kaynağı olarak trimpotu ile voltajı 10-28v arası ayarlanabilen bir SMPS (15A) kullandım.Bu trimpotu çıkardım yerine 4551 analog swiç +direnç koydum.Bu sayede bahsettiğim voltaj ayarlaması otomatik olarak yapılabiliyor. Başlangıçta seçim olarak Normal ve Hızlı Şarj alternatifi var.Halen kullanıyorum. Araç aküleri için kalibrasyonunun kontrol edilmesi gerekebilir.
ACS'den hassas ölçüm alabiliyor musunuz ? baya sıkıntı olmuştu ben onu kullanırken. mesela 1.3Ah lik akü için akımı 130mA de tutumak için ölçüm almaya çalıştığımda sıkıntı çıkaracak gibime geliyor çünkü normal motorda denemiştim onu hassasisyeti iyi değildi sanki. 5A, 20A ve 30A olanları vardı galiba.Ben de 5A olanı kullandım. Motor max 600mA çeken bir motor. değerler baya parazitliydi ve birbirine yakındı. tam olarak sonuç alamayınca ben de low side akım okuma için shunt ve opamp kulandım. adc den boşta 50, tam yükte ise 770 okuyordum.ACS'den çok daha hassas olmuştu . Belki de benim aldığım o acs bozuktu , tam birşey diyemiyorum ama sorun olmuştu hani.

bubleshort olayı ise değerleri büyükten küçüğe veya küçükten büyüğe sıralama için, değil mi ? şu alttaki kod onu yapıyor mesela. burada okunan değerlerde aşırı gerilim sıçramalarını nasıl tespit ediyorsunuz peki ? hani direk en büyük iki üç değeri mi elimine ediyorsunuz ?

// C program for implementation of Bubble sort
#include <stdio.h>

void swap(int *xp, int *yp)
{
	int temp = *xp;
	*xp = *yp;
	*yp = temp;
}

// A function to implement bubble sort
void bubbleSort(int arr[], int n)
{
int i, j;
for (i = 0; i < n-1; i++)	 

	// Last i elements are already in place 
	for (j = 0; j < n-i-1; j++) 
		if (arr[j] > arr[j+1])
			swap(&arr[j], &arr[j+1]);
}

/* Function to print an array */
void printArray(int arr[], int size)
{
	int i;
	for (i=0; i < size; i++)
		printf("%d ", arr[i]);
	printf("n");
}

// Driver program to test above functions
int main()
{
	int arr[] = {64, 34, 25, 12, 22, 11, 90};
	int n = sizeof(arr)/sizeof(arr[0]);
	bubbleSort(arr, n);
	printf("Sorted array: \n");
	printArray(arr, n);
	return 0;
}

mg1980

Ben ASC712-30A olanını kullandım.0,5A 'e kadar lazım oldu bana.Bir sıkıntı görmedim. Bublesort olayında diziye dizdikten sonra en küçük ve en büyük iki tanesini eliyorum. Kodun bir kısmını koyuyorum. Çok profesyonel sayılmaz.Hocalarım mazur görsün:
void sarj()  //**********************************************************************************************
{
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("NORMAL SARJ");
      lcd.setCursor(0,1);
      lcd.print("OLCUYOR...");
      digitalWrite(A3,HIGH);
      delay(100);
      digitalWrite(A3,LOW);
      delay(100);
      digitalWrite(A3,HIGH);
      delay(100);
      digitalWrite(A3,LOW);
      
      digitalWrite(YUK,HIGH); // AMPUL DEVREDE VOLTAJ ÖLÇ
      delay(2000);                                  //3500
      

     for(i=0;i<20;i++) {                           // 20 kez voltaj ölçüm numunesi alınıyor.Ortalaması alınacak
        girisVoltaji=analogRead(VOLC)*0.0049*3;   // 3 katsayısı gerilim bölücü ile 14,1v 4.7v  ölçüldüğü için
        okunan[i]=girisVoltaji;                  // ...DİZİ İÇİNE ÖLÇÜM SIRASINA GÖRE YERLEŞTİRME..
        delay(5);                               // 5 idi.
     }
      
      
      for(x=0;x<20;x++) {                    //Dizi elemanlarının KÜÇÜKTEN BÜYÜĞE sıralanması
        for(m=x+1;m<20;m++) {
          if(okunan[x]>okunan[m]) {
            temp=okunan[x];
            okunan[x]=okunan[m];
            okunan[m]=temp;
          }
        }
        
      }
      
       toplam=0;
        for(x=2;x<18;x++){  //En küçük iki değer ile en büyük iki değeri eliyoruz
         toplam=toplam+okunan[x]; // Kalan 16 değeri topluyoruz.
        }
        ort=toplam/16;
         
    
     digitalWrite(YUK,LOW); //Ampul ve ölçme devre dışı
     delay(1000);
     if(ort>13.4){          // Akü voltajı 14V ise şarjı kes.
      while(1){
        bitti();
      }
     }
     else if(ort<12)
     {
      pwmv=12.7;
      seviye=0;
      duzenle(seviye);
     }
     else if(ort>=12 && ort<12.5)
     {
      pwmv=13;
      seviye=1;
      duzenle(seviye);
     }
     
     else if(ort>=12.5 && ort<13)
     {
      pwmv=13.5;
      seviye=2;
      duzenle(seviye);
     }
     else if(ort>=13 && ort<13.5)
     {
      pwmv=14;
      seviye=3;
      duzenle(seviye);
     }
     else if(ort>=13.2 && ort<14)
     {
      pwmv=14.5;
      seviye=4;
      duzenle(seviye);
     }
     else if(ort>=13.3 && ort<14)
     {
      pwmv=15;
      seviye=5;
      duzenle(seviye);
     }
     else if(ort>=13.4 && ort<14)
     {
      pwmv=15.5;
      seviye=6;
      duzenle(seviye);
     }
     else if(ort>=12.5 && ort<13)
     {
      pwmv=16.5;
      seviye=7;
      duzenle(seviye);
     }
    else
    {
     while(1){
      bitti();
     } 
    }
}

ghistmanzero

Alıntı yapılan: mg1980 - 15 Şubat 2018, 12:32:04
Ben ASC712-30A olanını kullandım.0,5A 'e kadar lazım oldu bana.Bir sıkıntı görmedim. Bublesort olayında diziye dizdikten sonra en küçük ve en büyük iki tanesini eliyorum. Kodun bir kısmını koyuyorum. Çok profesyonel sayılmaz.Hocalarım mazur görsün:
void sarj()  //**********************************************************************************************
{
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("NORMAL SARJ");
      lcd.setCursor(0,1);
      lcd.print("OLCUYOR...");
      digitalWrite(A3,HIGH);
      delay(100);
      digitalWrite(A3,LOW);
      delay(100);
      digitalWrite(A3,HIGH);
      delay(100);
      digitalWrite(A3,LOW);
      
      digitalWrite(YUK,HIGH); // AMPUL DEVREDE VOLTAJ ÖLÇ
      delay(2000);                                  //3500
      

     for(i=0;i<20;i++) {                           // 20 kez voltaj ölçüm numunesi alınıyor.Ortalaması alınacak
        girisVoltaji=analogRead(VOLC)*0.0049*3;   // 3 katsayısı gerilim bölücü ile 14,1v 4.7v  ölçüldüğü için
        okunan[i]=girisVoltaji;                  // ...DİZİ İÇİNE ÖLÇÜM SIRASINA GÖRE YERLEŞTİRME..
        delay(5);                               // 5 idi.
     }
      
      
      for(x=0;x<20;x++) {                    //Dizi elemanlarının KÜÇÜKTEN BÜYÜĞE sıralanması
        for(m=x+1;m<20;m++) {
          if(okunan[x]>okunan[m]) {
            temp=okunan[x];
            okunan[x]=okunan[m];
            okunan[m]=temp;
          }
        }
        
      }
      
       toplam=0;
        for(x=2;x<18;x++){  //En küçük iki değer ile en büyük iki değeri eliyoruz
         toplam=toplam+okunan[x]; // Kalan 16 değeri topluyoruz.
        }
        ort=toplam/16;
         
    
     digitalWrite(YUK,LOW); //Ampul ve ölçme devre dışı
     delay(1000);
     if(ort>13.4){          // Akü voltajı 14V ise şarjı kes.
      while(1){
        bitti();
      }
     }
     else if(ort<12)
     {
      pwmv=12.7;
      seviye=0;
      duzenle(seviye);
     }
     else if(ort>=12 && ort<12.5)
     {
      pwmv=13;
      seviye=1;
      duzenle(seviye);
     }
     
     else if(ort>=12.5 && ort<13)
     {
      pwmv=13.5;
      seviye=2;
      duzenle(seviye);
     }
     else if(ort>=13 && ort<13.5)
     {
      pwmv=14;
      seviye=3;
      duzenle(seviye);
     }
     else if(ort>=13.2 && ort<14)
     {
      pwmv=14.5;
      seviye=4;
      duzenle(seviye);
     }
     else if(ort>=13.3 && ort<14)
     {
      pwmv=15;
      seviye=5;
      duzenle(seviye);
     }
     else if(ort>=13.4 && ort<14)
     {
      pwmv=15.5;
      seviye=6;
      duzenle(seviye);
     }
     else if(ort>=12.5 && ort<13)
     {
      pwmv=16.5;
      seviye=7;
      duzenle(seviye);
     }
    else
    {
     while(1){
      bitti();
     } 
    }
}


her ölçümden zaten normal şekilde belli sayıda ölçüm yapıp ortamalama alıyorsunuz. sıralamayı yapıp , sıralamadan sonra ilk ve son iki terimi, dizinin 2. elemanından başlayıp, bitişi de sondan iki eleman önce bitirerek yapıyorsunuz.  mevcut değerleri de yine ortalama üzerinden değerlendiriyorsunuz. Gayet güzel olmuş .paylaştığınız için teşekkürler

mg1980

 Eğer anlattığım sistemi komple yapmak isterseniz de kodların tamamını paylaşabilirim.