www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Meritev temperature hladilnika.

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
zaz
Član
Član



Pridružen-a: Pon 06 Apr 2015 14:23
Prispevkov: 89
Aktiv.: 0.81
Kraj: Ljubljana

PrispevekObjavljeno: Čet Mar 01, 2018 10:48 am    Naslov sporočila:  Meritev temperature hladilnika. Odgovori s citatom

Pozdravljeni,

kateri senzor priporočate za meritev temperature hladilnega telesa. Zaželjeno je, da je v TO-220 ohišju za enostavno montažo. Območje senzorja 20 - 100°C, raje več. Natančnost senzorja ni tako kritična, saj gre zgolj za kontrolo temperature hladilnega telesa. Menim, da bi zadostovala končna točnost +-2°C.

Zanime me še ali je bolj pametno uporabiti senzor, ki izmerjeno temperaturo posreduje v obliki analogne vrednosti ali preko digitalne komunikacije. Ali je pri "digitalnih" senzorjih potrebna tudi kalibracija?

Pri analognem senzorju me skrbi, da se bo potrebno "preveč" u ukvarjati s samo kalibracijo, pri digitalnem pa me skrbi izvedba komunikacije, ker nimam veliko izkušenj.


Najlepša hvala za odgovor.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mosqito
Član
Član



Pridružen-a: Čet 07 Apr 2016 23:22
Prispevkov: 3223
Aktiv.: 33.20

PrispevekObjavljeno: Čet Mar 01, 2018 11:33 am    Naslov sporočila:   Odgovori s citatom

Nisi napisal, kam bi to rad priklopil, zato je težko karkoli svetovat. Ti boš sam najbolje vedel, kaj ti bolj ustreza. Lahko pa opišeš še malo celoten sistem.

Digitalni je lahko TMP75, ki je majhen in enostaven za uporabo (I2C). Naspajkaš ga na malo tiskanino, na katero daš še priključni kabelček in to spelješ do glavne enote. V TO220 boš težko našel kaj primernega. Predvsem je problem tako velikega ohišja njegova velika toplotna "vztrajnost", kar ti dodaja zakasnitve v odzivu. Tega pa ne želiš. Priporočam, da uporabiš čim manjše ohišje. Če uporabljaš analogni senzor pa uporabi termistor (lahko NTC), ki ga pritrdiš preko malega kovinskega nosilca, ki ga tišči ob hladilnik.

_________________
Always going the extra mile.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
zaz
Član
Član



Pridružen-a: Pon 06 Apr 2015 14:23
Prispevkov: 89
Aktiv.: 0.81
Kraj: Ljubljana

PrispevekObjavljeno: Čet Mar 01, 2018 11:51 am    Naslov sporočila:   Odgovori s citatom

Aha, to sem res storil neumno napako z izbiro ohišja. Veliko senzorjev je v TO-92 ohišju. Na kakšen način se senzor v tem primeru pričvrsti na hladilno telo. Obstajajo mogoče lepila z visoko toplotno prevodnostjo?

Senzor bo odčitvala en od STM32 krmilnikov (ni še točno določeno), bo pa krmilnik zagotovo deloval na 3.3V. V primeru, da bi uporabil analogni senzor, bi za ovrednotenje izhoda senzorja uporabil interni ADC. Seveda bi med senzorski izhod in ADC dodal prilgoditveno vezje / filter.

Na hladilnem telesu bodo 3 mosfeti na katere morem paziti, da se ne preveč segrejejo. Nisem se še poglabljal v postavitev mosfetov na hladilnem telesu, če bodo mosfeti zelo narazen bi za vsakega uporabil svoj temperaturni senzor. Celotno vezje bo predvidoma na istem PCB-ju. Mosfeti so v TO-220 ohišju, zato bi mi bilo najbolj praktično, da je tudi senzor v podobnem ohišju, ker bo izvedba in postavitev tako najlažja.

Hladilno telo bo večjih dimenzij z lastnim ventilatorjem, saj je pričakovana moč na tranzistorjih zelo velika, zato bo potrebno odvajati veliko količino toplote.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mosqito
Član
Član



Pridružen-a: Čet 07 Apr 2016 23:22
Prispevkov: 3223
Aktiv.: 33.20

