sábado, 22 de outubro de 2016

Bobinador Caseiro

Montando engenhocas essa foi para enrolar bobinas usando material de sucata da oficina.
A intenção aqui é passar o código  usado para controlar o driver L298. que serve como um ponte H











/*
sistema automatizado de enrolamento

de bobinas
TCC Automação Industrial 4º Modulo
Desenvolvido por Paulo R. R. Furlan
*/
#include <16f877a.h>
#use delay(clock=2000000)
#fuses HS,NOWDT,PUT,LVP,NOCPD
//#include <regs_16f87x.h>
#include <timer0.h>


#include <mod_lcd_877a.c>
//#include <mod_lcd_4x20.c>
#define BT_STOP_START      pin_C0

//botao liga/desliga
#define BT_BOBINA         

pin_C1 //botao bobina
#define BT_FIADOR         

pin_C2 //botao fiador
#define BT_INC             

pin_C3 //botao incrementa
#define BT_DEC             

pin_C4 //botao decrementa
#define BT_ESPIRAS         

pin_C5 //botao decrementa
#define FIM_CURSO_M2      pin_B0

//Chave fim de curso motor M2
#define ENCODER_M1         

pin_B1 //Entrada encoder motor M1
#define ENA               

  pin_B2 //Pino Enable L298 M1
#define ENB               

  pin_B3 //Pino Enable L298 M2
#define IN1               

  pin_B4 //Pino IN1 L298 M1
#define IN2               

  pin_B5 //Pino IN2 L298 M1
#define IN3               

  pin_B6 //Pino IN3 L298 M2
#define IN4               

  pin_B7 //Pino IN4 L298 M2
#define LED_FIM_CURSO      pin_D0

//Led fim de curso sinalizacao
#define LED_BOTOES         pin_D1

//Led Botoes presionados


unsigned long int hor=0;
int min=0;
int seg=0;
int seg2=0;
int min2=0;
int conta=0, conta1=0;
long int num_voltas_cont,num_espiras;
long int temp_bobina,temp_fiador;

static boolean led;
static boolean flag_desligado;
static boolean flag_ligado;
static boolean

flag_sentido_rotacao_M1;
static boolean

flag_sentido_rotacao_M2;
static boolean flag_stop_start;
static boolean

flag_encoder_M1,flag_encoder_M1_ativo

;

float resultado1;
//***********************************

*************************************

***
//tratamento do timer contagem de

tempo
#int_timer0
void trata_t0()
{
//****INICIO CONTAGEM DE

SEGUNDOS****************

static int conta;
    set_timer0(131+get_timer0

());//contagem de tempo 1 segundo
    conta++;
if(conta==125)
{
    conta=0;
    led=!led;
    //output_bit(PIN_b3,led);
    }

if(conta==0)seg=seg+1;

if(seg>59)
{
    seg=0;
    min=min+1;
    }
    if(min>59)
    {
        min=0;
        hor=hor+1;
        }
}

//************FIM INCREMENTO DE

TEMPO*************

//MENSAGEM DE APRESENTACAO
void mensagem_apresenta()
{
    int pos;
   
    pos=16;
   
lcd_escreve('\f');
    while(pos>=1 && pos<=16 ||

pos>=239 && pos<=255)
    {
    lcd_pos_xy(pos,1);
    printf

(lcd_escreve,"*EMBUBINADOR****\r");
    delay_ms(500);
    pos=pos-1;
    }
    return;
    }

//***********************************

*************************************

***

*************************************

***
//*******************MENSAGEM

CONTAGEM DE

