Cómo utilizar SPI en un PLC basado en ESP32

Configuración de la comunicación SPI en el PLC ESP32
29 de marzo de 2023 por
Cómo utilizar SPI en un PLC basado en ESP32
Boot & Work Corp. S.L., Ricard Franch Argullol
PLC ESP32 de Industrial Shields

Introducción

En este post, te contamos más sobre la comunicación SPI para los PLCs basados en ESP32 de Industrial Shields. El bus SPI fue desarrollado por Motorola en 1980. Actualmente es un estándar en el mundo de la electrónica y la automatización.

SPI son las siglas de Serial Peripheral Interface, una interfaz de comunicación serie síncrona utilizada para la comunicación entre microcontroladores y dispositivos periféricos. Se trata de un protocolo de comunicación full-duplex, síncrono y en serie.

SPI utiliza una arquitectura maestro-esclavo en la que un dispositivo (el maestro) inicia la comunicación con uno o más dispositivos esclavos. El maestro genera una señal de reloj y envía datos a los esclavos de forma serie, y los dispositivos esclavos responden enviando datos de vuelta al maestro.

La comunicación se realiza a través de cuatro hilos:

  • MOSI (Master Out Slave In): El maestro envía datos al esclavo utilizando esta línea.
  • MISO (Master In Slave Out): El esclavo envía datos de vuelta al maestro utilizando esta línea.
  • SCLK (Serial Clock): Es la señal de reloj generada por el maestro, que sincroniza la comunicación entre los dispositivos maestro y esclavo.
  • SS (Slave Select, also called chip select): El maestro utiliza esta señal para seleccionar el dispositivo esclavo con el que desea comunicarse. 

Para iniciar una comunicación, el dispositivo maestro selecciona primero el dispositivo esclavo bajando la señal SS. A continuación, el maestro envía una serie de impulsos de reloj por la línea SCLK y, en cada impulso de reloj, envía un bit de datos por la línea MOSI. El dispositivo esclavo recibe los datos en la línea MOSI y envía su respuesta en la línea MISO.

La comunicación SPI puede configurarse para utilizar diferentes velocidades de reloj, formatos de datos y otros parámetros en función de los requisitos de los dispositivos utilizados. SPI es un protocolo de comunicación muy utilizado en sistemas embebidos, ya que es sencillo, rápido y fiable.

Diagrama de comunicación SPI

Requisitos

Para trabajar con SPI, necesitarás cualquiera de nuestros controladores lógicos programables industriales ESP32 PLC para automatización industrial:

ESP32 Controller family >>

ESP32 controller - Industrial Shields

Hardware


Asegúrate de que tu PLC industrial está correctamente alimentado (12-24 Vcc).


El microcontrolador ESP32 tiene cuatro puertos SPI (Serial Peripheral Interface), dos de los cuales son puertos SPI primarios, y los otros dos son puertos SPI secundarios. Los dos puertos SPI primarios son HSPI (SPI2) y VSPI (SPI3). Son controladores SPI de propósito general, abiertos a los usuarios. SP0 y SP1 se utilizan internamente para comunicarse con la memoria flash de a bordo, y por lo tanto no deben ser utilizados.

Recuerda que la comunicación SPI funciona a 3.3V.


Los PLC basados en ESP32 de Industrial Shields tienen un puerto SPI externo, que se conecta a VSPI (SPI3).

En cuanto a los pines que utiliza y la configuración del interruptor para su PLC industrial ESP32: no se requiere ninguna configuración del interruptor para utilizar la comunicación SPI. Los siguientes pines SPI están directamente disponibles en el PLC:

Función
Pin PLCPin ESP32
MISOSOGPIO 19
MOSISIGPIO 23
CLOCKSCKGPIO 18

Como puedes ver, no hay ningún pin directamente asignado para ser el slave select. Cualquiera de los pines dedicados de E/S disponibles en el PLC puede usarse como slave select, como el pin GPIO 0. El pin slave select tendrá que configurarse manualmente, como puede verse en la sección de software de este tutorial.


Nota: Internamente, los PLCs basados en ESP32 utilizan el mismo bus SPI (SPI3) para la conexión Ethernet, la tarjeta µSD y el SPI externo.

Software


Asegúrate de que tienes el paquete de la placa industrialshields-esp-3 correctamente instalado en tu IDE de Arduino.


Software configuration

En primer lugar, debes incluir la librería SPI.h proporcionada en nuestras placas. Nuestra librería de comunicación SPI está basada en la librería SPI de Arduino, que permite la comunicación SPI usando PLCs basados en ESP32. Ten en cuenta que la biblioteca sólo permite la comunicación SPI actuando como maestro, no soporta el modo esclavo.

Esta biblioteca puede incluirse de este modo:

#include <SPI.h>

Para configurar y utilizar el pin de selección de esclavo, tendrás que configurarlo como una salida y establecer su valor según sea necesario. Esto se puede hacer con las siguientes funciones:

pinMode(slaveSelectPin, OUTPUT);
digitalwrite(slaveSelectPin, LOW);
digitalWrite(slaveSelectPin, HIGH);


Ejemplo de Máster básico

Este ejemplo muestra cómo enviar un mensaje usando SPI, en este caso el carácter '0', e imprimir la respuesta a través del puerto serie. Tenga en cuenta que el pin SS necesita ser configurado manualmente, ya que no lo hace la librería:

// Include the SPI library:
#include <SPI.h>
// Set pin as the slave select:
const int slaveSelectPin = GPIO_0;
volatile byte receivedData;
void setup() {
  Serial.begin(9600);
  // Set the slaveSelectPin as an output:
  pinMode(slaveSelectPin, OUTPUT);
  // Initialize SPI:
  SPI.begin();
}
void loop() {
  SPI.beginTransaction(SPISettings(100000, MSBFIRST, SPI_MODE0));
  digitalWrite(slaveSelectPin, LOW); // Start of transmission: set chip select LOW
  receivedData = SPI.transfer('0');
  digitalWrite(slaveSelectPin, HIGH); // End of transmission: set chip select HIGH
  SPI.endTransaction();
  Serial.println((char)receivedData);
  delay(100);
}
Conclusión

En resumen, el protocolo de comunicación SPI es un aspecto importante de la automatización industrial y se utiliza ampliamente para la comunicación entre microcontroladores y dispositivos periféricos. Con sus características de comunicación full-duplex, síncrona y en serie, permite una transferencia de datos eficiente entre dispositivos.

  Si eres desarrollador en el campo de la automatización industrial, asegúrate de comprender el protocolo SPI.  ;) 

Buscar en nuestro blog

Cómo utilizar SPI en un PLC basado en ESP32
Boot & Work Corp. S.L., Ricard Franch Argullol 29 de marzo de 2023
Compartir

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


Industrial PLC comparison >>>