PWM Frekans 100Hz-1000Hz Ayarı

Başlatan PICaso, 02 Mayıs 2021, 16:23:33

RaMu

Alıntı yapılan: PICaso - 02 Mayıs 2021, 18:41:04Dutyde frekansda ayarlanacak hocam. Eminim.
Demiştin.

Alıntı yapılan: PICaso - 02 Mayıs 2021, 20:48:52100-1000 Hz arası artırıp azaltsam yeterli benim için.
dedin.

Duty ayarlanabilecek mi?
Ayarlanmalıysa en az ne çözünürlükte olmalı
yani %10  20 30 .. 90 100 yeterli mi gibi?
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

PICaso

Alıntı yapılan: RaMu - 02 Mayıs 2021, 21:00:43Demiştin.
dedin.

Duty ayarlanabilecek mi?
Ayarlanmalıysa en az ne çözünürlükte olmalı
yani %10  20 30 .. 90 100 yeterli mi gibi?
yeterli hocam.

  switch(sayac) {
   case 1:
        PWM1_Init(1000);
        break;
   case 2:
        PWM1_Init(200);
        break;
   case 3:
        PWM1_Init(300);
        break;
   case 4:
        PWM1_Init(400);
        break;
   case 5:
        PWM1_Init(500);
        break;
    case 6:
        PWM1_Init(600);
        break;
   case 7:
        PWM1_Init(700);
        break;
   case 8:
        PWM1_Init(800);
        break;
   case 9:
        PWM1_Init(900);
        break;

  default:

        PWM1_Init(1000);
Şöyle bişey düşündüm çalışır mı sizce?

RaMu

https://download.mikroe.com/documents/compilers/mikroc/pic/help/pwm_library.htm
note
kısmına bakarsan çalışmaz.
Alıntı YapCalculation of the PWM frequency value is carried out by the compiler, as it would produce a relatively large code if performed on the library level.
Therefore, compiler needs to know the value of the parameter in the compile time. That is why this parameter needs to be a constant, and not a variable.
derleyici init fonksiyonuna yazdığın değeri derleme esnasında kullanıp
gerekli register ayarlamalarını yapıyor.
Yani hex oluştuktan sonra init fonlsiyonunda bir değişiklin yapılamıyor.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

PICaso


RaMu

#19
"Pic Pwm frekans hesabı"
konularına biraz bakın anlaşılmayan yer olursa yardımcı olmaya çalışırım.

Yazılımsal pwm içinde halen sınırları net bir şekilde belirtmedin
ama
bahsettiklerimizi baz alarak
şu frekansı şu duty ile üretmek için
ne zamanda bir bir timer kesmesine girsem
pini on sonra off yapsam
...
bunu kağıt kalem ile birkaç frekans için hesapla oluyor mu.

Örnek olması açısından
pic pwm frekansı elle şu registetlara değer girerekte yapılabilir:
(mikroc de bunu elle yaparsan duty ayarı içinde uygun değeri hesaplayıp kendin girmen gerekir,
mikroc duty fonksiyonu doğru çalışmaz.)
PWM Period = [(PR2) + 1] • 4 • TOSC • (TMR2 Prescale Value)

https://www.picproje.org/index.php/topic,30295.0.html

https://etepic.com/index.php?topic=3359.0
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

PICaso

Alıntı yapılan: RaMu - 02 Mayıs 2021, 21:51:14"Pic Pwm frekans hesabı"
konularına biraz bakın anlaşılmayan yer olursa yardımcı olmaya çalışırım.

Yazılımsal pwm içinde halen sınırları net bir şekilde belirtmedin
ama
bahsettiklerimizi baz alarak
şu frekansı şu duty ile üretmek için
ne zamanda bir bir timer kesmesine girsem
pini on sonra off yapsam
...
bunu kağıt kalem ile birkaç frekans için hesapla oluyor mu.

Örnek olması açısından
pic pwm frekansı elle şu registetlara değer girerekte yapılabilir:
(mikroc de bunu elle yaparsan duty ayarı içinde uygun değeri hesaplayıp kendin girmen gerekir,
mikroc duty fonksiyonu doğru çalışmaz.)
PWM Period = [(PR2) + 1] • 4 • TOSC • (TMR2 Prescale Value)

https://www.picproje.org/index.php/topic,30295.0.html

https://etepic.com/index.php?topic=3359.0


fotoğraf upload

Fosc =200kHz seçtim ve TMR2 Prescale Value=16 için formülü uyguladığımda

PR2=2 değerinde pwm frekansı 1041,6 Hz,

PR2=30 değerinde pwm frekansı 100,8 Hz, olarak hesapladım.

Doğru yoldamıyım hocam?

RaMu

#21
PWM Period = [(PR2) + 1] • 4 • TOSC • (TMR2 Prescale Value)
Tp = (2+1)*4 * (1/200kHz) * 16
Tp = 0.00096 saniye
fp = 1/Tp
fp = 1041.67 Hz

Evet hesap doğru ama
Tosc işlemci çalışma frekansı
yani 200kHz de çalışan bir mcu ne kadar işe yarar?
Mcu nun yapacağı başka işler varsa muhtemelen bir işe yaramaz.

Tamam olur desek ben şu ana kadar 200kHz osilatörü ne mcu da kullandım nede gördüm,
var mı şehir efsanesi mi onu bile merak etmedim hiç :)

Mcu 4MHz kristal ile çalışırken oluyor mu dene bir değerleri,
hiç olmadı en kötü mcu 1MHz kristal ile çalışsın.

