El_clan_zoncillo / Mbed 2 deprecated Proyecto_final

Dependencies:   mbed TextLCD

Committer:
freind00
Date:
Thu Dec 20 13:14:11 2018 +0000
Revision:
6:33c61cd81626
Parent:
plantilla_copy.cpp@5:c638ff4bd841
Child:
7:e0452337a3d1
version semifinal;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
freind00 3:3620f948d5e0 1 #include "mbed.h"
freind00 3:3620f948d5e0 2 #include "math.h"
freind00 5:c638ff4bd841 3 #include "TextLCD.h"
freind00 5:c638ff4bd841 4
freind00 5:c638ff4bd841 5 #define datoTension 725.331071
freind00 5:c638ff4bd841 6 #define datoIntensidad 29.4943123
freind00 3:3620f948d5e0 7 #define constanteTension 1.4709e-06
freind00 3:3620f948d5e0 8 #define constanteIntensidad 1.423595702690060e-09
freind00 4:c9f7e9a96324 9 #define vectormuestras 100
freind00 5:c638ff4bd841 10 #define offsetTension 0.50369472
freind00 5:c638ff4bd841 11 #define offsetIntensidad 0.5040785
freind00 5:c638ff4bd841 12 #define eps 2.220446049250313e-016
freind00 3:3620f948d5e0 13
freind00 5:c638ff4bd841 14 TextLCD lcd(D8, D9, D2, D3, D4, D5, TextLCD::LCD16x2); // rs, e, d4-d7
freind00 3:3620f948d5e0 15 Serial pc(USBTX, USBRX); // tx, rx
freind00 3:3620f948d5e0 16
freind00 4:c9f7e9a96324 17 InterruptIn button(PC_13);
freind00 5:c638ff4bd841 18 AnalogIn tension(A0);
freind00 5:c638ff4bd841 19 AnalogIn intensidad(A1);
freind00 3:3620f948d5e0 20
freind00 3:3620f948d5e0 21
freind00 5:c638ff4bd841 22 struct Vectores{
freind00 5:c638ff4bd841 23 float vTensionA[vectormuestras];
freind00 5:c638ff4bd841 24 float vTensionB[vectormuestras];
freind00 5:c638ff4bd841 25
freind00 6:33c61cd81626 26 float vIntensidadA[vectormuestras];
freind00 6:33c61cd81626 27 float vIntensidadB[vectormuestras];
freind00 6:33c61cd81626 28 }vectores;
freind00 3:3620f948d5e0 29
freind00 5:c638ff4bd841 30 struct Medidas{
freind00 5:c638ff4bd841 31 float medidaTension;
freind00 5:c638ff4bd841 32 float medidaIntensidad;
freind00 6:33c61cd81626 33 }medidas;
freind00 3:3620f948d5e0 34
freind00 3:3620f948d5e0 35 int contador=0;
freind00 3:3620f948d5e0 36 int pulsador=0;
freind00 3:3620f948d5e0 37 int bufferActivo=0;
freind00 3:3620f948d5e0 38 int flag=0;
freind00 3:3620f948d5e0 39 int16_t measV=0;
freind00 3:3620f948d5e0 40 int16_t measI=0;
freind00 3:3620f948d5e0 41 int32_t producto=0;
freind00 3:3620f948d5e0 42 int64_t sumatorioV=0;
freind00 3:3620f948d5e0 43 int64_t sumatorioI=0;
freind00 3:3620f948d5e0 44 int64_t sumatorioPA=0;
freind00 3:3620f948d5e0 45
freind00 3:3620f948d5e0 46 float VRMS=0;
freind00 3:3620f948d5e0 47 float IRMS=0;
freind00 3:3620f948d5e0 48 float P_activa=0;
freind00 3:3620f948d5e0 49 float P_reactiva=0;
freind00 3:3620f948d5e0 50 float P_aparente=0;
freind00 3:3620f948d5e0 51 float Consumo_Pact=0;
freind00 3:3620f948d5e0 52 float Consumo_Preact=0;
freind00 3:3620f948d5e0 53 float FP=0;
freind00 3:3620f948d5e0 54
freind00 3:3620f948d5e0 55 //Captura de valores mediante muestreo
freind00 3:3620f948d5e0 56 void captura() //función muestreo
freind00 3:3620f948d5e0 57 {
freind00 5:c638ff4bd841 58 float medidaTension=tension.read();
freind00 5:c638ff4bd841 59 medidaTension=medidaTension-offsetTension*datoTension;
freind00 5:c638ff4bd841 60
freind00 5:c638ff4bd841 61 float medidaIntensidad=intensidad.read();
freind00 5:c638ff4bd841 62 medidaIntensidad=medidaIntensidad-offsetIntensidad*datoIntensidad;
freind00 5:c638ff4bd841 63
freind00 5:c638ff4bd841 64 if(bufferActivo==1) {
freind00 6:33c61cd81626 65 vectores.vTensionA[contador] = medidaTension;
freind00 6:33c61cd81626 66 vectores.vIntensidadA[contador] = medidaIntensidad;
freind00 5:c638ff4bd841 67
freind00 3:3620f948d5e0 68 } else {
freind00 6:33c61cd81626 69 vectores.vTensionB[contador] = medidaTension;
freind00 6:33c61cd81626 70 vectores.vIntensidadB[contador] = medidaIntensidad;
freind00 3:3620f948d5e0 71 }
freind00 3:3620f948d5e0 72
freind00 3:3620f948d5e0 73 contador++;
freind00 3:3620f948d5e0 74 if(contador==vectormuestras){
freind00 3:3620f948d5e0 75 contador=0;
freind00 3:3620f948d5e0 76 bufferActivo=!bufferActivo;
freind00 3:3620f948d5e0 77 flag=1;//buffer lleno
freind00 3:3620f948d5e0 78 }
freind00 3:3620f948d5e0 79 }
freind00 3:3620f948d5e0 80
freind00 6:33c61cd81626 81 //Visualización por pantalla
freind00 6:33c61cd81626 82 void visualizacion()//función mostrar
freind00 3:3620f948d5e0 83 {
freind00 6:33c61cd81626 84 lcd.cls();
freind00 6:33c61cd81626 85 if(pulsador==0){
freind00 6:33c61cd81626 86 lcd.printf("VRMS:\n %f", VRMS);
freind00 6:33c61cd81626 87 }
freind00 6:33c61cd81626 88
freind00 6:33c61cd81626 89 else if (pulsador ==1) {
freind00 6:33c61cd81626 90 lcd.printf("IRMS:\n %f", IRMS);
freind00 6:33c61cd81626 91 }
freind00 6:33c61cd81626 92
freind00 6:33c61cd81626 93 else if (pulsador ==2) {
freind00 6:33c61cd81626 94 lcd.printf("Pot. activa:\n %f", P_activa);
freind00 6:33c61cd81626 95 }
freind00 6:33c61cd81626 96
freind00 6:33c61cd81626 97 else if (pulsador ==3) {
freind00 6:33c61cd81626 98 lcd.printf("Pot. reactiva:\n %f", P_reactiva);
freind00 6:33c61cd81626 99 }
freind00 6:33c61cd81626 100
freind00 6:33c61cd81626 101 else if (pulsador ==4) {
freind00 6:33c61cd81626 102 lcd.printf("Pot. aparente:\n %f", P_aparente);
freind00 6:33c61cd81626 103 }
freind00 6:33c61cd81626 104
freind00 6:33c61cd81626 105 else if (pulsador ==5) {
freind00 6:33c61cd81626 106 lcd.printf("Consumo Pot. A:\n %f", Consumo_Pact);
freind00 6:33c61cd81626 107 }
freind00 6:33c61cd81626 108
freind00 6:33c61cd81626 109 else if (pulsador ==6) {
freind00 6:33c61cd81626 110 lcd.printf("Consumo Pot. R:\n %f", Consumo_Preact);
freind00 6:33c61cd81626 111 }
freind00 6:33c61cd81626 112
freind00 6:33c61cd81626 113 else if (pulsador ==7) {
freind00 6:33c61cd81626 114 lcd.printf("Factor de potencia:\n\r %f", FP);
freind00 6:33c61cd81626 115 }
freind00 6:33c61cd81626 116
freind00 6:33c61cd81626 117 }
freind00 6:33c61cd81626 118
freind00 6:33c61cd81626 119 //Cambio de boton
freind00 6:33c61cd81626 120 void cambio_boton()
freind00 6:33c61cd81626 121 {
freind00 6:33c61cd81626 122 pulsador++;
freind00 6:33c61cd81626 123 if(pulsador>8) {
freind00 6:33c61cd81626 124 pulsador=0;
freind00 6:33c61cd81626 125 }
freind00 6:33c61cd81626 126 }
freind00 6:33c61cd81626 127
freind00 6:33c61cd81626 128 int main()
freind00 6:33c61cd81626 129 {
freind00 6:33c61cd81626 130 Ticker timerCaptura;
freind00 6:33c61cd81626 131 Ticker timerVisualizacion;
freind00 6:33c61cd81626 132 timerCaptura.attach_us(&captura,200);//Hace que la función muestreo se ejecute cada 200us
freind00 6:33c61cd81626 133 timerVisualizacion.attach(&visualizacion,1.0);//Hace que la función mostrar se ejecute cada segundo
freind00 6:33c61cd81626 134 button.rise(&cambio_boton);//Hace que la función boton se ejecute cada vez que se pulse el botón
freind00 6:33c61cd81626 135
freind00 3:3620f948d5e0 136 while(1) {//bucle para siempre
freind00 3:3620f948d5e0 137 if(flag) {//mira si el buffer esta lleno
freind00 3:3620f948d5e0 138 flag=0;//Borra la variable buffer lleno
freind00 3:3620f948d5e0 139 measV=0;
freind00 3:3620f948d5e0 140 measI=0;
freind00 3:3620f948d5e0 141 producto=0;
freind00 3:3620f948d5e0 142 sumatorioV=0;
freind00 3:3620f948d5e0 143 sumatorioI=0;
freind00 3:3620f948d5e0 144 sumatorioPA=0;
freind00 3:3620f948d5e0 145
freind00 6:33c61cd81626 146 for (int b=0; b<vectormuestras; b++) {//VRMS
freind00 3:3620f948d5e0 147 if (!bufferActivo) {
freind00 6:33c61cd81626 148 measV=vectores.vTensionA[b];
freind00 6:33c61cd81626 149 measI=vectores.vIntensidadA[b];
freind00 3:3620f948d5e0 150 } else {
freind00 6:33c61cd81626 151 measV=vectores.vTensionB[b];
freind00 6:33c61cd81626 152 measI=vectores.vIntensidadB[b];
freind00 3:3620f948d5e0 153 }
freind00 3:3620f948d5e0 154 producto=measV*measV;
freind00 3:3620f948d5e0 155 sumatorioV+=producto;//calcula el valor VPP
freind00 3:3620f948d5e0 156 producto=measI*measI;
freind00 3:3620f948d5e0 157 sumatorioI+=producto;
freind00 3:3620f948d5e0 158 producto=measV*measI;
freind00 3:3620f948d5e0 159 sumatorioPA+=producto;
freind00 3:3620f948d5e0 160 }
freind00 5:c638ff4bd841 161
freind00 5:c638ff4bd841 162 VRMS=sqrt(constanteTension*sumatorioV);
freind00 5:c638ff4bd841 163 IRMS=sqrt(constanteIntensidad*sumatorioI);
freind00 5:c638ff4bd841 164 P_activa=sqrt(constanteTension*constanteIntensidad)*sumatorioPA;
freind00 5:c638ff4bd841 165 P_aparente=VRMS*IRMS;
freind00 5:c638ff4bd841 166 P_reactiva=sqrt(P_aparente*P_aparente)-(P_aparente*P_aparente);
freind00 5:c638ff4bd841 167 Consumo_Pact=Consumo_Pact+P_activa*20e-3/(3600*1000);
freind00 5:c638ff4bd841 168 Consumo_Preact=Consumo_Preact+P_reactiva*20e-3/(3600*1000);
freind00 5:c638ff4bd841 169 FP=P_activa/(P_aparente+eps);
freind00 5:c638ff4bd841 170 }
freind00 6:33c61cd81626 171 }
freind00 3:3620f948d5e0 172 }