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 PWM výstup, který lze přímo ovládat z FULL-C programu.

Program může použít tyto funkce:

         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 PWM výstupu 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ýstup je elektricky zapojen různě, záleží na konkrétním výrobku SDS.


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_PWM_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_PWM_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
 SDS_PWM_disableOutput();

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

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

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

 // enables output, generates 500usec/500usec on 1000Hz signal
 SDS_PWM_setDutyAsUSECS(500);

 // enables output, generates 250usec/750usec on 1000Hz signal
 SDS_PWM_setDutyAsUSECS(250);