Lämpötila-anturitekniikka

DS18B20 digitaalisen lämpötila-anturin suunnittelu STM32:lle

DS18B20 lämpötilan mittauslanka ruostumattomasta teräksestä anturisarja

DS18B20 on digitaalinen lämpötila-anturi, joka käyttää yhtä väyläajoitusta kommunikoidakseen isännän kanssa. Vain 1 Lämpötilatietojen lukemiseen tarvitaan johto;

DS18B20:ssa on sisäänrakennettu 64-bittinen tuotteen sarjanumero tunnistamisen helpottamiseksi. Useita DS18B20-antureita voidaan liittää 1 Lanka, ja 64-bittisen identiteetin todennuksen kautta, eri antureilta kerätyt lämpötilatiedot voidaan lukea erikseen.

DS18B20 lämpötilan mittauslanka ruostumattomasta teräksestä anturisarja

DS18B20 lämpötilan mittauslanka ruostumattomasta teräksestä anturisarja

DS18B20 lämpötila-anturi TPE Overmolding sarja

DS18B20 lämpötila-anturi TPE Overmolding sarja

1 johdin DS18B20 lämpötila-anturi

1 johdin DS18B20 lämpötila-anturi

DS18B20:n esittely
2.1 DS18B20: n pääpiirteet
1. Täysin digitaalinen lämpötilan muunnos ja lähtö.
2. Edistynyt yhden väylän tiedonsiirto.
3. Jopa 12-bittinen resoluutio, jopa ±0,5 celsiusasteen tarkkuudella.
4. Suurin työjakso 12-bittisellä resoluutiolla on 750 millisekuntia.
5. Parasiittityöskentelytila ​​voidaan valita.
6. Tunnistuslämpötila-alue on –55°C ~+125°C (–67°F ~+257°F).
7. Sisäänrakennettu EEPROM, lämpötilarajan hälytystoiminto.
8. 64-Bit fotolitografia ROM, sisäänrakennettu tuotteen sarjanumero, kätevä usean koneen liittämiseen.
9. Erilaisia ​​pakkausmuotoja, sopeutua erilaisiin laitteistojärjestelmiin.

DS18B20 sirupaketin rakenne

DS18B20 sirupaketin rakenne

2.2 DS18B20 pin-toiminto
GND jännitteen maadoitus;
DQ yksi dataväylä;
VDD-virtalähteen jännite;
NC tyhjä tappi;

DS18B20-sirun RAM- ja EEPROM-rakennekaavio

DS18B20-sirun RAM- ja EEPROM-rakennekaavio

2.3 DS18B20 toimintaperiaate ja sovellus
DS18B20 lämpötilan tunnistus ja digitaalinen datalähtö on täysin integroitu yhdelle sirulle, joten sillä on vahvempi häiriönestokyky. Sen yksi työjakso voidaan jakaa kahteen osaan, eli lämpötilan havaitsemiseen ja tietojenkäsittelyyn.

18B20:lla on kolmenlaisia ​​muistiresursseja. He ovat: ROM-muisti, käytetään DS18B20ID-koodin tallentamiseen; ensimmäinen 8 bitit ovat yksirivisiä sarjakoodeja (DS18B20 koodi on 19H), seuraavaa 48 bitit ovat sirun yksilöllinen sarjanumero; viimeinen 8 bitit ovat CRC-koodi (irtisanomistarkastus) edellä mainituista 56 bitti. Tiedot asetetaan tuotannossa, eikä käyttäjä voi muuttaa niitä. DS18B20:ssä on yhteensä 64 bittiä ROM:ia.