PrispevekObjavljeno: Čet Mar 01, 2018 12:28 pm    Naslov sporočila:   Odgovori s citatom

Aha, odlično.

Paste dobiš s kar lepo prevodnostjo. Jaz sem si jo naredil kar sam. Vzel sem keramiko (Al2O3) in jo zdrobil v prah (stolčeš s kladivom in preseješ skozi cedilo). Ta prah sem vmešal v dvokomponentni epoxy in potem s tem prilepil senzor na hladilnik. Drži in prevaja toploto. Dobiš pa seveda tudi toplotno prevoden epoxy ali pa pasto, ki se ne posuši (keramični prah v vazelinu).


Za STM32 sem pred kratkim napisal tole:

Koda:
 /***
 *      ____    ____  _  ____   ____    ___   __  __
 *     / ___|  / ___|(_)|  _ \ |  _ \  / _ \ |  \/  |
 *     \___ \ | |    | || | | || |_) || | | || |\/| |
 *      ___) || |___ | || |_| ||  _ < | |_| || |  | |
 *     |____/  \____||_||____/ |_| \_\ \___/ |_|  |_|
 *        (C)2018 Scidrom
 
   Description: TMP75 driver
   License: GNU General Public License
   Maintainer: S54MTB
*/

/******************************************************************************
  * @file    TMP75.c
  * @author  S54MTB
  * @version V1.0.0
  * @date    14-January-2018
  * @brief   TMP75 driver
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2018 Scidrom
   * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation, either version 3 of the License, or
  * (at your option) any later version.
   *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <https://www.gnu.org/licenses/>. 
  ******************************************************************************
  */


/**
  * The TMP75 and TMP175 devices are digital temperature sensors ideal for NTC
  * and PTC thermistor replacement. The devices offer a typical accuracy of ±1°C
  *   without requiring calibration or external component signal conditioning. IC
   * temperature sensors are highly linear and do not require complex
   * calculations or look-up tables to derive the temperature. The on-chip 12-bit
   * ADC offers resolutions down to 0.0625°C. The devices are available in the
   * industry standard LM75 SOIC-8 and MSOP-8 footprint.
   */

#include "tmp75.h"


/*!
 * \brief Convert address line state to slave address
 *
 * \retval slave address or 0xff if address line state combination is invalid
 */
