Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Microchip PIC => Konuyu başlatan: Mucit23 - 05 Aralık 2023, 17:18:57

Başlık: Microchip 16Bit PWM Modülü Çalışması
Gönderen: Mucit23 - 05 Aralık 2023, 17:18:57
Hayatımda bu kadar karmaşık bir PWM donanımı görmedim. Datasheet'te sabahtan beri bi yukarı bi aşağı donanımın çalışmasını anlamaya çalışıyorum.

Pic12LF1571 MCU ile bir kanalda PWM üretmeye çalışıyorum. Başaramadım.

Şu blok diyagramı açıklayabilecek olan varmı?

(https://i.hizliresim.com/tafypck.png) (https://hizliresim.com/tafypck)

Burada Preload, Phase, Offset ve DutyCycle Değerleri var bu değerlere göre PWM değerleri güncelleniyor ama çıkamadım işin içinden

Benim MCU 1Mhz ile çalışıyor. Bu Blok Diyagramda Clock Seçim ve Prescaller değerlerini yaptım aşağıdaki satırlarla.

    PWM2CONbits.PWM2EN = 1;  //PWM2 Enable Output   
    PWM2CONbits.PWM2OE = 1;  //PWM2 Turn on
    PWM2CLKCON = 0x00;       //Set FOSC clock, no prescaler.
    PWM2PH=0;                //Set Phase Count Register as 0
    PWMENbits.PWM2EN_A=1;    //PWM2 Module Enabled   

Fakat belirlemiş olduğum frekans değerine göre Preload ve DutyCycle Değerlerini nasıl belirleyeceğimi çözemedim. Datasheet te bir formül var ama formüle göre hesap yaptığımda bulduğum değerlerle çalıştıramadım. PWM çıkışı aktif olmuyor.

1MHz FOSC için 1Khz örnek ayarlamaları nasıl yapabilirim?

Başlık: Ynt: Microchip 16Bit PWM Modülü Çalışması
Gönderen: mehmet - 05 Aralık 2023, 17:39:29
Bölüm 22.2, sayfa 205...

Kod (C) Seç
PWM2CLKCONbits.CS = 0b00; //FOSC = 1_000_000Hz.
PWM2CLKCONbits.PS = 0b111;
PWM2PRH = 0x00;
PWM2PRL = 0x07;// ~976HZ, 0x06->1116Hz
Başlık: Ynt: Microchip 16Bit PWM Modülü Çalışması
Gönderen: JOKERAS - 05 Aralık 2023, 19:43:55
Clockİnternalmi?Yoksa Haricimi?

PWM için kullandığınız portun APF(Alternate Pin Funtion) özelliği var.PWM çalışmıştır belki
ama siz Başka pine bakıyorsunuzdur.

APFCONbits.P2SEL = ?;

1 = PWM2 function is on RA4
0 = PWM2 function is on RA0


Başlık: Ynt: Microchip 16Bit PWM Modülü Çalışması
Gönderen: Okan AKÇA - 05 Aralık 2023, 22:52:37
Kullanmadım ama Microchipin stmcube gibi programı olması Lazım unit yaptırabilirsiniz.
Başlık: Ynt: Microchip 16Bit PWM Modülü Çalışması
Gönderen: Mucit23 - 05 Aralık 2023, 23:00:07
Alıntı yapılan: mehmet - 05 Aralık 2023, 17:39:29Bölüm 22.2, sayfa 205...

Kod (C) Seç
PWM2CLKCONbits.CS = 0b00; //FOSC = 1_000_000Hz.
PWM2CLKCONbits.PS = 0b111;
PWM2PRH = 0x00;
PWM2PRL = 0x07;// ~976HZ, 0x06->1116Hz

Hocam Tekrar bakıyorum. Benim mantığım STM32 ye gidiyor. Stm32 de ARR değeri pwm Counterinin çalışma aralığını belirtiyor. Birde compare registeri var ki bu değer de doğrudan aslında duty cycle değerini belirliyor.

Pic de bunun karşılığı nasıl oluyor? Bu arada Alternate pinleri ayarladım. Şuan çıkış almaya başladım.

Başlık: Ynt: Microchip 16Bit PWM Modülü Çalışması
Gönderen: mehmet - 05 Aralık 2023, 23:13:06
Duty formülüne bakın, hangi kaydediciler
kullanılmış.
Başlık: Ynt: Microchip 16Bit PWM Modülü Çalışması
Gönderen: JOKERAS - 06 Aralık 2023, 00:28:08
Bence önce Osiltörü ayarlayın.Çünkü bu taban ve merkez sinyal.

Pdfi incelediğim kadarıyla Multi Fonksiyonel PWM bloğu olduğu için kafa karıştırıyor.
STM lerle aynı görünüyor,aynı mantık.

Önce PWM Bloğunu besleyecek Cloğu seçin.Ön bölücü PreScaller ile istediğiniz değere bölün yada bölmeyin.
Çünkü düşük PWM frekansı istiyorsunuz.PWM 16-Bit olduğu için Çalışma alanı geniş.Frekansı
PWM2PR ile de değiştirebilirsiniz.

PWM2PR PWM Peryodunu-Frekansını belirliyor.
PWM2DC Duty Cycle değerini belirliyor.

Ama burada dikkat edilmesi gereken Register Load Registeri.
Duty Registerinin güncellenmesi için PWM2LD_A registeri her güncellemeden sonra
1 olmalı.

OSCCONBits.SCS = 0x02; //İnternal Osc blok.
OSCCONbits.IRCF = 0x0B //1Mhz No PLL.

TRISAbits.LATA0 = 0; //APF ye göre PWM çıkışı
TRISAbits.LATA4 = 0; //APF ye göre PWM çıkışı
APFCONbits.P2SEL = 1; //Hangi PWM portu olduğuna göre Pin seçme



PWM2EN = 1;
PWM2OE = 1;
PWM2PR = 1024 - 1; //PWM Bloğunun Clock ve Ön Bölücü PS'ye  PWM Frekans değeri.



while(1) {

PWM12DC = AdcVal;// Mesela Okunan ADC değerinin PWM de görünmesi.
PWMLDbits.PWM2LDA_A = 1;  //Update Duty

}


Pdf ten incelediğim duruma göre böyle çalışır sanırım.










Başlık: Ynt: Microchip 16Bit PWM Modülü Çalışması
Gönderen: Mucit23 - 06 Aralık 2023, 01:10:24
Şimdi Anladım. Eski PWM donanımı ile karıştırmamak gerekiyormuş. Niye böyle kafam karıştı anlamadım. Aslında PWM donanımı STM32'deki yapıya daha çok benziyor.

@mehmet hocam sizdeki hesap da yanlış. 1Khz için T=1Ms olduğundan PWM2PR=999 olması gerekiyor.(FOSC=1000000)
(https://i.hizliresim.com/rttfosf.png) (https://hizliresim.com/rttfosf)

Dolayısıyla PWM2DC değeri de aynı şekilde 0-1000 arası ayarlanarak Duty 0-%100 arası ayarlanmış oluyor. Bu şekilde çalıştırdım.

@JOKERAS Teşekkürler.
Başlık: Ynt: Microchip 16Bit PWM Modülü Çalışması
Gönderen: JOKERAS - 06 Aralık 2023, 15:52:17
Rica ederim Mucit23.

PWM modulünü çok komplike yapmışlar.Modülü her türlü PWM sinyali üretmek için Kullanılabiliyor.
Phase,Center,Slave,One,Pulse vs.Ayrıca her durum için İnterrupt koymuşlar.
Ayrıca Load Registerini yazılımsal olarak tetiklemenin haricinde başka donanımlarla Auto Trigger olarak tetiklenebiliyor olmasıda çok güzel.

Pdf te dikkatimi çeken başka nokta ise CWG(Complementary Wave Generetör) Bu modülle her türlü
iş yapılabilir.İşlemci küçük ama Donanımları gayet güzel görünüyor.

PWM portu için bence PWM 1'i kullanın,çünkü en makul Pin bu görünüyor.

Sizin kullandığınız PWM2'nin APF RA0 Pin7, "AN0 & DACOUT & CIN1+" özelliği var.
PWM2'nin APF Pin RA4 Pin3, "AN3 & CIN1-" özelliği var.

Bence en uygun PWM1 APF RA5 Pin2 oluyor diye düşünüyorum.

Başlık: Ynt: Microchip 16Bit PWM Modülü Çalışması
Gönderen: mehmet - 06 Aralık 2023, 18:13:00
Precaler 128 bendekinde...
Kod (C) Seç
PWM2CLKCONbits.PS = 0b111;