stellaris ccs PWM sorunu

Başlatan fractal, 15 Mart 2013, 23:07:23

fractal

aşağıdaki kodlarla pwm elde etmeye çalışıyorum  ama olmadı.sorun nerde acaba.while döngüsüne kadar geliyor ama pwmçıkışı alamıyorum..

ve bu iki fonksiyonun farkı nedir anlayamadım.

GPIOPinConfigure(GPIO_PCTL_PD0_PWM0 );


        GPIOPinTypePWM(GPIO_PORTD_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);



int
    main(void)
    {


       SysCtlClockSet( SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN );

        SysCtlPWMClockSet(SYSCTL_PWMDIV_1);


        SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM);


        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);

        GPIOPinConfigure(GPIO_PCTL_PD0_PWM0 );


        GPIOPinTypePWM(GPIO_PORTD_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);

        PWMGenConfigure(PWM_BASE, PWM_GEN_0, PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);
        PWMGenConfigure(PWM_BASE, PWM_GEN_1, PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);
        PWMGenPeriodSet(PWM_BASE, PWM_GEN_0, 64000);
        PWMGenPeriodSet(PWM_BASE, PWM_GEN_1, 64000);

        PWMPulseWidthSet(PWM_BASE, PWM_OUT_0, 34000);
        PWMPulseWidthSet(PWM_BASE, PWM_OUT_1, 34000);
        PWMPulseWidthSet(PWM_BASE, PWM_OUT_2, 34000);
        PWMPulseWidthSet(PWM_BASE, PWM_OUT_3, 34000);





        PWMGenEnable(PWM_BASE, PWM_GEN_0);
        PWMGenEnable(PWM_BASE, PWM_GEN_1);

   

       
        PWMGenEnable(PWM_BASE, PWM_GEN_0);
        PWMOutputState(PWM_BASE, PWM_OUT_0_BIT|PWM_OUT_1_BIT|PWM_OUT_2_BIT|PWM_OUT_3_BIT, true);
        
        SysCtlDelay((SysCtlClockGet() * 1) / 3);



        while(1)
        {

        }

Restantum cogniscutur Quantum deligutur

fractal

stellarisware içinde örnek pwm bile çalıştıramadım.derlerkende hata vermiyor.registerlarada bir değerler yazılıyor ama.çalışmıyor..
Restantum cogniscutur Quantum deligutur

fractal

ti sayfasında da sordum cevap yok.işlemcinin manuelinde 10 adımda pwm modülünü aktive etmeyi gösteriyorlar.
örneğin ccs de  RCGC0 registerine direkt istediğim değeri nasıl yazabilirim.yani fonksiyon  kullanmadan böyle register bazlı yapmayı deneyeceğim.ama
registera nasıl yazacağımı bilmiyorum..
Restantum cogniscutur Quantum deligutur

fractal

ti bu sorunuma alttaki cevabı yazmış.ama tam olarak anlamadım.




Alıntı YapHave long used both your M3 & newer M4 PWM Generators - always work for us.

Some quick suggestions: You've set your System Clock to fastest possible - for our test/verify purposes - kindly "humor me" - reduce it via "SYS_DIV_4" - just in case.  (later - once working - you can change it back...)

You've elected "NO_SYNC" - which means both PWM Generators may not change together.  Is this really what you want?  (we've never so used)

Your code appears in conformance w/that in SW-DRL-UG - but do note what appears to be "deprecated" names/labels w/in your (and SW-DRL-UG) code.  (i.e. "PWM0_BASE" is more current.)

SW-DRL-UG Code used "PWM_GEN_MODE_DOWN" - worthwhile to "echo (copy) " that and repeat your test.

Only other thing which springs to mind - your use of "GPIOPinConfigure()" demands read/compliance with SW-DRL-UG warning:

Note:
This function is not valid on Sandstorm, Fury, and Dustdevil-class devices. Also, if the same
signal is assigned to two different GPIO port pins, the signal is assigned to the port with the
lowest letter and the assignment to the higher letter port is ignored.

I've never understood TI's reluctance to place this "Class Identify" w/in a "quicker/easier" search mechanism.  You can search a key register which reveals - I do not know.  Should your MCU be one of the 3 mentioned (above) you cannot use GPIOPinConfigure().

Kindly give this a try - and do report for benefit of interested others...
Restantum cogniscutur Quantum deligutur

fractal

GPIOPinConfigure(GPIO_PCTL_PD0_PWM0 );  Sanırımbu fonks,iyonda sorun var.işlemci   burda hataya geçiyor.
Restantum cogniscutur Quantum deligutur

fractal

Sandstorm, Fury, and Dustdevil-class devices nedir?sorunu hala aşamadım..
Restantum cogniscutur Quantum deligutur

z

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fractal

hocam tek cevab veren sizsiniz.benim kisi Sandstorm sınıfındanmış ve işlemcinin son hanesi bu kodu belirliyormuş.
LM3S5G51---yani G51

