Devre çalışıyor. duty'i yavaş yavaş arttırıyor. çıkışta belirli bir yere kadar düzgün gerilim alıyorum. bir noktadan sonra bobin üstündeki akım aşırı yükselmeye başlıyor. sebebi ne olabilir?
orada gördüğünüz diyotun sağa doğru dönük olduğu devre sadece boost devresidir. Devrenin yerleşiminde sorun yok sadece arduino ile biraz daha kontrol edilmesi gözüküyor gibi. Güç elektroniği hakkında biraz araştırma yaparsanız buck, boost, buck-boost converter hakkında daha fazla bilgiye sahip olabilirsiniz. iyi günler.
şematik çizim
< Resime gitmek için tıklayın >
analog analiz
< Resime gitmek için tıklayın >
ARDUINO KODU
[/code]
//MK
const int pot_pin = A0; //potansiyometreden okunan degerin pini
const int feedback = A1; //cikistaki feedback'in 1/10 miktarindaki degeri
int vout = 0; //vout'u tanimladik
int vpot = 0; //vpot degerini tanimladik
int duty = 1; //duty'i tanimladik
int i=1; //i
void setup() {
cli(); // stop interrupts----- interrupt'lari durdurduk
TCCR1A = 0xA2; //registerleri belirledik
TCCR1B = 0x19; //registerleri belirledik
TIMSK1 = 0x01 ; // overflow interrupt
ICR1 = 249 ; // 31.25us cycle time, 32kHz PWM but 64kHz drive pulses (differential)----- frekansi ayarladik
OCR1A = 125-100 ; // example U drive
OCR1B = 125 ;
GTCCR = 0x83 ; // clear and halt prescalers
TCNT1 = 0xFFFF ; // synchronize counters exactly.
GTCCR = 0x00 ; // allow prescalers to fly
sei(); // allow interrupts-----interrut'lari tekrardan baslattik
pinMode(pot_pin, INPUT);
pinMode(feedback, INPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
Serial.begin(9600);
}
ISR(TIMER1_OVF_vect){
OCR1A=duty; //dutyi buradan ayarla bu kismi silebiliriz.
OCR1B=249-duty;
}
void loop(){
oku(); //potansiyometreden istenen gerilim ve cikistan alinan gerilimi okutuyoruz
while(i==1){
for(i=1;i<25;i++){
duty=duty+1;
delay(4);
}
}
oku();
if(vout < vpot){ //istenen gerilim cikis geriliminden buyuk ise calistirir--YUKSELTME
while(vout<vpot){ //cikis pot geriliminden dusuk oldugunda duty'i yukseltmesi daha sonra tekrardan okumasini istiyoruz.
duty=duty+1;
dutybelirleme();
delay(4+duty/10);
oku();
}
}
else if(vout > vpot){ //istenen gerilim cikis geriliminden kucuk ise calisir--DUSURME
while(vout>vpot){ //cikis pot geriliminden yuksek oldugunda duty'i dusurmesi daha sonra tekrardan okumasini istiyoruz.
duty=duty+1;
dutybelirleme();
delay(4+duty/10);
oku();
}
}
delay(10); //araya kucuk delay koyduk.
}
void dutybelirleme(){
if(duty>225){
duty=225; //duty'i sinirlandirdik.
}
else if(duty<25){
duty=25; //duty'i sinirlandirdik.
}
}
void oku(){
vpot = analogRead(pot_pin); //pottan okunan degeri vpot'a atadik
vout = analogRead(feedback ); //cikistan okunan degeri vout'a atadik
if(vpot>780){ //pot degeri 4V'dan(cikistan alinan deger icin 40V'a tekabul ediyor) buyuk oldugunda 40V'a cekiyor.
vpot=780;
}
}
[code]
< Bu mesaj bu kişi tarafından değiştirildi Frost 112 -- 22 Aralık 2018; 0:6:1 >