Go Down

Topic: CONTROL DE VELOCIDAD DE MOTOR A PASOS Y 2 DYSPLAY DE 7 SEGMENTOS CON 74LS248 (Read 386 times) previous topic - next topic

enoksaju

Quote

/*

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);
  }
}


Go Up