Temperatūros jutiklis ds. Apie temperatūros jutiklius DS18B20. Sąveika su valdymo sistema

Arduino temperatūros jutiklis yra vienas iš labiausiai paplitusių jutiklių tipų. Arduino termometro projekto kūrėjui yra daug galimybių. skirtingų variantų, skiriasi veikimo principu, tikslumu, dizainu. Skaitmeninis jutiklis DS18B20 yra vienas populiariausių temperatūros jutiklių, dažnai naudojamas vandeniui atspariame korpuse vandens ar kitų skysčių temperatūrai matuoti. Šiame straipsnyje rasite ds18b20 jutiklio aprašymą rusų kalba, kartu apsvarstysime prisijungimo prie arduino ypatybes, jutiklio veikimo principą, bibliotekų ir eskizų aprašymą.

DS18B20 yra skaitmeninis temperatūros jutiklis su daugybe naudingų funkcijų. Tiesą sakant, DS18B20 yra visas mikrovaldiklis, kuris gali saugoti matavimo vertę, signalizuoti temperatūrą, viršijančią nustatytas ribas (galime nustatyti ir keisti ribas), keisti matavimo tikslumą, sąveikos su valdikliu būdą ir daug daugiau. Visa tai labai mažoje pakuotėje, kuri yra ir vandeniui atspari versija.

DS18B20 temperatūros jutiklis turi įvairių korpusų tipų. Galite rinktis iš trijų – 8 kontaktų SO (150 mylių), 8 kontaktų µSOP ir 3 kontaktų TO-92. Pastarasis yra labiausiai paplitęs ir pagamintas specialiame vandeniui atspariame korpuse, kad būtų galima saugiai naudoti po vandeniu. Kiekvienas jutiklis turi 3 kontaktus. TO-92 korpusui reikia pažvelgti į laidų spalvą: juoda - įžeminimas, raudona - galia ir balta / geltona / mėlyna - signalas. Internetinėse parduotuvėse galite įsigyti jau paruoštą DS18B20 modulį.

Kur nusipirkti jutiklį

Natūralu, kad DS18B20 yra pigiausia įsigyti „Aliexpress“, nors jis taip pat parduodamas bet kuriose specializuotose Rusijos internetinėse parduotuvėse su „Arduino“. Štai keletas nuorodų su pavyzdžiais:

Jutiklių atmintis susideda iš dviejų tipų: veikiančios ir nepastovios – SRAM ir EEPROM. Pastarajame yra konfigūracijos registrai ir TH, TL registrai, kurie gali būti naudojami kaip bendrosios paskirties registrai, jei jie nenaudojami leistinų temperatūros verčių diapazonui nurodyti.

Pagrindinė DS18B20 užduotis yra nustatyti temperatūrą ir paversti rezultatą į skaitmeninę formą. Savarankiškai galime nustatyti reikiamą skiriamąją gebą, nustatydami tikslumo bitų skaičių – 9, 10, 11 ir 12. Tokiais atvejais raiškos bus atitinkamai lygios 0,5C, 0,25C, 0,125C ir 0,0625C.

Gauti temperatūros matavimai saugomi jutiklio SRAM. 1 ir 2 baitai saugo gautą temperatūros reikšmę, 3 ir 4 saugo matavimo ribas, 5 ir 6 yra rezervuoti, 7 ir 8 naudojami didelio tikslumo temperatūros aptikimui, paskutiniai 9 baitai saugo triukšmui atsparų CRC kodą.

DS18B20 prijungimas prie Arduino

DS18B20 yra skaitmeninis jutiklis. Skaitmeniniai jutikliai perduoda išmatuotos temperatūros reikšmę tam tikro dvejetainio kodo pavidalu, kuris tiekiamas į skaitmeninius ar analoginius arduino kaiščius ir vėliau iškoduojamas. Kodai gali būti labai skirtingi, ds18b20 veikia 1-Wire duomenų protokolu. Mes nesigilinsime į šio skaitmeninio protokolo detales, tik nurodysime būtinas minimumas suprasti sąveikos principus.

Keitimasis informacija 1 laidu vyksta dėl šių operacijų:

  • Inicializacija – signalų sekos, nuo kurios prasideda matavimas ir kitos operacijos, apibrėžimas. Pagrindinis įrenginys siunčia atstatymo impulsą, po kurio jutiklis turi duoti buvimo impulsą, rodantį, kad jis yra pasirengęs atlikti operaciją.
  • Duomenų rašymas – į jutiklį perduodamas duomenų baitas.
  • Duomenų skaitymas – iš jutiklio gaunamas baitas.

Norėdami dirbti su jutikliu, mums reikia programinės įrangos:

  • Arduino IDE
  • „OneWire“ biblioteka, jei naudojate kelis jutiklius magistralėje, galite naudoti „DallasTemperature“ biblioteką. Jis veiks „OneWire“ viršuje.

Iš įrangos jums reikės:

  • Vienas ar daugiau DS18B20 jutiklių;
  • Arduino mikrovaldiklis;
  • jungtys;
  • 4,7 kOhm rezistorius (jei prijungtas vienas jutiklis, eis rezistorius, kurio vertė nuo 4 iki 10K);
  • Grandinės plokštė;
  • USB laidas, skirtas prijungti prie kompiuterio.

Jutiklis prijungiamas prie Arduino UNO plokštės paprastai: GND nuo temperatūros jutiklio prijungiamas prie Arduino GND, Vdd prijungtas prie 5V, Duomenys prijungiami prie bet kurio skaitmeninio kaiščio.

Paprasčiausia skaitmeninio jutiklio DS18B20 prijungimo schema parodyta paveikslėlyje.

Eskizo informacijos apie temperatūrą gavimo algoritmas susideda iš šių veiksmų:

  • Jutiklio adreso nustatymas, jo prijungimo tikrinimas.
  • Jutikliui siunčiama komanda su reikalavimu nuskaityti temperatūrą ir įrašyti išmatuotą vertę į registrą. Procedūra užtrunka ilgiau nei kitos, trunka apie 750 ms.
  • Duojama komanda nuskaityti informaciją iš registro ir išsiųsti gautą reikšmę į "prievado monitorių",
  • Jei reikia, jis bus konvertuojamas į Celsijaus / Farenheito laipsnius.

Paprastas DS18B20 eskizo pavyzdys

Paprasčiausias eskizas dirbant su skaitmeniniu jutikliu yra toks. (eskize naudojame OneWire biblioteką, apie kurią plačiau pakalbėsime kiek vėliau).

#įtraukti /* * Sąveikos su skaitmeniniu jutikliu ds18b20 aprašymas * Ds18b20 prijungimas prie arduino per 8 kaištį */ OneWire ds(8); // Sukurkite OneWire objektą 1-Wire magistralei, kuri bus naudojama dirbti su jutikliu void setup()( Serial.begin(9600); ) void loop()( // Nustatykite temperatūrą iš DS18b20 jutiklio baito duomenys; // Temperatūros reikšmės vieta ds.reset(); // Pradėkite sąveiką iš naujo nustatydami visas ankstesnes komandas ir parametrus ds.write(0xCC); // Pasakykite DS18b20 jutikliui praleisti adreso paiešką. Mūsų atveju tik vienas įrenginys ds.write(0x44) ; // DS18b20 jutikliui duodame komandą matuoti temperatūrą. Pačios temperatūros reikšmės kol kas negauname - jutiklis įdės į vidinę atmintį delay(1000); // Mikroschema matuoja temperatūrą, o mes laukiame. ds.reset(); // Dabar ruošiamės gauti išmatuotos temperatūros reikšmę ds.write(0xCC); ds.write(0xBE); // Atsiųskite mums vertę registrai su temperatūros reikšme // Gaukite ir perskaitykite atsakymo duomenis = ds.read(); // Nuskaitykite žemą temperatūros reikšmės duomenų baitą = ds.read(); // O dabar senesnis // Sudarant galutinė vertė ty: // - pirmiausia "priklijuokite" reikšmę, // - tada padauginkite ją iš koeficiento, atitinkančio skiriamąją gebą (12 bitų numatytoji vertė yra 0,0625) plūduriuojanti temperatūra = ((duomenys)<< 8) | data) * 0.0625; // Выводим полученное значение температуры в монитор порта Serial.println(temperature); }

Eskizas darbui su ds18b20 jutikliu nedelsiant

Galite šiek tiek apsunkinti ds18b20 programą, kad atsikratytumėte eskizo sulėtėjimo.

