Šírkový modulátor PWM: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
Riadok 1: Riadok 1:
{{Draft}}
 
 
 
 
{| style="border-spacing:0;"
 
{| style="border-spacing:0;"
 
| style="background-color:#09367a;border:none;padding:0.079cm;"| '''Šírkový modulátor signálu (PWM) '''[[Image:]]
 
| style="background-color:#09367a;border:none;padding:0.079cm;"| '''Šírkový modulátor signálu (PWM) '''[[Image:]]
Riadok 20: Riadok 17:
 
8 a 16 bitové PWM bloky sú šírkové modulátory s programovateľnou periódou a šírkou impulzu. Hodinový signal a povolovacie signály je možné privádzať z viacerých zdrojov. Výstupný signál je možné vyviesť na jeden konkrétny pin alebo na vnútornú zbernicu, ktorú využívajú ostatné používateľské moduly. Vyvolanie preušenia môže byť naprogramované na nábežnú hranu výstupu alebo keď čítač dosiahne konečný stav.  
 
8 a 16 bitové PWM bloky sú šírkové modulátory s programovateľnou periódou a šírkou impulzu. Hodinový signal a povolovacie signály je možné privádzať z viacerých zdrojov. Výstupný signál je možné vyviesť na jeden konkrétny pin alebo na vnútornú zbernicu, ktorú využívajú ostatné používateľské moduly. Vyvolanie preušenia môže byť naprogramované na nábežnú hranu výstupu alebo keď čítač dosiahne konečný stav.  
  
<center>[[Image:]]</center>
+
[[Súbor:1.jpg|center|framed|Obr.1 Bloková schema PWM bloku, dátová šírka n = 8 alebo 16 bitov]]
  
 
<center>'''Bloková schema PWM bloku, dátová šírka n = 8 alebo 16 bitov'''</center>
 
<center>'''Bloková schema PWM bloku, dátová šírka n = 8 alebo 16 bitov'''</center>
Riadok 35: Riadok 32:
 
{| style="border-spacing:0;"
 
{| style="border-spacing:0;"
 
| style="border:none;padding:0.026cm;"| T<sub>''OUT''</sub> = (PeriodValue+1)/F<sub>''CLOCK''</sub>
 
| style="border:none;padding:0.026cm;"| T<sub>''OUT''</sub> = (PeriodValue+1)/F<sub>''CLOCK''</sub>
| style="border:none;padding:0.026cm;"| '''Rovnica 1'''
+
| style="border:none;padding:0.026cm;"| ''' Rovnica 1'''
  
 
|}
 
|}
Riadok 41: Riadok 38:
 
{| style="border-spacing:0;"
 
{| style="border-spacing:0;"
 
| style="border:none;padding:0.026cm;"| F<sub>''OUT''</sub> = F<sub>''CLOCK''</sub>/(PeriodValue+1)
 
| style="border:none;padding:0.026cm;"| F<sub>''OUT''</sub> = F<sub>''CLOCK''</sub>/(PeriodValue+1)
| style="border:none;padding:0.026cm;"| '''Rovnica 2'''
+
| style="border:none;padding:0.026cm;"| ''' Rovnica 2'''
  
 
|}
 
|}
Riadok 64: Riadok 61:
  
 
{| style="border-spacing:0;"
 
{| style="border-spacing:0;"
| colspan="4"  style="background-color:#eaeaea;border:none;padding:0.079cm;"|  
+
| style="background-color:#eaeaea;border:none;padding:0.079cm;"|  
  
 
|-
 
|-
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>'''Hodnota registra periódy '''</center>
+
| colspan="2"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>'''Hodnota registra periódy '''</center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>'''Typ porovnávania '''</center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>'''Typ porovnávania '''</center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>'''Hodnota registra šírky pulzu '''</center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>'''Hodnota registra šírky pulzu '''</center>
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>'''Pomer '''</center>
+
| colspan="0"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>'''Pomer '''</center>
  
 
|-
 
|-
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| 0  
+
| colspan="2"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| 0  
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>nezáleží </center>
+
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>Nezáleží </center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| > 0  
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| > 0  
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>1.0 </center>
+
| colspan="0"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>1.0 </center>
  
 
|-
 
|-
 +
| colspan="2"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| 0
 +
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>≤</center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| 0  
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| 0  
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center></center>
+
| colspan="0" style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>1.0 </center>
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| 0
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>1.0 </center>
 
  
 
|-
 
|-
 +
| colspan="2"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| 0
 +
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center><nowiki>< </nowiki></center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| 0  
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| 0  
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center><nowiki><</nowiki> </center>
+
| colspan="0" style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>0.0 </center>
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| 0
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>0.0 </center>
 
  
 
|-
 
|-
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| > 0  
+
| colspan="2"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| > 0  
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center></center>
+
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center></center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| 0  
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| 0  
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>1/(Perioda+1) </center>
+
| colspan="0"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>1/(Perioda+1) </center>
  
 
|-
 
|-
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| > 0  
+
| colspan="2"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| > 0  
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center><nowiki><</nowiki> </center>
+
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center><nowiki>< </nowiki></center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| 0  
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| 0  
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>0.0 </center>
+
| colspan="0"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>0.0 </center>
  
 
|-
 
|-
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| Perioda =šírka pulzu  
+
| colspan="2"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| Perioda =šírka pulzu  
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center></center>
+
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center></center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| Perioda= šírka pulzu
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| Perioda= šírka pulzu
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>1.0 </center>
+
| colspan="0"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>1.0 </center>
  
 
|-
 
|-
 +
| colspan="2"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| Perioda= šírka pulzu
 +
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center><nowiki>< </nowiki></center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| Perioda= šírka pulzu
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| Perioda= šírka pulzu
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center><nowiki><</nowiki> </center>
+
| colspan="0" style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>Perioda/(Perioda+1) </center>
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| Perioda= šírka pulzu
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>Perioda/(Perioda+1) </center>
 
  
 
|-
 
|-
 +
| colspan="2"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| PulseWidth Value > Period
 +
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>Nezáleží </center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| PulseWidth Value > Period  
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| PulseWidth Value > Period  
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>Don't Care </center>
+
| colspan="0" style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>1.0 </center>
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| PulseWidth Value > Period
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>1.0 </center>
 
  
 
|}
 
|}
Riadok 138: Riadok 135:
  
  
'''Jednosmerné a striedavé alektrické charakteristiky'''
+
'''Jednosmerné a striedavé elektrické charakteristiky'''
  
  
 
{| style="border-spacing:0;"
 
{| style="border-spacing:0;"
| colspan="5"  style="background-color:#d1d1d1;border:none;padding:0.079cm;"|  
+
| colspan="2"  style="background-color:#d1d1d1;border:none;padding:0.079cm;"|  
  
 
|-
 
|-
 
| style="background-color:#d1d1d1;border:none;padding:0.079cm;"| <center>'''Parameter '''</center>
 
| style="background-color:#d1d1d1;border:none;padding:0.079cm;"| <center>'''Parameter '''</center>
| style="background-color:#d1d1d1;border:none;padding:0.079cm;"| <center>'''Typicky '''</center>
+
| colspan="2"  style="background-color:#d1d1d1;border:none;padding:0.079cm;"| <center>'''Typicky '''</center>
 
| style="background-color:#d1d1d1;border:none;padding:0.079cm;"| <center>'''Limit '''</center>
 
| style="background-color:#d1d1d1;border:none;padding:0.079cm;"| <center>'''Limit '''</center>
 
| style="background-color:#d1d1d1;border:none;padding:0.079cm;"| <center>'''Jednotky'''</center>
 
| style="background-color:#d1d1d1;border:none;padding:0.079cm;"| <center>'''Jednotky'''</center>
| style="background-color:#d1d1d1;border:none;padding:0.079cm;"| <center>'''Podmienky a poznámky '''</center>
+
| colspan="0"  style="background-color:#d1d1d1;border:none;padding:0.079cm;"| <center>'''Podmienky a poznámky '''</center>
  
 
|-
 
|-
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| FOutput<sub>max</sub>  
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| FOutput<sub>max</sub>  
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>-- </center>
+
| colspan="2"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>-- </center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>24<sup>2</sup> </center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>24<sup>2</sup> </center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>MHz </center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>MHz </center>
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| 5.0V and 48 MHz input clock  
+
| colspan="0"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| 5.0V and 48 MHz input clock  
  
 
|-
 
|-
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| FInput<sub>max</sub>  
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| FInput<sub>max</sub>  
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>-- </center>
+
| colspan="2"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>-- </center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>48 </center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>48 </center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>MHz </center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>MHz </center>
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| 5.0V and 48 MHz Input clock  
+
| colspan="0"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| 5.0V and 48 MHz Input clock  
  
 
|}
 
|}
Riadok 177: Riadok 174:
  
 
{| style="border-spacing:0;"
 
{| style="border-spacing:0;"
| colspan="3"  style="background-color:#d1d1d1;border:none;padding:0.079cm;"|  
+
| style="background-color:#d1d1d1;border:none;padding:0.079cm;"|  
  
 
|-
 
|-
| style="background-color:#d1d1d1;border:none;padding:0.079cm;"| <center>'''PSoC Bloky'''</center>
+
| colspan="2"  style="background-color:#d1d1d1;border:none;padding:0.079cm;"| <center>'''PSoC Bloky'''</center>
 
| style="background-color:#d1d1d1;border:none;padding:0.079cm;"| <center>'''8-Bit PWM '''</center>
 
| style="background-color:#d1d1d1;border:none;padding:0.079cm;"| <center>'''8-Bit PWM '''</center>
| style="background-color:#d1d1d1;border:none;padding:0.079cm;"| <center>'''16-Bit PWM '''</center>
+
| colspan="0"  style="background-color:#d1d1d1;border:none;padding:0.079cm;"| <center>'''16-Bit PWM '''</center>
  
 
|-
 
|-
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>1 </center>
+
| colspan="2"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>1 </center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>PWM8 </center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>PWM8 </center>
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>PWM16_LSB </center>
+
| colspan="0"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>PWM16_LSB </center>
  
 
|-
 
|-
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>2 </center>
+
| colspan="2"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>2 </center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>-- </center>
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>-- </center>
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>PWM16_MSB </center>
+
| colspan="0"  style="background-color:#eaeaea;border:none;padding:0.079cm;"| <center>PWM16_MSB </center>
  
 
|}
 
|}
'''Parametre a Možnosti '''
+
'''Parametre, použité výrazy a možnosti nastavenia '''
  
 
'''Clock '''
 
'''Clock '''
Riadok 216: Riadok 213:
 
'''Period '''
 
'''Period '''
  
Tento parameter nastavuje period počítadla. Allowed values for PWM8 are between zero and 255. Allowed values for PWM16 are between zero and 2<sup>16</sup>-1. The period is loaded into the Period register. The effective output waveform period of the PWM16 is the period count + 1. The value may be modified using the API.  
+
Tento parameter nastavuje period počítadla. Povolené hodnoty pre PWM8 sú medzi 0 - 255. Allowed Povolené hodnoty pre PWM16 sú medzi 0 - 2<sup>16</sup>-1. Perioda je nahraná do registra periody. Efektívna hodnota výstupnej periody pre PWM16 je period count + 1. Hodnotu je možné editovať pomocou API.  
  
 
'''PulseWidth '''
 
'''PulseWidth '''
  
Sets the pulse width of the PWM output. Allowed values are between zero and the period value. The value may be modified using the API.  
+
Nastauje šírku pulzu výstupného signálu. Povolené hodnoty sú medzi 0 a hodnotou periody. Hodnotu je možné editovať pomocou API.
  
 
'''InterruptType '''
 
'''InterruptType '''
  
This parameter sets the interrupt trigger type. The interrupt can be set so that it triggers on the rising edge of the output signal or on the terminal count of the Counter register. A separate register independently enables the interrupt.  
+
Tento parameter určuje spôsob vyvolania prerušenia. Prerušenie môže nastať na nábežnú hranu signal, alebo ak dopočíta register počítadla do konca. Prerušenie môže vyvolať viacero nezávyslích registrov.  
  
 
'''CompareType '''
 
'''CompareType '''
  
This parameter sets the compare function type "Less Than" or "Less Than or Equal To."  
+
Tento parameter určuje typ porovnávacej funkcie "Menší ako" alebo "Menší alebo rovný ako"  
 
 
'''ClockSync '''
 
 
 
In the PSoC devices, digital blocks may provide clock sources in addition to the system clocks. Digital clock sources may even be chained in ripple fashion. This introduces skew with respect to the system clocks. These skews are more critical in the CY8C29/27/24/22/21xxx and CY8CLED04/08/16 PSoC device families because of various data-path optimizations, particularly those applied to the system busses. This parameter may be used to control clock skew and ensure proper operation when reading and writing PSoC block register values. Appropriate values for this parameter must be determined from the following table.
 
 
 
 
 
{| style="border-spacing:0;"
 
| style="background-color:#d1d1d1;border:none;padding:0.079cm;"| <center>'''ClockSync Value '''</center>
 
| style="background-color:#d1d1d1;border:none;padding:0.079cm;"| <center>'''Use '''</center>
 
  
|-
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| Sync to SysClk
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| Use this setting for any 24 MHz (SysClk) derived input clock source less than 24 MHz. Examples include VC1, VC2, VC3 (when VC3 is driven by SysClk), 32KHz, and digital PSoC blocks with SysClk-based sources. Externally generated clock sources must also use this value to ensure that proper synchronization occurs.
 
 
|-
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| Sync to SysClk*2
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| Use this setting for any 48 MHz (SysClk*2) based input clock less than 48 MHz.
 
 
|-
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| Use SysClk Direct
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| Use when a 24 MHz (SysClk/1) clock is desired. This does not actually perform synchronization but provides low-skew access to the system clock itself. If selected, this option overrides the setting of the Clock parameter, above. It must always be used instead of VC1, VC2, VC3 or digital blocks where the net result of all dividers in combination produces a 24 MHz output.
 
 
|-
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| Unsynchronized
 
| style="background-color:#eaeaea;border:none;padding:0.079cm;"| Use when the 48 MHz (SysClk*2) input is selected.
 
 
Use when unsynchronized inputs are desired. In general this use is advisable only when interrupt generation is the sole application of the Counter. This setting is required for blocks that remain active during sleep.
 
 
|}
 
 
'''InvertEnable '''
 
'''InvertEnable '''
  
This parameter determines the sense of the enable input signal. When "Normal" is selected, the enable input is active-high. Selecting "Invert" causes the sense to be interpreted as active-low. InvertEnable applies only to the CY8C29/27/24/22/21xxx and CY8CLED04/08/16 families of PSoC devices.  
+
Tento parameter mení spôsob akým blok reaguje na povolovací signál. Ak je hodnota nastavená na "Normal" ,povolovací vstup reaguje na high úroveň signálu. Ak však nastavíme hodnotu na "Invert" vstup reaguje na hodnotu low..  
  
 
'''Interrupt Generation Control '''
 
'''Interrupt Generation Control '''
  
The following two parameters InterruptAPI and IntDispatchMode are only accessible by setting the Enable Interrupt Generation Control check box in PSoC Designer. This is available under Project >> Settings... >> Device Editor.
+
Nasledujúce 2 parametre “InterruptAPI” a “IntDispatchMode” sú prístupné iba ak povolíme ”Interrupt Generation Control” v PSoC Designeri. Toto je možné nájsť v menu: Project >> Settings... >> Device Editor.  
 
 
'''InterruptAPI '''
 
 
 
The InterruptAPI parameter allows conditional generation of a User Module's interrupt handler and interrupt vector table entry. Select "Enable" to generate the interrupt handler and interrupt vector table entry. Select "Disable" to bypass the generation of the interrupt handler and interrupt vector table entry. Properly selecting whether an Interrupt API is to be generated is recommended particularly with projects that have multiple overlays where a single block resource is used by the different overlays. By selecting only Interrupt API generation when it is necessary the need to generate an interrupt dispatch code might be eliminated, thereby reducing overhead.
 
 
 
'''IntDispatchMode '''
 
 
 
The IntDispatchMode parameter is used to specify how an interrupt request is handled for interrupts shared by multiple user modules existing in the same block but in different overlays. Selecting "ActiveStatus" causes firmware to test which overlay is active before servicing the shared interrupt request. This test occurs every time the shared interrupt is requested. This adds latency and also produces a nondeterministic procedure of servicing shared interrupt requests, but does not require any RAM. Selecting "OffsetPreCalc" causes firmware to calculate the source of a shared interrupt request only when an overlay is initially loaded. This calculation decreases interrupt latency and produces a deterministic procedure for servicing shared interrupt requests, but at the expense of a byte of RAM.  
 
  
 
'''Application Programming Interface '''
 
'''Application Programming Interface '''
  
The Application Programming Interface (API) routines are provided as part of the user module to allow the designer to deal with the module at a higher level. This sections specifies the interface to each function together with related constants provided by the "include" files.
+
Application Programming Interface (API) funkcie sú súčasťou uživateľského modulu pre designer na spoluprácu s modulom na vyššej úrovni. Tieto sekcie špecifikujú interface pre každú fukciu spolu s konštantami a priloženými súbormi.
 
 
'''Note '''In this, as in all user module APIs, the values of the A and X register may be altered by calling an API function. It is the responsibility of the calling function to preserve the values of A and X before the call if those values are required after the call. This "registers are volatile" policy was selected for efficiency reasons and has been in force since version 1.0 of PSoC Designer. The C compiler automatically takes care of this requirement. Assembly language programmers must ensure their code observes the policy, too. Though some user module API function may leave A and X unchanged, there is no guarantee they will do so in the future.  
 
  
Start/Stop indicates that the PWM16 is enabled when set. It is modified by using the PWM16 API.
+
'''Použitá literatúra'''
  
# Start/Stop is controlled by the LSB Control register in chained PSoC blocks and is set to zero.
+
CYPRESS, Semiconductor Corporation. PSoC Programmable System-on-Chip : Technical Reference Manual (TRM). San Jose, USA , c2008. 572 s. Document No. 001-14463 Rev. *C. Dostupný z WWW: <[http://www.cypress.com]>.

Verzia zo dňa a času 21:57, 22. jún 2010

Šírkový modulátor signálu (PWM) [[Image:]]

Vlastnosti

  • 8 a 16 bitový univerzálny šírkový modulator používajúci jeden alebo dva PSoC bloky.
  • Frekvencia hodinového signal do 48 MHz.
  • Automatické znovunačítanie šírky pulzu, pri každom cykle.
  • Programovateľná šírka impulzu.
  • Vstup povolujúci/zakazujúci nepretržitý beh čítača.
  • Možnosť vyvolať prerušenie na nábežnú hranu výstupu.

8 a 16 bitové PWM bloky sú šírkové modulátory s programovateľnou periódou a šírkou impulzu. Hodinový signal a povolovacie signály je možné privádzať z viacerých zdrojov. Výstupný signál je možné vyviesť na jeden konkrétny pin alebo na vnútornú zbernicu, ktorú využívajú ostatné používateľské moduly. Vyvolanie preušenia môže byť naprogramované na nábežnú hranu výstupu alebo keď čítač dosiahne konečný stav.

Obr.1 Bloková schema PWM bloku, dátová šírka n = 8 alebo 16 bitov
Bloková schema PWM bloku, dátová šírka n = 8 alebo 16 bitov

Popis Funkcionality

Používateľský modul PWM zaberá jeden až dva digitálne PSoC bloky, každý prispieva ôsmimi bitmi k celkovému rozlíšeniu. Na vytvorenie 16bitového modulátora je potrebné spojiť dva za sebou idúce bloky takže tie medzi sebou zdielajú svoje parametre a sú medzi sebou prepojené. Taktiež sú zlúčené countre, perióda a porovávacie registre (dátové registre DR0, DR1 a DR2). Toto všetko je potrebné pre dosiahnutie 16bitového rozlíšenia.

PWM API poskytuje funkcie ktoré je možné volať pomocou C a assemblera na zastevenie alebo spustenie countera a na čítanie a zápis rôznych dátových registrov. Hodnoty dátových registrov môžu byť nastavené taktiež pomocou Device editora. Po štarte cyklu sa s každou nábežnou hranou pri ktorej je nastavený povolovací signál hodinového cyklu, dekrementuje register počítadla. Register počítadla je obnovený na hodnotu z registra periódy keď dosiahne terminal count (hodnotu 0).

Register periódy môže byť modifikovaný novou hodnotou v akomkoľvek okamihu. Ak je PWM zastavené, zapisovanie do registra periódy zmení taktiež hodnotu registra počítadla. Ak je PWM v chode, zapisovanie do registra periódy nezmení hodnotu v registri počítadla, pokiaľ sa nenačíta PWM odznova pomocou terminal countu. Pretože terminal count nastane ak je počítadlo na nule, perióda výstupného signálu je o jedna väčšia ako hodnota uložená v registry periódy. Nasledujúce rovnice hovoria o výstupe na základe vstupného hodinového signálu a hodnoty v registry periódy.


TOUT = (PeriodValue+1)/FCLOCK Rovnica 1
FOUT = FCLOCK/(PeriodValue+1) Rovnica 2

Kde FOUT je výstupná frekvencia PWM, TOUT je výstupná perióda PWM, FCLOCK je frekvencia vstupného hodinového impulzu a PeriodValue je zadaná hodnota požadovanej periódy.

PWM udržiava svoj výstup na hodnote low ak je zastavený. Počas behu komparátor kontroluje cyklus výstupného signálu. Počas každého hodinového cyklu, tento komparátor porovnáva hodnoty počítadla a registra šírky pulzu, vykonáva "menší" alebo "menší alebo rovný" test na základe možnosti vybratej v Device Editore. PWM udržiava hodnotu “high” porovnania na nábežnú hranu periódy v ktorej je vykonávané porovnanie. Pomer medzi šírkou pulzu a periódou určuje operačný cyklus výstupného signálu. Pomer operačného cyklu môže byť vypočítaný podľa tejto rovnice:

Pre Šírka pulzu < Hodnota periódy


[[Image:]] Rovnica 3

Pre Šírka pulzu >= Hodnota periódy

Operačný cyklus = 100%

Nasledujúca tabuľka sumarizuje niektoré špeciálne stavy výst. signalu na základe periódy, šírky pulzu a porovnávacej operácie.


Hodnota registra periódy
Typ porovnávania
Hodnota registra šírky pulzu
Pomer
0
Nezáleží
> 0
1.0
0
0
1.0
0
<
0
0.0
> 0
0
1/(Perioda+1)
> 0
<
0
0.0
Perioda =šírka pulzu
Perioda= šírka pulzu
1.0
Perioda= šírka pulzu
<
Perioda= šírka pulzu
Perioda/(Perioda+1)
PulseWidth Value > Period
Nezáleží
PulseWidth Value > Period
1.0

Hodnota registra šírky pulzu môže byť nastavená pomocou Device Editora alebo počas chodu pomocou API. Nie je poskytnutá žiadna možnosť bufferovania registra šírky pulzu.Bufferuje sa iba register počítadla pred dopočítaním. Preto sa zmeny vykonané v registry šírky pulzu prejavia na porovnávacom výstupe až v ďaľšom hodinovom cykle. Tímto sa dajú vytvárať periódy z viacerími pulzami.

Prerušenie je možné naprogramovať tak aby sa vyvolalo na dopočítanie countera alebo keĎ sa porovnanie stane pravdivým. Prerušenie vyvolané na základe komparátora nastane pri nábežnej hrane výst. signálu a preuršenie vyvolané na základe dopočítani countera sa vyvolá pol hodinového impulzu pred dobežnou hranou výstupu. Tieto možnosti sa dajú nastaviť v Device Editore. Povolenie alebo zakázanie prerušenia sa nastavuje pomocou APi countera. Globálne prerušenie musí byť povolené pred tým ako sa spustí prerušenie od countera.

Je potrebné dávať pozor pri modifikovaní registra šírky pulzu, pretože spolu s aktuálnou hodnotou čítača určuje výstupný stav PWM.Aby sme predišli možným defektom vo výstupnom signále, register šírky pulzu musí byť modifikovaný až po detekovaní dopočítania pomocou prerušenia.

Pre aplikácie ktoré si vyžadujú rýchlejšie aktualizovanie cyklu, môže byť PWM vyvedené na pin, kde je výstup neustále sledovaný. A može byť aktualizovaný hneď ako sa zaznamená zmena signálu z high na low alebo opačne. Acquiring the Count register value must be done very carefully. Reading the Count register causes its contents to latch into the PulseWidth register. This causes the output duty cycle to change.

Ak je potrebné čítať register počítdla za chodu, je možné využiť funkciu z API s názvom ReadCounter(). Táto funkcia dočasne zastaví hodinový signál, uloží register šírky pulzu, načíta počítadlo, obnoví register šírky pulzu a nakoniec znova pustí hodinový signál.

Časovanie

[[Image:]]

Časový diagram PWM


Jednosmerné a striedavé elektrické charakteristiky


Parameter
Typicky
Limit
Jednotky
Podmienky a poznámky
FOutputmax
--
242
MHz
5.0V and 48 MHz input clock
FInputmax
--
48
MHz
5.0V and 48 MHz Input clock

Poznámky k el. charakteristikám

  1. Najrýchlejší hodinový signal ktorý je možné použiť, je 24 MHz pri 3.3 V.
  2. Ak je výstup vedený cez globálne zbernice, potom je hodnota výstupnej frekvencie maximálne 5 MHz.

Umiestnenie

PWM zeberá jeden digitálny blok pri každom 8 bitovom rozlíšení. Ak je použitých viac ako jeden blok, všetky sú umiestnené za sebou v Device Editore v poradí zvyšovania čísla jednotky os posledného byteu (LSB) k prvému byteu (the MSB). Každému bloku je priradené symbolické meno zobrazené v device editore počas a po umiestnení. API priradí menám všetkých registrov uživateľské mená a mená blokov pre priamy prístup do PWM registrov pomocou API. Mená blokov pužité pri rôznych presnostiach sú v nasledujúcej tabuľke.


PSoC Bloky
8-Bit PWM
16-Bit PWM
1
PWM8
PWM16_LSB
2
--
PWM16_MSB

Parametre, použité výrazy a možnosti nastavenia

Clock

Hodinový signále je možné brať z jedného z 16 zdrojov. Tieto zdroje obsahujú 48 MHz oscilátor (pri 5.0V), nižšie frekvencie (VC1, VC2, a VC3) sú delené z 24 MHz systémových hodín, ostatných PSoC blokov, a externých vstupov prepojených cez globálne vstupy a výstupy.

Enable

Povolovací parameter je vyberaný z jedného z 16 zdrojov. Hodnota high signal enable zapína počítadlo, zatialčo hodnota low ho vypína pokial sa counter resetuje. Výstup nie je ovplivnený stavom enable signálu.

CompareOut

Porovnávací výstup je možné vypnúť (bez ovplivnenia operácií prerušenia) alebo pripojiť na hociktorú výstupnú zbernicu. Vždy je dostupný ako vstup pre ďaľší nadradený digitalny PSoC blok.


TerminalCountOut

Je externý výstup počítadla. Tento parameter môže byť zakázaný, alebo pripojený na hociktorý rad výstupných zberníc.

Period

Tento parameter nastavuje period počítadla. Povolené hodnoty pre PWM8 sú medzi 0 - 255. Allowed Povolené hodnoty pre PWM16 sú medzi 0 - 216-1. Perioda je nahraná do registra periody. Efektívna hodnota výstupnej periody pre PWM16 je period count + 1. Hodnotu je možné editovať pomocou API.

PulseWidth

Nastauje šírku pulzu výstupného signálu. Povolené hodnoty sú medzi 0 a hodnotou periody. Hodnotu je možné editovať pomocou API.

InterruptType

Tento parameter určuje spôsob vyvolania prerušenia. Prerušenie môže nastať na nábežnú hranu signal, alebo ak dopočíta register počítadla do konca. Prerušenie môže vyvolať viacero nezávyslích registrov.

CompareType

Tento parameter určuje typ porovnávacej funkcie "Menší ako" alebo "Menší alebo rovný ako"

InvertEnable

Tento parameter mení spôsob akým blok reaguje na povolovací signál. Ak je hodnota nastavená na "Normal" ,povolovací vstup reaguje na high úroveň signálu. Ak však nastavíme hodnotu na "Invert" vstup reaguje na hodnotu low..

Interrupt Generation Control

Nasledujúce 2 parametre “InterruptAPI” a “IntDispatchMode” sú prístupné iba ak povolíme ”Interrupt Generation Control” v PSoC Designeri. Toto je možné nájsť v menu: Project >> Settings... >> Device Editor.

Application Programming Interface

Application Programming Interface (API) funkcie sú súčasťou uživateľského modulu pre designer na spoluprácu s modulom na vyššej úrovni. Tieto sekcie špecifikujú interface pre každú fukciu spolu s konštantami a priloženými súbormi.

Použitá literatúra

CYPRESS, Semiconductor Corporation. PSoC Programmable System-on-Chip : Technical Reference Manual (TRM). San Jose, USA , c2008. 572 s. Document No. 001-14463 Rev. *C. Dostupný z WWW: <[1]>.