Bus SPI en un PLC Arduino de Industrial Shields
Trabajar con el Serial Peripheral Interface Bus (SPI)
29 enero, 2020 por
Bus SPI en un PLC Arduino de Industrial Shields
Boot & Work Corp. S.L., Support Team

Index

1. Introducción
2. Requisitos
3. Protocolo SPI
4.  Ventajas y desventajas
5. Conexiones típicas de SPI
6. Hardware
7. Software

Introducción

En esta publicación veremos el bus SPI, una de las comunicaciones disponibles en toda nuestra gama de PLC basados en Arduino.

El bus SPI es interesante porque una amplia variedad de sensores y dispositivos comerciales tienen una interfaz SPI como medio de comunicación; por ejemplo, muchas unidades Display TFT utilizan el protocolo SPI, así como una amplia gama de sensores, como termopares, sensores de temperatura o sensores de humedad. 

Requisitos

En el ejemplo del esquema, hemos utilizado un controlador industrial Arduino  M-Duino 21+, pero toda la gama de PLCs de Industrial Shields también podría servir para realizar el mismo ejemplo:


- Familia de controladores WiFi y Bluetooth

- 20 E/S Familia de controladores 

- Familia de controladores Ethernet

- Familia de controladores GPRS / GSM


Protocolo SPI

El bus SPI (Serial Peripheral Interface) fue desarrollado por Motorola en 1980. Actualmente, es un estándar en el mundo de la electrónica y la automatización.

El bus SPI tiene una arquitectura maestro-esclavo.

El dispositivo maestro puede iniciar la comunicación con uno o más dispositivos esclavos y enviar o recibir datos. Los dispositivos esclavos no pueden iniciar la comunicación ni intercambiar datos entre ellos directamente. 

La comunicación de datos entre maestros y esclavos se realiza en dos líneas independientes, una del maestro a los esclavos y otra de los esclavos al maestro. Por lo tanto, la comunicación es Full Duplex, es decir, el maestro puede enviar y recibir datos simultáneamente.

Otra caracter√≠stica del SPI es que es un bus s√≠ncrono. El dispositivo maestro proporciona una se√Īal de reloj, que mantiene todos los dispositivos sincronizados. Esto reduce la complejidad del sistema en comparaci√≥n con los sistemas asincr√≥nicos.

Por otro lado, necesitamos un m√≠nimo de 3 se√Īales para la transmisi√≥n de datos a trav√©s de SPI: una de las l√≠neas para enviar datos a los esclavos, otra l√≠nea para recibir datos de los diferentes esclavos y la se√Īal del reloj para sincronizar todo el bus. Adem√°s, se requiere una l√≠nea SS (Slave Select) adicional para cada dispositivo esclavo conectado, para seleccionar el dispositivo con el que se realizar√° la comunicaci√≥n:

  • MOSI¬†(Master-out, slave-in) Comunicaci√≥n maestro a esclavo
  • MISO¬†(Master-in, slave-out) Comunicaci√≥n esclavo a maestro
  • SCK¬†(Clock) Se√Īal de reloj generada por el maestro
  • SS (Slave Select) Selecciona el dispositivo con el que se establecer√° la comunicaci√≥n

arduino-spi-esquema-basico

      Cableado SPI típico


 Ventajas y Desvantajas

             

Ventajas:

  • Comunicaci√≥n d√ļplex completa.

  • Mayor velocidad de transmisi√≥n que con I¬≤C o SMBus.

  • Protocolo flexible en el que podemos tener un control absoluto sobre los bits transmitidos.

  • No se limita a la transferencia de bloques de 8 bits.

  • Elecci√≥n del tama√Īo de cuadro de bits, su significado y prop√≥sito.

  • Su implementaci√≥n de hardware es extremadamente simple.

  • Consume menos energ√≠a que I¬≤C o SMBus porque tiene menos circuitos (incluidas las resistencias pull-up) y estos son m√°s simples.

  • No es necesario un mecanismo de arbitraje o respuesta a fallas.

  • Los dispositivos del cliente usan el reloj enviado, por lo tanto, no necesitan su propio reloj.

  • No es obligatorio implementar un transceptor (transmisor y receptor): un dispositivo conectado puede configurarse para enviar, recibir o ambas opciones al mismo tiempo.

  • Utiliza muchos menos terminales en cada chip / conector que una interfaz paralela equivalente.

  • Como m√°ximo, se requiere una se√Īal espec√≠fica √ļnica para cada usuario (se√Īal SS); Las otras se√Īales pueden ser compartidas.


