Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA
- UNIDAD ZACATENCO
- ING. EN CONTROL Y AUTOMATIZACION
- ASIGNATURA: INTERFASES Y MICROCONTROLADORES
- M.C LUIS ARTURO BENITEZ VELAZQUEZ
- GRUPO 7AM1
- AUTORES:
- ROSALES HERNANDEZ JOSE EDUARDO
- RUIZ ESTUDILLO MARIA FERNANDA
- *************************************************************************
- *************************************************************************
- PRACTICA NO. 4
- PROGRAMA: CONTROL DE VELOCIDAD DE MOTOR CD CON ENCODER
- */
- //PINES DE ENTRADAS Y SALIDAS
- int pushbotton=8;
- int led_on=10;
- int encoder=12;
- int motor=11;
- int pot=A0;
- int boton_on;
- int i=0; //entrada de la ranura
- int j=0; //salida de la ranura, entre las dos variables, funcionan como un detector de cruce por cero.
- int encoder_in;
- int contador=0;
- int dip;
- int vel;
- int vel2=1;
- int enclave;
- void setup ()
- {
- DDRD=DDRD|B00000011; //Configura el puerto B como entradas excepto 2 pines
- Serial.begin(9600); //Dipswitch 0=entrada, 1=salida
- //DECLARACION DE VARIABLES
- pinMode(pushbotton,INPUT);
- pinMode(pot,INPUT);
- pinMode(led_on,OUTPUT);
- pinMode (motor,OUTPUT);
- pinMode(encoder,INPUT);
- digitalWrite(led_on,LOW);
- }
- void loop ()
- {
- boton_on=digitalRead(pushbotton); //lee posicion del boton
- dip=PIND& 0b11111100; //Lee el Puerto D como binario pero lo asigna a dip como decimal
- if(boton_on==HIGH) //Código de enclave
- {digitalWrite(led_on,HIGH);
- enclave=1;
- vel2=1;
- contador=0;
- }
- if(enclave==1){ //Comienzo de conteo
- encoder_p();
- }
- if(contador>=(dip*0.7)) //Descenso de Velocidad cuando contador llegue al 70%
- vel2=2;
- if(contador>=dip) //Código de Des-enclave
- {
- digitalWrite(led_on,LOW);
- analogWrite(motor,0);
- enclave=0;
- }
- }
- void encoder_p() //Esta rutina se encarga de contar sólo cuando hay un cambio de segmento
- {
- encoder_in=digitalRead(encoder);
- velocidad(vel2);
- if(encoder_in==1)
- {i=1;}
- else{i=0;}
- if(i==1&&j==0)
- {
- contador++;
- Serial.println(contador);
- }
- if(encoder_in==1)
- {j=1;}
- else{j=0;}
- }
- void velocidad(int a) //Esta rutina usa PWM para la velocidad del motor
- {
- if(a==1)
- {
- vel=analogRead(pot);
- vel=map(vel,0,1023,175,255);
- analogWrite(motor,vel);
- }
- else if(a==2){ //Este caso es específico para conseguir la más baja velocidad del motor
- vel=175;
- analogWrite(motor,vel);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment