Buscar este blog

viernes, 13 de mayo de 2016

Control de apertura de pinzas con sensor de Fuerza

-- Control de apertura de pinzas montadas en servo motor HS322 para sostener objetos utilizando un sensor de fuerza FSR400.

#INCLUDE <16F877.H> // LIBRERIA DEL PIC A UTILIZAR
#DEVICE adc=10 // CONFIGURACION DE LA ESCALA DEL ADC
#FUSES XT, NOPROTECT // CODIGO NO PROTEGIDO
#USE DELAY(CLOCK=4000000) // SELECCION DE LA FRECUENCIA DEL CRISTAL
#USE RS232(BAUD=9600, BITS=8, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7) // COMUNICAION CON EL PUERTO SERIAL
#ORG 0X1F00, 0X1FFF VOID LOADER16F877(VOID){} // DIRECCION DEL CODIGO DE BUDLOADER

VOID LONG_DELAY_US(LONG C); // FUNCIÓN DE DELAY EXACTO PARA EL MOTOR
INT BUTTON; // BOTON DE OPERACIÓN
INT16 T=0; // VQARIABLE DE TIEMPO
INT I, I2; // VARIABLES DE CICLOS
INT16 VAL; // VARIABLE DE LECTURA ACTUAL

VOID MAIN(){
// CONFIGURACIÓN DEL PUERTO A COMO ANALOGICO
SETUP_PORT_A(ALL_ANALOG); // TODO EL PUERTO A COMO ANALOGICO
SETUP_ADC(ADC_CLOCK_INTERNAL); // RELOG INTERNO DEL CONV. A/D
SET_ADC_CHANNEL(0); // SELECCIONA EL CANAL 0

FOR(I=0;I<30;I++){ // CONTADOR DE CICLOS PARA CONFIGURACION INICIAL
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
LONG_DELAY_US(300); // DELAY DE PULSO POSITIVO
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
LONG_DELAY_US(20000); // DELAY DE APAGADO
} // FOR INICIAL

WHILE(1){
BUTTON=INPUT_B(); // BOTON DE STOP PUERTO E
IF(BUTTON==0X00){ // REVISA EL BOTÓN
ABRE: // SECCIÓN PARA ABRIR PINZAS
FOR(I=0;I<30;I++){ // CONTADOR DE CICLOS PARA BRIR LAS PINZAS
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
LONG_DELAY_US(1050); // DELAY DE PULSO POSITIVO
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
LONG_DELAY_US(20000); // DELAY DE APAGADO
} // FOR OPEN
T=1050; // COLOCA LA VARIABLE T EN EL ULTIMO ANCHO DE PULSO
DELAY_MS(2000); // ESPERA DOS SEGUNDOS
} // CONDICION DE ABRIR PINZAS

ELSE IF(BUTTON==0X01 && T==1050){ // CONDICIÓN PARA CERRAR PINZAS
FOR(I=0;I<30;I++){ // CONTADOR DE CICLOS PARA CERRAR LAS PINZAS
VAL=READ_ADC(); // SE ASIGNA A VAR LA LECTURA DEL CANAL 0
T=T-30; // DISMUNUYE EL VALOR DE T
IF(VAL<=740){ // CONDICIÓN DEL SENSOR
T=T-10; // AJUSTA LA VARIABLE DEL ANCHO DE PULSO
FOR(I2=0;I2<200;I2++){ // CICLOS DE AJUSTE
BUTTON=INPUT_B(); // BOTON DE STOP PUERTO E
IF(BUTTON==0X00){ // REVISA EL BOTÓN
GOTO ABRE; // VE A LA SECCIÓN DE ABRIR PINZAS
} // CONDICIÓN DE ABRIR LAS PINZAS
FOR(I=0;I<10;I++){ // CICLOS DE AJUSTE
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
LONG_DELAY_US(T); // DELAY DE PULSO POSITIVO
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
LONG_DELAY_US(20000); // DELAY DE APAGADO
}}} // CICLOS DE AJUSTE
OUTPUT_D(0X01); // ACTIVA LA SALIDA D
LONG_DELAY_US(200); // DELAY DE PULSO POSITIVO
OUTPUT_D(0X00); // DESACTIVA LA SALIDA D
LONG_DELAY_US(20000); // DELAY DE APAGADO
} // FOR CLOSE
} // CONDICIÓN DE CERRA PINZAS
} // WHILE
} //MAIN


// FUNCION DE DELAY EN US
VOID LONG_DELAY_US(LONG C){
CHAR i; // VARIABLE DE CONDICION
i=(CHAR)(C>>8); // IGUALA I A C EN 8 BITS
WHILE(I >= 1) { // CONDICION DE TIEMPO MINIMO
I--; // LA VARIABLE VA DISMINUYENDO
DELAY_US(253); // DELAY DE 253 US
RESTART_WDT(); // RESETEA EL CONTADOR DEL WATCHDOG
} // WHILE
DELAY_US((CHAR)C);
} //FUNCION DELAY US

No hay comentarios:

Publicar un comentario