#įtraukti OneWire ds(8); // OneWire objekto vidinė temperatūra = 0; // Visuotinis kintamasis, skirtas temperatūros vertei iš DS18B20 jutiklio saugoti long lastUpdateTime = 0; // Kintamasis, skirtas išsaugoti paskutinio jutiklio skaitymo laiką const int TEMP_UPDATE_TIME = 1000; // Nustatykite tikrinimų dažnumą void setup()( Serial.begin(9600); ) void loop()( detectTemperature(); // Nustatykite temperatūrą iš DS18b20 jutiklio Serial.println(temperature); // Išspausdinkite gautą temperatūros reikšmė // T (kadangi temperatūros kintamasis yra int tipo, trupmeninė dalis bus tiesiog išmesta) int detectTemperature()(baitų duomenys; ds.reset(); ds.write(0xCC); ds.write(0x44) ; if (millis() - paskutinio atnaujinimo laikas > TEMP_ATNAUJINIMO_TIME) ( lastUpdateTime = millis(); ds.reset(); ds.write(0xCC); ds.write(0xBE); data = ds.read(); duomenys = ds. read(); // Sugeneruoti reikšmę temperatūra = (duomenys<< 8) + data; temperature = temperature >> 4; } }

DallasTemperature Library ir DS18b20

Savo eskizuose galime naudoti DallasTemperature biblioteką, kuri supaprastina kai kuriuos darbo su ds18b20 jutikliu per 1 laidą aspektus. Eskizo pavyzdys:

#įtraukti // Arduino kaiščio numeris su prijungtu jutikliu #define PIN_DS18B20 8 // Sukurti objektą OneWire OneWire oneWire(PIN_DS18B20); // Sukurkite objektą DallasTemperature, skirtą darbui su jutikliais, perduodant jam nuorodą į objektą, skirtą darbui su 1 laidu. Dalaso temperatūros dalaso jutikliai (&oneWire); // Specialus objektas įrenginio adresui saugoti DeviceAddress sensorAddress; void loop(void)( // Temperatūros jutiklio matavimų užklausa Serial.print("Matuojama temperatūra..."); dallasSensors.requestTemperatures(); // Prašymas ds18b20 rinkti duomenis Serial.println("Atlikta"); // Prašymas gauti išsaugotą temperatūros reikšmę printTemperature(sensorAddress); // Delsimas, kad būtų galima ką nors išanalizuoti ekrane delay(1000); ) // Pagalbinė įrenginio temperatūros vertės spausdinimo funkcija void printTemperature(DeviceAddress deviceAddress)( float tempC = dallasSensors.getTempC(deviceAddress); Serial.print("Temp C: "); Serial.println(tempC); ) // Pagalbinė funkcija, rodanti jutiklio adresą ds18b20 void printAddress(DeviceAddress deviceAddress)( for (uint8_t i = 0) ; i< 8; i++) { if (deviceAddress[i] < 16) Serial.print("0"); Serial.print(deviceAddress[i], HEX); } }

OneWire biblioteka, skirta darbui su DS18B20

DS18B20 naudoja 1-wire protokolą, kad keistųsi informacija su arduino, kuriam jau parašyta puiki biblioteka. Galite ir turėtumėte jį naudoti, kad nenaudotumėte visų funkcijų rankiniu būdu. . Norėdami įdiegti biblioteką, atsisiųskite archyvą, išpakuokite jį į savo Arduino katalogo bibliotekos aplanką. Biblioteka įtraukiama naudojant komandą #include

Visi DS18B20 jutikliai sujungti lygiagrečiai, visiems užtenka vieno rezistoriaus. Naudodami OneWire biblioteką galite vienu metu nuskaityti visus duomenis iš visų jutiklių. Jei prijungtų jutiklių skaičius yra didesnis nei 10, turite pasirinkti rezistorių, kurio varža ne didesnė kaip 1,6 kOhm. Be to, norint tiksliau išmatuoti temperatūrą, tarp Arduino plokštės duomenų išvesties ir kiekvieno jutiklio duomenų reikia įdėti papildomą 100 ... 120 omų rezistorių. Galite sužinoti, iš kurio jutiklio buvo gauta tam tikra reikšmė, naudodami unikalų 64 bitų serijos kodą, kuris bus išduotas vykdant programą.

Norėdami prijungti temperatūros jutiklius įprastu režimu, turite naudoti diagramą, parodytą paveikslėlyje.

išvadų

Dallas DS18B20 lustas yra labai įdomus prietaisas. Temperatūros jutikliai ir jais pagrįsti termometrai pasižymi daugeliui užduočių priimtinomis charakteristikomis, pažangiomis funkcijomis ir yra palyginti nebrangūs. DS18B20 ypač išpopuliarėjo kaip vandeniui atsparus prietaisas skysčių temperatūrai matuoti.

Už papildomas funkcijas turite mokėti už santykinį darbo su jutikliu sudėtingumą. Norint prijungti DS18B20, mums tikrai reikės maždaug 5K nominalo rezistoriaus. Norėdami dirbti su jutikliu „Arduino“ eskizuose, turite įdiegti papildomą biblioteką ir įgyti tam tikrų įgūdžių dirbti su juo - ten viskas nėra visiškai trivialu. Tačiau galite nusipirkti paruoštą modulį, o eskizui daugeliu atvejų pakaks paprastų pavyzdžių, pateiktų šiame straipsnyje.

Tiriant mikrovaldiklius, anksčiau ar vėliau atsiranda būtinybė išmatuoti tokį meteorologinį parametrą aplinką kaip jos temperatūra. Šiuolaikinė pasaulinė elektroninių komponentų rinka siūlo platų temperatūros jutiklių asortimentą. Pagrindiniai skirtumai tarp jų yra išmatuotos temperatūros diapazone, maitinimo įtampa, taikymo srityje, bendruose matmenyse, temperatūros keitimo būdais, sąsaja sąveikai su vartotojo valdymo sistema. Taip istoriškai susiklostė, kad šiuo metu vienas populiariausių temperatūros jutiklių yra jutiklis DS18B20 Dallas Semiconductor Corp. Toliau pateikiama istorija apie jį.

DS18B20– skaitmeninis temperatūros jutiklis su programuojama konvertavimo raiška.

Skiriamieji bruožai:

1) 1 laidų sąsajos duomenų magistralės naudojimas sąveikai su valdymo sistema;
2) unikalaus 64 bitų serijinio identifikavimo kodo, esančio vidinėje ROM atmintyje, buvimą, skirtą daugiataškėms sistemoms, kur reikia kreiptis į konkretų jutiklį;
3) Maitinimo įtampa yra 3-5,5 V, todėl ją galima naudoti ne tik 5 voltų sistemose, bet ir 3,3 (dauguma mikrovaldiklių);
4) Matuojamos temperatūros diapazonas -55…+125 о С;
5) Tikslumas ± 0,5 ° C, nors tai galioja tik diapazonui -10 ... + 85 ° C;
6) Konversijos skiriamąją gebą nustato vartotojas ir yra 9…12 bitų;
7) Turi vidinius viršutinės ir apatinės slenksčių trigerių registrus generuojant pavojaus signalą sistemoms naudojant termostatinę veikimo logiką;
8) Šie jutikliai yra suderinami su programine įranga DS1822 ir yra plačiai naudojami pramoniniuose termostatiniuose valdikliuose, pramoninėse sistemose, plataus vartojimo elektronikoje ir kitose temperatūrai jautriose sistemose.

Prietaiso aprašymas ir veikimo principas:

Savo straipsnyje aprašysiu darbo su jutikliu, pagamintu TO-92 pakuotėje, pavyzdį.

Tai atrodo taip:

Viduje šis daiktas išdėstytas labai paprastai, pažiūrėkite patys:

Pažvelkime atidžiau į šią blokinę schemą.

Tačiau maitinimas tokiu būdu įveda tam tikrus jutiklio laiko parametrų apribojimus. Kurį laiką palaikius duomenų liniją, kondensatorius išsikraus, o tai lems VIDINĖS Vdd linijos ir atitinkamai viso jutiklio išjungimą. Todėl nepanaudotu laiku DQ linija turi būti laikoma aukštai. Reikėtų atkreipti dėmesį į vieną svarbią pastabą. Konvertuojant temperatūrą ir kopijuojant duomenis iš Scratchpad į EEPROM (į vieną iš registrų), INTERNAL Vdd linijos suvartojama srovė gali siekti 1,5 mA, o tai nepakeliama vidiniam kondensatoriui, o traukiant labai nukris įtampa. rezistorius, kuris nepriimtinai paveiks įrenginio veikimą apskritai. Norėdami tai padaryti, būtina organizuoti DQ linijas pagal galingą ištraukimo schemą, įgyvendintą pagal šią schemą:

Išdavus komandą PaverstiT arba KopijuotiBloknotėlis reikia įjungti galingą DQ linijos patraukimą su MOSFET tranzistoriumi ne vėliau kaip per 10 μs (max), pasak jutiklių kūrėjų, o tada laukti konversijos laiko (Tconv) arba duomenų perdavimo laiko (Twr). = 10 ms), ir šiuo metu jokių veiksmų nesiimama, kai galingas prisitraukimas yra DQ linijoje, neturėtų būti!

Mažai ką reikia pasakyti apie standartinę galią, nes čia viskas paprasta ir net MOSFET visai nereikia:

