SOLDADOR DE DOBLE PULSO CON BLUEPILL STM32F103
Dependencies: mbed QEI Debounced TextLCD
Diff: main.cpp
- Revision:
- 2:75153c8d2ef0
- Parent:
- 1:e10c603cf0ae
- Child:
- 3:f3e7caa1d402
--- a/main.cpp Tue Feb 05 14:00:02 2019 +0000 +++ b/main.cpp Mon Apr 29 23:26:21 2019 +0000 @@ -1,60 +1,123 @@ -/* Hello World! for the TextLCD Enhanced Library*/ - +//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" - -// Host PC Communication channels -Serial pc(PA_2, PA_3); // tx, rx +#include "QEI.h" -// LCD instantiation -TextLCD lcd(PA_8, PA_9, PA_10, PA_11, PA_12, PA_15, TextLCD::LCD16x2); // 4-bit bus: RS, E, D4, D5, D6, D7 -Timer t; - -int main() -{ - pc.printf("TextLCD Enhanced Test. Columns=%d, Rows=%d\n\r", lcd.columns(), lcd.rows()); +// se configura el lcd en este caso uno de cuatro filas +TextLCD lcd(PA_8, PA_9, PA_10, PA_11, PA_12, PA_15, TextLCD::LCD16x4); // 4-bit bus: RS, E, D4, D5, D6, D7 - for (int row = 0; row < lcd.rows(); row++) { - int col = 0; - - pc.printf("MemAddr(Col=%d, Row=%d)=0x%02X\n\r", col, row, lcd.getAddress(col, row)); - - lcd.putc('0' + row); +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_3, PB_4, NC, 100); //configuramos encoder de libreria. dos fases y pulsos x rev +InterruptIn button(PB_5); +DigitalIn fire(PB_7); //boton pedal para soldar +DigitalOut IGBT(PB_6); //señal para el igbt +DigitalOut IGBT1(PB_8); //señal para el igbt1 de carga del condensador - for (col=1; col < lcd.columns() - 1; col++) { - lcd.putc('*'); - } - - pc.printf("MemAddr(Col=%d, Row=%d)=0x%02X\n\r", col, row, lcd.getAddress(col, row)); - lcd.putc('+'); - } +void flip() { + wait_ms(100); + if(button==0){ + i++; + if(i>2){ + i=0; + } +} +} -// Fill screen again and time it - t.start(); - - for (int row=0; row<lcd.rows(); row++) { - int col=0; - - lcd.putc('0' + row); - - for (col=1; col<lcd.columns()-1; col++) { - lcd.putc('*'); - } - - lcd.putc('+'); +void weld() { + if(fire==0){ + IGBT1=1; // carga el condensador + wait(3); //tres segundos + IGBT1=0; //fin de la carga + + IGBT=0; + wait_ms(10); + IGBT=1; + wait_ms(p1); + IGBT=0; + wait_ms(espera); + IGBT=1; + wait_ms(p2); + IGBT=0; + wait(3); +} +} + +//..............................INICIA EL PROGRAMA....................................................... +int main() +{ +//...............PANTALLA INICIAL........................................... +inicio1: + 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=wheel.getPulses(); +if(p1<0){ + p1=0; } - t.stop(); - pc.printf("All my hard work took %f sec\r\n", t.read()); +lcd.locate(3,0); +lcd.printf("%d",p1); +wait_ms(60); -// Show cursor as blinking character - lcd.setCursor(TextLCD::CurOff_BlkOn); + } +if(i==1){ +lcd.locate(11,0); +lcd.printf(" "); +p2=wheel.getPulses(); +if(p2<0){ + p2=0; + } +lcd.locate(11,0); +lcd.printf("%d",p2); +wait_ms(60); + -// Set and show user defined characters. A maximum of 8 UDCs are supported by the HD44780. -// They are defined by a 5x7 bitpattern. - lcd.setUDC(0, (char *) udc_0); // Show |> - lcd.putc(0); - lcd.setUDC(1, (char *) udc_1); // Show <| - lcd.putc(1); + } +if(i==2){ +lcd.locate(4,1); +lcd.printf(" "); +espera=wheel.getPulses(); +if(espera<0){ + espera=0; + } +lcd.locate(4,1); +lcd.printf("%d",espera); +wait_ms(60); - pc.printf("Bye now\r\n"); -} + } +if(fire==0){ + weld(); +/* lcd.cls(); + lcd.printf("WELD-OK"); + wait(2); + goto inicio1; +*/ + } +}//while +}//main \ No newline at end of file