Go Down

Topic: MOSFET pour des capteurs de température (Read 2150 times) previous topic - next topic

keaume

Bonjour,

Je suis sur un projet permettant de récupérer des températures grâce au couple MAX31850K et Thermocouple type K. J'en ai 4 en série, lorsqu'il y en a que 2 ou 3 les valeurs semblent normale. Mais dès qu'il y a en a 4, les valeurs ont une différence de 1 voir 2 degré de la première sonde à la 4ème. Je pense qu'utiliser un MOSFET IRF540 pourrait être utile pour lisser les valeurs... Or, je n'arrive pas à l'implémenter dans le circuit. Voici mon code concernant la partie température:

Code: [Select]

void lireMesTemp()
{
  byte cpt;
  String affichOrdi;
 
  for (cpt = 0; cpt < NbCapT ; cpt++)                   // Parcourir un à un les capteurs
  {
    if(MAX31850K.isConnected(IDsTemp[cpt]) == true)   
    {
      MesTemp[cpt] = MAX31850K.getTempC(IDsTemp[cpt]);
     
      /* Affichage Ordinateur */
      affichOrdi = "Capteur Temp-" + cpt;
      affichOrdi = " " + affichOrdi + " : " + MesTemp[cpt];   
      Serial.print(affichOrdi);                   
      Serial.println(" °C");                     
    }
    else
    {
      MesTemp[cpt] = 0.0;

      /* Affichage Ordinateur */
      affichOrdi = "Capteur Temp-" + cpt;
      affichOrdi = affichOrdi + " déconnecté !";     
      Serial.println(affichOrdi);                   // Affichage Ordinateur
    }
  }


Je pense que mon soucis est au niveau des branchements, j'ai du mal à comprendre où implémenter le MOSFET et comment l'alimenter...

J'ai vraiment besoin d'aide, merci d'avance!

Jambe

#1
Jun 01, 2017, 04:44 pm Last Edit: Jun 01, 2017, 04:45 pm by Jambe
Qu'est ce que tu veux faire avec ton Mosfet exactement? Je vois pas comment lisser des valeurs avec un transistor qui est utile pour de la commutation


keaume

Je pensais que cela pouvait donner un décalage, excusez-moi je suis vraiment novice dans le domaine de l'électronique... Auriez-vous une solution ?

68tjs

#3
Jun 01, 2017, 06:02 pm Last Edit: Jun 01, 2017, 06:04 pm by 68tjs
Quote
Je pensais que cela pouvait donner un décalage,
Cela ne s'appelle pas résoudre un problème mais cacher la poussière sous le tapis :smiley-mr-green:
et en plus cela ne marchera pas.
Revenons à l'origine du pb : mauvais fonctionnement quand trop de MAX31850K sont connectés.

Le MAX31850K utilise le bus ONEWIRE de la société Dallas (rachetée avec son bus par Maxim).
Je pense a un problème de gestion du bus qui est connu pour être un bus lent.
Je n'en dirai pas plus parce que je n'en sais pas plus sur ce bus.

Néanmoins tu peux commencer à chercher de la documentation sur les bonnes pratiques pour utiliser ce bus et peut-être que notre grand spécialiste de ce bus se connectera au forum :smiley-mr-green:

keaume

Merci pour cette analyse. En effet, j'ai effectué des tests : chaque MAX31850K et chaque Thermocouple fonctionne très bien seul, peu importe dans quel ordre et avec quel composant. Donc le problème ne vient pas du Hardware il s'agit de la transmission de donnée...

Je n'y connais absolument rien en bus de transmission,
Quel genre de solution pensez-vous qu'il existe ?

Et qui est ce grand spécialiste ? :D

Merci encore,

68tjs

Un indice : un très joli lac des Pyrénées porte son nom.
T'inquiète pas il n'est jamais très loin :smiley-mr-green:.

Mais en attendant sa venue google ou qwant.com sont déjà présent.

keaume

ça fait un moment que je bloque sur ce soucis malheureusement google et qwant ne m'ont pas aidé à trouver une solution :(

Artouste

Un indice : un très joli lac des Pyrénées porte son nom.

:smiley-mr-green:
Et c'est aussi le nom d'une gamme de turbine d'helicoptere

Artouste

ça fait un moment que je bloque sur ce soucis malheureusement google et qwant ne m'ont pas aidé à trouver une solution :(
Bonsoir
Alimentation en direct ou "parasitic power" ?


keaume

Bonsoir M.LeLacAliasLHelicoptere,

Je suis en alimentation directe, mais j'ai également testé en parasitic power et cela ne change pas grand chose. Que me conseillez-vous ? J'ai lu que l'external power pouvait être plus précis et sûr

Artouste

#10
Jun 01, 2017, 08:27 pm Last Edit: Jun 01, 2017, 08:36 pm by Artouste
Je suis en alimentation directe, mais j'ai également testé en parasitic power et cela ne change pas grand chose. Que me conseillez-vous ? J'ai lu que l'external power pouvait être plus précis et sûr
OK , alim prise où ?
les adresses des max sont en decouverte à chaque boucle ou elles sont enregistrées ?
poste ton programme
IL n'y a bien qu'une seule R 4.7K entre VCC et les DQ ?

keaume

Tu trouveras en pièce jointe mon branchement. J'espère que ce sera clair


Voici les global values concernant les MAX :

Code: [Select]


#define ONE_WIRE_BUS 48
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature MAX31850K(&oneWire);

byte NbCapT;
float MesTemp[4];
byte IDsTemp[5][8];




Voici mon setup concernant les MAX:

Code: [Select]

  MAX31850K.begin();
 
  NbCapT = MAX31850K.getDeviceCount();                  // Récupérer le nombre des capteurs fonctionnels sur le bus
 
  for(cpt = 0; cpt < NbCapT; cpt++)                   // Récupérer et stocker les IDs des capteurs par index
  {
    if(MAX31850K.getAddress(IDsTemp[cpt], cpt) == true)
    {
      Serial.print("OK pour l'adresse du capteur Temp-");       // Affichage Ordinateur
      Serial.println(cpt);                                      // Affichage Ordinateur
    }
    else
    {
      Serial.print("NOK pour l'adresse du capteur Temp-");      // Affichage Ordinateur
      Serial.println(cpt);
    }
  }
  MAX31850K.setWaitForConversion(false);                  // Ne pas bloquer le programme pendant la conversion de la température en nombre par MAX31850K
  delay(200);
  MAX31850K.requestTemperatures();                        // Ordonner aux MAX31850K de procéder à la conversion des températures
  delay(200);                             




Voici mon code concernant les MAX :

Code: [Select]



void lireMesTemp()
{
  byte cpt;
  String affichOrdi;
 
  for (cpt = 0; cpt < NbCapT ; cpt++)                   // Parcourir un à un les capteurs
  {
    if(MAX31850K.isConnected(IDsTemp[cpt]) == true)   
    {
      MesTemp[cpt] = MAX31850K.getTempC(IDsTemp[cpt]);
     
      /* Affichage Ordinateur */
      affichOrdi = "Capteur Temp-" + cpt;
      affichOrdi = " " + affichOrdi + " : " + MesTemp[cpt];   
      Serial.print(affichOrdi);                   
      Serial.println(" °C");                     
    }
    else
    {
      MesTemp[cpt] = 0.0;

      /* Affichage Ordinateur */
      affichOrdi = "Capteur Temp-" + cpt;
      affichOrdi = affichOrdi + " déconnecté !";     
      Serial.println(affichOrdi);                   // Affichage Ordinateur
    }
  }

  MAX31850K.requestTemperatures();                        // Ordonner aux MAX31850K de procéder à la conversion des températures
  delay(200);           

}

Artouste

#12
Jun 01, 2017, 08:49 pm Last Edit: Jun 01, 2017, 08:54 pm by Artouste
Tu trouveras en pièce jointe mon branchement. J'espère que ce sera clair
Pas vraiment :smiley-mr-green:
- il n'y a a pas le breadboard, ni la mega en totalité
- je ne vois pas où est la R de 4.7K

keaume

Oups !

Je dois la mettre où ?

Et à chaque MAX31850? C'est possible de me montrer sur un schéma ou sur la photo que je t'ai envoyé ?


Est-ce que l'implémentation de cette R de 4,7K ca changer la donne ?

Artouste

Oups !

Je dois la mettre où ?

Et à chaque MAX31850? C'est possible de me montrer sur un schéma ou sur la photo que je t'ai envoyé ?


Est-ce que l'implémentation de cette R de 4,7K ca changer la donne ?
une seule R 4.7K entre VCC et DQ
par exemple là



Go Up