„64 BIT ROM IR 1-Wire PORT“ posistemyje yra unikalus 64 bitų serijinis identifikavimo kodas, esantis nepastovioje ROM atmintyje, o šiame mazge taip pat yra sąsaja, skirta sąveikai su 1 laidų valdymo sistema. „Memory Control Logic“ posistemis vykdo duomenų perdavimą tarp 1 laidų sąsajos posistemio ir „Scratchpad“ tipo atminties, kuri savo ruožtu turi prieigą prie temperatūros jutiklių registrų, viršutinės ir apatinės aliarmo slenksčių nustatymo registrų, konfigūracijos. registro ir generatoriaus registro 8 bitų kontrolinė suma, siekiant apsaugoti sistemą nuo neteisingų duomenų.

Kai įjungtas, jutiklis pagal numatytuosius nustatymus nustato 12 bitų konvertavimo skiriamąją gebą ir iškart pereina į mažos galios režimą. Norėdami pradėti konvertavimą, pagrindinis vadovas turi išsiųsti komandą PaverstiT . Konvertavus temperatūrą į skaitmeninį kodą, šis kodas išsaugomas bloknoto atmintyje kaip dviejų baitų žodis, o jutiklis vėl persijungia į energijos taupymo režimą.

Temperatūros konvertavimas.

Dabar išsiaiškinkime, kaip temperatūra konvertuojama jutiklyje. Tiesą sakant, ADC yra pačiame temperatūros jutiklio viduje, o išvesties duomenys, esantys temperatūros registre, perduodami į bloknoto atmintį. Temperatūros duomenys pateikiami tokiu formatu:

S vėliavėlė yra ženklo vėliavėlė, naudojama nurodyti skaičiaus ženklą (S = 0 yra skaičius, esantis 10-0 bituose, yra teigiamas, o S = 1, jei skaičius, esantis tuose pačiuose bituose, yra neigiamas, t. y. Ši byla temperatūra pavaizduota dviejų komplemento kodu (dviejų komplemento kodu)).

Nustačius 12 bitų konvertavimo skiriamąją gebą, visi 12 bitų (11 bitų 0) yra įjungti ir juose yra tinkamų duomenų. Nustačius 11 bitų, 0 bito turinio reikia nepaisyti, kai nustatyta 10 bitų, į 0 ir 1 bitus neatsižvelgti ir pan.

Pavojaus signalas yra termostato funkcija.

Tam yra numatyti 2 8 bitų registrai Th ir Tl. Th yra viršutinės temperatūros slenksčio reikšmė, o Tl - atitinkamai apatinė. Jei temperatūra viršija Th arba žemiau Tl, nustatoma pavojaus vėliavėlė. Šią aliarmo vėliavėlę aptinka šeimininkas, išduodamas komandą Signalizacijos paieška prie DQ linijos. Aliarmo vėliavėlė atnaujinama po kiekvienos temperatūros keitimo operacijos. Beje, naudojami tik 11–4 temperatūros registro bitai, palyginti su Th arba Tl registru, o tai reiškia, kad termostato funkcija veikia tik esant sveikoms temperatūroms. Registrai fiziškai yra EEPROM atmintis, todėl išjungiant maitinimą jie išlaiko savo reikšmes. Patys registrai yra panašūs į temperatūros registrą, tik jie yra 8 bitų, S vėliavėlė turi lygiai tokią pačią reikšmę kaip ir ankstesniu atveju:

Šis kodas, kaip minėta anksčiau, yra būtinas kiekvienam linijos įrenginiui identifikuoti kelių taškų temperatūros matavimo sistemose.

Šios atminties formatas yra toks:

Apatiniai 8 bitai yra skirti šeimos pavadinimui ir juose yra reikšmė 0x28. Kituose 48 bituose yra unikalus įrenginio serijos numeris. Reikšmingiausiame baite yra CRC kontrolinės sumos reikšmė, apskaičiuota žemesniems 56 ROM atminties bitams.

Atminties organizavimas.

Siųstuvo atmintį sudaro „Scratchpad“ atminties vieta ir EEPROM, skirta konfigūracijos duomenims ir aukšto bei žemo pavojaus signalo registro reikšmėms saugoti.

Kai maitinimas išjungiamas, 2, 3 ir 4 duomenų baitai išlaiko savo vertę EEPROM. Na, o įjungus vertė juose išlieka nepakitusi. 0 ir 1 baituose yra konvertuotos temperatūros reikšmė, 5, 6, 7 baitai yra rezervuoti vidiniam naudojimui ir vartotojas negali jų pasiekti savo poreikiams.

8-ajame baite yra reikšmė, sugeneruota integruotos CRC generavimo logikos 0–7 baitams, o tai sumažina klaidingų temperatūros rodmenų galimybę.

Pažymėtina, kad jei nenaudojama termostato funkcija, tuomet Th ir Tl registrai gali būti naudojami kaip bendrosios paskirties atmintis – juose galite saugoti bet kokią informaciją.

Duomenys įrašomi į 2, 3 ir 4 baitus, pradedant mažiausiai reikšmingu 2 baito bitu, naudojant instrukcijas Rašykite bloknotą. Norėdami patikrinti įrašytų duomenų vientisumą, galite juos perskaityti, tam reikia nusiųsti komandą jutikliui Skaitykite bloknotą, po kurio pagrindinis įrenginys turėtų gauti duomenis, pradedant nuo mažiausiai reikšmingo 0 baito bito.

Kad EEPROM atmintyje būtų saugomi termostato aukštų ir žemų registrų duomenys, taip pat konfigūracijos registras, pagrindinis įrenginys turi nusiųsti komandą jutikliui. Nukopijuokite bloknotą.

Kaip minėta anksčiau, į EEPROM įrašyti duomenys išsaugomi, kai išjungiamas maitinimas. Tačiau įjungus maitinimą, vertės iš atitinkamų EEPROM langelių automatiškai įkeliamos į atitinkamus bloknoto atminties registrus. Patogu, ar ne? :)

Be to, į EEPROM įrašytus duomenis galima bet kada perrašyti į bloknoto atmintį. Tai būtina, pavyzdžiui, kai eksploatacijos metu pakeičiate konfigūraciją, o tada reikia pereiti į „įprastą režimą“, t.y. grąžinti operacijos konfigūraciją, kuri buvo prieš keičiant bloknoto atminties registrų turinį. Tiesą sakant, tam pagrindinis įrenginys turi nusiųsti komandą jutikliui Prisiminkite E2 .

Konfigūracijos registre vartotojas gali apibrėžti tik 2 bitus: R0 ir R1. Šie bitai nustato temperatūros konvertavimo skiriamąją gebą ir pagal numatytuosius nustatymus yra 1, o tai yra pradinis 12 bitų konvertavimo skyros nustatymas.

Visos galimos šių bitų konfigūracijos ir atitinkami leidimai pateikiami toliau esančioje lentelėje. Pažymėtina, kad kuo didesnė konvertavimo skiriamoji geba, tuo ilgesnis konvertavimo laikas, pavyzdžiui, 12 bitų raiškai konvertavimo laikas yra 750 ms (maks.).

Sąveika su valdymo sistema.

Kaip minėta anksčiau, DS18B20 naudoja 1 laidų sąsajos duomenų magistralę, kad galėtų susisiekti su pagalbiniu įrenginiu. Todėl, norint jį prijungti, valdymo sistema turi pateikti išėjimą su atviru nutekėjimu arba su Hi-Z linijos būsena.

Vidinė jutiklio sąsajos konfigūracija parodyta žemiau:

Neaktyvioje būsenoje (tuščiosios eigos būsena) DQ linija ištraukiama rezistorius į „+“ maitinimo šaltinį. Taigi tarp operacijų (duomenų perdavimo) ši eilutė visada turi būti tokia. Jei dėl kokios nors priežasties operacijos turi būti sustabdytos, DQ eilutė turi būti aukšta, kad šis perkėlimas būtų atnaujintas. Sustabdydami operaciją galime išlaikyti DQ eilutę aukštame loginiame lygyje tiek, kiek norime, pradedant nuo 1 µs. Tačiau jei duomenų magistralė yra žema ilgiau nei 480 µs, visi šioje magistralėje esantys jutikliai bus nustatyti iš naujo.

Mainų operacijų seka.

Kiekvieną kartą, kai valdymo sistema pasiekia jutiklį, reikia laikytis šios veiksmų sekos:

1) Inicializavimas;
2) ROM komanda (po to reikia keistis duomenimis);
3) Jutiklio funkcijos komanda (po to reikalingas ryšys).

Jei prieiti prie jutiklio nėra žingsnio, jutiklis nereaguos. Išimtis yra komandos PaieškaROM [ F0 h] ir SignalizacijaPaieška [ ECH] , po jų vykdymo kapitonas turi grįžti į pirmąjį valdymo sekos žingsnį.

Taigi. Visos operacijos prasideda inicijavimu. Po šios operacijos valdiklis generuoja atstatymo impulsą, pagal kurį pavaldiniai (šiuo atveju jutiklis (-iai)) perduoda buvimo impulsą pagrindiniam įrenginiui, kuris praneša, kad jutikliai yra prijungti ir paruošti darbui. operacija.

