projet3_temperature/lib/MesureADC/MesureADC.cpp
2020-05-13 15:59:24 +02:00

102 lines
3.1 KiB
C++

//
// 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 référence
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;
}
}