FULL-C: PWM functions

Tato stránka popisuje programovací jazyk FULL-C, který je dostupný na vybraných zařízeních SDS. 
Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.

Funkce pro práci s PWM výstupem

Zařízení SDS mají k dispozici jeden nebo více PWM výstupů, který lze přímo ovládat z FULL-C programu.

Od verze FC:0x0F, může program využít tyto funkce pro ovládání PWM1, PWM2, PWM3, PWM4 (skutečná dostupnost závisí na aktuálním HW):

         void SDS_PWMx_disableOutput(unsigned int PWMx);
         void SDS_PWMx_setDutyAsPercents(unsigned int PWMx, unsigned int generatorFrequency, unsigned int Percents);
         void SDS_PWMx_setDutyAsUSECS(unsigned int PWMx, unsigned int USECS);


Historicky byly dostupné tyto funkce, které pracovali přímo a pouze s PWM1. Tyto funkce jsou, od verze FC:0x0F, nahrazeny výše uvedenými (a tyto historické funkce zůstávají jen z důvodu kompatibility).

         void SDS_PWM_disableOutput(void);
         void SDS_PWM_setDutyAsPercents(unsigned int generatorFrequency, unsigned int Percents);
         void SDS_PWM_setDutyAsUSECS(unsigned int USECS);


Základní popis

Po zapnutí zařízení SDS se načte konfigurace všech PWM výstupů z NVM (DataFlash) paměti. To znamená, že PWM výstup je po zapnutí nastaven na poslední uložené hodnoty (uložení hodnot se provádí přes webové rozhraní).


PWM výstupy mohou být elektricky zapojeny různě, záleží na konkrétním výrobku SDS. Typické je umístění výstupů do logických skupin, kdy je společné frekvence pro více výstupů.


Princip PWM

Vždy nastavujete frekvenci generátoru, a následně se vybírá poměr zap-vyp PWM signálu. Generátor určuje opakovací frekvenci signálu, který je vždy v rámci jednoho opakování rozdělen na dvě části (zapnuto a vypnuto, tj. například: log1 a log0). Poměr délky úseku zapnuto a úseku vypnuto lze proramově řídit nastavení hodnoty duty-cycle.

Poměr (duty-cycle) lze nastavit buď v rozmezí 0% až 100% (tj. sto kroků), nebo po jednotlivých mikrosekundách (příklad: je-li frekvence 1000Hz, je opakovací krok 1msec (což je 1000usec), takže je k dispozici 1000 kroků nastavení poměru).

Vždy je doporučeno ověřit si chování PWM výstupu vůči vašemu nastavení - ideálně pomocí osciloskopu připojeného na PWM výstup (pozor na zapojení SDS).


Ovládání výstupního pinu

Výstup lze trvale zablokovat do LOG0 zavoláním funkce SDS_PWM_disableOutput().

Odblokování výstupu (tj. přivedení PWM signálu na výstup) se provede automaticky vždy zavoláním jedné ze dvou konfiguračních funkcí.


Příklady

Na začátku programu je vhodné PWM výstup zablokovat, než se provede veškeré úvodní nastavení (není to však nutnost, ale je potřeba co nejdříve provést nastavení PWM výstupu).

Základní nastavení je provedeno pomocí SDS_PWMx_setDutyAsPercents() funkce. Zde se nastaví frekvence generátoru a hodnota duty-cycle v procentech. Nastavení v procentech mnohdy stačí (např. pro SDS-PWM modul).

Protože nastavení v procentech může mít pro některé účely moc hrubý krok (např. PWM serva), lze nastavení duty-cycle libovolně měnit s větším detailem (po mikro-sekundách), pomocí volání funkce SDS_PWMx_setDutyAsUSECS().

Nezapomeňte však vždy na začátku nastavit frekvenci PWM generátoru, i když chcete používat pouze krokování duty-cycle po mikro-sekundách.


 // disables output PWM1
 SDS_PWMx_disableOutput(1);

 // enables PWM1 output, generates 50% duty cycle on 1000Hz signal
 SDS_PWMx_setDutyAsPercents(1, 1000, 50);

 // enables PWM1 output, generates 75% duty cycle on 1000Hz signal
 SDS_PWMx_setDutyAsPercents(1, 1000, 75);

 // note. the last call to SDS_PWMx_setDutyAsPercents(), in this example, has set the PWM-generator frequency to 1000Hz.
 //       any following calls to SDS_PWMx_setDutyAsUSECS() will keep using this frequency configuartion
 //       (until you change it again with the SDS_PWMx_setDutyAsPercents() call)

 // enables PWM1 output, generates 500usec/500usec on 1000Hz signal
 SDS_PWMx_setDutyAsUSECS(1, 500);

 // enables PWM1 output, generates 250usec/750usec on 1000Hz signal
 SDS_PWMx_setDutyAsUSECS(1, 250);

Vždy se seznamte s tím, jaké je číslování PWMx výstupů pro daný hardware. Např. SDS-BIG2 má k dispozici (na připojovacích svorkách) výstupy PWM 1 , 3 a 4 - přičemž PWM2 není vyveden výstupní na svorky.