şimdi benim sorunumun bunla alakası nedir?neden GPIOPinConfigure(GPIO_PCTL_PD0_PWM0 ) fonksiyonunu desteklemiyor yada yormu?
derlerken hata vermiyor.

SW-DRL-UG dökümanı ile ccs de koz yazarken yardımcı icerik zaten aynı..diğer modülleri çalışıyor..
Restantum cogniscutur Quantum deligutur

z

Çipinde D portu varsa neden desteklemesin?

Kullandığın kütüphaneleri bilmiyorum. Sana en büyük yardım TI'ın kendi forumundan gelir. Burada boşuna debeleniyorsun.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fractal

#9
ti nin formunada yazdım.yukardaki cevabı verdiler bana.onlarda mauele  bak oraya bak şuraya bak diyorlr.

#include "C:\StellarisWare\inc/lm3s5g51.h"
#include "C:\StellarisWare\inc/hw_memmap.h"
#include "C:\StellarisWare\inc/hw_types.h"
#include "C:\StellarisWare\driverlib/gpio.h"
#include "C:\StellarisWare\driverlib/adc.h"
#include  "C:\StellarisWare\driverlib/pwm.h"
#include  "C:\StellarisWare\driverlib/pin_map.h"
#include "C:\StellarisWare\driverlib/sysctl.h"
#include "C:\StellarisWare\driverlib/debug.h"

eğer bu fonksiyonu kullanırsam(örneklerin hepsinde kullanılmış)

GPIOPinConfigure (GPIO_PCTL_PD0_PWM0);


işlemci faultISR de sonsuz döngüye giriyor.

aşağıda hataya geçtiği satırlar..

    //
    // Write the requested pin muxing value for this GPIO pin.
    //
    HWREG(ulBase + GPIO_O_PCTL) = ((HWREG(ulBase + GPIO_O_PCTL) &
                                    ~(0xf << ulShift)) |
                                   ((ulPinConfig & 0xf) << ulShift));

Restantum cogniscutur Quantum deligutur

fractal

This function is not valid on Sandstorm, Fury, and Dustdevil-class devices. Also, if the same
signal is assigned to two different GPIO port pins, the signal is assigned to the port with the
lowest letter and the assignment to the higher letter port is ignored.


Benim sandstorm olduğu için desteklemiyor.peki bu komut setini nasıl kullanıcam?
Restantum cogniscutur Quantum deligutur

fractal

bu kodu yazınca pwm çalışıyor...

       SYSCTL_RCGC0_R|=SYSCTL_RCGC0_PWM;
       GPIO_PORTD_PCTL_R|=GPIO_PCTL_PD0_PWM0|GPIO_PCTL_PD1_PWM1;
Restantum cogniscutur Quantum deligutur

fractal

#12
arkadaşlar şöyle bir sorun yaşıyorum...

her pwm zero kesmesinde pwm duty cycle güncellemesi yapmaya çalışıyorum.bir cycle sinüs çin 30 değer alıyorum.15 tane bir alterns için 15 tane diğer alternans için kullanıyorum.her kesme geldiğinde(pwm count değeri 0 olduğunda yeni değeri yüklemeden önce) kesme adedini sayark bu işleri yapıyorum.2 adet çıkışım var.biri diğerinin tersi.şimdi bu iki kanalı skopa bağlıyorum.pwm dalgaları ekranda kayıyor.durdurup baktığımda normalmiş gibi gözüküyor.ama frekansa bakıyorum oynuyor.örneğin anahtarlama frekansım 10khz ise  10.90,,10,50,,,9.85 gibi oynuyor.acaba pwm kesmesi hep aynı zamanda olmuyormu.nasıl oynar anahtarlama frekansı anlamadım..

bu pwmgüncelleme derğerlerinde 0 varsa yani pwm duty cycle değeri 0 olursa yinede pwm zero kesmesi oluşurmu?
Restantum cogniscutur Quantum deligutur

fractal

gerçi bu stellaris sorusu değil ama.mutlaka birilerininde başına gelmiştir.yoksa faz kayması varda ondanmı skop böyle yapıyor.neden anahtarlama frekansım oynuyor.....
Restantum cogniscutur Quantum deligutur

z

Stellaris ailesi ADC ve PWM konusunda mükemmel yetenekte bir seri.

PWM frekansınız sorunsuz şekilde sabit kalacaktır. Muhtemelen kurulumda bir hatanız var.

PWM donanımı, timerın 0 değeri alması durumunda, reload işlemi aşamasında, compare değerleri ile timer içeriğinin eşitlenmesi durumunda interrupt üretebilecek şekilde ayarlanabilir.

Pwm frekansına PWM çıkışlarından bakın. Kesme rutininde bir pini toggle ederek sinyal üretip bu sinyalden firekans ölçümü yapıyorsanız ölçüm sonuçlarında gezinme olabilir.

Ayrıca tüm registerlerin reload işlemini immediately modunda değil, underflow modunda yapmalısın.

Tüm bunlara rağmen, sabit duty değeri yüklü pwm çıkışına baktığın halde frekansda gezinme varsa, sorunu taaaa osc tarafında, besleme devresinde aramalısın.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com