pwm de degişken frekans elde etme (yardım)

Başlatan argetek, 17 Temmuz 2016, 19:52:41

argetek

merhaba arkadaslar benim pwm sinyalini surekli olarak ornek 500 hrz lik adımlarla -+ surekli taramalı bir sekile getirmem lazım pwm i normal kosullarda bu sekilde  calıstırmak mumkunmu acaba mumkun ise nasıl ? fikir verirseniz cok sevinirim 
Saygılarımla...

ete

HPWM dan bahsediyor isek iki parametre ile frekans değişmektedir. Birisi PR2 register değeri diğeri ise TMR2 bölme oranı. Belirli aralıkta bölme oranı sabit kalabiliyor. Örneğin 500 hz den belkide 2 k frekansa kadar belki sabit kalabilir bakmadığım için belki diyorum. Merak eden olursa picmulticalc programından kolaylıkla hangi aralıklarda sabit kaldığını öğrenebilir.
Yapılacak iş  bölme oranına belirli bir değer verip 500 hz lik limitler için pr2 değerini hesaplamak ve bu değeri registere vermek. Daha sonra gerekirse bölme oranını değiştirip yenidmpr2 değeri hesaplanıp registere verilecektir.
Bu bilen için kolay bilmeyen için çok zor bir işlem. Gerekli bilgi ders notlarında mevcut okumak gerek.

Ete

argetek

yanıtın icin cok tesekkur ederim ete hocam ders notlarında 11.ders bu konuya ayrılmıs simdi gordum hemen okuyup anlamaya calısicam
Saygılarımla...

argetek

ete hocam konu hakkında yardımınız için cok tesekkur ederim kucuk bir sorum daha olacak sizden bu pwm sinyalini pll de  oldugu gibi bir frekans da kitlemenin yolu yokmu ben pot dan 21.830 hz e ayarladıgımda hem duty hemde frekans -+ 1k geziyor bu sorun cıkarıyor sistemimde  bunu 20-30 hz sorun degil ama 1-2 k lık gezinti sıkıntı oluyor bunu sabitlemenin bir yolu varmı acaba  ?
Saygılarımla...

ete

Hpwm gezinmez. Belirlenen frekansa çakılır kalır. Sorun senin sinyali elde ediş şeklinde olsa gerek.
Ete

argetek

hocam test amaclı direk sizin yazdıgınız kodları bir kac değişiklşikle kullandım

PORTA=0:TRISA=%00000001
PORTB=0:TRISB=%00000000
PORTC=0:TRISC=%00000000
PORTD=0:TRISD=%00000000
ADCON1= %10001110
T2CON = %00000101
PR2=249
'-----------------------------------------------------------------
@ DEVICE PIC16F876A
@ DEVICE PIC16F876A, WDT_OFF
@ DEVICE PIC16F876A, PWRT_OFF
@ DEVICE PIC16F876A, PROTECT_OFF
@ DEVICE PIC16F876A, XT_OSC
'-----------------------------------------------------------------
DEFINE OSC 4
'**************** ADC chanel setting ************************
DEFINE ADC_BITS 10 ' ADCIN çözünürlük (Bits)
DEFINE ADC_CLOCK 1 ' ADC clock kaynağı (Fosc/8)
DEFINE ADC_SAMPLEUS 3 ' ADC örnekleme zamanı (uSec)
'****************HPWM PRESETİNG*********************
DEFINE CCP1_REG PORTC 'Hpwm 1 pin port
DEFINE CCP1_BIT 2 'Hpwm 1 pin bit
DEFINE CCP2_REG PORTC 'Hpwm 2 pin port
DEFINE CCP2_BIT 1 'Hpwm 2 pin bit
'******************* DEĞİŞKENLER ********************
HAM var word
X VAR WORD
DUTY VAR BYTE
'---------------------------------------------------------------------------
CCP1CON.2=1 'birinci kanalı açtık
CCP1CON.3=1
CCP2CON.2=1 'ikinci kanalı açtık
CCP2CON.3=1
BASLA:
DUTY=50
GOSUB POTOKU

GOTO BASLA

POTOKU:
ADCIN 0,HAM
PR2=((1024-HAM)*/5625)/100+9

X=(PR2+2)* DUTY /25
CCP1CON.4=X.0
CCP1CON.5=X.1

CCP2CON.4=X.0
CCP2CON.5=X.1

CCPR1L=X>>2
CCPR2L=X>>2
RETURN


burada oynadıgım tek yer yanılmıyorsam pr2 oranını 9 yaptım 21.830 hz alabilmek icin  hata nerede  sizce  almak istediğim frekans tam olarak yukarıda yazdıgım frekanstır
Saygılarımla...

ete

İşin doğrusunu öğrenmeden kestirmeden gidince böyle yanlışlıkların ortaya çıkması normal.
Neyin yanlış olduğunu bulmak bile daha zor. Ama frekans belli ise hemen multicalc programını çalıştırıp 21830Hz için değerler ne olmalı ona bakıyorum.
Bölme 1/1 alınır ise PR2=45 olacak, %50 Duty değeri ise  92 olacak.
Bölme 1/4 alınır ise PR2=10 olacak %50 Duty değeri ise 22 olacak
Bu ikisi bize yeterli Şimdi de programa bakıyorum bölme oranı ne alınmış diye T2CON=%00000101 kullanılmış. Bu bölme oranının 1/4 alındığını gösteriyor.
Şimdi ADC den ne okunduğunu bilemediğimiz için PR2 nin verilen formülden en düşük ve en yüksek değerini ancak hesaplayabiliriz.
PR2=((1024-HAM)*/5625)/100+9 formülüne göre HAM=0 ise , PR2=234
HAM=1023 ise , PR2=9 olarak hesaplanacaktır. Halbuki 10 olarak hesaplanması gerekiyor idi.
Bu durumda ADC den okunan değer sıfır iken PR2 değeri 9 hesaplandı diyelim. Şimdi Duty değerini hesaplayalım.
X=(PR2+2)* DUTY /25  formülünde PR2+2 değilde PR2+1 olması gerekirdi.
X=(9+2)*50/25=11*2=22  sonuç doğru ama sanırım PR2+2 kullanılmasının sebebi 10 olması gereken PR2 yi 9 hesaplayınca 1 yerine 2 eklenmesi gerekti her halde.
Sonuçta PR2 nin 10 yerine 9 alınması frekansın yaklaşık 3-4 Khz daha fazla çıkmasına sebep olur. Hatta direk hesaplayabilirizde;
Peryot=(PR2+1)*4/OSC*BölmeOranı = ((9+1)*4/4)*4=40 us ,  F=1000000/40=25.000 Hz = 25 Khz. lik bir sinyal elde edersin.  Duty=(PR2+1)*%DUTY/25  formülünü kullanarak hesaplanan 22 Duty değerinin % kaçlık duty oranına denk geldiğinide hesaplayabiliriz. Duty x 25=10*Yüzde ,  Yüzde=(22 x 25)/10=55  o halde sen 25 Khz lik ve duty oranı %55 olan bir sinyal elde etmiş oluyorsun. Sende olan sorunun kaynağıda budur işte.
Yapman gereken şey Pot üzerinden hesaplanan PR2 değeri için maksimum ve min değerleri tespit edip Ham değerine bağlı olarak bu değerleri verebilecek bir formül geliştirmen gerekir. yapamıyor isen frekans aralığını söyle ben hesaplayıp vereyim.

Ete


argetek

cevabınız için cok tesekkur ederim sayın ete hocam yazınızı okurken hem nerede hata yaptıgımı hemde ne yaparsam sonucu ne olur ogrendim sanırım bundan sonrasını kendim halledebilirim pot dan su an deger okumuyorum o kısmı kapatmıstım yazılımda  unutmusum gonderdiğim koda bunu eklemeyi sabit frekans lazım oldugundan pot işime yaramıyordu multicalc programınıda simdi indirdim onunda yardımı ile hesaplamaları cok daha kolay yapacagımı umuyorum emeginize elinize  saglık
Saygılarımla...

Powered by EzPortal