uint8_t Tmp75_SlaveAddress(Tmp75_AddressLine_t a2, Tmp75_AddressLine_t a1,
Tmp75_AddressLine_t a0)
{
   
   typedef struct
   {
      Tmp75_AddressLine_t a2;
      Tmp75_AddressLine_t a1;
      Tmp75_AddressLine_t a0;
      uint8_t SlaveAddress;
   } Lm75_addrconv_t;
   
   const Lm75_addrconv_t Lm75_addrconv[] =
   {
      {Tmp75Addr_Zero, Tmp75Addr_Zero, Tmp75Addr_Zero, 0x48},
      {Tmp75Addr_Zero, Tmp75Addr_Zero, Tmp75Addr_One, 0x49},
      {Tmp75Addr_Zero, Tmp75Addr_One, Tmp75Addr_Zero, 0x4A},
      {Tmp75Addr_Zero, Tmp75Addr_One, Tmp75Addr_One, 0x4B},
      {Tmp75Addr_One, Tmp75Addr_Zero, Tmp75Addr_Zero, 0x4C},
      {Tmp75Addr_One, Tmp75Addr_Zero, Tmp75Addr_One, 0x4D},
      {Tmp75Addr_One, Tmp75Addr_One, Tmp75Addr_Zero, 0x4E},
      {Tmp75Addr_One, Tmp75Addr_One, Tmp75Addr_One, 0x4F},
      {Tmp75Addr_Float, Tmp75Addr_Zero, Tmp75Addr_Zero, 0x70},
      {Tmp75Addr_Float, Tmp75Addr_Zero, Tmp75Addr_Float, 0x71},
      {Tmp75Addr_Float, Tmp75Addr_Zero, Tmp75Addr_One, 0x72},
      {Tmp75Addr_Float, Tmp75Addr_One, Tmp75Addr_Zero, 0x73},
      {Tmp75Addr_Float, Tmp75Addr_One, Tmp75Addr_Float, 0x74},
      {Tmp75Addr_Float, Tmp75Addr_One, Tmp75Addr_One, 0x75},
      {Tmp75Addr_Float, Tmp75Addr_Float, Tmp75Addr_Zero, 0x76},
      {Tmp75Addr_Float, Tmp75Addr_Float, Tmp75Addr_One, 0x77},
      {Tmp75Addr_Zero, Tmp75Addr_Float, Tmp75Addr_Zero, 0x28},
      {Tmp75Addr_Zero, Tmp75Addr_Float, Tmp75Addr_One, 0x29},
      {Tmp75Addr_One, Tmp75Addr_Float, Tmp75Addr_Zero, 0x2A},
      {Tmp75Addr_One, Tmp75Addr_Float, Tmp75Addr_One, 0x2B},
      {Tmp75Addr_Zero, Tmp75Addr_Zero, Tmp75Addr_Float, 0x2C},
      {Tmp75Addr_Zero, Tmp75Addr_One, Tmp75Addr_Float, 0x2D},
      {Tmp75Addr_One, Tmp75Addr_Zero, Tmp75Addr_Float, 0x2E},
      {Tmp75Addr_One, Tmp75Addr_One, Tmp75Addr_Float, 0x2F},
      {Tmp75Addr_Zero, Tmp75Addr_Float, Tmp75Addr_Float, 0x35},
      {Tmp75Addr_One, Tmp75Addr_Float, Tmp75Addr_Float, 0x36},
      {Tmp75Addr_Float, Tmp75Addr_Float, Tmp75Addr_Float, 0x37},
      {Tmp75Addr_Zero, Tmp75Addr_Zero, Tmp75Addr_Zero, 0x48},
      {Tmp75Addr_Zero, Tmp75Addr_Zero, Tmp75Addr_One, 0x49},
      {Tmp75Addr_Zero, Tmp75Addr_One, Tmp75Addr_Zero, 0x4A},
      {Tmp75Addr_Zero, Tmp75Addr_One, Tmp75Addr_One, 0x4B},
      {Tmp75Addr_One, Tmp75Addr_Zero, Tmp75Addr_Zero, 0x4C},
      {Tmp75Addr_One, Tmp75Addr_Zero, Tmp75Addr_One, 0x4D},
      {Tmp75Addr_One, Tmp75Addr_One, Tmp75Addr_Zero, 0x4E},
      {Tmp75Addr_One, Tmp75Addr_One, Tmp75Addr_One, 0x4F}
   };
   
   int i;
   
   for (i = 0; i<(sizeof(Lm75_addrconv) / sizeof(Lm75_addrconv[0])); i++)
   {
      if ( (Lm75_addrconv[i].a0 == a0) &
             (Lm75_addrconv[i].a1 == a1) &
             (Lm75_addrconv[i].a2 == a2) ) return Lm75_addrconv[i].SlaveAddress;
   }
   
   return 0xff;
   
   
}


HAL_StatusTypeDef Tmp75_Init(I2C_HandleTypeDef *hi2c, uint8_t adr,
Tmp75_regconf_t cfg) {
                                             
  uint16_t regval = cfg.r << 8;
   return Tmp75_Write_Register(hi2c, adr, TMP75_RCONF, regval);

}


HAL_StatusTypeDef Tmp75_Write_Register(I2C_HandleTypeDef *hi2c, uint8_t adr,
uint8_t register_pointer, uint16_t register_value) {

   uint8_t data[3];

  data[0] = register_pointer;     // Register address
   data[1] = register_value >> 8;  // MSB byte of 16bit data
   data[2] = register_value;       // LSB byte of 16bit data

   return HAL_I2C_Master_Transmit(hi2c, adr<<1, data, 3, 100);

}

HAL_StatusTypeDef Tmp75_Read_Register(I2C_HandleTypeDef *hi2c, uint8_t adr,
uint8_t register_pointer, uint8_t* receive_buffer) {

   HAL_StatusTypeDef status;
   
  // first set the register pointer to the register wanted to be read
   status = HAL_I2C_Master_Transmit(hi2c, adr<<1, &register_pointer, 1, 100);
 
   // receive the 2 x 8bit data into the receive buffer
   status |= HAL_I2C_Master_Receive(hi2c, adr<<1 | 0x01, receive_buffer, 2, 100);
   return status;
   
}
                     
