2.4.3. Generador de pulsos
Con el generador de pulsos podemos obtener un tren de impulsos digitales programable con control del tiempo en estado on y off.
Al activarse la entrada Set() (flanco ascendente) el generador se activa entregando los impulsos programados en la salida Q(), finalizado el número de pulsos programados N() el generador se detiene y la salida Q() permanece a nivel bajo. Si N() es cero la generación de impulsos es continua y solo se detiene si se activa la entrada Reset() .

Generador de pulsos
Funciones del generador de impulsos
pulseX.Time(int) Establecer el tiempo en estado ON del pulso, en unidades de TBase().
pulseX.Toff(int) Establecer el tiempo en estado OFF del pulso, en unidades de TBase().
pulseX.N(int) Número de pulsos a generar.
Si el valor se establece a cero, el generador es continuo.
int pulseX.getN(int) Contador de pulsos generados.
Entrega el contador de pulsos (valor actual del pulso).
Declaración del generador
PULSE tp(1, 1, T1S, 0); // Iniciamos el temporizador t1 con 1 segundo en ON y 1 segundo en OFF, impulsos continuos
Código traducido del diagrama de contactos Ladder
// A. Activación del generador controlada por S1
tp.Set(s._1);
// B. La salida de los pulsos Q() se asignan a la salida K1
k._1=tp.Q();
Ejemplo de utilización
/*
* Temporizador a impulsos el microPLC - arduino
*
* Descripción: Programa de temporización de impulsos
*
* Autor: Rafa Aranda
* Fecha: 19-02-2014
* Versión: 1.0
*/
// Asignación de Pins a Salidas digitales
#define Out_1 6
#define Out_2 7
#define Out_3 8
#define Out_4 9
// Pins de entrada (están ordenados de forma decreciente por necesidades del PCB)
#define In_1 5
#define In_2 4
#define In_3 3
#define In_4 2
// Librerías
#include "microPLC.h"
// Funciones prototipo
void getInputs(void);
void setOutputs(void);
// Variables globales
//Definición de las variables de trabajo
m4bits s; // Entradas del microPLC
m4bits k; // Salidas del microPLC
m4bits m1; // Memoria temporal
// microPLC
microPLC uPLC; // Declaración del microPLC
// Contadores y temporizadores
TI ti1(5, T1S); // Iniciamos el temporizador ti1 con 5 segundos
/* setup
* Tareas iniciales de preparación
*/
void setup(){
// Establecer los pins de salida de los relés
pinMode(Out_1, OUTPUT);
pinMode(Out_2, OUTPUT);
pinMode(Out_3, OUTPUT);
pinMode(Out_4, OUTPUT);
// Establecer los pins de entradas digitales optoacopladas
pinMode(In_1, INPUT);
pinMode(In_2, INPUT);
pinMode(In_3, INPUT);
pinMode(In_4, INPUT);
// Preparar las variables
uPLC.init(); // Iniciar funciones del tiempo
}
/* loop
* Programa principal
*/
void loop() {
getInputs(); // Leer las entradas digitales
// Temporizador t1
ti1.Set(s._1); // Entrada del temporizador
k._1=ti1.Q(); // Salida del temporizador
setOutputs(); // Activar las salidas
delay(1); // CicloScan + 1ms, retardo para anti-rebotes
}
/* GetInputs
* Lee el estado de la entrada indicada en el parámetro y lo asigna invertido a las variables de trabajo
*/
void getInputs(void){
s._1=!digitalRead(In_1);
s._2=!digitalRead(In_2);
s._3=!digitalRead(In_3);
s._4=!digitalRead(In_4);
}
/* setOutputs
* asigna el estado de las varibles de trabajo a las salidas digitales
*/
void setOutputs(void){
digitalWrite(Out_1, k._1);
digitalWrite(Out_2, k._2);
digitalWrite(Out_3, k._3);
digitalWrite(Out_4, k._4);
}