Arduino ile 20khz PWM üretme ve duty cycle orani belirleme

Başlatan hilmi, 17 Mayıs 2017, 11:23:01

hilmi

Merhaba arkadaşlar,
Arduino ile frekans: 20 khz duty cycle: %50 olan PWM sinyali üretmek istiyorum. Duty cycle ve frekansı nasıl ayarlıyorum.Yardımcı olursanız sevinirim.

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

hilmi

Teşekkür ederim fakat aşagıdaki kodları kullandığımda osiloskoptan pin 3 ten çıkış sinyalini göremiyorum

void setIrModOutput(){  // sets pin 3 going at the IR modulation rate
  pinMode(3, OUTPUT);
  TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20); // Just enable output on Pin 3 and disable it on Pin 11
  TCCR2B = _BV(WGM22) | _BV(CS22);
  OCR2A = 51; // defines the frequency 51 = 38.4 KHz, 54 = 36.2 KHz, 58 = 34 KHz, 62 = 32 KHz
  OCR2B = 26;  // deines the duty cycle - Half the OCR2A value for 50%
  TCCR2B = TCCR2B & 0b00111000 | 0x2; // select a prescale value of 8:1 of the system clock
}

mehmet

void setIrModOutput(void)
{
  pinMode(3, OUTPUT);
  TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
  TCCR2B = _BV(WGM22) | _BV(CS22);
  OCR2A = 99; 
  OCR2B = 50;  
  TCCR2B = TCCR2B & 0b00111000 | 0x2; 
}

void setup(void) 
{
  setIrModOutput();
}

void loop(void) 
{
  
}
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

mr.selim

@mehmet Hocam 3 ayrı pwm kullanmak istediğimizde 3 farklı timer dan mı almamız gerekiyor ? Anladığım kadarı ile duty oranlarında OCR2A yükselirse OCR2B düşüyor dimi. Bende bu şekilde pwm üretmek istiyorum fakat değişken duty oranı ve 3 pwm olacak. Öğrenemedim gitti :)


hilmi

Alıntı yapılan: mehmet - 18 Mayıs 2017, 23:07:27
void setIrModOutput(void)
{
  pinMode(3, OUTPUT);
  TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
  TCCR2B = _BV(WGM22) | _BV(CS22);
  OCR2A = 99; 
  OCR2B = 50;  
  TCCR2B = TCCR2B & 0b00111000 | 0x2; 
}

void setup(void) 
{
  setIrModOutput();
}

void loop(void) 
{
  
}


@mehmet yukarı kodları kullandığımda pin 3 çıkışından sinyal alamıyorum sinyalı yazdırmak için kod mu eklemek gerekir yukarıdaki koda

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

hilmi

Arduino Mega 2560 kullanıyorum sizin vermiş olduğunuz kodlar ile pin 3 çıkışından osiloskop ile PWM sinyalini göremiyorum. Multimetre ile pin 3 çıkışının gerilimi ölçtüğümde de değer göremiyorum.Çıkış sinyalini alamıyorum.İlginiz için teşekkür ederim.

hilmi

void setup() {
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20); 
TCCR2B = _BV(CS20); 
  OCR2A = 90;
  OCR2B = 180;
TCCR2B = (TCCR2B & 0xF8) | 0x01 ;
}

void loop() {
  // put your main code here, to run repeatedly:

}


yukarıdaki kod ile 30 khz PWM sinyali ürettim fakat osiloskop ile incelediğimde voltaj aralığı 0-5 volt arasında olmuyor eksi değere düşüyor. Osiloskop göruntusu aşağıdaki gibidir.0-5 volt aralığında nasıl üretebilirim.Yardımcı olursanız sevinirim arkadaşlar.




mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

hilmi

Alıntı yapılan: mehmet - 05 Haziran 2017, 11:41:37
CH1 gerilim ayarını AC den DC ye
çeviriniz.

@mehmet Teşekkür ederim düzeldi. Duty cycle oranı %37 olarak görünüyor. Duty cycle oranını  OCR2A = 90;  OCR2B = 180; den mi ayarlıyoruz. Duty cycle oranını nasıl belirliyoruz.

cann

bu konu çok gizli bir konu değil.
gerekli olduğunda da tekrar baştan araştırmak gerekiyor.

kodları tam yazsanız, forumda ihtiyacı olan kullanır, tekrar gündeme geldiğinde bu konu linki verilir.

30 Khz fazla değilmi 16-20 KHz için kodda nasıl değişiklik yapmak gerek?
Teşekkürler

mehmet

OCR2B değeri ile.
OCR2B = 130; yaklaşık %50...

Ek:
Hepsi zaten burada...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

crazy