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