Ek:
Daha duty oranını ayarlama var
oda PR2 değerine bağlı
CCPxx registerlarıyla ayrlanıyor.
kısaca PR2 değeri kaç ise o kadar bölebilirsin duty oranını.
Mesela PR2 100 ise
0,1,2...100 CCPx değerleriyle duty i 100 adım ile ayarlayabilirsin,
CCPx 50 değeri %50 duty olur.

Mesela PR2 2 ise
0,1,2CCPx değerleriyle duty i 2 adım ile ayarlayabilirsin,
CCPX 0 0 duty
CCPX 1 %50 duty
CCPX 2 % 100 duty olur.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

RaMu

Ayrıca böyle olacağını @OG söylemişti.
Onun bildiği bu işe uygun mcular var :)

Alıntı yapılan: OG - 02 Mayıs 2021, 17:47:58100Hz'e inebilmek için 877   1MHz gibi düşük frekansta çalışmalı
Başka dilde veya hex olarak yardımcı olabilirim.
ayrıca 16F877 çok kötü seçim.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

yas

Alın o zaman değişik bir fikirde ben yumurtlayayım. PWM için kullanılacak timer ın clock kaynağı harici seçilip (TXCKI ima ediyorum) buradan 200KHz lik sinyal verilebilir. Yapılacak işin detayını tam bilmiyorum. Eğer boşta kalan pwm kaynağı varsa burası 200KHz lik sabit üreteç olarak kullanılabilir. Böylece harici elemanlarla osilatör kurmaya gerek olmadan iki pinin pcb de birleştirilmesi yeterli olur.

RaMu

#24
@yas duty ayarı içinde birşey uydurabilirsen olur.

Zaten 16f877 uygun değil dememiz ondan
pwm clock için harici bir şey seçilemiyor.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

yas

Süt oğlan misali 16f877 yi oldum olası sevmedim zaten, babasını da sevmezdim. Yanlış hatırlamıyorsam 16f877 pwm için sadece timer2 kullanılıyordu ve timer2 nin harici clock girişi yoktu. Evet 16f877 görevini tamamlamış gibi. Yeni hiçbir işte kullanılmaması gerekli.

duty olayı çok zor olmamalı aslında. 10 bitlik çözünürlükte duty değeri 0-1023 (biz ona 0-1000 diyelim) olabileceğinden %0-100 arası değiştirilmek istenildiğine göre iki değişken kullanılmalı birisi 0-100 arası skalanın girildiği değişken diğeri bu değerin 10 ile çarpıldığı duty olacak olan word boyutundaki değişken. Eğer skalanın 0-1000 olmasında bir mahsur yoksa tek word değişkende olabilir.

I = 50 '%50
DUTY = I * 10
CCP1CON.4 = DUTY.0
CCP1CON.5 = DUTY.1
CCPR1L = DUTY >> 2

Yada

DUTY = 500 '~%50 
CCP1CON.4 = DUTY.0
CCP1CON.5 = DUTY.1
CCPR1L = DUTY >> 2

RaMu

@yas yazdıklarından şair burada ne demek istemiş anlayamadım.

16F877 nin donanımsal Pwm de neler yapabileceğinin nasıl anlaşılacağını yukarıdaki mesajlarda anlattım.

Yazılımsal yaparım diyen babayiğitlerede
100Hz 1000Hz Pwm i 1Hz çözünürlükle
0 %100 duty yi %1 adımlarla
ayarlayabileceğimiz kodu yazmak öyle kolay iş değil dedim.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

PICaso

Alıntı yapılan: RaMu - 02 Mayıs 2021, 21:51:14"Pic Pwm frekans hesabı"
konularına biraz bakın anlaşılmayan yer olursa yardımcı olmaya çalışırım.

Yazılımsal pwm içinde halen sınırları net bir şekilde belirtmedin
ama
bahsettiklerimizi baz alarak
şu frekansı şu duty ile üretmek için
ne zamanda bir bir timer kesmesine girsem
pini on sonra off yapsam
...


Hocam Pwm değilde timer ile bir pini ON-OFF yapmak daha mantıklı ve kolay gibi duruyor.

power20

#28
Timer kesmesi oluştuğunda bir sayac artsın. Sayac 100 olduğunda asıl pwm periyodu tamamlanmış olur. Her kesmede çıkışın on veya off yapılacağına karar verilebilir.


Örneğin sayac 0 iken on oldu
Sayac 10 ilen off yapalım
Sayac 100 olana kadar hep off kalsın

Bu durumda %10 duty değeri elde ettik demektir.

Timer periyodu ile pwm frekans ı ayarlamak mümkün.
Timer 100 katı pwm periyodu olur.

Çözünürlük az gelmişse 100 değil 1000 olarak hesap yapılabilir. Binde 1 hassasiyet olur

PICaso

Alıntı yapılan: Kılıç - 04 Mayıs 2021, 09:13:15Timer kesmesi oluştuğunda bir sayac artsın. Sayac 100 olduğunda asıl pwm periyodu tamamlanmış olur. Her kesmede çıkışın on veya off yapılacağına karar verilebilir.


Örneğin sayac 0 iken on oldu
Sayac 10 ilen off yapalım
Sayac 100 olana kadar hep off kalsın

Bu durumda %10 duty değeri elde ettik demektir.

Timer periyodu ile pwm frekans ı ayarlamak mümkün.
Timer 100 katı pwm periyodu olur.

Çözünürlük az gelmişse 100 değil 1000 olarak hesap yapılabilir. Binde 1 hassasiyet olur

Evet böyle daha kolay gibi.