Go Down

Topic: CONTROL DE VELOCIDAD DE MOTOR A PASOS Y 2 DYSPLAY DE 7 SEGMENTOS CON 74LS248 (Read 433 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy