Introduction
En este post, aprenderás más sobre el rendimiento del PLC M-DUINO pinout tiempo de respuesta, examinando su capacidad para detectar y responder a los cambios en las entradas, así como la capacidad de las señales de salida.
Las mediciones de este blog se han realizado utilizando las funciones por defecto de Arduino IDE. Se podrían conseguir velocidades más rápidas utilizando otras librerías como la digitalWriteFast, o manipulando directamente los pines a través de los registros del Arduino.
Requisitos
Si deseas medir las características del PLC, también necesitarás un osciloscopio preciso capaz de leer en la escala de 100ns.
Salida digital
Las salidas digitales del PLC M-DUINO se conectan a los pines directos del Arduino Mega, utilizando algunos circuitos para adaptar los niveles de voltaje. Recuerda que el voltaje de salida depende del pin QVdc, puedes aprender más sobre ellos en este post sobre salidas digitales.
Las salidas digitales se pueden analizar con un osciloscopio y este sencillo código, donde realizamos múltiples escrituras en el pin Q0.0 cada 100µs.
void setup() {}void loop() {
digitalWrite(Q0_0, LOW);
delayMicroseconds(100);
digitalWrite(Q0_0, HIGH);
delayMicroseconds(100);
}
Utilizando un osciloscopio, puedes observar que los tiempos de la señal de salida son los siguientes:
- Tiempo de subida: 476ns
- Tiempo de caída: 42.8µs
El tiempo de caída es considerablemente mayor que el de subida, lo que afecta a la frecuencia máxima de salida que puedes alcanzar. Aquí hay algunas mediciones:
Frecuencia de salida | Periodo | Ancho de pulso | Retraso |
6.849kHz | 146µs | 106µs | 70µs |
4.866kHz | 205.5µs | 136.5µs | 100µs |
1.953kHz | 512µs | 286µs | 250µs |
Utilizando un retardo de 70µs, se puede conseguir una frecuencia de conmutación de 6,849 kHz en cualquier salida digital, aunque con un ciclo de trabajo del 72%. Si se necesita estrictamente un ciclo de trabajo del 50%, habrá que aumentar el retardo hasta 250µs, para obtener una señal de 1,953 kHz con un ciclo de trabajo del 55,86%. Aunque es posible utilizar retardos más cortos, hacerlo puede producir una señal que se desvía de la forma cuadrada del pulso. En concreto, sin retardo, la señal pasa de 5 V a 4,3 V antes de volver a su nivel de tensión original.
Entrada digital
Las entradas digitales de los PLCs M-DUINO también están conectadas a pines directos del Arduino Mega. Estas entradas interpretan tensiones entre 0-5V como BAJA y tensiones entre 5-24V como ALTA, y están opto-aisladas. Además, I0.5 e I0.6 son pines de interrupción, lo que significa que pueden disparar interrupciones de Arduino.
El siguiente código se puede utilizar para medir el tiempo de muestreo de una entrada digital utilizando la función digitalRead(). Tomamos 10^6 lecturas y calculamos el tiempo medio de ejecución y el tiempo máximo.
#define N_TIMES 1000000
unsigned long t1, t2, t_max, t_average;
void setup() {
Serial.begin(115200);
t_max = 0;
t_average = 0;
for (long i = 0; i<N_TIMES; i++) {
t1 = micros();
digitalRead(I0_5);
t2 = micros();
t_average += (t2-t1);
if (t_max < t2-t1) t_max = t2-t1;
}
Serial.print("Max time: ");
Serial.println(t_max);
Serial.print("Average time: ");
Serial.println(t_average/(float)N_TIMES);
}
void loop() {}
Los resultados para la entrada I0.0 son un tiempo de ejecución máximo de 12µs y una media de 5,65µs. Esto se traduce en una frecuencia de muestreo máxima de 176,9 kHz.
La entrada I0.5 (interrupción) tiene un tiempo de ejecución máximo de 16 µs y una media de 8,23 µs. Esto se traduce en una frecuencia de muestreo máxima de 121,51 kHz. La mayoría de las muestras tardan 8µs, pero hay algunas que tardan 16µs.
Las entradas analógicas (I0.7 - I0.12) también pueden utilizarse como entradas digitales (7-24V), por lo que su velocidad puede comprobarse utilizando este mismo código. Su tiempo de lectura máximo y medio es el mismo que el de las entradas digitales normales: 12µs y 5,65µs, respectivamente.
Salida analógica
Los PLCs M-DUINO disponen de entre 3 y 9 salidas analógicas, dependiendo del modelo de PLC, cada una conectada a un pin directo de Arduino. Estas salidas pueden tomar cualquier valor entre 0V y 10V, con 8 bits de resolución. Para saber más, visita nuestro blog sobre salidas analógicas.
Para medir el tiempo de respuesta de las salidas analógicas podemos utilizar un osciloscopio y el siguiente código para medir los tiempos de subida y bajada de la señal:
void setup() {}
void loop() {
analogWrite(A0_5, 255);
delay(150);
analogWrite(A0_5, 0);
delay(150);
}
Midiendo con un osciloscopio obtenemos los siguientes tiempos:
- Tiempo de subida: 150 ms
- Tiempo de caída: 252 ms
Considering 252ms as the worse time, we can achieve a signal frequency output of 2Hz.
Entrada analógica
Las entradas analógicas permiten medir tensiones entre 0V y 10V, devolviendo un valor con una resolución de 10 bits (0-1023). Puedes encontrar más información en esta entrada del blog sobre entradas analógicas.
Este código, que mide el tiempo de ejecución máximo y medio de la función analogRead(), puede utilizarse para averiguar su tiempo de muestreo:
#define N_TIMES 1000
unsigned long t1, t2, t_max, t_average;
void setup() {
Serial.begin(115200);
t_max = 0;
t_average = 0;
for (long i = 0; i<N_TIMES; i++) {
t1 = micros();
analogRead(I0_7);
t2 = micros();
t_average += (t2-t1);
if (t_max < t2-t1) t_max = t2-t1;
}
Serial.print("Max time: ");
Serial.println(t_max);
Serial.print("Average time: ");
Serial.println(t_average/(float)N_TIMES);
}
void loop() {}
Como resultado, obtenemos un tiempo de ejecución máximo de 204µs y una media de 112,89µs. Por tanto, podemos alcanzar una frecuencia de muestreo máxima de 8858,2Hz.
Pines directos
Los PLCs M-DUINO también tienen algunos pines conectados directamente al Arduino Mega en su interior, que funcionan a niveles de 5V:
RX0
TX0
RX1
TX1
MISO
MOSI
SCK
Pin 2
Pin 3
SCL
SDA
Salida
La frecuencia de salida máxima que podemos alcanzar utilizando el IDE de Arduino y la función digitalRead() es de 77kHz, que se puede observar con un osciloscopio ejecutando este código:
void setup() {
pinMode(2, OUTPUT);
}
void loop() {
digitalWrite(2, HIGH);
digitalWrite(2, LOW);
}
Entrada
Los pines directos también pueden utilizarse como entrada, en cuyo caso la función digitalRead() tiene estas características:
- Tiempo medio de lectura: 8,23µs.
- Tiempo máximo de lectura: 16µs.
Summary
Entradas
Tipo de entrada | Frecuencia de muestreo - Media | Frecuencia de muestreo - Tiempo máximo de lectura |
Interrupción digital (IX.5-6) | 121.51kHz (8.23µs) | 62.5kHz (16µs) |
Digital optosiaslada (IX.0-4) | 176.99kHz (5.65µs) | 83.3kHz (12µs) |
Digital no optpaislada (IX.7-12) | 176.99kHz (5.65µs) | 83.3kHz (12µs) |
Analógica (IX.7-12) | 8.858kHz (112.89µs) | 4.9kHz (204µs) |
Pines directos | 121.51kHz (8.23µs) | 62.5kHz (16µs) |
Salidas
Tipo de salida | Frecuencia de señal - Máxima estable | Frecuencia de señal - Máxima | Tiempo de subida | Tiempo de caída |
Digital (QX.0-7) | 1.953kHz (55.86%) | 6.849kHz (72.6%) | 476ns | 42.8µs |
Analógica (AX.5-7) | 2Hz (50%) | 2.48Hz (37.31%) | 150ms | 252ms |
Pines directos | 77kHz (53.7%) | 77kHz (53.7%) | 200ns | 200ns |
Conclusion
En este post, has aprendido sobre el rendimiento de la respuesta temporal del pinout M-DUINO PLC, examinando su capacidad para detectar y responder a los cambios en las entradas, así como la capacidad de las señales de salida..
Te hemos contado:
- cómo las salidas digitales pueden alcanzar una frecuencia de conmutación de hasta 6,849 kHz,
- cómo las entradas digitales pueden muestrear a una frecuencia de hasta 176,9 kHz, y
- cómo las salidas analógicas pueden producir un rango de tensión de 0-10V.
También has aprendido a medir estas características utilizando un osciloscopio y algún código sencillo.
Si conoces las capacidades y limitaciones de la distribución de pines del PLC M-DUINO, podrás utilizarlo de forma más eficaz en sus proyectos y aplicaciones.
Análisis de la respuesta temporal del pinout del PLC M-DUINO