Apskritai, daviklyje įdiegta 1-Wire sąsajos magistralė apibrėžia kelių tipų signalus duomenų linijoje: atstatymo impulsas, buvimo impulsas, rašymas 0, rašymas 1, skaitymas 0, skaitymas 1. Visas šias operacijas atlieka pagrindinis įrenginys. , išskyrus buvimo pulsą. Jį formuoja tik jutiklis (-ai).

Taigi, pradedantiesiems, pagrindinis įrenginys pereina į siųstuvo režimą ir nustato DQ eilutę į 0 mažiausiai 480 µs (paryškinta juoda spalva). Tai iš naujo nustato jutiklį. Tada linija turi būti atlaisvinta ir pagrindinis įrenginys turi būti įjungtas į imtuvo režimą, o ištraukimo rezistorius nustatys duomenų liniją į aukštą loginį lygį (paryškinta plona juoda spalva). Kai jutiklis pajus kylantį kraštą, jutiklis palauks 15–60 µs ir iš naujo nustatys duomenų liniją į 0 su savo aparatinės įrangos sąsaja ir išlaikys ją 60–240 µs. Praėjus šiam laikui, jutiklis atleis liniją ir bus nustatytas į loginį 1 lygį mažiausiai 480 µs po to, kai jutiklis aptiks atstatymo impulsą.

Dabar pakalbėkime apie tai, kaip atliekamas duomenų perdavimo procesas. Paprastai bitų perkėlimas. Esmė tokia. Paimamas tam tikras laiko tarpas ir per tą laiką meistras pažiūri, ką turime eilutėje, tarkime 1 – tai reiškia, kad užsirašėme 1, jei 0 – tai reiškia, kad užsirašėme nulį. Bet tai tik abstraktus paaiškinimas. Tiesą sakant, yra keletas niuansų, susijusių su viso šio atvejo terminu.

Žiūrėti paveikslėlius:

Viskas prasideda nuo to, kad kapitonas turi nuleisti duomenų liniją iki logiškai žemo lygio, o nuo to momento prasideda 1/0 rašymo / skaitymo lizdas, trunkantis nuo 60 iki 120 μs. Tarp rašymo / skaitymo lizdų duomenų eilutė turi būti nustatyta į 1 ne trumpesnį kaip atkūrimo laiką (1 μs). Norint organizuoti 0 rašymo lizdą, reikia visą lizdo laiką laikyti duomenų eilutę ties 0, bet jei reikia rašyti į jutiklį 1, tada pirmiausia iš naujo nustatykite duomenų eilutę į 0, tada palaukite bent 1 μs ir atleiskite eilutę ties 1, rašymo lizdo metu 1 (60–120 µs) į jutiklį įrašys 1 (žr. viršutinį dešinįjį paveikslą).

Tiesą sakant, jei duomenų eilutėje aptinkamas 1 per 15-60 µs nuo pradžios, tada bus parašytas 1, o jei 0 aptinkamas per 60-240 µs, tada bus parašytas 0.

Duomenų nuskaitymą lydi pagrindinis įrenginys, kai atstato liniją, laukia bent 1 µs, o 15 µs žiūri, kas vyksta linijoje: jei lieka 0, tai jutiklis perduoda 0, jei perjungė į 1, tada buvo perduotas 1.

Komandos.

ROM komandos.

Šios komandos turi atitikti inicijavimo seką, jose turi būti instrukcijos, kaip rasti tinkamą jutiklį ir pan. Kiekvienos komandos talpa yra 8 bitai. Įvykdę atitinkamą komandą, jutikliui galite nusiųsti funkcijos komandą.

PAIEŠKOS ROM

Iš pradžių prijungus sistemą, ji turi atpažinti visus prie magistralės prijungtus įrenginius. Tam ir skirta ši komanda. Tačiau, kadangi turime tik vieną jutiklį, šios komandos nenaudosime.

SKAITYTI ROM

Ši komanda naudojama tik tada, kai magistralėje yra tik vienas jutiklis. Tai leidžia pagrindiniam įrenginiui nuskaityti 64 bitų ROM atminties turinį nenaudojant paieškos komandos. Ir jei bandysite naudoti šią komandą su daugiau nei 1 prijungtu jutikliu, visi jie pradės perduoti šios atminties turinį, o tai sukels nepageidaujamų pasekmių.

MATCH ROM

Tai yra ROM atitikimo komanda. Meistras išleidžia 64 bitus atitinkamo jutiklio, prijungto prie magistralės, ROM, ir jis jau nustato, ką su juo daryti (matuoti temperatūrą ir pan.). Kiti autobuso jutikliai šiuo metu lauks savo eilės.

PRALEISTI ROM

Tai yra ROM praleidimo komanda. Neatsižvelgiama į kurio nors konkretaus jutiklio adresą magistralėje, bet adresai visi iš karto. Po šios komandos galite išduoti, pavyzdžiui, temperatūros konvertavimo komandą ir visi jutikliai pradės konvertavimą. Tačiau iškvietus šią komandą, išdavus skaitymo atminties komandą, rezultatai bus nenuspėjami (nes visi jutikliai duomenis perduos vienu metu). Tai reiškia, kad tik su vienu prijungtu jutikliu tokia situacija yra įmanoma.

ALARM PAIEŠKA

Ši komanda yra identiška pirmajai šioje lentelėje, išskyrus tai, kad ji ieško jutiklių magistralėje su nustatyta aliarmo vėliavėle.

funkcines komandas.

Šios komandos atlieka bet kokių procesų funkcines operacijas, pavyzdžiui, temperatūros konvertavimo operacijos paleidimą, atminties kopijavimą ir pan. Iš viso yra 6 komandos, kiekvieno bito ilgis yra 8 bitai.

KONVERTUOTI T

Pradėti temperatūros keitimą. Įvykdžius šią komandą, į temperatūros registrą įvedami 2 baitų duomenys.

RAŠYKITE BLOKŠTELĮ

Įrašo duomenis į 2-4 registrus, pradedant nuo antrojo mažiausiai reikšmingo bito. Perkeliant duomenis į tris registrus reikia pasirūpinti, kad meistras nenustatytų jutiklių, nes galimas duomenų praradimas.

SKAITYKITE SKILTELĮ

Pradeda duomenų perdavimo procesą visuose bloknoto atminties registruose, pradedant žemu 0 baito bitu ir baigiant 8 baito aukštuoju bitu (CRC).

KOPIJUOTI SKELDINĮ

Ši instrukcija nukopijuoja 2, 3 ir 4 baitų registrų turinį į atitinkamas EEPROM vietas.

PRISIMINTI E2

Ši komanda nukopijuoja duomenis iš EEPROM į atitinkamas bloknoto vietas. Kaip minėta anksčiau, ši operacija atliekama automatiškai, kai įjungiamas maitinimas.

SKAITYTI MAITINIMO TIEKIMĄ

Tiesą sakant, tai yra visa darbo su DS18B20 temperatūros jutikliu išmintis. Išsamesnės informacijos ieškokite duomenų lape (). Dabar reikia visą šį verslą įgyvendinti geležyje.

Scheminė įrenginio schema:

Spausdintinės plokštės surinkimo brėžinys (atsiprašau už kokybę, ką tik padariau, kad veiktų, dėl derinimo):

Nepamirškite tinkamai atspindėti lentos

Kadangi tai yra duonos lenta, aš ją ištraukiau iš seno projekto, todėl aukščiau esanti lenta šiek tiek skiriasi nuo turimos (manojoje dabar pašalinau viską, kas nereikalinga, ir ji tapo lygiai tokia, kaip aukščiau esančiose nuotraukose).

Štai kas man atsitiko:

Paaiškėjo, kad tai sumuštinis

Programos šaltinio kodas buvo parašytas kūrimo aplinkoje. Nebandžiau išnaudoti maksimalaus gatavų avr-gcc kompiliatorių bibliotekų, bet viską rašiau, kaip sakoma, „ranka“. Mano tikslas nėra pademonstruoti C virtuoziškumą, o tik per valandą parašytas pavyzdys, galintis suteikti pradedantiesiems bendrą idėją apie darbą su jutikliu.
Prietaisas skirtas naudoti patalpoje, todėl nenumatytas neigiamų temperatūrų matavimas.

Atsisiųskite šaltinius ir spausdintinės plokštės LAY galite žemiau

Bet kokių papildomų klausimų ar pasiūlymų laukiame adresu: [apsaugotas el. paštas]

Šis jutiklis naudoja išskirtinai 1-Wire protokolą – tai sudaro ryšį, kuris bendrauja magistrale naudodamas tik vieną valdymo signalą. Magistralė turi būti prijungta prie maitinimo šaltinio per traukimo rezistorių.

