Picproje Elektronik Sitesi

DERLEYİCİLER => PIC C => Konuyu başlatan: zxro - 04 Aralık 2012, 21:40:52

Başlık: Delay ile PWM'den 750 Hz Sinüs Dalgası Yaratmak
Gönderen: zxro - 04 Aralık 2012, 21:40:52
Merhaba arkadaşlar,

Aşağıdaki kodu çalıştırdığımda bir PWM train oluşturuyor. Digital to Analog converter ile sinüs sinyaline çeviriyorum. 1.2 kHz frekans veriyor. Sinüs dalgası görüntüsü de güzel buraya kadar bir problem yok.

Soruma gelince, kodda yani delaylerde değişiklik yaparak sinüs dalgasında 750 Hz frekansı yakalamam gerekiyor. Nasıl yapabilirim, delayler nasıl ve neye göre hesaplanır? Hepsinin iki katını alıyorum sinüs dalgası şekli bozuluyor. Bu delayler arasında nasıl bir bağlantı var?


#include <P18F452.h>
#include <delays.h>
#pragma config WDT = OFF, LVP = OFF, OSC = HS, OSCS = OFF, BOR = OFF
#define C1 PORTCbits.RC1
#define C2 PORTCbits.RC2
void main(void) {
TRISCbits.TRISC2 = 0;
TRISCbits.TRISC1 = 0;
while(1){
// First half period
C2 = 1;
C1 = 1;
Delay10TCYx(15); // T1
C1 = 0;
Delay10TCYx(10); // T2
C1 = 1;
Delay10TCYx(15); // T3
C1 = 0;
Delay10TCYx(17); // T4
C1 = 1;
Delay10TCYx(15); // T5
C1 = 0;
Delay10TCYx(10); // T6
C1 = 1;
Delay10TCYx(15); // T7

// Second half period
C1 = 1;
C2 = 1;
Delay10TCYx(15); // T1
C2 = 0;
Delay10TCYx(10); // T2
C2 = 1;
Delay10TCYx(15); // T3
C2 = 0;
Delay10TCYx(17); // T4
C2 = 1;
Delay10TCYx(15); // T5
C2 = 0;
Delay10TCYx(10); // T6
C2 = 1;
Delay10TCYx(15); // T7
}
}


(http://www.electronicspoint.com/attachments/2162d1308935965-iramy20up60b-please-help-pwm-sin-wave.gif)