M16C/29 da 16-bit PWM sorunu

Başlatan nonstradam, 20 Ağustos 2007, 09:55:55

nonstradam

merhaba
M16C/tiny serisi kullanıyorum. m16c yi 20mhz de çalıştırıyorum. bir mosfet driver yapmam gerekli. bunun için TA2 yi PWM modda kullanmak istiyorum. TA2 8-bit veya 16-bit lik olarak çalışabiliyor. yapmak istediğim iş dc motor sürücü ve minimum 10-bit çözünürlükte çalışması gerekiyor. bu nedenle 8-bit modunu kullanamıyorum. mecburen 16-bit i kullanmam gerekli. 16-bit modundada osilatörüm 20mhz olduğu için pwm frekansım 305Hz in üzerine çıkmıyor fakat benim 25Khz lik minimum 10-bit çözünürlükte bir pwm frekansına ihtiyacım var. bu sorunu nasıl halledebilirim.

renesas ın sitesindeki örnekleri inceledim. yüksek hızlı ve yüksek çözünürlüklü pwm in nasıl elde edileceği hakkında bir yazı var ama anlayamadım. TAi ve TB2 yi birlikte kullanıp birşeyler yapmışlar fakat IAR la yazıldığı için birşey anlayamadım.(ben hew kullanmaya çalışıyorum) TAi ve TB2 birbiriyle nasıl ilişkilendirilir anlayamadım.

TAi yi one shot mode da çalıştırıp TB2 ile TAi yi tetiklemiş ama bunu nasıl yapmış hiçte açıklayıcı değil.  TAi sonuçta yine 16-bit olarak kullanılacak. TB2 nin tetiklemesi bu PWM frekansını nasıl hızlandırabilirki bir türlü kafam yatmadı. PIC i bırakıp renesasla çalışmaya başladım fakat bu sorun canımı baya sıktı. bilgisi olan üstadlar cevap verebilirlerse çok sevineceğim saygılarımla. çalışmalarınızda başarılar...

bahsettiğim renesas öreneği aşağıdadır

http://documentation.renesas.com/eng/products/mpumcu/apn/app21110.pdf

nonstradam

aYe, ahmet abüü, klein gibi renesas canavarı üstadlarım yardımlarınızı bekliyorum. lütfen bu konuda bir bilginiz varmı yardımcı olursanız sevinirim.

volkii

datasheette herşey yazıyor dostum. biraz karışık ama dikkatli bakarsan anlarsın. örneklerde verilen katdedicelere, sen shete bakarak uygun değeri yaz. timer frekansını f/32 yap. yok o olmadı pwm e değer yazarken ona göre değer yaz. bende renesas kullanıyorum ve 10-15 milisn saykılla servo kontrol ediyorum. sende mutlaka yaparsın.

nonstradam

f/1 oranında zaten max. 305Hz e çıkabiliyorum. f/32 yaparsam dahada düşük çıkmayacakmı.
kaydedicilere bulaşamıyoruz. TA2 nin değerini değiştirdiğimizde pwm in iş süresini değiştiriyoruz. yani frekansı değiştirecek bir register göremedim ben.

picusta

Timer'in tamamini kullanmak yerine bir kismini kullanabilirsin. Bunun için timer'in autoreload özelligini kullanmalisin. Senin islemcinin çevrebiriminde varmi bilmiyorum.
20 MHz'te 10bit timer kullanarak 20kHz elde edebilirsin.
Senin istedigin çözünürlük
Alıntı Yapyapmak istediğim iş dc motor sürücü ve minimum 10-bit çözünürlükte çalışması gerekiyor.
Anladigim kadari ile hiz kontrolü yapmak istiyorsun. 10 bit çözünürlük istiyorsan PWM'nin 10bit çözünürlükte olmasina gerek yok.
Sensörün (hizi ölçen devre) 10 bit olmasi yeterli.

nonstradam