Specifikacijos DS18B20
ParametrasReikšmė
IC išvesties tipasSkaitmeninis
Jutimo tikslumo diapazonas± 0,5°C
temperatūros jutimo diapazonas-55°C iki +125°C
maitinimo srovė1mA
Maitinimo įtampos diapazonasNuo 3 V iki 5,5 V
Rezoliucija (bitai)9...12
Jutiklio korpuso stiliusTO-92
ne. iš Smeigtukų3
bazinis numeris18
Darbinė temperatūra Maks85°C
Darbinė temperatūra min-10°C
Darbo temperatūros diapazonas-10°C iki +85°C
išėjimo srovė4mA
išvesties tipasSkaitmeninis
Pakuotė / DėklasTO-92
Rezoliucija9...12
Jutiklio / keitiklio tipastemperatūros
Maitinimo įtampa Maks5,5 V
Maitinimo įtampa min3V
Nutraukimo tipasSkylė
Darbinė temperatūra, °С0...+55
Santykinė veikimo drėgmė, %...55
GamybaDalasas / Maksimas
Garantinis veikimo laikotarpis12 mėnesių nuo pirkimo datos
Svoris, g10

DS1820, DS18S20, DS18B20- populiarūs skaitmeniniai temperatūros jutikliai iš DALLAS-MAXIM su vieno laido 1 laido sąsaja. Dėl šių skaitmeninių šiluminių jutiklių ženklinimo dviprasmiškumo ir grandinių gausos, pasirodžiusios radijo mėgėjų literatūroje, manome, kad būtina pateikti keletą paaiškinimų.
Chip DS1820 nutrauktas o jį pakeisti rekomenduojama mikroschema DS18S20. Tačiau reikia pažymėti, kad mikroschemos DS18S20 TO-92 pakuotėje yra paženklinti "DS1820" (be S raidės). Naujas čipas DS18S20 programinė įranga suderinama su senu DS1820 ir, pasak gamintojo, daugeliu atvejų tai gali būti tiesioginis senojo DS1820 pakaitalas. Galbūt gamintojas norėjo nurodyti šį suderinamumą, pažymėdamas be raidės S. Naujojo DS18S20 programinės įrangos suderinamumas su senuoju DS1820 garantuojamas, jei programa naudoja algoritmą iš duomenų lapo.
Kaip matyti iš lentelės, naujasis DS18S20 lustas pagamintas standartinėje TO-92 pakuotėje, o senasis DS1820 turėjo pailgą pakuotę. Tuo remdamiesi taip pat galite įsitikinti, kad pardavėjai jūsų „nestumia“ su pasenusia mikroschema.
DS18B20 lustas visada turi atitinkamą žymėjimą "DS18B20" ir negalima pakeisti į DS1820/DS18S20 ir atvirkščiai, nepakeitus programos kodo.

Specifikacijos skaitmeniniai jutikliai Maksimalios temperatūros
Jutiklio tipasDS1820 DS18S20DS18B20
ŽymėjimasDS1820 DS1820DS18B20
RėmasPR-35
(pratęsimas TO-92)
TO-92TO-92
Bitelio gylis9 bitų 9 bitų9...12 bitų
Konversijos laikas200 mS (tip.)
500nS (maks.)
750 nS (maks.)750nS (maks.)
Matavimo tikslumas ±0,5 %
temperatūros diapazone
0 ….+70°С -10 ….+85°С-10 ….+85°С
Maitinimo įtampa
matavimo tikslumui ±0,5 %
4,3-5,5 V 3,0-5,5 V3,0-5,5 V
apibūdinimas

Straipsnyje numatyta Išsamus aprašymas integruotas temperatūros jutiklis DS18B20 rusų kalba. Informacija išversta į rusų kalbą iš oficialios jutiklių gamintojo „Dallas Semiconductor“ dokumentacijos.

Bendras aprašymas.

DS18B20 yra skaitmeninis skaitiklis temperatūra, su 9–12 skaitmenų konvertavimo skiriamąja geba ir temperatūros stebėjimo aliarmo funkcija. Valdymo parametrus gali nustatyti vartotojas ir saugoti nepastovioje jutiklio atmintyje.

DS18B20 bendrauja su mikrovaldikliu per vieno laido ryšio liniją, naudodamas 1 laidų sąsajos protokolą.

Temperatūros matavimo diapazonas yra nuo -55 iki +125 °C. Diapazone nuo -10 iki +85 °C paklaida neviršija 0,5 °C.

Kiekvienas DS18B20 lustas turi unikalų 64 bitų serijinį kodą, kuris leidžia prie vienos bendros ryšio linijos prijungti kelis jutiklius. Tie. per vieną mikrovaldiklio prievadą galima keistis duomenimis su keliais davikliais, paskirstytais dideliu atstumu. Režimas itin patogus naudoti aplinkos valdymo sistemose, temperatūros stebėjimui pastatuose, įrangos mazguose.

Trumpai apie DS18B20 funkcijas.

  • Vieno laido 1 laidų sąsajai pakanka vieno ryšio prievado su valdikliu.
  • Kiekvienas įrenginys turi unikalų 64 bitų serijos kodą.
  • Galimybė per vieną ryšio liniją sujungti kelis jutiklius.
  • Nereikia išorinių komponentų.
  • Galimybė gauti energiją tiesiai iš ryšio linijos. Maitinimo įtampa 3,0 V ... 5,5 V ribose.
  • Temperatūros matavimo diapazonas -55 ... +125 °C.
  • Paklaida neviršija 0,5 °C intervale -10 ... +85 °C.
  • Konversijos raiška 9 ... 12 bitų. Nustatyta vartotojo.
  • Matavimo laikas neviršija 750 ms, maksimali galima 12 bitų skiriamoji geba.
  • Galimybė programuoti signalizacijos parametrus.
  • Pavojaus signalas perduoda duomenis apie jutiklio, kurio temperatūra yra už nurodytų ribų, adresą.
  • Programinės įrangos suderinamumas su DS1822.
  • Itin plačios pritaikymo sritys.

Išvadų skyrimas.

DS18B20 jutiklio apžvalga.

1 paveiksle yra DS18B20 jutiklio blokinė schema. 64 bitų ROM saugo unikalų įrenginio serijos kodą. RAM yra:

  • išmatuota temperatūros reikšmė (2 baitai);
  • viršutinė ir apatinė pavojaus slenksčiai (Th, Tl);
  • konfigūracijos registras (1 baitas).

Konfigūracijos registre galite nustatyti temperatūros jutiklio konvertavimo skiriamąją gebą. Rezoliucija gali būti nustatyta į 9, 10, 11 arba 12 bitų. Konfigūracijos registras ir aliarmo slenksčiai yra saugomi nepastovioje atmintyje (EEPROM).

Režimas – temperatūros matavimas.

Pagrindinė DS18B20 funkcija yra konvertuoti jutiklio temperatūrą į skaitmeninį kodą. Konversijos skiriamoji geba nustatyta į 9, 10, 11 arba 12 bitų. Tai atitinka 0,5 (1/2) °C, 0,25 (1/4) °C, 0,125 (1/8) °C ir 0,0625 (1/16) °C skiriamąją gebą. Įjungus maitinimą, konfigūracijos registro būsena nustatoma į 12 bitų skiriamąją gebą.

Įjungus maitinimą, DS18B20 yra mažos galios ramybės būsenoje. Norėdami pradėti temperatūros matavimą, pagrindinis (mikrovaldiklis) turi išduoti komandą TEMPERATURE CONVERSION. Baigus konvertuoti, temperatūros matavimo rezultatas bus 2 temperatūros registro baitai, o jutiklis vėl sustos.

Jei DS18B20 prijungtas pagal schemą su išorinis maitinimo šaltinis, šeimininkas gali stebėti konvertavimo komandos būseną. Norėdami tai padaryti, ji turi nuskaityti eilutės būseną (atlikti laikiną skaitymo lizdą), įvykdžius komandą, eilutė pereis į aukštą būseną. Vykdant konvertavimo komandą, eilutė yra žemai.

DS18B20 matuoja temperatūrą Celsijaus laipsniais. Matavimo rezultatas pateikiamas kaip 16 bitų, pasirašytas skaičius papildomame kode (2 pav.) . Ženklo bitas (S) yra 0 teigiamiems skaičiams ir 1 neigiamiems skaičiams. 12 bitų raiškos temperatūros registre yra visi reikšmingi bitai, t.y. turi galiojančias vertes. Jei skiriamoji geba yra 11 bitų, 0 bitas neapibrėžtas. 10 bitų raiškos bitai 0, 1 neapibrėžti. Esant 9 bitų skyrai, 0, 1 ir 2 bitai turi neteisingą reikšmę. 2 lentelėje parodyta pavyzdžiai, kaip skaitmeniniai kodai atitinka temperatūros reikšmę.

