> 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/spanish/function-blocks/blocks-reference/input-output/data-inputs/pwm-pulse-width-modulation.md).

# PWM (Pulse Width Modulation)

Este bloque de función genera una señal booleana modulada por ancho de pulso (PWM) artificial que puedes usar para simular o activar disparadores temporizados. Úsalo para crear señales repetitivas de encendido/apagado ya sea por tiempo (segundos) o por conteo de muestras (pasos discretos).

## 📥 Entradas

Este bloque de función no tiene entradas.

## 📤 Salidas

* `Boolean` — La señal periódica True/False producida según el modo y los tiempos configurados.

## 🕹️ Controles

* `Interval` — Ingresa el periodo total de un ciclo. En el modo Time esto está en segundos. En el modo Sample esto está en número de muestras/pasos.
* `Up Duration` — Ingresa cuánto tiempo la salida permanece True dentro de cada ciclo. Las unidades coinciden con el modo seleccionado (segundos o samples).
* `Time mode` — Alterna entre `Seconds` (modo basado en tiempo) y `Samples` (modo basado en conteo de samples).

## 🎨 Características

* Modo PWM basado en tiempo para señales periódicas en tiempo real.
* Modo PWM basado en samples para señales sincronizadas por pasos o frames.
* Ciclo de trabajo ajustable mediante `Interval` y `Up Duration`.
* Salida booleana simple, fácil de combinar con bloques lógicos y de salida.

## 📝 Instrucciones de uso

1. Elige el modo de operación con `Time mode`.
2. Ajusta `Interval` para definir la longitud completa del ciclo.
3. Ajusta `Up Duration` para definir la porción activa (True) de cada ciclo. Asegúrate de que `Up Duration` sea menor o igual que `Interval`.
4. Conecta la salida `Boolean` a cualquier bloque que consuma una señal de verificación / booleana (por ejemplo `Led Output` para visualizar, o bloques lógicos para controlar otros comportamientos).

## 📊 Evaluación

En tiempo de ejecución el bloque produce un patrón repetido True/False. En `Time mode` el patrón sigue segundos reales. En `Sample mode` el patrón avanza con cada run/step. El ciclo de trabajo (duty cycle) es igual a (`Up Duration` ÷ `Interval`).

## 💡 Consejos y Trucos

* Visualiza la señal usando `Scope` para verificar el timing y el duty cycle en tiempo real.
* Usa `Rising Edge` para detectar transiciones y disparar acciones de un solo pulso en el flanco ascendente.
* Cuenta pulsos con `Counter` para medir ocurrencias o accionar operaciones por lotes.
* Combina con `And` u `Or` para condicionar la señal PWM con otras condiciones (por ejemplo un `Logic Input` manual).
* Usa `Delay Step`, `ON Delay` o `OFF Delay` para modelar o hacer debounce de transiciones.
* Persiste o congela señales con `Data Memory` cuando necesites un valor estable entre actualizaciones.

## 🛠️ Resolución de problemas

* Salida siempre True o siempre False
  * Verifica que `Up Duration` e `Interval` estén configurados correctamente y que el `Time mode` seleccionado coincida con las unidades esperadas (seconds vs samples).
* El timing parece incorrecto en `Time mode`
  * Verifica que el reloj del sistema anfitrión esté funcionando y que otros bloques no estén bloqueando la ejecución. Usa `Scope` para confirmar los tiempos reales.
* El modo sample no avanza como se espera
  * Asegúrate de que el sistema esté generando pasos/samples (el loop de ejecución o bloques aguas arriba deben proporcionar iteraciones). Usa `Counter` o `Cycle Timer` para inspeccionar el progreso de pasos.