Desventajas: 

  • Consume m√°s pines de cada chip que I¬≤C, incluso en la variante de 3 hilos.

  • El direccionamiento se realiza a trav√©s de l√≠neas espec√≠ficas (se√Īalizaci√≥n fuera de banda) a diferencia de lo que sucede en I¬≤C, donde cada chip se selecciona mediante una direcci√≥n de 7 bits que se env√≠a por las mismas l√≠neas de bus.

  • No hay control de flujo de hardware.

  • No hay signos de asentimiento. El servidor podr√≠a estar enviando informaci√≥n sin clientes conectados y no notar√≠a nada.

  • No permite tener m√ļltiples servidores conectados al bus f√°cilmente.

  • Solo funciona en distancias cortas, a diferencia, por ejemplo, del RS-232 o el RS-485.


Conexiones SPI típicas

Opción 1) Si se trata de una conexión donde deben conectarse pocos esclavos, se utiliza el siguiente esquema de conexión:


Se requiere una línea SS (Slave Select) adicional para cada dispositivo esclavo conectado, para seleccionar el dispositivo con el que se debe hacer la comunicación. 

Opción 2) Esta conexión previa tiene la desventaja de requerir una línea para cada dispositivo esclavo. En caso de tener muchos dispositivos esclavos, esto puede no ser práctico, por lo que es posible adoptar una conexión en cascada, donde cada esclavo transmite datos al siguiente:



Por otro lado, en esta configuración la información debe llegar a todos los esclavos para que la comunicación finalice; por eso, en general la velocidad de respuesta del bus es menor que en la primera configuración.

Hardware


Cada controlador lógico programable de Industrial Shields tiene los pines SO, SI y SCK. Consulta el Manual del usuario de tu modelo de PLC industrial para ver dónde se encuentran estos pines. Consulta también el capítulo Pinout del Manual del usuario para ver cuántos pines se pueden usar como SS (Slave Select). Aquí tienes el ejemplo del controlador PLC M-Duino 21+: 




Software

Para utilizar el puerto SPI en Arduino, el IDE Standard proporciona la biblioteca "SPI.h" que contiene las funciones necesarias para controlar el hardware SPI integrado.

Funciones básicas de SPI: 

SPI.begin();            // Starts the SPI bus
SPI.transfer(c);        // Send a byte
SPI.attachInterrupt(); // Activate the interrupt to receive data

Para cambiar el orden de los bits enviados, tenemos la función setBitOrder:

setBitOrder (LSBFIRST); //Least Significant bit first 
setBitOrder (MSBFIRST); //Most Significant bit first

Para cambiar la polaridad y la fase del reloj, tenemos la función SPI.setDataMode:


setDataMode (SPI_MODE0); // clock normally LOW, rising edge sampling 
setDataMode (SPI_MODE1); // clock normally LOW, flank sampling lowered
setDataMode (SPI_MODE2); // clock normally HIGH, rising edge sampling
setDataMode (SPI_MODE3); // clock normally HIGH, flank sampling lowered


Finalmente, podemos cambiar la velocidad del bus con los divisores de función SPI.setClockDivider () de 2 a 128. La frecuencia del bus será la velocidad del reloj dividida por el divisor elegido.


setClockDivider (SPI_CLOCK_DIV2); // 8 MHz (considering a 16 MHz model)
setClockDivider (SPI_CLOCK_DIV4); // 4 MHz
setClockDivider (SPI_CLOCK_DIV8); // 2 MHz
setClockDivider (SPI_CLOCK_DIV16); // 1 MHz
setClockDivider (SPI_CLOCK_DIV32); // 500 KHz
setClockDivider (SPI_CLOCK_DIV64); // 250 KHz
setClockDivider (SPI_CLOCK_DIV128); // 125 KHz


Sin embargo, estas funciones son obsoletas ya que se prefiere la función Arduino versión 1.6.0., beginTransaction, como muestra el siguiente ejemplo.


SPI.beginTransaction (SPISettings (2000000, MSBFIRST, SPI_MODE0)); // 2 MHz clock, MSB first, mode 0

Sin embargo, al ser el marco de datos específico de cada dispositivo, la mayoría de las veces no utilizamos estas funciones directamente, y nuestro uso del bus SPI se lleva a cabo indirectamente a través de la biblioteca del componente.

Podemos encontrar ejemplos de comunicación SPI en el IDE de Arduino como vemos en la siguiente imagen: 




 

Encuentra lo que buscas.¬°Busca en nuestro Blog!

Bus SPI en un PLC Arduino de Industrial Shields
Boot & Work Corp. S.L., Support Team
29 enero, 2020
Compartir
Archivar

¬ŅBuscas 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.


Comparación PLC industrial >>>

¬ŅQuieres m√°s informaci√≥n?

¬°Rellena el formulario!

¬°Cu√©ntame m√°s!