RAM-tietorekisteri, käytetään sisäiseen laskemiseen ja tietojen käyttöön, tiedot menetetään sähkökatkon jälkeen, DS18B20:ssä on yhteensä 9 tavua RAM-muistia, jokainen tavu on 8 bitti. Ensimmäinen ja toinen tavu ovat datan arvotietoja lämpötilamuunnoksen jälkeen; kolmas ja neljäs tavu ovat peilikuva käyttäjän EEPROMista (käytetään yleisesti lämpötilahälytysarvojen tallentamiseen). Sen arvo päivittyy, kun virta nollataan. The fifth byte is the mirror image of the user’s third EEPROM. The 6th, 7th, and 8th bytes are count registers, which are designed to allow users to obtain higher temperature resolution. They are also temporary storage units for internal temperature conversion and calculation. The 9th byte is the CRC code of the first 8 tavu. EEPROM is a non-volatile memory used to store data that needs to be saved for a long time, upper and lower temperature alarm values, and verification data. DS18B20:ssä on yhteensä 3 bits of EEPROM, and there are mirror images in RAM to facilitate user operation.

DS18B20 works in 12-bit resolution mode by default. The 12-bit data obtained after conversion is stored in two 8-bit RAMs of DS18B20 (the first two bytes). Ensimmäinen 5 bits in binary are sign bits. Jos mitattu lämpötila on suurempi kuin 0, nämä 5 bitit ovat 0. Kerro vain mitattu arvo 0.0625 todellisen lämpötilan saaminen. Jos lämpötila on vähemmän kuin 0, nämä 5 bitit ovat 1. The measured value needs to be inverted, added by 1, ja sitten kerrotaan 0.0625 todellisen lämpötilan saaminen. Tai käytä bittitoimintoa lämpötilan poistamiseen: desimaalit ovat alempia 4 bitti, ja ylemmät bitit ovat kokonaislukubittejä (negatiivisia lukuja ei oteta huomioon).

2.4 DS18B20 sirun ROM-ohjetaulukko
1. Lue ROM [33H] (heksadesimaalikomentosana on hakasulkeissa).
Tämän komennon avulla väyläohjain voi lukea DS18B20:n 64-bittisen ROM:n. Tätä ohjetta voidaan käyttää vain, kun väylässä on vain yksi DS18B20. Jos useampi kuin yksi on kytketty, tietoristiriitoja esiintyy viestinnän aikana.

2. liitä ROM [55H]
Tätä ohjetta seuraa ohjaimen antama 64-bittinen sarjanumero. Kun väylässä on useita DS18B20-laitteita, vain siru, jolla on sama sarjanumero kuin ohjaimen antama, voi vastata, ja muut sirut odottavat seuraavaa nollausta. Tämä ohje sopii yhden sirun ja monisirun liittämiseen.

3. Ohita ROM [CCH]
Tämä ohje estää sirun vastaamasta ROM-koodiin. Yhden bussin tapauksessa, Tämän ohjeen avulla voit säästää aikaa. Jos tätä ohjetta käytetään, kun useita siruja on kytketty, tulee tietoristiriitoja, johtaa virheisiin.

4. Etsi ROM [F0H]
Kun siru on alustettu, hakukäsky mahdollistaa kaikkien laitteiden 64-bittisen ROMin tunnistamisen eliminoimalla, kun useita siruja on kytketty väylään.

5. Hälytyshaku [JOKAINEN]
Useiden pelimerkkien tapauksessa, hälytyssirun hakukäsky vastaa vain siruihin, jotka täyttävät hälytysehdon, jonka lämpötila on korkeampi kuin TH tai alle TL. Niin kauan kuin sirua ei ole kytketty pois päältä, hälytystila säilyy, kunnes lämpötila mitataan uudelleen ja hälytystilaa ei saavuteta.

6. Kirjoita Scratchpad [4EH]
Tämä on ohje tietojen kirjoittamiseksi RAM-muistiin. Myöhemmin kirjoitetut kaksi tavua dataa tallennetaan osoitteeseen 2 (Hälytysmuistin TH) ja osoite 3 (Hälytysmuistin TL). Kirjoitusprosessi voidaan lopettaa nollaussignaalilla.