HAL_StatusTypeDef Tmp75_Read_Teperature(I2C_HandleTypeDef *hi2c, uint8_t adr,
float* temperature) {
   HAL_StatusTypeDef status;
   uint8_t T_buffer[2];
   uint16_t temp;
   
   status = Tmp75_Read_Register(hi2c, adr, TMP75_RTEMP, T_buffer);
   if (status == HAL_OK)
   {
      temp = ((T_buffer[0]<<8) | T_buffer[1]) >> 4;
      *temperature = (float)temp * 0.0625f;
   }
   
   return status;   
}





rabiš še tegale:



Koda:
 /***
 *      ____    ____  _  ____   ____    ___   __  __
 *     / ___|  / ___|(_)|  _ \ |  _ \  / _ \ |  \/  |
 *     \___ \ | |    | || | | || |_) || | | || |\/| |
 *      ___) || |___ | || |_| ||  _ < | |_| || |  | |
 *     |____/  \____||_||____/ |_| \_\ \___/ |_|  |_|
 *        (C)2018 Scidrom
 
   Description: TMP75 driver
   License: GNU General Public License
   Maintainer: S54MTB
*/

/******************************************************************************
  * @file    TMP75.h
  * @author  S54MTB
  * @version V1.0.0
  * @date    15-January-2018
  * @brief   TMP75 header file
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2018 Scidrom
   * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation, either version 3 of the License, or
  * (at your option) any later version.
   *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.  *
  ******************************************************************************
  */

#ifndef __TMP75_H__
#define __TMP75_H__

#include "stm32l0xx_hal.h"


/** Register addresses */
#define TMP75_RTEMP      0x00          /// Temperature register
#define TMP75_RCONF      0x01         /// Configuration register
#define TMP75_RTEMPL   0x02         /// TLOW register
#define TMP75_RTEMPH   0x03         /// THIGH register


#define TMP75_RESOLUTION_9BITS   0
#define TMP75_RESOLUTION_10BITS   1
#define TMP75_RESOLUTION_11BITS   2
#define TMP75_RESOLUTION_12BITS   3


/** \brief  Structure of Configuration register in TMP75
 */
typedef union
{
   struct
   {
         uint8_t SD      :1;        /*!< bit:  0 Shutdown Mode */
         uint8_t TM      :1;        /*!< bit:  1 Thermostat Mode */
         uint8_t POL      :1;        /*!< bit:  2 Polarity */
         uint8_t F      :2;        /*!< bit:  3...4 Fault Queue */
         uint8_t R         :2;        /*!< bit:  5...6 Converter Resolution */
         uint8_t OS      :1;        /*!< bit:  7 One-Shot */
   } b;
   uint8_t r;
} Tmp75_regconf_t;

   
typedef enum
{
   Tmp75Addr_Zero,
   Tmp75Addr_One,
   Tmp75Addr_Float
} Tmp75_AddressLine_t;


/*!
 * \brief Convert address line state to slave address
 *
 * \retval slave address or 0xff if address line state combination is invalid
 */
uint8_t Tmp75_SlaveAddress(Tmp75_AddressLine_t a2, Tmp75_AddressLine_t a1,
Tmp75_AddressLine_t a0);



HAL_StatusTypeDef Tmp75_Init(I2C_HandleTypeDef *hi2c, uint8_t adr,
                             Tmp75_regconf_t cfg);



HAL_StatusTypeDef Tmp75_Write_Register(I2C_HandleTypeDef *hi2c, uint8_t adr,
                     uint8_t register_pointer, uint16_t register_value);



HAL_StatusTypeDef Tmp75_Read_Register(I2C_HandleTypeDef *hi2c, uint8_t adr,
                     uint8_t register_pointer, uint8_t* receive_buffer);
                     
                     
                     
HAL_StatusTypeDef Tmp75_Read_TempCelsius(I2C_HandleTypeDef *hi2c, uint8_t adr,
                     float* receive_buffer);
                     
                     
                     
HAL_StatusTypeDef Tmp75_Read_TempEeprom(I2C_HandleTypeDef *hi2c, uint8_t adr,
                     uint16_t* receive_buffer);
                     
                     
                     
HAL_StatusTypeDef Tmp75_One_ShotTemp(I2C_HandleTypeDef *hi2c, uint8_t adr);