Žmonėms, kurie nėra patyrę dvejetainėje matematikoje, parašysiu, kad norint apskaičiuoti reikiamą temperatūrą:

  • At teigiama vertė(S=0) Konvertuokite kodą į dešimtainį skaičių ir padauginkite iš 0,0625 °C.
  • Turėdami neigiamą reikšmę (S=1), pirmiausia turite konvertuoti dviejų komplemento kodą į tiesioginį. Norėdami tai padaryti, apverskite kiekvieną dvejetainio kodo skaitmenį ir pridėkite 1. Tada konvertuokite į dešimtainį skaičių ir padauginkite iš 0,0625 ° C.

Režimas – pavojaus signalo perdavimas.

Įvykdžius temperatūros keitimo komandą, išmatuota vertė lyginama su viršutine ir apatine slenksčiais iš Th, Tl registrų (formatas 3 pav.). Tai yra baitų reikšmės, pasirašytos dviejų komplemente, S=0 reiškia, kad skaičius yra teigiamas, o S=1 reiškia neigiamą. Slenkstinės reikšmės saugomos nepastovioje atmintyje (EEPROM). Th ir Tl galima skaityti ir rašyti per 2, 3 RAM baitus. Daugiau apie tai skiltyje.

Dėl skirtingų TH, TL ir temperatūros registrų ilgių jie lyginami tik su 11–4 temperatūros registro bitais. Jei išmatuotos temperatūros vertė viršija TH arba yra mažesnė už TL, DS18B20 generuojamas aliarmo simptomas. Atributas perrašomas su kiekvienu temperatūros matavimu ir, jei temperatūra grįžta į nurodytas ribas, nustatoma iš naujo.

Valdytojas gali patikrinti pavojaus simptomo būseną naudodamas komandą SEARCH FOR ALARM. Bet kuris jutiklis su aktyvia vėliava reaguos į paieškos komandą. Tokiu būdu vedlys tiksliai nustatys, kuris DS18B20 generuoja aliarmą. Pakeitus TH ir TL registrų reikšmes, tik kitas temperatūros konvertavimas sugeneruos galiojantį pavojaus signalą.

Maitinimas temperatūros jutikliui DS18B20.

Tačiau kai DS18B20 atlieka temperatūros konvertavimą arba atminties kopijavimą į EEPROM, srovės suvartojimas gali siekti 1,5 mA. Dėl tokios srovės įrenginio maitinimo įtampa gali sumažėti iki nepriimtinos vertės. Ištraukimo rezistoriaus srovės ir energijos, sukauptos Cpp, nepakanka šiems dviem režimams maitinti. Norint užtikrinti pakankamą įrenginio galią, būtina užtikrinti galingą magistralės patraukimą iki aukšto lygio tuo metu, kai vyksta temperatūros konvertavimas arba atminties duomenų kopijavimas į EEPROM. Tai galima padaryti naudojant MOSFET, kaip parodyta schemoje (4 pav.). Duomenų magistralė turi būti prijungta prie galingo maitinimo šaltinio:

  • per 10 µs po komandų CONVERT ir COPY MEMORY ;
  • konvertavimo metu (tconv) ir duomenų perdavimo metu (ne mažiau t WR =10ms).

Jokios kitos operacijos šiuo metu autobuse negali būti atliekamos.

Paprastai šiuolaikiniams mikrovaldikliams aukšto lygio išėjimo srovės pakanka DS18B20 maitinimui. Tada MOSFET nereikia.

Norėdami maitinti DS18B20, galite naudoti įprastą būdą - prijungti išorinį maitinimo šaltinį per V DD kaištį (5 pav.). Akivaizdūs šio metodo pranašumai yra tai, kad nereikia MOSFET, o magistralė konversijos metu lieka laisva ir gali būti naudojama kitiems tikslams.

Tokiais atvejais naudoju šią DS18B20 prijungimo schemą.

Šioje grandinėje temperatūros jutiklis veikia išorinio maitinimo režimu, kuris per diodą saugomas papildomame kondensatoriuje. Mano įrenginiuose grandinė veikia gerai.

Įrenginio 64 bitų serijos kodas.

jutiklio atmintis.

DS18B20 atminties struktūra parodyta 7 paveiksle. Visoje atmintyje yra laisvosios kreipties (SRAM) ir nepastoviosios (EEPROM) atminties. EEPROM saugo TH, TL registrus ir konfigūracijos registrą. Jei aliarmo funkcija nenaudojama, TH ir TL registrai gali būti naudojami kaip bendrosios paskirties registrai. Visos atminties valdymo komandos yra išsamiai aprašytos skyriuje.

0 ir 1 adresų baitai saugo išmatuotos temperatūros registro žemus ir aukštus baitus. Šie baitai yra tik skaitomi. 2 ir 3 baitai – TH ir TL registrai. 4 baitas yra konfigūracijos registras. Daugiau informacijos apie šį registrą rasite skiltyje KONFIGŪRACIJOS REGISTRAS. 5, 6, 7 baitai yra rezervuoti, jų negalima rašyti, o perskaitę visada grąžina 1.

8 baitas yra tik skaitomas. Jame yra pirmųjų aštuonių baitų ciklinis kodas (CRC). DS18B20 generuoja šį kodą pagal metodą, aprašytą dalyje.

Duomenys įrašomi į 2, 3 ir 4 baitus komanda WRITE MEMORY. Duomenys turi būti perduodami pradedant mažiausiais reikšmingais 2 baito bitais. Norėdami patikrinti duomenų įrašymą, atmintį galima nuskaityti komanda READ MEMORY [kodas BEh]. Skaitant duomenys perduodami magistrale, eilės tvarka pradedant nuo mažiausiai reikšmingo 0 baito bito. Duomenys TH, TL ir konfigūracijos registras įrašomi į EEPROM komandą COPY MEMORY.

Įjungus maitinimą, duomenys iš nepastovios EEPROM atminties iš naujo įkeliami į laisvosios kreipties atmintį (SRAM). Perkelti duomenis iš EEPROM taip pat galima naudojant RELOAD E 2 komandą. Valdytojas turi stebėti magistralės būseną, kad nustatytų, ar perkrovimas baigtas. Žemo lygio skaitymo lizdas reiškia, kad perkrovimas dar nesibaigė. Baigus paleisti iš naujo, DS18B20 perduoda 1 skaitymo lizdą.

Temperatūros jutiklio konfigūracijos registras.

4 atminties baitas yra konfigūracijos registras (formatas 8 pav.). Bitai R0, R1 gali nustatyti konvertavimo skiriamąją gebą (kodai 3 lentelėje). Įjungus maitinimą, bitų R0, R1 būsena = 11, o tai atitinka 12 bitų skiriamąją gebą. Reikia atsiminti, kad konvertavimo laikas tiesiogiai priklauso nuo skiriamosios gebos. 7 ir 0…4 bitai yra rezervuoti, negali būti naudojami, jie grąžina 1 skaitydami.

Ciklinio kodo generavimas(CRC)

Ciklinio kodo (CRC) baitai yra 64 bitų ROM kode ir devintame SRAM baite. Ciklinis kodas iš ROM apskaičiuojamas 56 ROM kodo bitams ir yra aukščiausiame ROM baite. Ciklinis kodas iš SRAM apskaičiuojamas iš 0–7 SRAM baitų. Ciklinis kodas leidžia valdyti duomenų nuskaitymo iš DS18B20 teisingumą. Meistras apskaičiuoja gautų duomenų ciklinį kodą ir palygina jį su gautu kodu. Pagal tai priimamas sprendimas dėl duomenų teisingumo.

Ciklinio kodo generavimo polinomas atrodo taip:

C R C = X 8 + X 5 + X 4 + 1

Vedlys gali apskaičiuoti ciklinį kodą naudodamas polinomo generatorių, kaip parodyta 9 paveiksle. Jį sudaro poslinkių registras ir XOR vartai. Poslinkio registro būsena iš pradžių yra 0. Bitai patenka į poslinkio registrą, pradedant mažiausiais reikšmingais bitais, kodu iš ROM arba SRAM, po vieną bitą per poslinkio ciklą. Perkėlus 56-ąjį ROM bitą arba SRAM 7-ojo baito aukštąjį bitą, apskaičiuotas ciklinis kodas bus poslinkio registre. Jei į generatorių perkeliate 8 bitus ROM arba SRAM, gauto iš DS18B20, tada, esant teisingiems duomenims, poslinkio registre bus visi 0.

Vieno laido sąsaja 1 laidas

1-Wire magistralės sistemą sudaro vienas pagrindinis įrenginys (MASTER), kuris valdo vieną ar daugiau pagalbinių įrenginių (SLAVES). DS18B20 gali būti tik vergas. Sistema su vienu vergu vadinama vienu tašku. Daugiafunkcinė sistema – daugiataškis. Visos komandos ir apsikeitimo duomenimis perduodamos per magistralę su mažiausiais reikšmingais bitais. Daugiau informacijos apie 1-Wire sąsają suskirstyta į tris skyrius: aparatinės įrangos konfigūraciją, darbo eigą ir signalus (tipus ir laiko reikalavimus).

aparatinės įrangos konfigūracija.