7. Lue Scratchpad (lukea tietoja RAM-muistista) [BEH]
Tämä ohje lukee tiedot RAM-muistista, alkaen osoitteesta 0 ja osoitteeseen asti 9, lopettaa koko RAM-tietojen lukemisen. Siru sallii palautussignaalin lopettaa lukuprosessin, eli, seuraavat tarpeettomat tavut voidaan jättää huomiotta lukuajan lyhentämiseksi.

8. Kopioi Scratchpad (kopioi RAM-tiedot EEPROMiin) [48H]
Tämä ohje tallentaa tiedot RAM-muistissa EEPROMiin, jotta tiedot eivät katoa, kun virta katkaistaan. Koska siru on varattu EEPROM-tallennuskäsittelyn kanssa, kun ohjain lähettää lukuaikavälin, väylän lähdöt “0”, ja kun varastointityö on valmis, väylä tulee ulos “1”.
Parasiittisessa työtilassa, voimakasta vetoa on käytettävä välittömästi tämän ohjeen antamisen jälkeen ja sitä on ylläpidettävä vähintään 10 MS ajan sirun toiminnan ylläpitämiseksi.

9. Muunna T (lämpötilan muunnos) [44H]
Tämän ohjeen saatuaan, siru suorittaa lämpötilamuunnoksen ja tallentaa muunnetun lämpötila-arvon RAM:n 1. ja 2. osoitteeseen. Koska siru on varattu lämpötilamuunnoskäsittelyyn, kun ohjain lähettää lukuaikavälin, väylän lähdöt “0”, ja kun varastointityö on valmis, väylä tulee ulos “1”. Parasiittisessa työtilassa, voimakasta vetoa on käytettävä välittömästi tämän ohjeen antamisen jälkeen ja sitä on ylläpidettävä vähintään 500 MS:n ajan sirun toiminnan ylläpitämiseksi.

10. Hae EEPROM (Kopioi hälytysarvo EEPROMista RAM-muistiin) [B8H]
Tämä ohje kopioi hälytysarvon EEPROM-muistista RAM:n 3. ja 4. tavuun. Koska siru on kiireinen kopiointiprosessissa, kun ohjain lähettää lukuaikavälin, väylän lähdöt “0”, ja kun varastointityö on valmis, väylän lähdöt “1”. Lisäksi, tämä ohje suoritetaan automaattisesti, kun siru käynnistetään ja nollataan. Tällä tavalla, RAM-muistin kaksi hälytystavubittiä ovat aina peilikuva EEPROMissa olevista tiedoista.

11. Lue Virtalähde (Työtilan kytkin) [B4H]
Tämän ohjeen jälkeen, lukuaikaväli annetaan, ja siru palauttaa tehotilasanansa. “0” on loisvoimatila ja “1” on ulkoisen tehon tila.

2.5 DS18B20 Ajoituskaavio
2.5.1 DS18B20 Nollaus- ja vastaussuhdekaavio
Nollaus on suoritettava ennen jokaista tiedonsiirtoa. Nollausaika, odotusaika, ja vasteaika tulee ohjelmoida tarkasti ajoituksen mukaan.
DS18B20 luku- ja kirjoitusaikaväli: DS18B20:n tietojen lukeminen ja kirjoittaminen vahvistetaan aikavälin käsittelybitillä ja käskysanalla tiedon vaihtamiseksi.

DS18B20 nollaus- ja vastaussuhdekaavio

DS18B20 nollaus- ja vastaussuhdekaavio

2.5.2 Kirjoita dataa 0 ja dataa 1 DS18B20:een
Ensimmäisessä 15uS kirjoitusdatan aikaraosta, väylä täytyy vetää alas ohjaimella, ja sitten se on sirun näytteenottoaika väylädatalle. Näytteenottoaika on 15-60 uS. Jos ohjain vetää väylän korkealle näytteenottoajan aikana, se tarkoittaa kirjoittamista “1”, ja jos ohjain vetää väylän alas, se tarkoittaa kirjoittamista “0”.
Jokaisella lähetyksen bitillä tulee olla matalan tason aloitusbitti vähintään 15uS, ja myöhemmät tiedot “0” tai “1” tulee suorittaa 45 us:n sisällä.
Koko bitin lähetysaika tulee pitää välillä 60-120 uS, muuten normaalia viestintää ei voida taata.
Huomautus: DS18B20 lukee ja kirjoittaa tietoja matalasta bitistä.

