CONTROL DE VELOCIDAD DE MOTOR A PASOS Y 2 DYSPLAY DE 7 SEGMENTOS CON 74LS248

/*

ING. HENOC SALINAS JUAREZ

CONTROL DE VELOCIDAD DE MOTOR A PASOS MEDIANTE INTERRUPCIONES EXTERNAS.
EL MOTOR ES CONTROLADO POR UN PUENTE H L298.
SE MUESTRAEL VALOR DE LA VELOCIDAD EN DOS DYSPLAY DE 7 SEGMENTOS DE CATODO COMUN
CONECTADOS AL DECODIFICADOR 72LS248 Y DOS TRANSISTORES BC548 PARA LA SELECCION DE UNIDADES Y DECENAS

PINES DE SALIDA PARA EL MOTOR A PASOS:
A1=PIN 8
A2=PIN 10
B1=PIN 9
B2=PIN 11

PINES DE INTERRUPCION:
INCREMENTO DE VELOCIDAD= PIN 2
DECREMENTO DE VELOCIDAD= PIN 3

PINES PARA 74LS248
A=PIN 4
B=PIN 5
C=PIN 6
D=PIN 7

PIN DE DECENAS=PIN 13
PIN DE UNIDADES=PIN 12

BASADO EN:
Stepper Motor Control - speed control
Created 30 Nov. 2009
Modified 28 Oct 2010
by Tom Igoe
*/

//archivo incluido para el control del motor a pasos
#include <Stepper.h>

//configuracion de motor a pasos
const int stepsPerRevolution = 100;
Stepper myStepper(stepsPerRevolution, 8,10,9,11);
//definicion de variables
int stepCount = 0;
int x;
int s;
int r;
int z;

void setup() {
//configuracion de velocidad de transmicion de datos
Serial.begin(9600);
//configuracion de interrupciones
attachInterrupt(0, incvel, RISING);
attachInterrupt(1, decvel, RISING);

//configuracion de pines
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
//velocidad inical en 20 RPM
x=20;
}

//ciclo continuo
void loop() {
//envio de valor de velocidad
Serial.println(x);

//set de velocidad
int motorSpeed = x;
r=x/10;
s=x-(r*10);

//escritura de decenas
decode(r);
digitalWrite(13, HIGH);
delay(15);
digitalWrite(13, LOW);
delay(1);
//escritura de unidades
decode(s);
digitalWrite(12, HIGH);
delay(15 );
digitalWrite(12, LOW);
delay(1);

//control de motor
if (motorSpeed > 0) {
myStepper.setSpeed(motorSpeed);
myStepper.step(1);
}

//regreso al ciclo continuo
}

//interrupcion externa para incremento de velocidad
void incvel()
{
if (x<=96){
x=x+2;
}
x=x;
}
//interrupcion externa para decremento de velocidad
void decvel()
{
if (x>=22){
x=x-2;
}
x=x;
}

//decodificacion para dysplay de 7 segmentos con 74LS248
void decode(int a)
{

if (a==0){
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
}
if (a==1){
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
}

if (a==2){
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
}

if (a==3){
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
}
if (a==4){
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
}
if (a==5){
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
}
if (a==6){
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
}
if (a==7){
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
}
if (a==8){
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
}
if (a==9){
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
}
}

agitador.bmp (2.74 MB)