Sinüs Inverter farklı frekanslarda bozuluyor.

Başlatan Cemre., 26 Nisan 2016, 18:06:04

Cemre.

Bir önceki konuda (https://www.picproje.org/index.php/topic,64096.0.html) çalıştıramadığım frekans ayarlı sinus inverter devresini bugün çalıştırmayı, daha doğrusu 40Hz civarlarında düzgün sinus almayı başardım. Scope görüntüleri aşağıda. Bekleme süresini değiştirerek sinus frekansını (anahtarlama frekansı değil) değiştiriyorum. Ancak sinyal bozuluyor. Bu konuya bir çözüm arıyorum.

100kHz anahtarlama frekansında 40Hz sinus sinyali.


100kHz anahtarlama frekansında 25Hz sinus sinyali.


100kHz anahtarlama frekansında 23Hz sinus sinyali.


Bu sorunun sebebi ne olabilir? Her iki alternansta da aynı noktaya gelen bu piklerin sebebi nedir? Yazılım dışında bir sebep olabilir mi?

İkinci sorum, 16F88 entegresini 8MHz INT RC modunda çalıştırabilmek için yapmam gereken ayarlar nelerdir. İşlemcinin 8MHz'de koştuğundan emin olamıyorum.


mesaj birleştirme:: 26 Nisan 2016, 18:54:48

int i,x,y,Freq;

//const char sine[15] = {10,37,77,125,173,213,240,250,240,213,173,125,77,37,10};

const char sine[31] =  {25,49,73,96,118,137,
159,177,193,208,220,231,239,245,249,250,249,245,
239,231,220,208,193,177,159,137,118,96,73,49,25};

void Bekle(unsigned int sure)
{
 for(y=0;y<sure;y++) Delay_us(1);
}

void main()
{
 OSCCON = 0b01100010;
 ADCON1.ADCS2=1;
 ADCON0.ADCS1=0;
 ADCON0.ADCS0=1;
 ANSEL = 0b00000001;

 TRISA.B0 = 1;
 TRISA.B2 = 1;
 TRISA.B3 = 1;
 TRISA.B4 = 1;
 
 TRISB.B1 = 0;
 TRISB.B2 = 0;

 PORTB.B1 = 0;
 PORTB.B2 = 0;

 if(!PORTA.B2 && !PORTA.B3 && !PORTA.B4)
 {
  PWM1_Init(500);
  PWM1_Set_Duty(0);
  PWM1_Start();
 }else if(!PORTA.B2 && !PORTA.B3 && PORTA.B4)
 {
  PWM1_Init(1000);
  PWM1_Set_Duty(0);
  PWM1_Start();
 }else if(!PORTA.B2 && PORTA.B3 && !PORTA.B4)
 {
  PWM1_Init(2500);
  PWM1_Set_Duty(0);
  PWM1_Start();
 }else if(!PORTA.B2 && PORTA.B3 && PORTA.B4)
 {
  PWM1_Init(5000);
  PWM1_Set_Duty(0);
  PWM1_Start();
 }else if(PORTA.B2 && !PORTA.B3 && !PORTA.B4)
 {
  PWM1_Init(10000);
  PWM1_Set_Duty(0);
  PWM1_Start();
 }else if(PORTA.B2 && !PORTA.B3 && PORTA.B4)
 {
  PWM1_Init(25000);
  PWM1_Set_Duty(0);
  PWM1_Start();
 }else if(PORTA.B2 && PORTA.B3 && !PORTA.B4)
 {
  PWM1_Init(50000);
  PWM1_Set_Duty(0);
  PWM1_Start();
 }else{
  PWM1_Init(100000);
  PWM1_Set_Duty(0);
  PWM1_Start();
 }

 Delay_ms(50);

while(1)
{
 PORTB.B1 = 0;
 PORTB.B1 = 0;
 Freq = ADC_Read(0)/40;

 for(x=0;x<5;x++){
                  PWM1_Set_Duty(0);
                  PORTB.B2 = 0;
                  PORTB.B1 = 1;
                  for(i=0;i<30;i++)
                  {
                   PWM1_Set_Duty(sine[i]);
                   Bekle(Freq);
                  }
                  
                  PWM1_Set_Duty(0);
                  PORTB.B1 = 0;
                  PORTB.B2 = 1;
                  for(i=0;i<30;i++)
                  {
                   PWM1_Set_Duty(sine[i]);
                   Bekle(Freq);
                  }
                  }
}
}

JOKERAS

// PIC16F88 Configuration Bit Settings

// 'C' source line config statements

#include <xc.h>

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

// CONFIG1
#pragma config FOSC = HS       // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF      // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF        // Low-Voltage Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EE Memory Code Protection bit (Code protection off)
#pragma config WRT = ON        // Flash Program Memory Write Enable bits (Write protection off)
#pragma config CCPMX = RB0      // CCP1 Pin Selection bit (CCP1 function on RB0)
#pragma config CP = ON         // Flash Program Memory Code Protection bit (Code protection off)

// CONFIG2
#pragma config FCMEN = ON      // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
#pragma config IESO = OFF       // Internal External Switchover bit (Internal External Switchover mode disabled)



Kodda Configrasyon ayarları görünmüyor.Eklemelisiniz.
OSC İnternal 8Mhz ayarları alttaki şekilde deneyin.

OSCCONbits.IRCF = 0x07; //Direkt OSC Register.
OSCCONbits.SCS  = 0x02;       
Veya
OSCCON = 0b01110010;


Sinyal şekline gelince.Sinyali nereden nereye giriyorsunuz bilmiyorum,Niyet okuması yaparak girdiğiniz devre empedansı
sinyalinizi bozuyor olabilir.
Bu durumda sinyalinizi opamp gibi bir yapıyla güçlendirmeniz gerek.
Şemasını eklerseniz yorum yapacak olan arkadaşlar için kolaylık olur.

Not:Bu mesaj Tepetaklak ile gönderilmemiştir.Direk masa üstü PC'den yazdım:) 

quarko

Alıntı yapılan: Cemre. - 26 Nisan 2016, 18:06:04
İkinci sorum, 16F88 entegresini 8MHz INT RC modunda çalıştırabilmek için yapmam gereken ayarlar nelerdir. İşlemcinin 8MHz'de koştuğundan emin olamıyorum.

16F88 problemli olması muhtemel bir PIC hocam. Bende aynı şekilde dahili osilatörü 8MHz e ayarlamaya çalıştım. Fakat emin olamamıştım. Şöyle deneyebilirsiniz, OSC2 Clockout pini boşta ise o pinden osilatör frekansının 1/4 ünün çıkması gerekiyor.(Konfigürasyon bitlerinden bu pini clockout olarak seçebilirsiniz.) O pinde 2MHz lik bir sinyal görüyorsanız,dahili osilatörü 8MHz olarak ayarlamışsınız demektir. Birde 16F88 i aldığınız satıcı önemli, orjinal ürün olması açısından. Bazı çiplere ne yaparsanız yapın, 8MHz e getirmek mümkün olmuyor çünkü. 
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

z

20 khz ve 80khz deki scop görüntüleri ip ucu verecek gibi.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Cemre.

Alıntı yapılan: JOKERAS - 26 Nisan 2016, 19:53:17
// PIC16F88 Configuration Bit Settings

// 'C' source line config statements

#include <xc.h>

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

// CONFIG1
#pragma config FOSC = HS       // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF      // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital I/O, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF        // Low-Voltage Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EE Memory Code Protection bit (Code protection off)
#pragma config WRT = ON        // Flash Program Memory Write Enable bits (Write protection off)
#pragma config CCPMX = RB0      // CCP1 Pin Selection bit (CCP1 function on RB0)
#pragma config CP = ON         // Flash Program Memory Code Protection bit (Code protection off)

// CONFIG2
#pragma config FCMEN = ON      // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
#pragma config IESO = OFF       // Internal External Switchover bit (Internal External Switchover mode disabled)



Kodda Configrasyon ayarları görünmüyor.Eklemelisiniz.
OSC İnternal 8Mhz ayarları alttaki şekilde deneyin.

OSCCONbits.IRCF = 0x07; //Direkt OSC Register.
OSCCONbits.SCS  = 0x02;       
Veya
OSCCON = 0b01110010;


Sinyal şekline gelince.Sinyali nereden nereye giriyorsunuz bilmiyorum,Niyet okuması yaparak girdiğiniz devre empedansı
sinyalinizi bozuyor olabilir.
Bu durumda sinyalinizi opamp gibi bir yapıyla güçlendirmeniz gerek.
Şemasını eklerseniz yorum yapacak olan arkadaşlar için kolaylık olur.

Not:Bu mesaj Tepetaklak ile gönderilmemiştir.Direk masa üstü PC'den yazdım:) 

Hocam mikroC'de bu ayarları Edit Project kısmından yapınca tekrar koda eklemek gerekiyor mu? OSCCON register'ine yazdığım değer de yukarıdaki kodda mevcut. Devre şeması linkini verdiğim eski konuda vardı buraya taşıyıp karmaşıklaştırmak istememiştim.

@z hocam aşağı yukarı aynı sinyal şekli görülüyor diyebilirim. Scope olmadığı için görüntüleri sadece okulun laboratuvarından alabiliyorum malum.

@quarko hocam teşekkürler. Direnc.net'ten aldım. Dediğiniz yöntemi bir deneyeyim.

z

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Cemre.

Alıntı yapılan: z - 26 Nisan 2016, 20:52:44
80Hz deki durumu görmek şart.
Hocam anahtarlama frekansı için mi konuşuyorsunuz? kHz mi Hz mi karıştı sanırım.
@z

LG-H735 cihazımdan Tapatalk kullanılarak gönderildi


tekosis

z hoca sanırım sinüsün frekansını söylüyor. harmonikler ile ilgili bir şüphesi var galiba.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

Cemre.

Alıntı yapılan: tekosis - 26 Nisan 2016, 22:41:45
z hoca sanırım sinüsün frekansını söylüyor. harmonikler ile ilgili bir şüphesi var galiba.

80Hz göremiyorum hocam. Bekle(mikrosaniye) fonksiyonuna ADC değeri giriyorum POT ile ayarlama yapmak için. Ama ADC'yi direk GND'ye bağlasam da 75Hz üstünü göremiyorum. Bu sanırım PWM kütüphanesinin ve mikroC'nin performansıyla ilgili. İşlemci 4MHz ile koşarken durum bu. 8MHz ile çalışıp çalışamadığımdan da emin olamadım söylediğim gibi. O konuda bir öneriniz olabilir mi?

z

Hz. Elde etmek istediğin sinüs frekansı ile etkileşime giren bir yük var gibi geldi. Varsa 80Hzde ip ucu verecek diye düşünüyorum.

Eğer transformatörün sekonder yada primer tarafına kapasite attıysan belki ondandır.

Güç devrelerine bak sana pwm'i modüleli veriyorum demek olmaz geri besleme ile anlık sinyali sürekli olarak arzu edilen değere yaklaştırmak gerekir.

Yani AC regülatör düzeneği kurman lazım.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Cemre.

Alıntı yapılan: z - 26 Nisan 2016, 22:59:41
Hz. Elde etmek istediğin sinüs frekansı ile etkileşime giren bir yük var gibi geldi. Varsa 80Hzde ip ucu verecek diye düşünüyorum.

Eğer transformatörün sekonder yada primer tarafına kapasite attıysan belki ondandır.

Güç devrelerine bak sana pwm'i modüleli veriyorum demek olmaz geri besleme ile anlık sinyali sürekli olarak arzu edilen değere yaklaştırmak gerekir.

Yani AC regülatör düzeneği kurman lazım.

Sinyali düzeltmek için çıkışta (220V tarafında) 100nF 400V paralel 22kOhm 5W (paralel RC) kullanıyorum.

z

40Hz de ana sinyal ile çakışmış o yüzden farkedilemiyor, 20 li Hzlerde kendini belli etmiş Bu nedenle 80Hz kritik bir frekans deneyi olacak gibi şüpheledim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Cemre.

Alıntı yapılan: z - 26 Nisan 2016, 23:03:25
40Hz de ana sinyal ile çakışmış o yüzden farkedilemiyor, 20 li Hzlerde kendini belli etmiş Bu nedenle 80Hz kritik bir frekans deneyi olacak gibi şüpheledim.

Ne yapsak hocam? Yüksüz mü denesek? L-C filtre kullanmaktan bahsedilmiş. Şok bobini falan diyen var. Kafam çok karışık.
Şu ödev teslimlerinden nefret ediyorum. Bir scope için laboratuvar kapılarında süründürüyorlar.

z

Sen tek bir frekans ile çalışmayacakmısın? Amacın 50Hz elde etmek değilmi?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Cemre.

Alıntı yapılan: z - 26 Nisan 2016, 23:29:49
Sen tek bir frekans ile çalışmayacakmısın? Amacın 50Hz elde etmek değilmi?

Amacım hem çıkış frekansı hem de anahtarlama frekansı değiştirilebilen bir devre yapmak. Anahtarlama frekansı işi zaten PWM frekansı ile çözülüyor.
0-50Hz gibi bir hedef belirledi hoca ancak pek öyle olacak gibi gözükmüyor. 35Hz civarından aşağıda bayağı uzaklaşıyor sinusten. Bu durumda ne yapabilirim bilemiyorum açıkçası.