Máquina de taladrado.
Al accionar el pulsador "I" (RA0) el cabezal realiza un descenso rápido de aproximación, activando el motor de bajada rápida "BR"(RB3). Al llegar al sensor "b" (RA2), se activa el relé "M" (RB1) que hace girar el motor de la broca y se realiza un descenso lento para el taladrado de la pieza "BL" (RB4). Cuando se activa el sensor "c" (RA3) se considera que la pieza está taladrada. Se inicia una subida rápida del cabezal "SR" (RB0) al tiempo que el relé "M" (RB1) de giro sigue activado. Cuando se alcanza el final de carrera "a" (RA1), se detiene la subida rápida "SR"(RB0), el relé de giro "M" (RB1) y se activa una señal acústica "A" (RA2) de aviso. El ciclo comienza con una nueva pulsación de "I" (RA0).
Adjunto código, *.hex y diseño en proteus:
Para la realización del código hemos utilizado principalmente los comandos If y else:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// AUTOR:CESAR ZAZO SERRANO. 19/11/2012
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// PROGRAMA: MAQUINA DE TALADRADO
// DISPOSITIVO: PIC 16F877 COMPILADOR: CCS VS 4.104
// ENTORNO IDE: MPLAB 8.40 SIMULADOR: PROTEUS 7.8
// TARJETA DE APLICACION: PICDEM2 DEBUGGER: ICD3
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Al accionar el pulsador "I" (RA0) el cabezal realiza un descenso rápido de aproximación,
//activando el motor de bajada rápida "BR"(RB3). Al llegar al sensor "b" (RA2), se activa
//el relé "M" (RB1) que hace girar el motor de la broca y se realiza un descenso lento para
//el taladrado de la pieza "BL" (RB4). Cuando se activa el sensor "c" (RA3) se considera
//que la pieza está taladrada. Se inicia una subida rápida del cabezal "SR" (RB0) al tiempo
//que el relé "M" (RB1) de giro sigue activado. Cuando se alcanza el final de carrera "a"
//(RA1), se detiene la subida rápida "SR"(RB0), el relé de giro "M" (RB1) y se activa una
//señal acústica "A" (RA2) de aviso. El ciclo comienza con una nueva pulsación de "I" (RA0). ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CABECERA //////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <16f877.h> // libreria del pic 16f877
#fuses xt,nowdt
#byte port_a=0x05 //vamos a utilizar el puerto a y b.
#byte port_b=0x06
#use delay(clock=4000000)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// VARIABLES GLOBALES ////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
No tenemos variables globales en este caso.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// PRINCIPAL /////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main(void)
{
port_b_pullups(true); //con esto se coloca las pullups y activa el puerto b como salida
switch(PORT_A)
{
case 1: //marcha dada 0001
{
if (input (pin_a0)==0)
{
output_b(0b01010);
//output_bit(pin_B3, 1);//velocidad rapida de bajada
//output_bit(pin_B1, 1);//motor ON
}}
break;
case 4: //Final bajada rapida 0100
{
if (input_a(0b0100))
{
output_b(0b10010);
//output_bit(pin_B4, 1);//velocidad lenta de bajada
//output_bit(pin_B1, 1);//giro de broca
//output_bit(pin_B2, 0);//cambio de velocidad
}}
break;
case 8:// Final taladrada 1000
{
if (input_a(0b1000))
{
output_b(0b00011);
//output_bit(pin_B4, 0);//velocidad lenta se para
//output_bit(pin_B1, 1);//motor on
//output_bit(pin_B0, 1); //Se activa la subida hacia arriba
}}
break;
case 2: // FCS final de carrera de subida 0010
{
if (input_a(0b0010))
{
output_b(0b00100);
//output_bit(pin_B0, 0);// para de subir
//output_bit(pin_B1, 0);// para el motor
//output_bit(pin_B2, 1);// se activa señal acustica
}}
break;
}
}
No hay comentarios:
Publicar un comentario