Etiket arşivi: PWM

PIC32MM ile PWM

Aslında PIC32MM çiplerinde pin remap fonksiyonu “peripheral pin select” adıyla var. Ancak ilk üç capture/compare modülü için serbest pin ataması yapılamıyor. Bunlar aynı zamanda birden çok çıkışla kullanılabilen modüller. Bu çıkışların yerleri sabit. Örneğin, QFN28 kılıf olan versiyonda Output-Compare çıkışlarının hangi pinlerle paylaşıldığını aşağıda görüyorsunuz:

Pinler OCMxy designatoru ile isimlendirilmişler. Burada;
x modül adı oluyor. Yerleşik pin fonksiyonuna sahip modüller CCP1, CCP2 ve CCP3
y modülden çıkış alabilen kanal indeksi oluyor. A,B,C,D,E ve F olarak 6 “olası” kanal var. Bunlar tahmin edebileceğiniz gibi birbirlerinden tamamen bağımsız çıkış üretmiyorlar. Hatta; A,C,E’yi bir grup B,D,F’yi bir başka grup olarak kabul edebiliriz.

PIC32MM USB Curiosity Development Board üzerine PWM’leri denememiz için bir RGB LED koymuşlar. Bu malzemenin,
* Kırmızı LED’i OCM1B
* Yeşil LED’i OCM2B
* Mavi LED’i OCM3E
çıkışlarına bağlı. Her LED başka bir CCP modülünde olduğu için sayısız renk kombinasyonu elde edebiliriz.

LED’leri farklı PWM duty cycle’ları ile sürüp renk ve parlaklık ayarı yaptırmak, bu demonun ana fikrini oluşturuyor. Galiba, Microchip’in sitesinde de bununla ilgili bir demo görmüştüm ama indirip çalıştırmaya fırsatım olmadı. Zaten buna gerek de yok. Çok basit bir-iki ayarlamayla üç PWM kanalı emrinize amade oluyor.

Şart mı bilmiyorum ama ben bu deneme için elimdeki Initialize() kodunda bu pinleri (RD1, RC3 ve RC15) çıkış yaptım.

CCP modüllerini devreye almak için yapılacak minimum ayarlama; timebase seçmek, çalışma modunu ayarlamak, çıkış pinlerini ve polaritesini ayarlamak ve periyot register’ına pwm periyodunu girmekten ibaret.
RGB LED sürerken en basit anlamıyla birbirinden bağımsız edge aligned bir PWM yeterli olduğu için her modül 16 bit dual edge compare modunda, bağımsız çalışıyor (dead time da yok). Bu çok basit bir kullanım şekli. PIC32 MCCP Referans Manual’ini incelerseniz CCP modüllerinin uygun bir donanım tasarımıyla çok enteresan şeyler yapılabilecek özellikleri olduğunu göreceksiniz.

CCPxPR : PWM periyodunu belirler.
CCP1RA : Edge aligned PWM için bunu 0 kullanıyorum.
CCP1RB : Falling-edge match değeri. Duty Cycle’ı bu belirliyor.

Dev. Board’lar üzerindeki potansiyometreyi LED’lerin parlaklığını (PWM DC) ayarlamak için kullanıyorum. Hangi rengin seçileceğini de yandaki üç push-button belirliyor. Potansiyometre RC8 pini ile paylaşılan AN14 analog kanalına bağlı. MM’in ADC’sinden ayrıca bahsediyor olsam da burada ADC’yi 10 bit okuma için başlatan ve AN14’ü okuyan bir kod da main.c içinde var.

PIC32MM USB Curiosity Board üzerinde çalışmaya hazır kodlara bu klasörden erişebilirsiniz:

L6207

Küçük bir step motoru sürmek için yaptığımız küçücük bir kartta L6227 kullanıp, onun başarısını görünce, daha büyük bir DC motor sürücü işinde de kullanmayı tercih ettiğim DMOS çiftli H köprüsü çipi.

Ben bir hataya düştüm, başkaları düşmesin: L6206’nın datasheet’ine bakıp, onun iki H köprüsünün paralel yapılabildiğini görüp, bu L6207 ile aynı deyip bu paralelleme işini L6207’de de uygularsanız tuzağa düşmüş olursunuz. Çünkü esasında bu iki çip birbirinden farklı. L6207’de her köprünün ayrı PWM sürücüsü var. Ayrıca aşırı akım koruması yapıları da farklı.

Benimkisi gibi işlerde L6206 daha uygun: Bize ayrıntılı bir PWM kontrol gerekmiyor, bu işi EN piniyle kendimiz hallediyoruz. Aşırı akımda otomatik kapanma da bize bağlı olsa iyi olur, OCD pinleri ayrı uçlara çıkıyor. Akım eşiği ayarlanabilir, üstelik bir pine bağlanan bir direncin değeriyle, bunu kullanırız. Paralel bağlama da basitçe mümkün. A ve B köprülerini paralel çalıştırabiliyoruz. Ayrıca, aşırı akım denetimi için şönt direnç de gerekli değil. Bu tasarımı basitleştiriyor.