TEMPO***************************
void mensagem_tempo()
{
    int pos=0;
    pos=1;
    lcd_pos_xy(1,3);
    printf(lcd_escreve,"Tempo=

%lu:%u:%u",hor,min,seg);   
   delay_ms(500);
   delay_ms(500);
    return;
    }
//***********************************

*************************************

***
//===buzzer====================
void buzzer()
{
int i;

 for (i=0; i<=100; i++)
{
output_high(pin_a5);//sinal Alto

buzzer
delay_us(400);
output_low(pin_a5);//sinal baixo

buzzer
delay_us(400);
output_high(pin_a5);//sinal Alto

buzzer
delay_us(400);
output_low(pin_a5);//sinal baixo

buzzer

}

return;
}
//inicio do programa
void main()
{
long int valor;
int pos, linha;
int32 val32;
int i;
//int b1= 1;
delay_ms(10);
set_tris_a(0x02);//Entrada sensor

ampraragem do CI L268
set_tris_b(0x00);//Saida para o CI

L198
set_tris_c(0x3F);//entradas Botoes
set_tris_e(0x00);
set_tris_d(0x00);
setup_timer_0(RTCC_INTERNAL|

RTCC_DIV_128);
enable_interrupts(GLOBAL|int_timer0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(1);
set_timer0(131);
num_espiras=0;//zera numeros de

espira
output_b(0x00);//zera saida port B
output_c(0x00);//zera saida port C
output_d(0x00);//zera saida port D
output_e(0x00);//zera saida port E
flag_encoder_M1=0;//desativa encoder

M1
flag_encoder_M1_ativo=1;//seta

encoder em ativo
num_voltas_cont=0;//zera o contador

de espiras
num_espiras=200;// inicia numero

minimo de espiras
flag_sentido_rotacao_M1=1; //inicia

rotação do motor M1 sentido horario
flag_stop_start=0; //inicia sistema

com stop ativado
temp_bobina=40;// seta minimo de

tempo para partida do motor M1
temp_fiador=80;// seta mnimo de tempo

para partida do motor M2
flag_desligado=0;
flag_ligado=0;
seg2=59;
min2=1;
lcd_ini();
delay_ms(10);
mensagem_apresenta();
//lcd_escreve("\f");
// loop enquanto true
output_low(ENA);//sinal Alto enable1

RB2
output_low(ENB);//sinal Alto enable2

RB3
output_low(IN1);//sinal baixo M1 RB4
output_low(IN2);//sinal baixo M1 RB5
output_low(IN3);//sinal baixo M2 RB6
output_low(IN4);//sinal baixo M2 RB7
delay_ms(300);

  while(true)
   {
/*      
if(pos<=0 || pos>=20)pos=1;
if(linha<=0 || linha>=4)pos=1;
set_adc_channel(1);
valor=read_adc();
if(valor)valor+=1;
val32=valor * 5 +((int32)valor *

113)/128; //converte tensao em

temperatura
resultado1=val32;
*/
//******Entrada encoder

M1*******************
if(input(ENCODER_M1))
{
if(!flag_encoder_M1 &

flag_encoder_M1_ativo)
{   
flag_encoder_M1=0;// desativa flag

encoder M1
delay_ms(300);   
}
else
{
flag_encoder_M1=1;// ativa flag

encoder M1
flag_encoder_M1_ativo=1;   
    }
           
delay_ms(30);   
    }

if(!input(ENCODER_M1))

flag_encoder_M1_ativo=0;
delay_ms(30);

//******** Entrada Fim de curso Motor

M2*******************
if(!input(FIM_CURSO_M2))
{

flag_sentido_rotacao_M2=!

flag_sentido_rotacao_M2;
output_high(LED_FIM_CURSO);// Liga

led fim de curso
delay_ms(300);
output_low(LED_FIM_CURSO);// Desliga

led fim de curso
   
    }
       
if(flag_sentido_rotacao_M2) // Seta o

sentido do Motor M2 horario
{
output_high(IN3);//sinal Alto IN3

L298 RB6
output_low(IN4);//sinal baixo IN4

L298 RB7       
    }
    else                   //

Seta o sentido do Motor M2 anti-

horario
    {
output_high(IN4);//sinal Alto IN4

L298
output_low(IN3);//sinal baixo IN3

L298       
        }
if(!input(FIM_CURSO_M2))
{
output_high(ENB);   
if(flag_sentido_rotacao_M2) // Seta o

sentido do Motor M2 horario
{
output_high(IN3);//sinal Alto IN3

L298 RB6
output_low(IN4);//sinal baixo IN4

L298 RB7       
    }
    else                   //

Seta o sentido do Motor M2 anti-

horario
    {
output_high(IN4);//sinal Alto IN4

L298
output_low(IN3);//sinal baixo IN3

L298       
        }           
delay_ms(temp_fiador);       
output_low(ENB);

}
output_low(LED_FIM_CURSO);       

   
//***********************************

*******************   
//*******Entrada Botao

Stop/Start********************   
if(!input(BT_STOP_START))// Testa

botao start/stop se pressionados
{
   
flag_stop_start=!flag_stop_start;//

Altera estado Liga/Desliga sistema
delay_ms(500);
loop1:
output_high(LED_BOTOES);// Liga Led

botoes
delay_ms(500);           
if(!input(BT_STOP_START))// Testa

botao start/stop se presionado
{
    if(flag_stop_start)// Testa

flag start/stop se ativado
    {
        flag_stop_start=1;
    }   
    if(!flag_stop_start) // Testa

flag start/stop se Desativado
    {
        flag_stop_start=0;
    }
    delay_ms(500);   
goto loop1;
}
output_low(ENA);//sinal Alto enable1

RB2
output_low(ENB);//sinal Alto enable2

RB3
output_low(IN1);//sinal baixo M1 RB4
output_low(IN2);//sinal baixo M1 RB5
output_low(IN3);//sinal baixo M2 RB6
output_low(IN4);//sinal baixo M2 RB7
output_low(LED_BOTOES);
delay_ms(50);   
    }   
//***********************************

****************************       

   
if(flag_sentido_rotacao_M1)//Testa

flag sentido do motor
{
    //sentido horario
output_high(IN1);//sinal Alto IN1 RB4
output_low(IN2);//sinal baixo IN2 RB5   

   
    }
    else
    {
        //sentido anti

horario
output_high(IN2);//sinal Alto IN2 RB5
output_low(IN1);//sinal baixo IN1 RB4

       
        }       
       
//****Compara numeros de espiras se

igual para sistema************       
if(num_espiras==num_voltas_cont)//

Compara numeros de espiras x voltas

dadas
{
    flag_stop_start=0;
    num_voltas_cont=0;
//lcd_escreve("\f");
lcd_pos_xy(1,1);
printf(lcd_escreve," Esp.=%lu

\r",num_espiras);
delay_ms(500);   
}
//*****Verifica status de para

movimentação dos motores***********
if(flag_stop_start)//Testa flag

start/stop se ligado
{
    if(num_voltas_cont!=0)
    {
//lcd_escreve("\f");
lcd_pos_xy(1,1);
printf(lcd_escreve," Esp.=%lu M1 Rod

\r",num_voltas_cont);
delay_ms(300);
    }
// enable motor

M1**********************   
output_high(ENA);//sinal Alto ENA

L298 RB2
delay_ms(temp_bobina);
output_low(ENA);//sinal baixo ENA

L298 RB2
flag_ligado=1;

if(flag_encoder_M1)//Deu uma volta no

motor M1 então movimenta M2
{
   
// enable Motor

M2**************************
output_high(ENB);//sinal Alto ENB RB3
delay_ms(temp_fiador);//tempo do

pulso
output_low(ENB);//sinal baixo ENB RB3
//delay_ms(40);
flag_encoder_M1=0; // desativa Flag

encoder M1
//lcd_pos_xy(1,1);
//printf(lcd_escreve," Espiras=%lu   

\r",num_voltas_cont);
num_voltas_cont=num_voltas_cont+1;
delay_ms(30);
}
//***********************************

**************************
}
else
{
    if(num_voltas_cont!=0)
    {
//lcd_escreve("\f");
lcd_pos_xy(1,1);
printf(lcd_escreve,"Esp.=%lu M1 Par.

\r",num_voltas_cont);
delay_ms(300);
}
// travar motores
if(!flag_encoder_M1 & flag_ligado)
{
   
   
/*    for(i=0;i<2;i++)//PARAR M1
{   
//sentido anti horario
output_high(IN2);//sinal Alto IN2 RB5
output_low(IN1);//sinal baixo IN1 RB4
// enable motor

M1**********************   
output_high(pin_B2);//sinal Alto ENA

RB2
delay_ms(temp_bobina);
output_low(pin_B2);//sinal baixo ENA

RB2
}*/
flag_ligado=0;
}
output_low(ENA);//sinal Alto enable1
output_low(ENB);//sinal Alto enable2
output_low(pin_B4);//sinal baixo M1
output_low(pin_B5);//sinal baixo M1
output_low(pin_B6);//sinal baixo M2
output_low(pin_B7);//sinal baixo M2
delay_ms(300);
}
//********botao seta tempo bobina
if(!input(BT_BOBINA))
{
    output_high(LED_BOTOES);//

Liga Led botoes
if(!input(BT_INC))
{   
temp_bobina=temp_bobina+1;
delay_ms(300);
}
if(!input(BT_DEC))
{   
temp_bobina=temp_bobina-1;
delay_ms(300);
}
lcd_pos_xy(1,2);
printf(lcd_escreve,"Temp bob.=%lu

\r",temp_bobina);
delay_ms(300);
}

//********botao seta tempo fiador
if(!input(BT_FIADOR))
{
    output_high(LED_BOTOES);//

Liga Led botoes
if(!input(BT_INC))
{   
temp_fiador=temp_fiador+1;
delay_ms(300);
}
if(!input(BT_DEC))
{   
temp_fiador=temp_fiador-1;
delay_ms(300);
}
lcd_pos_xy(1,2);
printf(lcd_escreve,"Temp Fia.=%lu

\r",temp_fiador);
delay_ms(300);
}

//********botao seta quantidade de

espiras
if(!input(BT_ESPIRAS))
{
    output_high(LED_BOTOES);//

Liga Led botoes
if(!input(BT_INC))
{   
num_espiras=num_espiras+1;
delay_ms(300);
}
if(!input(BT_DEC))
{   
num_espiras=num_espiras-1;
delay_ms(300);
}
lcd_pos_xy(1,2);
printf(lcd_escreve,"NUM ESP.=%lu

\r",num_espiras);
delay_ms(300);
}
//lcd_escreve("\f");
//delay_ms(500);
if(BT_ESPIRAS & BT_FIADOR &

BT_BOBINA)output_LOW(LED_BOTOES);//

Desliga Led botoes
}
}


É isso ai pessoal se gostaram deixem seus comentários,
Deem seu like nos vídeos do youtube e se inscrevam no canal.




Nenhum comentário:

Postar um comentário