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).
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).
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.
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.
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.
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.
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.. . . .