Introducción
Los equipos de la familia ESP32 PLC tienen un número definido de salidas digitales. Todas ellas se pueden programar como salidas PWM si hace falta. Como sabemos, la PWM (modulación por ancho de pulso) es un tipo de señal de tensión que sirve para transmitir información o para modificar la potencia que recibe cada carga. En este artículo verás cómo configurar salidas PWM.
Requisitos
¿Qué es la PWM y cómo funciona?
PWM son las siglas de Pulse Width Modulation (modulación por ancho de pulso), una técnica que sirve para controlar la potencia que recibe un dispositivo. Se usa habitualmente en sistemas electrónicos para controlar la velocidad de motores, el brillo de LED y la tensión que se suministra a distintos componentes.
El principio básico de la PWM consiste en conectar y desconectar la alimentación rápidamente a una frecuencia determinada, variando la duración de los periodos en "on" y en "off". Ajustando el ciclo de trabajo (el porcentaje de tiempo que la alimentación está en "on" respecto al tiempo total del ciclo) se controla la potencia media que recibe el dispositivo.
Salidas PWM en los PLC basados en ESP32
Las salidas de los PLC basados en ESP32 no son pines directos del ESP32, sino que se usan chips de expansión I2C. Según la versión del PLC, hay hasta 2 chips de expansión, con direcciones I2C 0x40 y 0x41.
Cada pin de salida está asociado a un pin del chip de expansión. El ciclo de trabajo de cada pin es independiente del resto y configurable. Cada salida tiene su propia resolución de 12 bits (4096 pasos), que se utiliza para fijar el ciclo de trabajo, por ejemplo:
- Ciclo de trabajo del 0%: 0
- Ciclo de trabajo del 50%: 2048
- Ciclo de trabajo del 100%: 4095
La frecuencia, en cambio, solo se puede configurar por chip, es decir, todas las salidas de un mismo chip trabajan a la misma frecuencia. Por eso hay que tener cuidado al cambiar la frecuencia de un chip, ya que afecta a todas sus salidas. La frecuencia puede tomar un valor entre 24 Hz y 1526 Hz.
Las tablas siguientes muestran qué pin interno y qué dirección corresponde a cada una de las salidas del PLC:
Salidas analógico-digitales:

Salidas analógico-digitales-relé:

Ejemplo de código
Para usar las salidas de los PLC hay que instalar el paquete de placas "industrialshields-esp32". Si todavía no lo tienes, puedes instalarlo siguiendo este tutorial.
No hace falta incluir ninguna librería para usar las salidas, pero sí configurar los pines como salidas, lo que se hace así:
pinMode(Q0_0, OUTPUT);
El ciclo de trabajo se configura con la función "analogWrite()", que recibe como argumentos el pin que queremos configurar y el ciclo de trabajo, un entero que debe estar entre 0 y 4095:
analogWrite(Q0_0 , 3000);
Por último, para configurar la frecuencia de salida de cada chip se usa la función "analogWriteSetFrequency()". Recibe como argumentos la dirección de un chip I2C (por ejemplo 0x40) y un entero con la frecuencia que queremos usar (el chip admite frecuencias entre 24 Hz y 1526 Hz; las frecuencias superiores o inferiores se ajustan al límite correspondiente).
analogWriteSetFrequency(0x40, 1000);
Nota: tras cambiar la frecuencia de un chip, el estado de sus salidas se reinicia, por lo que hay que volver a fijar su ciclo de trabajo.