1-Wire sąsaja turi vieną ryšio liniją. Kiekvienas įrenginys (pagrindinis arba pavaldus) yra prijungtas prie duomenų magistralės su atviru kolektoriaus arba trijų būsenų išvesties prievadu. Ši konfigūracija leidžia kiekvienam sistemos įrenginiui neužimti ryšio linijos, kai ji neaktyvi, ir palikti laisvą magistralę kitiems įrenginiams. DS18B20 luste išvestis (DQ) yra atvira nutekėjimo sistema. Jo lygiavertė grandinė parodyta 10 paveiksle. 1 laidų magistralei reikalingas maždaug 5 kΩ išorinis traukimo rezistorius, kad būtų užtikrintas aukštas signalo lygis, kai įrenginiai neaktyvūs. Jei operacija turi būti sustabdyta, magistralė turi būti nustatyta tuščiąja eiga iki kitos operacijos. Autobusas gali savavališkai ilgą laiką būti aukšto lygio būsenoje. Jei magistralė bus žema ilgiau nei 480 µs, visi sistemos komponentai bus nustatyti iš naujo.

Operacijų seka.

DS18B20 temperatūros jutiklio prieigos operacijų seka atrodo taip.

  • Inicijavimas.
  • ROM komanda (būtina bet kokiam ryšiui).
  • Funkcijų komanda (būtina bet kokiam ryšiui).

Šios sekos turi būti griežtai laikomasi. Priešingu atveju DS18B20 nereaguos į komandas. ROM SEARCH [kodas F0h] ir TROUBLE SEARCH [kodas ECh] yra išimtys. Sugeneravus šias dvi komandas, pagrindinis įrenginys turi grįžti į pirmą žingsnį (inicializaciją).

Inicijavimas.

Ryšys su magistrale visada prasideda nuo INICIALIOS operacijos. Norėdami inicijuoti, pagrindinis generuoja atstatymo impulsą, po kurio seka buvimo impulsas iš pavaldinio. Buvimo impulsas informuoja pagrindinį įrenginį, kad pavaldinys yra sistemoje ir yra pasirengęs atlikti operaciją. Atstatymo ir buvimo impulsų laikas aprašytas skyriuje .

ROM kodo komandos.

Kai pagrindinis įrenginys gauna buvimo impulsą, jis gali veikti pagal ROM komandas. Tai yra komandos, skirtos operacijų su 64 bitų individualiais kiekvieno vergo kodais. Jie leidžia šeimininkui pasirinkti tam tikrą vergą iš daugelio kitų. Taip pat naudodamiesi šiomis komandomis galite sužinoti, kiek prie magistralės prijungta pagalbinių įrenginių, jų tipus, pasirinkti aliarmo įrenginius. Yra 5 ROM instrukcijos, kurių kiekviena yra 8 bitų ilgio. Prieš vykdydamas DS18B20 funkcijų komandas, pagrindinis valdiklis turi išsiųsti ROM komandą. ROM komandų vykdymo blokinė schema parodyta 11 pav.

Ieškoti ROM

Įjungus maitinimą, pagrindinis įrenginys turi nuskaityti visų prie magistralės prijungtų pagalbinių įrenginių ROM kodus. Tai nustatys pagalbinių įrenginių skaičių ir jų tipus. Pagrindinis įrenginys išmoksta ROM kodus, identifikuodamas kiekvieno magistralėje esančio įrenginio kodus. Jis turi vykdyti paieškos ROM komandą tiek kartų, kiek reikia, kad būtų identifikuoti visi vergai. Kai sistemoje yra tik vienas vergas, lengviau naudoti komandą READ ROM. Paieškojus ROM, magistralės operacijos turi prasidėti iš naujo inicijuojant.

ROM skaitymas

Komanda naudojama vieno taško sistemose su vienu pavaldiniu. Tai leidžia pagrindiniam įrenginiui nuskaityti 64 bitų ROM kodą nenaudojant komandos SEARCH ROM. Naudojant komandą READ ROM daugialypėje sistemoje gali kilti duomenų konfliktų tarp vergų.

ROM rungtynės

Komanda ROM MATCH, po kurios pateikiamas 64 bitų ROM kodas, leidžia pagrindiniam įrenginiui kreiptis į tam tikrą pavaldinį. Tik vienas vergas, kurio kodas sutampa su perduotu kodu, atsakys į funkcijų komandas. Kiti pavaldiniai bus neaktyvūs iki kito atstatymo impulso.

Praleisti ROM

Komanda leidžia pagrindiniam įrenginiui pasiekti visus magistralėje esančius įrenginius tuo pačiu metu, nenaudojant ROM kodų. Pavyzdžiui, galite paleisti temperatūros keitimo operaciją visuose įrenginiuose, vykdydami ROM SKIP, o po to TEMPERATŪROS KONVERSIJA. READ MEMORY komanda gali sekti tik komandą ROM SKIP, kai prie nuorodos yra prijungtas vienas pavaldinys. Ši komandų seka žymiai sutaupo keitimosi su jutikliais laiką. Tai ypač efektyvu, kai sistemoje naudojamas vienas pagalbinis įrenginys.

Signalizacijos paieška

Komanda yra identiška komandai SEARCH ROM. Jis skiriasi tuo, kad į jį reaguos tik aliarmo būsenos vergai. Ši komanda leidžia pavaldiniui nustatyti, kurie temperatūros jutikliai yra pavojaus signalo nuo paskutinio temperatūros keitimo. Po kiekvienos ALARM SEARCH būtina grįžti į INICIALIZAVIMĄ.

Funkcijų komandų grupė

Įvykdžius ROM komandą pasirinkti DS18B20 su norimu kodu, pagrindinis įrenginys gali siųsti jutiklio funkcijų komandas. Jie leidžia rašyti ir skaityti duomenis iš DS18B20 RAM, inicijuoti temperatūros konvertavimą ir nustatyti maitinimo režimą. Funkcinės DS18B20 komandos aprašytos žemiau, surinktos 4 lentelėje, darbo su jomis algoritmas parodytas 12 paveiksle.

Temperatūros konvertavimas

Įrašymas į atmintį

Komanda leidžia įkelti 3 baitus į jutiklio RAM. Pirmasis baitas įrašomas į Th registrą (2 atminties baitas), antrasis – į Th (3 atminties baitas), o trečiasis – į konfigūracijos registrą (4 baitas). Valdytojas perduoda duomenis iš mažiausiai reikšmingo bito. Visi trys baitai turi būti parašyti prieš pagrindiniam įrenginiui generuojant atstatymo signalą.

Atminties skaitymas

Komanda naudojama įrenginio atminčiai nuskaityti. Duomenų perdavimas prasideda nuo mažiausiai reikšmingo 0 atminties baito bito ir tęsiasi tol, kol bus nuskaityti visi 9 baitai. Jei reikalinga tik dalis duomenų, pagrindinis kompiuteris gali nutraukti perdavimą, išleisdamas atstatymo impulsą.

Atminties kopija

Komanda iš naujo įkelia Th, Tl registrų ir konfigūracijos registro reikšmes iš EEPROM į RAM. Išsiuntus RESET komandą, pagrindinis įrenginys gali vykdyti skaitymo lizdą, o DS18B20 praneš apie atstatymo būseną. Jei išlaikysite 0, tai reikš, kad operacija vis dar vykdoma, 1 - operacija baigta. Atstatymo operacija įvyksta automatiškai, kai įjungiamas maitinimas. Todėl RAM yra tinkami duomenys iš karto po maitinimo įjungimo.

Skaityti maitinimo režimą

4 lentelė. DS18B20 funkcijų komandos.

KOMANDA APIBŪDINIMAS KODAS AUTOBUSŲ EKSPLOATACIJA PASTABA
TEMPERATŪROS KONVERSIJOS KOMANDA
Temperatūros matavimas Inicijuoja temperatūros matavimą 44h DS18B20 siunčia temperatūros keitimo būseną pagrindiniam kompiuteriui 1
ATMINTIES KOMANDOS
Atminties skaitymas Skaito visą RAM, įskaitant ciklinį CRC kodą BEh DS18B20 siunčia iki 9 baitų pagrindiniam kompiuteriui 2
Įrašymas į atmintį Įrašo 2, 3 ir 4 baitus į RAM
(TH, TL ir konfigūracijos registras)
4Eh Meistras siunčia 3 baitus į DS18B20. 3
Atminties kopija Kopijuoja TH, TL ir konfigūracijos registrą iš RAM į EEPROM 48h 1
Perkrauna TH, TL ir konfigūracijos registrą iš EEPROM į RAM. B8h DS18B20 siunčia atstatymo būseną pagrindiniam kompiuteriui
Skaityti maitinimo režimą Informuoja meistrą apie DS18B20 maitinimo režimą. B4h DS18B20 siunčia maitinimo režimą pagrindiniam kompiuteriui

Pastabos.

1 laido sąsaja