picusta
bu işlemcinin pwm modunda timer içeriği frekansı değilde iş süresini değiştiriyor. o nedenle timer ı belirli bir sayıdan başlatma mantığı işe yaramıyor. bu sorunu başka bir yolla çözdüm. 10-bit çözünürlükte 25khz lik pwm i elde ettim fakat...

10-bit lik çözünürlük için pwm in değilde sensörün 10-bit olması yeterli demişsiniz. bu mantığı anlayamadım. yani 10-bit çözünürlükte geri besleme aldım diyelimki sonuçta motora etki edecek parametre pwm değeridir. 10-bit çözünürlükte okuma yapsam bile sonuçta 8-bitlik bir pwm değeri elimde olursa motorun dönme hızı yine 8-bit olmayacakmıdır. yani 10-bit okuma yapsam bile 8-bit pwm le motorun dönme hızı 8-bit çözünürlükte olmayacakmıdır...
bu konuda beni aydınlatabilirmisiniz.

picusta

20MHz 'den 25kHz 10bit PWM nasil alabildin? clock sinyali PLL ile mi yükseltiliyor?

Simdi bir IsI kontrol devresini alalim. Derece x-bit ölçüyor, fakat Isiticiyi çalistiran bir röle var sadece (1-bit, açik-kapali). Sistemi x-bit çözünürlükte çalisitramazmisin?
Burada da ayni sey olacak: diyelim 855 hizini istiyorsun. Bunun için PWM 125 ile 126 arasi degisecek.
çözünürlük sisteme kontrolör ile motor arasindaki transferde gürültü olarak modellenebilir, geri besleme oldugundan buradaki gürültü atilir.

Erol YILMAZ

uygulama notunu incelerseniz,
Yuksek frekansta, yuksek cözünürlüklü pwm kullanabilmek için,
dma modülünü kullanmış.

picusta

App notu simdi inceledim.
Anladigim kadari ile "ortalama" çözünürlük artiriliyormus. DMA her periyotta PWM degerini degistirebiliyor (1 artiriyor veya eksiltiyor ) böylece 8 peryodun ortalamasi alininca çözünürlük artiyor.
Oversampling'in tersi diyebilirmiyiz?

nonstradam

picusta evet pll aktif(x2) iken 20mhz kristal ile 25khz 10-bit pwm elde ettim. dma yı kullanmadım. o mantığı anlayamadım. ta2 yi one shot mode da kullanıp bu timer ı tb2 nin overflow u ile tetikledim. bu şekilde başarabildim.

fakat şimdi bir sorunum daha var. bu sorun dahada ilginç...

renesas starter kit te programı geliştirmeye çalışıyorum. hew compiler kullanıyorum. hew de yeni proje oluştururken rsk nın örneklerinden açıp main programını benim programla değiştirip debugger modunda programı işlediğimde sorun yok 25khz 10-bit i alabiliyorum. fakat bu şekilde release modu çıkmıyor. yani işlemciye yükleyeceğim hex dosya çıkmıyor.

kendim yeni proje oluşturup programı burada compiler edersem release de de compiler oluyor ve hex dosyada oluşuyor fakat diğer projede 25khz üreten pwm aynı kod olmasına rağmen artık 605hz üretiyor.

bunun sebebi hew in bug ımıdır. yoksa bilmediğim bir konumu var...

edit: 25khz pwm elde ettiğim yerde lcdye de pwm değerini yazıyorum ve görüyordum. release modda pwm i istediğim frekansta elde edemediğim gibi lcd de çalışmıyor.

Klein

Release mode olmasına gerek yok. Debug modda da hex dosyaları oluşturuyor. Debug klasörünün altındaki x30 ya da mot dosyalarını gönül rahatlığı ile kullanabilirsin.

nonstradam

hakılısın hocam debug mode da da mot dosya oluşmuş. sanırım biraz ezbercilik yaptık ve debug da mot oluşmaz dedim. ilginize teşekkürler hocam sağolun. yeni sorularım yakında yine başınızı ağrıtacaktır. iyi çalışmalar.