Kirjoita dataa 0 ja dataa 1 DS18B20:een

Kirjoita dataa 0 ja dataa 1 DS18B20:een

2.5.3 Tietojen lukeminen 0 ja dataa 1 alkaen DS18B20
Kontrollin näytteenottoajan lukuaikavälin aikana pitäisi olla tarkempi. Lukuaikavälin aikana, isännän on myös luotava vähintään 1 uS:n alhainen taso osoittamaan lukuajan alkamista. Sitten, 15 us:ssa bussin vapautumisen jälkeen, DS18B20 lähettää sisäisen databitin. Tällä hetkellä, jos ohjaus havaitsee, että väylä on korkealla, se tarkoittaa lukemista “1”, ja jos bussi on matalalla, se tarkoittaa tietojen lukemista “0”. Ennen kuin luet jokaisen kappaleen, ohjain lisää käynnistyssignaalin.

Lue tiedot 0 ja dataa 1 alkaen DS18B20

Lue tiedot 0 ja dataa 1 alkaen DS18B20

Huomautus: Databitti on luettava 15 uS:n sisällä lukuvälin alkamisesta oikean tiedonsiirron varmistamiseksi.

Viestinnän aikana, 8 palasia “0” tai “1” käytetään tavuna, ja tavun lukeminen tai kirjoittaminen alkaa matalasta bitistä.

2.5.4 Lukulämpötilan järjestys kerran (vain yksi DS18B20 väylässä)

1. Lähetä nollaussignaali
2. Tunnista vastaussignaali
3. Lähetä 0xCC
4. Lähetä 0x44
5. Lähetä nollaussignaali
6. Tunnista vastaussignaali
7. Kirjoita 0xcc
8. Kirjoita 0xbe
9. Silmukka 8 kertaa lukemaan lämpötilan alhainen tavu
10. Silmukka 8 kertaa lukeaksesi lämpötilan korkean tavun
11. Syntetisoi 16-bittiset lämpötilatiedot ja käsittele

3. Kuljettajan koodi

3.1 DS18B20.c
#sisältää “ds18b20.h”
/*
Toiminto: DS18B20 alustus
Laitteistoliitäntä: PB15
*/
tyhjä DS18B20_Init(mitätön)
{
RCC->APB2ENR|=1<<3; //PB
GPIOB->CRH&=0x0FFFFFFFF;
GPIOB->CRH|=0x30000000;
GPIOB->ODR|=1<<15; //Veto ylös
}

/*
Toiminto: Tarkista, onko DS18B20-laitetta olemassa
Palautusarvo: 1 tarkoittaa, että laitetta ei ole olemassa 0 tarkoittaa, että laite on normaali
*/
u8 DS18B20_CheckDevice(mitätön) //Sisältää nollauspulssin, tunnistuspulssi
{
DS18B20_OUTPUT_MODE();//Alusta lähtötilaan
DS18B20_OUT=0; //Luo nollauspulssi
DelayUs(750); //Luo 750us matala taso
DS18B20_OUT=1; //Vapauta väylä
DelayUs(15); //Odota DS18B20 vastausta
jos(DS18B20_CleckAck())//Tunnista olemassaolon pulssi
{
palata 1;
}
palata 0;
}

