> For the complete documentation index, see [llms.txt](https://docs.augelab.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.augelab.com/french/function-blocks/blocks-reference/input-output/data-inputs/pwm-pulse-width-modulation.md).

# PWM (Pulse Width Modulation)

Ce bloc de fonction génère un signal booléen artificiel en modulation de largeur d'impulsion (PWM) que vous pouvez utiliser pour simuler ou commander des déclencheurs temporisés. Utilisez-le pour créer des signaux on/off répétés soit en temps (secondes), soit en nombre d'échantillons (pas discrets).

## 📥 Entrées <a href="#inputs" id="inputs"></a>

Ce bloc de fonction n’a pas d’entrées.

## 📤 Sorties <a href="#outputs" id="outputs"></a>

`Boolean` Le signal périodique True/False produit selon le mode et les temps configurés.

## 🕹️ Contrôles <a href="#controls" id="controls"></a>

`Interval` Saisissez la période totale d’un cycle. En mode Time, l’unité est la seconde. En mode Sample, l’unité est le nombre d’échantillons/pas.

`Up Duration` Durée pendant laquelle la sortie reste True dans chaque cycle. L’unité correspond au mode sélectionné (secondes ou échantillons).

`Time mode` Bascule entre Seconds (mode temporel) et Samples (mode par nombre d’échantillons).

## 🎨 Fonctionnalités <a href="#features" id="features"></a>

* Mode PWM basé sur le temps pour des signaux périodiques en temps réel.
* Mode PWM basé sur les échantillons pour des signaux synchronisés sur des pas ou des trames.
* Cycle de service ajustable via les contrôles `Interval` et `Up Duration`.
* Sortie booléenne simple à combiner avec des blocs logiques et de sortie.

## 📝 Instructions d'utilisation <a href="#usage" id="usage"></a>

1. Choisissez le mode de fonctionnement avec `Time mode`.
2. Réglez `Interval` pour définir la longueur totale du cycle.
3. Réglez `Up Duration` pour définir la portion active (True) de chaque cycle. Assurez-vous que `Up Duration` ≤ `Interval`.
4. Connectez la sortie `Boolean` à tout bloc qui consomme un signal de type check/boolean (par exemple `Led Output` pour visualiser, ou des blocs logiques pour piloter d’autres comportements).

## 📊 Évaluation <a href="#evaluation" id="evaluation"></a>

À l’exécution, le bloc produit un motif répété True/False. En mode Time, le motif suit les secondes réelles. En mode Sample, le motif avance à chaque run/step. Le duty cycle de sortie est égal à (`Up Duration` ÷ `Interval`).

## 💡 Conseils et astuces <a href="#tips-and-tricks" id="tips-and-tricks"></a>

* Visualisez le signal avec `Scope` pour vérifier le timing et le duty cycle en temps réel.
* Utilisez `Rising Edge` pour détecter les transitions et déclencher des actions mono-coup sur le front montant.
* Comptez les impulsions avec `Counter` pour mesurer des occurrences ou piloter des opérations par lots.
* Combinez avec `And` ou `Or` pour filtrer le signal PWM avec d’autres conditions (par exemple un `Logic Input` manuel).
* Utilisez `Delay Step`, `ON Delay` ou `OFF Delay` pour façonner ou déparasiter les transitions.
* Persistez ou figez les signaux avec `Data Memory` lorsque vous avez besoin d’une valeur stable entre les mises à jour.

## 🛠️ Dépannage <a href="#troubleshooting" id="troubleshooting"></a>

* Sortie toujours True ou toujours False
  * Vérifiez que `Up Duration` et `Interval` sont correctement réglés et que le `Time mode` sélectionné correspond aux unités attendues (seconds vs samples).
* Le timing semble incorrect en mode Time
  * Vérifiez que l’horloge du système hôte fonctionne et que d’autres blocs ne bloquent pas l’exécution. Utilisez `Scope` pour confirmer les temps réels.
* Le mode Sample n’avance pas comme prévu
  * Assurez-vous que le système produit des steps/échantillons (la boucle de run ou les blocs en amont doivent fournir des itérations). Utilisez `Counter` ou `Cycle Timer` pour inspecter la progression des pas.