Duomenims keistis DS18B20 naudoja 1 laidų sąsajos protokolą, kuris užtikrina duomenų vientisumo kontrolę. Šis protokolas apibrėžia signalus:

  • atstatyti pulsą,
  • buvimo impulsas,
  • rašant bitą, kurio reikšmė yra 0,
  • rašyti bitą su reikšme 1,
  • skaitymo bitas, kurio vertė 0,
  • skaitymo bitas su 1 verte.

Visus šiuos signalus, išskyrus buvimo impulsą, generuoja valdiklis.

Inicijavimas – atstatymas ir buvimo impulsai

Bet kokia DS18B20 ryšio operacija prasideda inicijavimo seka, kurią sudaro pagrindinio įrenginio atstatymo impulsas pavaldiniui ir buvimo atsako impulsas iš DS18B20. Šis procesas parodytas 13 paveiksle. Temperatūros jutiklis siunčia buvimo impulsą, reaguodamas į atstatymo impulsą, kad praneštų pagrindiniam įrenginiui, kad jis prijungtas prie magistralės ir paruoštas naudoti.

Inicijavimo sekos metu pagrindinis įrenginys perduoda atstatymo impulsą (Tx), sumažindamas magistralę mažiausiai 480 µs. Tada kapitonas atleidžia magistralę ir pereina priėmimo (Rx) režimu. Kai magistralė atleidžiama, ją iki aukšto loginio lygio ištraukia 5 kΩ rezistorius. Jutiklis aptinka teigiamą kraštą, laukia 15–60 µs ir perduoda buvimo impulsą, palaikydamas liniją žemai 60–240 µs.

Laikinos skaitymo ir rašymo vietos.

Duomenų mainai 1-Wire magistrale vyksta laiko tarpsniais (laiko tarpais). Viename laiko intervale yra viena informacijos dalis.

Laikinos įrašymo vietos.

Protokolas apibrėžia dviejų tipų duomenų įrašymo laiko tarpsnius DS18B20: 1 rašymo vertę ir 0 rašymo reikšmę. Rašymo lizdo trukmė yra mažiausiai 60 µs, o atkūrimo pauzė tarp tarpų yra mažiausiai 1,0 µs. Bet koks rašymo lizdas inicijuojamas krentančio magistralės signalo krašto (14 pav.).

Norėdami suformuoti 1 rašymo lizdą, po to, kai magistralė yra žemai, kapitonas turi atleisti magistralę 15 µs. 5 kΩ ištraukimo rezistorius sukurs aukšto lygio įtampą magistralėje.

Norėdami sudaryti rašymo lizdą 0, po to, kai magistralė yra žema, valdiklis turi toliau išlaikyti žemą magistralę visą lizdo laiką (mažiausiai 60 µs).

DS18B20 tikrina signalo būseną nuo 15 iki 60 µs, skaičiuojant nuo įrašymo lizdo pradžios. Magistralės būsena šiame segmente atitinka bito, kuris turi būti įrašytas į jutiklį, reikšmę.

Laikinos skaitymo vietos.

Skaitymo lizdo, taip pat rašymo lizdo trukmė turi būti bent 60 µs, o atkūrimo pauzė tarp lizdų turi būti bent 1 µs. Bet koks skaitymo lizdas inicijuojamas krentančio magistralės signalo krašto (14 pav.).

Po to, kai pagrindinis kompiuteris inicijuoja skaitymo lizdą, DS18B20 perduoda duomenų bitą. Jei perdavimas yra 1, jutiklis palieka magistralę laisvą (aukštoje būsenoje), o perduodant 0, jis sudaro žemą lygį magistralėje.

Perduodamas 0, DS18B20 turi atleisti magistralę lizdo gale. Ištraukimo rezistorius ant jo sudarys aukštą lygį. DS18B20 išvestis galioja 15 µs nuo skaitymo lizdo pradžios.

Ant pav. 15 parodyta, kad bendra Tinit , TRC ir TSAMPLE skaitymo laiko tarpsnių suma turi būti ne didesnė kaip 15 µs.

Ryžiai. 16 parodyta, kad siekiant maksimalaus duomenų priėmimo patikimumo, būtina sumažinti Tinit ir TRC bei nuskaityti magistralės būseną 15 µs segmento pabaigoje.

1 darbo su DS18B20 pavyzdys.

PAGRINDINIS REŽIMAS

AUTOBASTŲ DUOMENYS

PAAIŠKINIMAI

TX nustatyti iš naujo RX Buvimas TX 55h TX 64 bitų ROM kodas TX 44h Meistras siunčia temperatūros keitimo komandą. TX TX nustatyti iš naujo Pagrindinis valdiklis generuoja atstatymo impulsą. RX Buvimas DS18B20 reaguoja buvimo impulsu. TX 55h Meistras vykdo ROM kodo atitikimo komandą. TX 64 bitų ROM kodas Meistras siunčia ROM kodą DS18B20. TX BEh RX 9 duomenų baitai

2 darbo su DS18B20 pavyzdys.

PAGRINDINIS REŽIMAS

AUTOBASTŲ DUOMENYS

PAAIŠKINIMAI

TX nustatyti iš naujo Pagrindinis valdiklis generuoja atstatymo impulsą.
RX Buvimas
TX CCh
TX 4Eh Meistras vykdo atminties rašymo komandą.
TX 9 baitai duomenų Valdiklis siunčia tris baitus (TH, TL ir konfigūracijos registrą).
TX nustatyti iš naujo Pagrindinis valdiklis generuoja atstatymo impulsą.
RX Buvimas DS18B20 reaguoja buvimo impulsu.
TX CCh Meistras duoda praleisti ROM komandą.
TX BEh Meistras siunčia skaitymo atminties komandą.
RX 9 duomenų baitai Meistras nuskaito visą RAM, įskaitant ciklinį CRC kodą. Tada jis apskaičiuoja pirmųjų aštuonių baitų CRC ir palygina jį su gautu kodu. Jei kodai nėra lygūs, valdiklis pakartoja skaitymo operaciją.
TX nustatyti iš naujo Pagrindinis valdiklis generuoja atstatymo impulsą.
RX Buvimas DS18B20 reaguoja buvimo impulsu.
TX CCh Meistras duoda praleisti ROM komandą.
TX 48h Meistras vykdo atminties kopijavimo komandą.
TX DQ linija prijungta prie maitinimo bėgio Meistras prijungia DQ prie maitinimo bėgio per visą konversijos laiką.

Didžiausi leistini parametrai DS18B20

Nurodomos parametrų ribinės vertės. Šių parametrų viršijimas yra nepriimtinas. Ilgas eksploatavimas esant ribinėms parametrų vertėms gali sumažinti įrenginio patikimumą.

Pastabos:

AC EEPROM elektriniai duomenys (- 55 ... + 125 °C, V DD = 3,0 ... 5,5 V).

PARAMETRAS SIMBOLIS SĄLYGOS MIN. TIPAS. MAX. ED. PRIEMONĖS.
Parašykite ciklo laiką twr 2 10 ms
Įrašų skaičius NAUJASIS -55°C - +55°C 50000 ciklas
Laikymo laikas t EEDR -55°C - +55°C 10 metų

Kintamosios srovės elektros duomenys (- 55 … + 125 °C, V DD = 3,0 ... 5,5 V).

PARAMETRAS SIMBOLIS SĄLYGOS MIN. TIPAS. MAX. ED. PRIEMONĖS. PRIME
CHANIE
Temperatūros konvertavimo laikas tCONV 9 bitų skiriamoji geba 93.75 ms 1
leidimas
10 bitų
187.5 ms 1
leidimas
11 bitų
375 ms 1
leidimas
12 bitų
750 ms 1
Maitinimo prijungimo laikas t SPON Siunčiama temperatūros keitimo komanda 10 ms
Laiko tarpsnis t SLOT 60 120 ms 1
Atsigavimo laikas tREC 1 ms 1
Įrašymo laikas 0 r LOW0 60 120 ms 1
Įrašymo laikas 1 tLOW1 1 15 ms 1
Duomenų skaitymo laikas tRDV 15 ms 1
Iš naujo nustatyti didžiausią laiką t RSTH 480 ms 1
Iš naujo nustatyti žemą laiką t RSTL 480 ms 1,2
Aukšto buvimo laikas tPDHIGH 15 60 ms 1
Mažo buvimo laikas t PDLOW 60 240 ms 1
Talpa C IN/OUT 25 pkf

Pastabos:

18 pav. Laiko nustatymo diagramos.

Aprašymas puikus. Su jutikliais nėra lengva dirbti. Jiems reikalingos gana sudėtingos programinės įrangos funkcijos, tačiau aparatūros požiūriu DS18B20 paprasta prijungti, tiksliai išmatuoti, nereikia ADC ir pan.

Kaip DS18B20 temperatūros jutiklių naudojimo pavyzdį galiu paminėti savo kūrimą -. Naudojami du temperatūros jutikliai. Vienas matuoja oro temperatūrą viduje, antrasis - radiatoriaus temperatūrą.

Kategorija: . Galite pažymėti žymes.