/*
Toiminto: Tunnista DS18B20-laitteen pulssi
Palautusarvo: 1 ilmaisee virheen 0 osoittaa normaalia
*/
u8 DS18B20_CleckAck(mitätön)
{
u8 cnt=0;
DS18B20_INPUT_MODE();//Alusta syöttötilaan
kun taas(DS18B20_IN&&cnt<200) //Odota DS18B20:n vastauspulssia
{
DelayUs(1);
cnt++;
}
jos(cnt>= 200)palata 1; //virhe

cnt=0;
kun taas((!DS18B20_IN)&&cnt<240) //odota, että DS18B20 vapauttaa väylän
{
DelayUs(1);
cnt++;
}
jos(cnt>= 240)palata 1; //virhe
palata 0;
}

/*
Toiminto: Kirjoita tavu
Opettele ensin vähän kirjoittamaan.
*/
mitätön DS18B20_WriteByte(u8 cmd)
{
u8 i;
DS18B20_OUTPUT_MODE(); //Alusta lähtötilaan
varten(i = 0;i<8;i++)
{
DS18B20_OUT=0; //Luo kirjoitusaikaväli (kirjoitus aloitus)
DelayUs(2);
DS18B20_OUT=cmd&0x01; //Lähetä todellinen databitti
DelayUs(60); //Odota kirjoituksen valmistumista
DS18B20_OUT=1; //Vapauta väylä ja valmistaudu seuraavaan lähetykseen
cmd>>=1; //Jatka seuraavan databitin lähettämistä
}
}

/*
Toiminto: Lue tavu
Opettele ensin vähän lukemaan.
*/
u8 DS18B20_ReadByte(mitätön)
{
u8 i,data=0;
varten(i = 0;i<8;i++)
{
DS18B20_OUTPUT_MODE(); //Alusta lähtötilaan
DS18B20_OUT=0; //Luo lukuaikaväli (lue aloitus)
DelayUs(2);
DS18B20_OUT=1; //Vapauta väylä
DS18B20_INPUT_MODE(); //Alusta syöttötilaan
DelayUs(8); //Odota DS18B20-datatulostusta
tiedot>>=1; //Täytä korkea kärki 0, oletus on 0
jos(DS18B20_IN) tiedot|=0x80;
DelayUs(60);
DS18B20_OUT=1; //Vapauta väylä, odota seuraavan datan lukemista
}
palauttaa tiedot;
}

/*
Toiminto: Lue DS18B20:n lämpötilatiedot kerran
Palautusarvo: lukemat lämpötilatiedot
Harkittu tilanne: Väylään on kytketty vain yksi DS18B20
*/
u16 DS18B20_ReadTemp(mitätön)
{
u16 lämpötila = 0;
u8 temp_H,temp_L;
DS18B20_CheckDevice(); //Lähetä nollauspulssi, havaita pulssi
DS18B20_WriteByte(0xCC); //Ohita ROM-sekvenssin tunnistus
DS18B20_WriteByte(0x44); //Aloita lämpötilan muuntaminen

//Odota, että lämpötilan muunnos on valmis
kun taas(DS18B20_ReadByte()!=0xFF){}

DS18B20_CheckDevice(); //Lähetä nollauspulssi, havaita pulssi
DS18B20_WriteByte(0xCC); //Ohita ROM-sekvenssin tunnistus
DS18B20_WriteByte(0xBE); //Lue lämpötila

temp_L=DS18B20_ReadByte(); //Lue matalan lämpötilan tiedot
temp_H=DS18B20_ReadByte(); //Lue korkean lämpötilan tiedot
temp=temp_L|(temp_H<<8); //Syntetisoitu lämpötila
paluulämpötila;
}

3.2 DS18B20.h

#ifndef DS18B20_H
#määrittele DS18B20_H
#sisältää “stm32f10x.h”
#sisältää “sys.h”
#sisältää “viive.h”
#sisältää “ds18b20.h”
#sisältää “usart.h”

/*Paketin käyttöliittymä*/

//Alusta DS18B20 syöttötilaan
#määritä DS18B20_INPUT_MODE() {GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x80000000;}

//Alusta DS18B20 lähtötilaan
#määritä DS18B20_OUTPUT_MODE(){GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x30000000;}

//DS18B20 IO-portin lähtö
#määritä DS18B20_OUT PBout(15)

