ff

Dependencies:   TextLCD mbed

Committer:
jon07
Date:
Thu Jan 18 12:23:56 2018 +0000
Revision:
0:1b3a675e81b5
asdf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jon07 0:1b3a675e81b5 1 #include "mbed.h"
jon07 0:1b3a675e81b5 2 #define period 0.0002 //1/5000
jon07 0:1b3a675e81b5 3 #define sizeVector 100
jon07 0:1b3a675e81b5 4 #define Constant_v 1.2092e-06
jon07 0:1b3a675e81b5 5 #define Constant_i 5.5641e-06//((3,3*2000/(2^16*Rburn))^2)*(1/100)
jon07 0:1b3a675e81b5 6 //USER_BUTTON o PC_13
jon07 0:1b3a675e81b5 7 #include "TextLCD.h"
jon07 0:1b3a675e81b5 8 #define dato_p 202.6327 //para calcular el precio
jon07 0:1b3a675e81b5 9
jon07 0:1b3a675e81b5 10 InterruptIn button(PC_13);
jon07 0:1b3a675e81b5 11 AnalogIn valuesV(A0);
jon07 0:1b3a675e81b5 12 AnalogIn valuesOffset(A1);
jon07 0:1b3a675e81b5 13 AnalogIn valuesI(A5);
jon07 0:1b3a675e81b5 14
jon07 0:1b3a675e81b5 15 Serial bluetooth(D10,D2);
jon07 0:1b3a675e81b5 16 TextLCD lcd(D8, D9, D3, D4, D5, D6 ,TextLCD::LCD16x2); // rs, e, d4-d7
jon07 0:1b3a675e81b5 17
jon07 0:1b3a675e81b5 18 int16_t vA[sizeVector];
jon07 0:1b3a675e81b5 19 int16_t vB[sizeVector];
jon07 0:1b3a675e81b5 20 int16_t iA[sizeVector];
jon07 0:1b3a675e81b5 21 int16_t iB[sizeVector];
jon07 0:1b3a675e81b5 22 uint16_t valorOffset;
jon07 0:1b3a675e81b5 23
jon07 0:1b3a675e81b5 24 uint32_t temporal;
jon07 0:1b3a675e81b5 25
jon07 0:1b3a675e81b5 26 int counter=0;
jon07 0:1b3a675e81b5 27 int flag=0;
jon07 0:1b3a675e81b5 28 int whatVector=0;
jon07 0:1b3a675e81b5 29 int state=0;
jon07 0:1b3a675e81b5 30 int16_t temp_v=0;
jon07 0:1b3a675e81b5 31 int16_t temp_i=0;
jon07 0:1b3a675e81b5 32 int64_t sum_values_v=0;
jon07 0:1b3a675e81b5 33 int64_t sum_values_i=0;
jon07 0:1b3a675e81b5 34 float VRMS=0;
jon07 0:1b3a675e81b5 35 float IRMS=0;
jon07 0:1b3a675e81b5 36 float Pact=0;
jon07 0:1b3a675e81b5 37 float Preactiva=0;
jon07 0:1b3a675e81b5 38 float Paparente=0;
jon07 0:1b3a675e81b5 39 float EnergiActiva=0;
jon07 0:1b3a675e81b5 40 float EnergiaReactiva=0;
jon07 0:1b3a675e81b5 41 float cosPHI=0;
jon07 0:1b3a675e81b5 42 float precio=0;
jon07 0:1b3a675e81b5 43
jon07 0:1b3a675e81b5 44
jon07 0:1b3a675e81b5 45
jon07 0:1b3a675e81b5 46 Ticker sample; //Puntero para el attach
jon07 0:1b3a675e81b5 47 Ticker visualize;
jon07 0:1b3a675e81b5 48
jon07 0:1b3a675e81b5 49 void fsample()
jon07 0:1b3a675e81b5 50 {
jon07 0:1b3a675e81b5 51 valorOffset=(int16_t)(valuesOffset.read_u16()^0x8000);
jon07 0:1b3a675e81b5 52 if (whatVector) {
jon07 0:1b3a675e81b5 53 temporal=((valuesV.read_u16()+valuesV.read_u16()+valuesV.read_u16()+valuesV.read_u16())/4);
jon07 0:1b3a675e81b5 54
jon07 0:1b3a675e81b5 55 vB[counter]=((int16_t)(temporal^0xFFFF8000))-valorOffset;
jon07 0:1b3a675e81b5 56 //printf("%u %d\r\n",vB[counter], counter);
jon07 0:1b3a675e81b5 57 temporal=((valuesI.read_u16()+valuesI.read_u16()+valuesI.read_u16()+valuesI.read_u16())/4);
jon07 0:1b3a675e81b5 58 iB[counter]=((int16_t)(temporal^0xFFFF8000))-valorOffset;
jon07 0:1b3a675e81b5 59 } else {
jon07 0:1b3a675e81b5 60 temporal=((valuesV.read_u16()+valuesV.read_u16()+valuesV.read_u16()+valuesV.read_u16())/4);
jon07 0:1b3a675e81b5 61 vA[counter]=((int16_t)(temporal^0xFFFF8000))-valorOffset;
jon07 0:1b3a675e81b5 62
jon07 0:1b3a675e81b5 63 temporal=((valuesI.read_u16()+valuesI.read_u16()+valuesI.read_u16()+valuesI.read_u16())/4);
jon07 0:1b3a675e81b5 64 iA[counter]=((int16_t)(temporal^0xFFFF8000))-valorOffset;
jon07 0:1b3a675e81b5 65 }
jon07 0:1b3a675e81b5 66 counter++;
jon07 0:1b3a675e81b5 67 if (counter==100) {
jon07 0:1b3a675e81b5 68 counter=0;
jon07 0:1b3a675e81b5 69 flag=1;
jon07 0:1b3a675e81b5 70 whatVector=!whatVector;
jon07 0:1b3a675e81b5 71 }
jon07 0:1b3a675e81b5 72 }
jon07 0:1b3a675e81b5 73 void change_button()
jon07 0:1b3a675e81b5 74 {
jon07 0:1b3a675e81b5 75 state++;
jon07 0:1b3a675e81b5 76 if(state>8) {
jon07 0:1b3a675e81b5 77 state=0;
jon07 0:1b3a675e81b5 78 }
jon07 0:1b3a675e81b5 79 }
jon07 0:1b3a675e81b5 80 void visualiza()
jon07 0:1b3a675e81b5 81 {
jon07 0:1b3a675e81b5 82 lcd.cls();
jon07 0:1b3a675e81b5 83 bluetooth.printf("%f|%f|%f|%f|%f|%f|%f\n\r",VRMS,IRMS,Pact,EnergiActiva,EnergiaReactiva,Preactiva,Paparente);
jon07 0:1b3a675e81b5 84 switch(state) {
jon07 0:1b3a675e81b5 85
jon07 0:1b3a675e81b5 86 case 0:
jon07 0:1b3a675e81b5 87 lcd.printf("VRMS: \n %f",VRMS);
jon07 0:1b3a675e81b5 88 break;
jon07 0:1b3a675e81b5 89 case 1:
jon07 0:1b3a675e81b5 90 lcd.printf("IRMS: \n %f",IRMS);
jon07 0:1b3a675e81b5 91 break;
jon07 0:1b3a675e81b5 92 case 2:
jon07 0:1b3a675e81b5 93 lcd.printf("Potencia Activa: \n %f",Pact);
jon07 0:1b3a675e81b5 94 break;
jon07 0:1b3a675e81b5 95 case 3:
jon07 0:1b3a675e81b5 96 lcd.printf("Energia Activa:\n\r%f",EnergiActiva);
jon07 0:1b3a675e81b5 97 break;
jon07 0:1b3a675e81b5 98 case 4:
jon07 0:1b3a675e81b5 99 lcd.printf("Energía Reactiva:\n\r%f",EnergiaReactiva);
jon07 0:1b3a675e81b5 100 break;
jon07 0:1b3a675e81b5 101 case 5:
jon07 0:1b3a675e81b5 102 lcd.printf("Potecia Reactiva:\n\r%f",Preactiva);
jon07 0:1b3a675e81b5 103 break;
jon07 0:1b3a675e81b5 104 case 6:
jon07 0:1b3a675e81b5 105 lcd.printf("Potencia Aparente:\n\r%f",Paparente);
jon07 0:1b3a675e81b5 106 break;
jon07 0:1b3a675e81b5 107 case 7:
jon07 0:1b3a675e81b5 108 lcd.printf("Coseno de phi:\n\r%f",cosPHI);
jon07 0:1b3a675e81b5 109 break;
jon07 0:1b3a675e81b5 110
jon07 0:1b3a675e81b5 111 bluetooth.printf("%f | %f | %f | %f | %f \n",VRMS,IRMS,Pact,Preactiva,Paparente);
jon07 0:1b3a675e81b5 112 }
jon07 0:1b3a675e81b5 113 }
jon07 0:1b3a675e81b5 114 int main()
jon07 0:1b3a675e81b5 115 {
jon07 0:1b3a675e81b5 116 sample.attach(&fsample,period);
jon07 0:1b3a675e81b5 117 visualize.attach(&visualiza,1);
jon07 0:1b3a675e81b5 118 button.rise(&change_button);
jon07 0:1b3a675e81b5 119 int32_t productoTemp;
jon07 0:1b3a675e81b5 120
jon07 0:1b3a675e81b5 121 while(1) {
jon07 0:1b3a675e81b5 122 if (flag) {
jon07 0:1b3a675e81b5 123 flag=0; //Para que entre en el if cuando haya un cambio a 1 de flag, es decir, counter=100
jon07 0:1b3a675e81b5 124 sum_values_v=0; //Inicializar a 0
jon07 0:1b3a675e81b5 125 sum_values_i=0;
jon07 0:1b3a675e81b5 126 //printf("****************************\n\r");
jon07 0:1b3a675e81b5 127 for(int n=0; n<100; n++) {
jon07 0:1b3a675e81b5 128 if(whatVector) {
jon07 0:1b3a675e81b5 129 temp_v=vA[n];
jon07 0:1b3a675e81b5 130 temp_i=iA[n];
jon07 0:1b3a675e81b5 131 } else {
jon07 0:1b3a675e81b5 132 temp_v=vB[n];
jon07 0:1b3a675e81b5 133 temp_i=iB[n];
jon07 0:1b3a675e81b5 134 }
jon07 0:1b3a675e81b5 135 //printf("%d\n\r",temp_v);
jon07 0:1b3a675e81b5 136 productoTemp=temp_v*temp_v;
jon07 0:1b3a675e81b5 137 sum_values_v=sum_values_v+productoTemp;
jon07 0:1b3a675e81b5 138 productoTemp=temp_i*temp_i;
jon07 0:1b3a675e81b5 139 sum_values_i=sum_values_i+productoTemp;
jon07 0:1b3a675e81b5 140 sum_values_pa=sum_values_pa+(sum_values_i*sum_values_v);
jon07 0:1b3a675e81b5 141 sum_values_pr=
jon07 0:1b3a675e81b5 142 sum_values_papa=
jon07 0:1b3a675e81b5 143
jon07 0:1b3a675e81b5 144
jon07 0:1b3a675e81b5 145 }
jon07 0:1b3a675e81b5 146
jon07 0:1b3a675e81b5 147 }
jon07 0:1b3a675e81b5 148 printf("%f\n\r",(float)sum_values_v);
jon07 0:1b3a675e81b5 149 VRMS=sqrt(Constant_v*(float)sum_values_v);
jon07 0:1b3a675e81b5 150 //VRMS=sqrt((((float)Constant_v*(float)Constant_v)*(1/100))*(float)sum_values_v);
jon07 0:1b3a675e81b5 151 //IRMS=sqrt((((float)Constant_i*(float)Constant_i)*(1/100))*(float)sum_values_i);
jon07 0:1b3a675e81b5 152 IRMS=sqrt(Constant_i*(float)sum_values_i);
jon07 0:1b3a675e81b5 153 //Pact=(((((float)Constant_v*(float)Constant_i)*(1/100))*(float)sum_values_v)*(float)sum_values_i);
jon07 0:1b3a675e81b5 154 Pact=202.63*sum_values_pa;
jon07 0:1b3a675e81b5 155 EnergiActiva=EnergiActiva+Pact*20e-3/(3600*1000); //kWh
jon07 0:1b3a675e81b5 156 Paparente=VRMS*IRMS;
jon07 0:1b3a675e81b5 157 Preactiva=sqrt((Paparente*Paparente)-(Pact*Pact));
jon07 0:1b3a675e81b5 158 EnergiaReactiva=EnergiaReactiva+Preactiva*20e-3/(3600*1000);
jon07 0:1b3a675e81b5 159 cosPHI=Pact/Paparente;
jon07 0:1b3a675e81b5 160 precio=EnergiActiva*dato_p;
jon07 0:1b3a675e81b5 161
jon07 0:1b3a675e81b5 162 }
jon07 0:1b3a675e81b5 163 }
jon07 0:1b3a675e81b5 164
jon07 0:1b3a675e81b5 165