HAL_StatusTypeDef Tmp75_Read_Teperature(I2C_HandleTypeDef *hi2c, uint8_t adr,
float* temperature);



#endif




Kličeš pa takole (po inicializaciji I2C):
Koda:

   Tmp75_regconf_t TMP75_cfg;
   uint8_t tmp75addr;
   HAL_StatusTypeDef status = HAL_ERROR;
   int32_t mctemp;

   TMP75_cfg.b.R = TMP75_RESOLUTION_12BITS;
   TMP75_cfg.b.OS = 1;
   TMP75_cfg.b.F = 0;
   TMP75_cfg.b.POL = 0;
   TMP75_cfg.b.TM = 0;
   TMP75_cfg.b.SD = 0;

   tmp75addr = Tmp75_SlaveAddress(Tmp75Addr_Zero, Tmp75Addr_Zero, Tmp75Addr_Zero);
   status = Tmp75_Init(&I2Chandle, tmp75addr, TMP75_cfg);
   if (status == HAL_OK)  status = Tmp75_Read_Teperature(&I2Chandle, tmp75addr, T);




TMP75 ima zanimiv način nastavljanja I2C naslova. Imaš 3 pine, ki so lahko 1, 0 ali nikamor vezan. S tem dobiš veliko kombinacij. Tako imaš lahko na enem I2C vodilu res veliko senzorjev.

Gornji primer je namenjen uporabi s HAL hnjižnicami. Sam I2C skonfiguriraš v CubeMX.

Upam, da ti pride prav.

LP,
M.

_________________
Always going the extra mile.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
zaz
Član
Član



Pridružen-a: Pon 06 Apr 2015 14:23
Prispevkov: 89
Aktiv.: 0.81
Kraj: Ljubljana

PrispevekObjavljeno: Čet Mar 01, 2018 12:41 pm    Naslov sporočila:   Odgovori s citatom

Bom še malo pretuhtal, kaj se mi najbolj splača.

Zelo verjetno se bom odločil za digitalni senzor, saj bi si z analognim nakopal kup težav pri povezovanju mas - razdalja med senzorjem in ostalim vezjem nebo tako kratka in zato bi lahko imel probleme, da bi mi tokovi na masi pokvarili meritve. Seveda bi jih poskušal omejiti ampak zakaj bi koplicirali.

Najlepša hvala za odgovor in trud.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Eisenhorn
Član
Član



Pridružen-a: Tor 08 Dec 2009 11:50
Prispevkov: 200
Aktiv.: 1.15
Kraj: LJ

PrispevekObjavljeno: Čet Mar 01, 2018 4:18 pm    Naslov sporočila:   Odgovori s citatom

Jaz sem uporabljal DS18B20 vstavljene v luknjo v hladilniku.

Lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
polkic
Član
Član



Pridružen-a: Pon 04 Dec 2017 20:27
Prispevkov: 68
Aktiv.: 0.88

PrispevekObjavljeno: Čet Mar 01, 2018 6:22 pm    Naslov sporočila:   Odgovori s citatom

Pozdravljen,

če potrebuješ dejansko vrednost temperature in boš s pomočjo te reguliral hlajenje, potem bo ena od zgoraj omenjenih rešitev idealna.

V primeru, da pa bi rad samo varoval pred pregretjem, lahko uporabiš en termistor in primerjalnik (mogoče celo dual comperator za 2 meritve- ena opozorilo, druga pa izklop) in mu nastaviš vrednosti glede na krivuljo termistorja. V tem primeru potrebuješ samo en digitalni vhod (dual verzija 2 ) in se lahko izmakneš uporabi analogije in komunikacije. Ena taka opcija je LM393


Lep pozdrav.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
zaz
Član
Član



Pridružen-a: Pon 06 Apr 2015 14:23
Prispevkov: 89
Aktiv.: 0.81
Kraj: Ljubljana

PrispevekObjavljeno: Pet Mar 02, 2018 12:25 pm    Naslov sporočila:   Odgovori s citatom

Eisenhorn je napisal/a:
Jaz sem uporabljal DS18B20 vstavljene v luknjo v hladilniku.

Lp


Na kakšen način so bili vstavljeni? So bili zaliti s kakšno termoprepustno pasto?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 49 dni


Powered by phpBB © 2001, 2005 phpBB Group