loader
Foto

PWM funkció szoftveres megvalósítása a PIC32MX5XX/6XX/7XX családban

A különböző vezérléseknél elengedhetetlen a PWM funkció használata. Hogyan valósítsuk meg ezt a PIC32MX családnál? Ebben a cikkben a legrosszabb megoldást választjuk, szoftveresen implementáljuk ezt, és látni fogjuk ennek a megvalósításnak a hátrányát. A következő cikkben már megszakítást fogjuk felhasználni a PWM implementálására.

Valósítsuk meg a PWM funkciót, ezért indítsuk el az MpLABX-et, és hozzunk létre egy projektet. A projekthez adjunk hozzá egy "C" file-t, amelybe másoljuk be a következő programot.

#include <xc.h>

#define PWM0        LATDbits.LATD0
#define PWM0Out()   { TRISDbits.TRISD0 = 0; }


void szoftverPWM(unsigned int felsoHatar, unsigned int alsoHatar)
{
    int k;
    for(k = 0; k < felsoHatar; k++)
    {
        if(k <= alsoHatar)
            PWM0 = 1;
        else
            PWM0 = 0;
    }
}

main()
{
    PWM0Out();
    
    while(1)
        szoftverPWM(100,75);
}

 

Először létrehozunk egy definíciót, illetve egy makrót is, amelyet a "main()" függvény elején hívunk meg. Ennek segítségével állítjuk be a "D" port 0. bitjét kimenetté.
A "szoftverPWM()" függvény segítségével állítjuk elő digitálisan a PWM kimenetet. A függvénynek két paramétere van, az első paraméterrel állítjuk be a for ciklus számolásának felső határát, a másodikkal pedig a "k" ciklusváltozó felső határát, ameddig a kimenetlogikai 1-ben legyen.
A "main()" függvényben lévő végtelen ciklusban a "szoftverPWM()" függvény kerül állandóan meghívásra. Látható az, hogy a mikrovezérlőnk mindig ezt a függvényt hívja meg, amelyben szoftveres késleltetés történik. Tehát, a "D" port 0. bitjén csak akkor mérhetjük a PWM jelet, ha ezt a függvényt meghívjuk (de akkor más szoftveres műveletet nem tudunk végrehajtani). Ennek az alkalmazásnak ez a hátránya.

Fordítsuk le a projektünket, majd a kapott *.hex kódot töltsük le a mikrovezérlő memóriájába. A következő eredményt kapjuk (1. ábra).

kep
1. ábra   75%-os kitöltési tényező
 

Módosítsuk most a "szoftverPWM()" függvény második paraméterét, legyen a kitöltési tényező 50%.

        szoftverPWM(100,50);

 

Töltsük le a módosított alkalmazásunk *.hex kódját a mikrovezérlőbe, és a következő mérési eredményt kapjuk (2. ábra).

kep
2. ábra   50%-os a kitöltési tényező
 

Módosítsuk megint a kitöltési tényezőt, legyen most ennek az értéke 25%. Ehhez megint meg kell változtatnunk a kérdéses függvénynek a második paraméterét.

        szoftverPWM(100,25);

 

A 25%-os kitöltési tényezőt mutató mérési eredmény látható a 3. ábrán.

kep
3. ábra   25% a kitöltési tényező értéke
 

Legyen most a kitöltési tényező 90%. Ehhez ismételten át kell írnunk a "szoftverPWM()" függvény második paraméterét, legyen ennek az értéke 90.

        szoftverPWM(100,90);

 

A 4. ábrán látjuk a 90%-os kitöltési tényezővel rendelkező PWM kimenetet.

kep
4. ábra   90% a kitöltési tényező
 

A mérési eredményeken látható volt az, hogy egy osztás értéke 1,00ms. A kitöltési tényező értéke kényelmesen beállítható tehát a "szoftverPWM()" függvény második paraméterének a megváltoztatásával. De mi a szerepe az első paraméternek?
Az első paraméterrel tudjuk beállítani a PWM jel frekvenciáját. Nézzük meg azt, hogy hogyan lehet megváltoztatni a PWM jelnek a frekvenciáját, változtassuk meg az első paraméter értékét. Ahhoz, hogy a kitöltési érték ne változzon, ugyanúgy kell a második paraméter értékét is megváltoztatni. Csökkentsük például tizedére a PWM jel frekvenciáját. Ehhez meg kell szoroznunk tízzel az első paraméter értékét, de, hogy ne változzon a kitöltési tényező, szoroznunk kell tízzel a második paraméter értékét is.

        szoftverPWM(1000,900);

 

Látható az 5. ábrán, hogy a kitöltési érték nem változott (90%), de működési frekvencia a tizedére csökkent.

kep
5. ábra   90%-os a kitöltési tényező és tízszeres periódusidő
 

A következő cikkünkben kiküszöböljük a szoftveres késleltetés hátrányát, más megoldással fogjuk megvalósítani a PWM funkciót.

 



Egyéb cikkek

További cikkeink ebben a témakörben

Régebbi cikkeink

Október közepén elindítjuk az Atmel 8 bites mikrovezérlőkről szóló sorozatunkat. Ehhez használnunk kell természetesen egy fejlesztőkörnyezetet is. Több ilyen is létezik, például a WinAVR, vagy az Atmel Studio. Mi az Atmel Studio-t fogjuk használni, e. . . .

A PIC18F mikrovezérlők ma is népszerű a fejlesztők körében. Noha 8 bites architektúráról beszélünk, számos érdekes és hasznos alkalmazás megvalósítható vele. Elég csak az USB-re, vagy akár az Ethernetre gondolnunk. Ezért a Szerkesztőség egy sorozat k. . . .

A Microchip által javasolt fejlesztőkörnyezet az MPLABX, amely felváltja az MPlab-ot. Használata nehézkesnek tűnhet, ezért megnézzük ennek az IDE környezetnek a használatát, készítünk egy egyszerű projektet, amely egy PIC32 mikrovezérlőre épül.. . . .