// // LTC2439.cpp // libLTC // // Created by Tim THUREL on 04/03/2020. // Copyright © 2020 Tim THUREL. All rights reserved. // #include "MesureADC.h" MesureADC::MesureADC(int vref,int maxval,int res_mesure,int v_alim, int beta, int r_therm ){ vreference = vref; // tension de COM maximumval = maxval; // valeur max de l'ADC res_courant = res_mesure; // resistence de mesure de courant tension_alim = v_alim; // tension de l'alimentation beta_therm = beta; // beta des thermitance res_therm = r_therm; // résistance des termistance } float * MesureADC::ReadTemp(int adcCS){ mesureV(adcCS); i1 = mesureI(tableV1); // mesure des courant i2 = mesureI(tableV2); temp(); // mesure de la température for (int i = 0; i < 8; i++) { out[i] = T1[i]; } int j = 8; for (int i = 0; i < 8; i++) { out[j] = T2[i]; j++; } return out; } void MesureADC::mesureV(int CS){ LTC adc(CS); // création de l'objet long valeur; float val; for(int i = 0; i < 16; i++){ // mesure de chaque channel et convesion en Volt valeur = adc.readValue(i); val = ((valeur * vreference) / maximumval); // conversion en volt val = val + vreference; // ramène la valeur avec la tension de référence ( la tension centre est Vref donc on a des tension négative) if(i < 8 ){ tableV1[i] = val; } else{ tableV2[i - 8] = val; } } } float MesureADC::mesureI(float *table){ // retourne la valeur du courant en mA return (table[0]/res_courant); } void MesureADC::volt(){ // mesure la tention des thermistances for (int j = 1; j < 7; ++j) // fait la mesure de la résistance 1 à 6 { tableVR1[j] = tableV1[j +1] - tableV1[j] ; } tableVR1[0] = tableV1[1] - tableV1[0]; // fait la mesure de la résistance 0 tableVR1[7] = tension_alim - tableV1[7] ; // fait la mesure de la résistance 7 for (int j = 1; j < 7; ++j) // fait la mesure de la résistance 1 à 6 { tableVR2[j] = tableV2[j +1] - tableV2[j] ; } tableVR2[0] = tableV2[1] - tableV2[0]; // fait la mesure de la résistance 0 tableVR2[7] = tension_alim - tableV2[7] ; // fait la mesure de la résistance 7 } void MesureADC::temp(){ // calcul de la température res(); for (int j = 0; j < 8; ++j) // utilise la formule de calcul pour calculer les 8 valeur de températures { T1[j] = ((298.15*beta_therm)/(beta_therm+298.15*log(tableR1[j]/res_therm)))- 273.15; } for (int j = 0; j < 8; ++j) // utilise la formule de calcul pour calculer les 8 valeur de températures { T2[j] = ((298.15*beta_therm)/(beta_therm+298.15*log(tableR2[j]/res_therm)))- 273.15; } } void MesureADC::res(){ // calcul la valeur de la resistance volt(); // mesure de la tention des thermistances for (int j = 0; j < 8; ++j) // fait une loi d'Ohm pour calculer les 8 valeur des résistance { tableR1[j] = tableVR1[j] / i1; } for (int j = 0; j < 8; ++j) // fait une loi d'Ohm pour calculer les 8 valeur des résistance { tableR2[j] = tableVR2[j] / i2; } }