//DS18B20 IO-portin tulo
#määritä DS18B20_IN PBin(15)

//Toiminnan ilmoitus
u8 DS18B20_CleckAck(mitätön);
u8 DS18B20_CheckDevice(mitätön);
tyhjä DS18B20_Init(mitätön);
u16 DS18B20_ReadTemp(mitätön);
u8 DS18B20_ReadByte(mitätön);
mitätön DS18B20_WriteByte(u8 cmd);
#endif

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png
3.3 Viivetoiminto

/*
Toiminto: Viive meissä
*/
mitätön DelayUs(int meihin)
{
#ifdef _SYSTICK_IRQ_
int i,j;
varten(i = 0;iVAL=0; //CNT-laskurin arvo
SysTick->LOAD=9*us; //9 tarkoittaa 1us
SysTick->CTRL|=1<<0; //Käynnistä ajastin
tehdä
{
tmp=SysTick->CTRL; //Lue tila
}kun taas((!(tmp&1<<16))&&(tmp&1<<0));
SysTick->VAL=0; //CNT-laskurin arvo
SysTick->CTRL&=~(1<<0); //Sammuta ajastin
#endif
};i++)>

3.4 main.c Soita numeroon DS18B20 lukeaksesi lämpötila ja tulostaaksesi sen sarjaporttiin

#sisältää “stm32f10x.h”

#sisältää “ds18b20.h”

u8 DS18B20_ROM[8]; //Tallenna DS18B20:n 64-bittinen ROM-koodi

int main(mitätön)
{
u16 lämpötila;
USARTx_Heat(USART1,72,115200);//Sarjaportin alustus 1
DS18B20_Lämpö(); //DS18B20 alustus

/*1. Lue 64-bittinen ROM-koodi DS18B20*/
//Lähetä nollauspulssi, havaita olemassaolon pulssi
kun taas(DS18B20_CheckDevice())
{
printf(“DS18B20-laitetta ei ole olemassa!\n”);
DelayMs(500);
}
//Lähetä komento lukeaksesi 64-bittinen ROM-koodi
DS18B20_WriteByte(0x33);

//Silmukka lukea 64-bittistä ROM-koodia
varten(i = 0;i<8;i++)
{
DS18B20_ROM[i]= DS18B20_ReadByte();
printf(“DS18B20_ROM[%d]=0x%X\n”,i,DS18B20_ROM[i]);
}

kun taas(1)
{
/*2. Käytä samanaikaisesti kaikkia väylän DS18B20-laitteita aloittaaksesi lämpötilan muuntamisen*/
DS18B20_CheckDevice(); //Lähetä nollauspulssi, havaita pulssi
DS18B20_WriteByte(0xCC); //Ohita ROM-sekvenssin tunnistus
DS18B20_WriteByte(0x44); //Aloita lämpötilan muuntaminen (anna kaikkien väylän DS18B20:iden muuntaa lämpötila)
DelayMs(500); //Odota, että kaikki DS18B20-lämpötilamuunnokset linjalla on suoritettu

/*3. Jokaisen DS18B20*/:n lämpötilan yksi kohdistettu lukema
DS18B20_CheckDevice(); //Lähetä nollauspulssi, havaita pulssi
DS18B20_WriteByte(0x55); //Lähetä komento vastaamaan ROM-muistia
varten(i = 0;i<8;i++) //Lähetä 64-bittinen koodi
{
DS18B20_WriteByte(DS18B20_ROM[i]);
}
DS18B20_WriteByte(0xBE); //Lue lämpötila
temp=DS18B20_ReadByte(); //Lue matalan lämpötilan tiedot
lämpötila|=DS18B20_ReadByte()<<8; //Lue korkealuokkaiset lämpötilatiedot
printf(“temp1=%d.%d\n”,lämpötila>>4,lämpötila&0xF);
printf(“temp2=%f\n”,lämpötila*0,0625);

DelayMs(500);
}
}