Arama butonu
Bu konudaki kullanıcılar: 1 misafir
4
Cevap
2048
Tıklama
0
Öne Çıkarma
Arduino PWM Frekansı arttırma (Buck boost converter) için
F
7 yıl
Yüzbaşı
Konu Sahibi

Kod bu şekilde. frekans 16 kHz'de sabit. duty cycle'ı istediğim gibi değiştirebiliyorum.
Sorunum şu frekans devre için yetersiz kalıyor.
Frekansı 32kHz yada 64 kHz'e arttırmam gerekiyor. nasıl yapabilirim ?


quote:



//MK


const int pot_pin = A0;
const int feedback = A1;
int pot = 0;
int cikti = 0;
int vout = 0;
int vpot = 0;
int duty = 1;
int bosluk = 510;
int i=0;

void setup() {
cli(); // stop interrupts
TCCR1A = 0xF2 ; // phase correct (mode 1010, ICR1 controls period)
TCCR1B = 0x01 ; // prescale by 1, change to 0x12 for prescale by 8
TIMSK1 = 0x01 ; // overflow interrupt
ICR1 = 500 ; // 31.25us cycle time, 32kHz PWM but 64kHz drive pulses (differential)
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
pinMode(pot_pin, INPUT);
pinMode(feedback, INPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
Serial.begin(9600);

}

ISR(TIMER1_OVF_vect){

OCR1A=bosluk; //dutyi buradan ayarla
OCR1B=511-bosluk;
}



void loop(){

oku(); //potansiyometreden istenen gerilim ve cikistan alinan gerilimi okutuyoruz

/*while(i==0){//yumusak baslama icin fonksiyon

for(i=1;i<4;i=i++){
duty=i*100;
bosluk=511-duty;
delay(20);
}
}*/
oku();

if(vout < vpot){//istenen gerilim cikis geriliminden buyuk ise calistirir

while(vout<vpot){
duty=duty+4;
dutybelirleme();
delay(50);
oku();
}
}
else if(vout > vpot){//istenen gerilim cikis geriliminden kucuk ise calisir

while(vout>vpot){
duty=duty-32;
dutybelirleme();
delay(20);
oku();
}
}

//delay(10);

}

void dutybelirleme(){

if(duty>490){
duty=490;
}
else if(duty<10){
duty=10;
}
bosluk=511-duty;
}

void oku(){
pot = analogRead(pot_pin);
//vpot= map ( pot , 0, 1023 , 0 , 1023);
vpot=pot;
//499=5.0 V

cikti = analogRead(feedback );
//vout= map ( cikti , 0, 1023 , 0 , 1023);
vout=cikti;
//399=40.0 V

if(vpot>820){
vpot=820;

}
delay(10);
}