102 lines
3.1 KiB
C++
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;
|
|
}
|
|
}
|