FULL-C: PWM functions: Porovnání verzí

(Založena nová stránka s textem „ 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,…“)
 
 
(Nejsou zobrazeny 2 mezilehlé verze od stejného uživatele.)
Řádek 4: Řádek 4:
 
== Funkce pro práci s PWM výstupem ==
 
== Funkce pro práci s PWM výstupem ==
 
__NOTOC__
 
__NOTOC__
Zařízení SDS mají k dispozici jeden PWM výstup, který lze přímo ovládat z FULL-C programu.
+
Zařízení SDS mají k dispozici jeden nebo více PWM výstupů, který lze přímo ovládat z FULL-C programu.
  
Program může použít tyto funkce:
+
Od verze FC:0x0F, může program využít tyto funkce pro ovládání PWM1, PWM2, PWM3, PWM4 (skutečná dostupnost <u>závisí</u> na aktuálním HW):
 +
<pre>
 +
        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);
 +
</pre>
 +
 
 +
 
 +
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).
 
<pre>
 
<pre>
 
         void SDS_PWM_disableOutput(void);
 
         void SDS_PWM_disableOutput(void);
Řádek 12: Řádek 20:
 
         void SDS_PWM_setDutyAsUSECS(unsigned int USECS);
 
         void SDS_PWM_setDutyAsUSECS(unsigned int USECS);
 
</pre>
 
</pre>
 +
  
  
 
== Základní popis ==
 
== 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í).
+
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ýstup je elektricky zapojen různě, záleží na konkrétním výrobku SDS.  
+
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ů.
  
  
Řádek 42: Řádek 51:
 
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).
 
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).
+
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_PWM_setDutyAsUSECS()'''.
+
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.
 
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.
Řádek 50: Řádek 59:
  
 
<pre>
 
<pre>
  // disables output
+
  // disables output PWM1
  SDS_PWM_disableOutput();
+
  SDS_PWMx_disableOutput(1);
  
  // enables output, generates 50% duty cycle on 1000Hz signal
+
  // enables PWM1 output, generates 50% duty cycle on 1000Hz signal
  SDS_PWM_setDutyAsPercents(1000, 50);
+
  SDS_PWMx_setDutyAsPercents(1, 1000, 50);
  
  // enables output, generates 75% duty cycle on 1000Hz signal
+
  // enables PWM1 output, generates 75% duty cycle on 1000Hz signal
  SDS_PWM_setDutyAsPercents(1000, 75);
+
  SDS_PWMx_setDutyAsPercents(1, 1000, 75);
  
  // note. the last call to SDS_PWM_setDutyAsPercents(), in this example, has set the PWM-generator frequency to 1000Hz.
+
  // note. the last call to SDS_PWMx_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
+
  //      any following calls to SDS_PWMx_setDutyAsUSECS() will keep using this frequency configuartion
  //      (until you change it again with the SDS_PWM_setDutyAsPercents() call)
+
  //      (until you change it again with the SDS_PWMx_setDutyAsPercents() call)
  
  // enables output, generates 500usec/500usec on 1000Hz signal
+
  // enables PWM1 output, generates 500usec/500usec on 1000Hz signal
  SDS_PWM_setDutyAsUSECS(500);
+
  SDS_PWMx_setDutyAsUSECS(1, 500);
  
  // enables output, generates 250usec/750usec on 1000Hz signal
+
  // enables PWM1 output, generates 250usec/750usec on 1000Hz signal
  SDS_PWM_setDutyAsUSECS(250);
+
  SDS_PWMx_setDutyAsUSECS(1, 250);
  
 
</pre>
 
</pre>
 +
 +
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.

Aktuální verze z 13. 10. 2022, 20:05

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.