SOLDADOR DE DOBLE PULSO CON BLUEPILL STM32F103

Dependencies:   mbed QEI Debounced TextLCD

main.cpp

Committer:
tony63
Date:
2019-06-20
Revision:
3:f3e7caa1d402
Parent:
2:75153c8d2ef0

File content as of revision 3:f3e7caa1d402:

//demo display y encoder
//programa para probar un bluepill con encoder y lcd y pulsadores
//control de soldador de punto de doble pulso
//se emiten dos pulsos y una  espera intermedia
//antes de hacer esto se carga un condensador de 5F por 3seg con  el IGBT1
//luego se envian los pulsos de soldadura por el IGBT, con los tiempos configurados
#include "mbed.h"
#include "TextLCD.h"
#include "QEI.h"
/*
#include "mbed.h"
#include "QEI.h"
QEI encoder (PB_13, PB_12, NC, 100);//PB12 ES EL CLK...  PB13 ES EL DT DE ARDUINO ENCO
Serial COM(PB_6, PB_7);


int main() {

    while(1){
        wait(0.1);
        COM.printf("Pulses is: %i\n", encoder.getPulses());
    }

}
*/
// se configura el lcd en este caso uno de cuatro filas
TextLCD lcd(PA_3, PA_2, PA_1, PA_0, PC_15, PC_14, TextLCD::LCD16x4);  // 4-bit bus: RS, E, D4, D5, D6, D7

int p=0,p1=0,p2=0,espera=0,pulsos=0;            //variables del programa
int i=0;                          //posicion de la variable en el display
QEI wheel (PB_13, PB_12, NC, 100);  //configuramos encoder de libreria. dos fases y pulsos x rev
InterruptIn button(PB_14);
DigitalIn fire(PB_15);
DigitalOut IGBT(PB_6); //señal para el igbt
DigitalOut IGBT1(PB_8); //señal para el igbt1 de carga del condensador

void flip() {
      wait_ms(1);
      if(button==0){  
       i++;
       if(i>2){
           i=0;
              }
}
}

void weld() {
      
      IGBT1=1; // carga el condensador
      wait(3); //tres segundos
      IGBT1=0; //fin de la carga
      IGBT=0;
      wait_ms(1);
      IGBT=1;
      wait_ms(p1);
      IGBT=0;
      wait_ms(espera);
      IGBT=1;
      wait_ms(p2);
      IGBT=0;
      }
    
//..............................INICIA EL PROGRAMA.......................................................
int main()
{ 
//...............PANTALLA INICIAL...........................................
            
    button.fall(&flip); 
    IGBT1=0; //apaga el igbt de carga
    lcd.cls();     
    lcd.locate(3,0);            //se posiciona en col 3 y fila 0
    lcd.printf("SPOT WELDER");  //primer mensaje
    lcd.locate(3,1);            //se posiciona en col 3 y fila 0
    lcd.printf("DUAL PULSE");   //primer mensaje
    wait(3);                    //espera 3 seg     

    lcd.cls();                  //borra pantalla
    lcd.locate(0,0);            //se posiciona en col 8 y fila 0
    lcd.printf("P1=");      //se marca una variable
    lcd.locate(8,0);            //se posiciona 0,1 
    lcd.printf("P2=");      //se marca una variable
    lcd.locate(0,1);            //se  posiciona en 8,1
    lcd.printf("Esp=");       //se marca una variable
    lcd.setCursor(TextLCD::CurOff_BlkOn);   //se configura el cursor LCD parpadeante.
     
//..............................FIN PANTALLA INICIAL.....................................    
//.............programa ciclico..........................................................
  while(1){
if(i==0){
lcd.locate(3,0);
lcd.printf("   ");
p1=p1+wheel.getPulses();
if(p1<0){
    p1=0;
    }
if(p1>999){
    p1=999;
    }    
lcd.locate(3,0);
lcd.printf("%d",p1);
wheel.reset();
wait_ms(5);
if(fire==0){
    weld();
    }

        }
if(i==1){
lcd.locate(11,0);
lcd.printf("   ");
p2=p2+wheel.getPulses();
if(p2<0){
    p2=0;
    }
if(p2>999){
    p2=999;
    }        
lcd.locate(11,0);
lcd.printf("%d",p2);
wheel.reset();
wait_ms(5);
if(fire==0){
    weld();
    }
        }
if(i==2){
lcd.locate(4,1);
lcd.printf("   ");
espera=espera+wheel.getPulses();
if(espera<0){
    espera=0;
    }
if(espera>999){
    espera=999;
    }        
lcd.locate(4,1);
lcd.printf("%d",espera);
wheel.reset();
wait_ms(5);
if(fire==0){
    weld();
    }

        }
if(fire==0){
    weld();
    }
/*  
    lcd.cls();
    lcd.printf("WELD-OK");
    wait(3);
    goto inicio;
  */ 
           
}//while        
}//main