Senzor de temperatura ds. Despre senzorii de temperatură DS18B20. Interacțiunea cu sistemul de control

Senzorul de temperatură din Arduino este unul dintre cele mai comune tipuri de senzori. Există multe opțiuni disponibile pentru dezvoltatorul proiectului de termometru Arduino. diferite opțiuni, care diferă prin principiul de funcționare, precizie, design. Senzorul digital DS18B20 este unul dintre cei mai populari senzori de temperatura, adesea folosit intr-o carcasa impermeabila pentru a masura temperatura apei sau a altor lichide. În acest articol veți găsi o descriere a senzorului ds18b20 în limba rusă, împreună vom lua în considerare caracteristicile conectării la un arduino, principiul de funcționare a senzorului, o descriere a bibliotecilor și schițe.

DS18B20 este un senzor digital de temperatură cu multe caracteristici utile. De fapt, DS18B20 este un microcontroler întreg care poate stoca valoarea de măsurare, poate semnala temperatura dincolo de limitele stabilite (putem seta și modifica limitele), poate schimba precizia măsurării, modul de interacțiune cu controlerul și multe altele. Toate acestea într-un pachet foarte mic, care este disponibil și în versiune impermeabilă.

Senzorul de temperatură DS18B20 are o varietate de tipuri de carcasă. Puteți alege dintre trei - 8-Pin SO (150 mils), 8-Pin µSOP și 3-Pin TO-92. Acesta din urmă este cel mai des întâlnit și este realizat într-o carcasă specială impermeabilă, astfel încât să poată fi folosit în siguranță sub apă. Fiecare senzor are 3 pini. Pentru carcasa TO-92, trebuie să vă uitați la culoarea firelor: negru - masă, roșu - putere și alb / galben / albastru - semnal. În magazinele online, puteți cumpăra un modul DS18B20 gata făcut.

De unde să cumpăr un senzor

Desigur, DS18B20 este cel mai ieftin de cumpărat de pe Aliexpress, deși este vândut și în orice magazine online specializate din Rusia cu arduino. Iată câteva link-uri pentru exemple:

Memoria senzorului este formată din două tipuri: operațională și nevolatilă - SRAM și EEPROM. Acesta din urmă conține registrele de configurare și registrele TH, TL, care pot fi folosite ca registre de uz general dacă nu sunt folosite pentru a indica intervalul de valori admisibile de temperatură.

Sarcina principală a DS18B20 este de a determina temperatura și de a converti rezultatul în formă digitală. Putem seta independent rezoluția necesară setând numărul de biți de precizie - 9, 10, 11 și 12. În aceste cazuri, rezoluțiile vor fi, respectiv, egale cu 0,5C, 0,25C, 0,125C și 0,0625C.

Măsurătorile de temperatură primite sunt stocate în SRAM-ul senzorului. Octeții 1 și 2 stochează valoarea temperaturii recepționate, 3 și 4 stochează limitele de măsurare, 5 și 6 sunt rezervați, 7 și 8 sunt utilizați pentru detectarea temperaturii de înaltă precizie, ultimii 9 octeți stochează codul CRC rezistent la zgomot.

Conectarea DS18B20 la Arduino

DS18B20 este un senzor digital. Senzorii digitali transmit valoarea temperaturii măsurate sub forma unui anumit cod binar, care este alimentat la pinii digitali sau analogici ai arduino și apoi decodat. Codurile pot fi foarte diferite, ds18b20 funcționează pe protocolul de date 1-Wire. Nu vom intra în detaliile acestui protocol digital, vom indica doar minim necesar pentru a înțelege principiile interacțiunii.

Schimbul de informații în 1-Wire are loc datorită următoarelor operațiuni:

  • Inițializarea - definirea secvenței de semnale de la care începe măsurarea și alte operațiuni. Dispozitivul master trimite un impuls de resetare, după care senzorul trebuie să dea un impuls de prezență, indicând că este gata să efectueze operația.
  • Scrierea datelor - un octet de date este transferat la senzor.
  • Citirea datelor - se primește un octet de la senzor.

Pentru a lucra cu senzorul, avem nevoie de software:

  • Arduino IDE
  • Biblioteca OneWire, dacă utilizați mai mulți senzori pe autobuz, puteți utiliza biblioteca DallasTemperature. Va rula pe OneWire.

Din echipament veți avea nevoie de:

  • Unul sau mai mulți senzori DS18B20;
  • microcontroler Arduino;
  • conectori;
  • Rezistor de 4,7 kOhm (dacă este conectat un senzor, va merge un rezistor cu o valoare de 4 până la 10K);
  • Placă de circuit;
  • Cablu USB pentru conectarea la un computer.

Senzorul este conectat la placa Arduino UNO simplu: GND de la senzorul de temperatură este conectat la Arduino GND, Vdd este conectat la 5V, Datele sunt conectate la orice pin digital.

Cea mai simplă schemă de conectare pentru senzorul digital DS18B20 este prezentată în figură.

Algoritmul pentru obținerea informațiilor despre temperatura din schiță constă în următorii pași:

  • Determinarea adresei senzorului, verificarea conexiunii acestuia.
  • O comandă este trimisă la senzor cu cerința de a citi temperatura și de a introduce valoarea măsurată în registru. Procedura durează mai mult decât restul, durează aproximativ 750 ms.
  • Se dă o comandă pentru a citi informațiile din registru și a trimite valoarea primită către „monitorul portului”,
  • Dacă este necesar, acesta va fi convertit în Celsius/Fahrenheit.

Exemplu de schiță simplă pentru DS18B20

Cea mai simplă schiță pentru lucrul cu un senzor digital este următoarea. (în schiță folosim biblioteca OneWire, despre care vom vorbi mai detaliat puțin mai târziu).

#include /* * Descrierea interacțiunii cu senzorul digital ds18b20 * Conectarea ds18b20 la arduino prin pinul 8 */ OneWire ds(8); // Creați un obiect OneWire pentru magistrala 1-Wire, care va fi folosit pentru a lucra cu senzorul void setup()( Serial.begin(9600); ) void loop()( // Determinați temperatura din octetul senzorului DS18b20 date; // Locația pentru valoarea temperaturii ds.reset(); // Începe interacțiunea prin resetarea tuturor comenzilor și parametrilor anteriori ds.write(0xCC); // Comanda senzorului DS18b20 să omite căutarea adresei. În cazul nostru, numai un dispozitiv ds.write(0x44) ; // Dăm senzorului DS18b20 o comandă pentru a măsura temperatura. Nu primim încă valoarea temperaturii în sine - senzorul o va pune în întârzierea memoriei interne (1000); // The microcircuit măsoară temperatura și așteptăm. ds.reset(); valoarea temperaturii măsurate ds.write(0xCC); ds.write(0xBE); // Vă rugăm să ne trimiteți valoarea registrelor cu valoarea temperaturii / / Obțineți și citiți datele răspunsului = ds.read(); // Citiți octetul mic al valorii de temperatură data = ds.read(); // Și acum cel mai vechi // Formând valoarea finală adică: // - mai întâi "lipiți" valoarea, // - apoi înmulțiți-o cu un factor corespunzător rezoluției (pentru 12 biți, valoarea implicită este 0,0625) float temperature = ((date<< 8) | data) * 0.0625; // Выводим полученное значение температуры в монитор порта Serial.println(temperature); }

Schiță pentru lucrul fără întârziere cu senzorul ds18b20

Puteți complica ușor programul pentru ds18b20 pentru a scăpa de încetinirea din schiță.

#include OneWire ds(8); // OneWire object int temperature = 0; // Variabilă globală pentru stocarea valorii temperaturii de la senzorul DS18B20 long lastUpdateTime = 0; // Variabilă pentru a stoca ora ultimei citiri de la senzor const int TEMP_UPDATE_TIME = 1000; // Determinați frecvența verificărilor void setup()( Serial.begin(9600); ) void loop()( detectTemperature(); // Determinați temperatura de la senzorul DS18b20 Serial.println(temperature); // Imprimați mesajul primit valoarea temperaturii // T (deoarece variabila de temperatură este de tip int, partea fracțională va fi pur și simplu eliminată) int detectTemperature()( byte data; ds.reset(); ds.write(0xCC); ds.write(0x44) ; dacă (millis() - lastUpdateTime > TEMP_UPDATE_TIME) ( lastUpdateTime = millis(); ds.reset(); ds.write(0xCC); ds.write(0xBE); data = ds.read(); data = ds. read(); // Generează valoarea temperatură = (date<< 8) + data; temperature = temperature >> 4; } }

Biblioteca DallasTemperature și DS18b20

În schițele noastre, putem folosi biblioteca DallasTemperature, care simplifică unele aspecte ale lucrului cu senzorul ds18b20 pe 1 fir. Exemplu de schiță:

#include // Numărul pin Arduino cu senzorul conectat #define PIN_DS18B20 8 // Creați obiect OneWire OneWire oneWire(PIN_DS18B20); // Creați un obiect DallasTemperature pentru lucrul cu senzori, trecându-i o referință la un obiect pentru lucrul cu 1-Wire. DallasTemperature dallasSensors(&oneWire); // Obiect special pentru stocarea adresei dispozitivului DeviceAddress sensorAddress; void loop(void)( // Solicitare de măsurători ale senzorului de temperatură Serial.print("Se măsoară temperatura..."); dallasSensors.requestTemperatures(); // Solicită ds18b20 să colecteze date Serial.println("Terminat"); // Solicitare de obținere a valorii de temperatură stocată printTemperature(sensorAddress); // Întârziere pentru ca ceva să poată fi analizat pe ecran întârziere (1000); ) // Funcție auxiliară pentru tipărirea valorii temperaturii pentru dispozitiv void printTemperature(DeviceAddress deviceAddress)( float tempC = dallasSensors.getTempC(deviceAddress); Serial.print("Temp C: "); Serial.println(tempC); ) // Funcție de ajutor pentru afișarea adresei senzorului ds18b20 void printAddress(DeviceAddress deviceAddress)( pentru (uint8_t i = 0 ; i< 8; i++) { if (deviceAddress[i] < 16) Serial.print("0"); Serial.print(deviceAddress[i], HEX); } }

Biblioteca OneWire pentru lucrul cu DS18B20

DS18B20 folosește protocolul 1-Wire pentru a face schimb de informații cu arduino, pentru care a fost deja scrisă o bibliotecă excelentă. Puteți și ar trebui să îl utilizați pentru a nu implementa manual toate funcțiile. . Pentru a instala biblioteca, descărcați arhiva, despachetați-o în folderul bibliotecii din directorul dvs. Arduino. Biblioteca este inclusă folosind comanda #include

Toți senzorii DS18B20 sunt conectați în paralel, un rezistor este suficient pentru toți. Folosind biblioteca OneWire, puteți citi simultan toate datele de la toți senzorii. Dacă numărul de senzori conectați este mai mare de 10, trebuie să selectați un rezistor cu o rezistență de cel mult 1,6 kOhm. De asemenea, pentru o măsurare mai precisă a temperaturii, trebuie să puneți un rezistor suplimentar de 100 ... 120 Ohm între ieșirea de date de pe placa Arduino și datele de pe fiecare senzor. Puteți afla de la ce senzor a fost obținută o anumită valoare folosind un cod serial unic de 64 de biți care va fi emis ca urmare a execuției programului.

Pentru a conecta senzori de temperatură în modul normal, trebuie să utilizați circuitul prezentat în figură.

concluzii

Cipul Dallas DS18B20 este foarte dispozitiv interesant. Senzorii de temperatură și termometrele bazate pe acesta au caracteristici acceptabile pentru majoritatea sarcinilor, funcționalitate avansată și sunt relativ ieftine. Senzorul DS18B20 a câștigat o popularitate deosebită ca dispozitiv rezistent la umiditate pentru măsurarea temperaturii lichidelor.

Pentru caracteristici suplimentare, trebuie să plătiți cu complexitatea relativă a lucrului cu senzorul. Pentru a conecta DS18B20, cu siguranță vom avea nevoie de un rezistor cu un rating de aproximativ 5K. Pentru a lucra cu senzorul în schițele Arduino, trebuie să instalați o bibliotecă suplimentară și să obțineți anumite abilități pentru a lucra cu el - totul nu este în întregime banal acolo. Cu toate acestea, puteți cumpăra un modul gata făcut, iar pentru o schiță, în cele mai multe cazuri, exemplele simple date în acest articol vor fi suficiente.

În procesul de studiu a microcontrolerelor, mai devreme sau mai târziu devine necesară măsurarea unui astfel de parametru meteorologic mediu inconjurator ca temperatura ei. Piața globală modernă a componentelor electronice oferă o gamă largă de senzori de temperatură. Principalele diferențe dintre ele sunt în domeniul temperaturii măsurate, tensiunea de alimentare, domeniul de aplicare, dimensiunile generale, metodele de conversie a temperaturii, interfața pentru interacțiunea cu sistemul de control al utilizatorului. S-a întâmplat din punct de vedere istoric ca în acest moment unul dintre cei mai populari senzori de temperatură să fie senzorul DS18B20 Dallas Semiconductor Corp. Următoarea poveste este despre el.

DS18B20– senzor digital de temperatură cu rezoluție de conversie programabilă.

Trăsături distinctive:

1) Utilizarea magistralei de date a interfeței cu 1 fir pentru a interacționa cu sistemul de control;
2) Prezența unui cod unic de identificare serială pe 64 de biți situat în memoria ROM internă și destinat sistemelor multipunct în care este necesară adresarea unui anumit senzor;
3) Tensiunea de alimentare este de 3-5,5V, ceea ce îi permite să fie utilizat nu numai în sisteme de 5 volți, ci și în 3,3 (majoritatea microcontrolerelor);
4) Intervalul temperaturii măsurate este -55…+125 о С;
5) Precizie de ± 0,5 ° C, deși acest lucru este valabil numai pentru intervalul -10 ... + 85 ° C;
6) Rezoluția conversiei este determinată de utilizator și este de 9…12 biți;
7) Are registre interne de declanșare a pragurilor superioare și inferioare cu generarea unui semnal de alarmă pentru sistemele care utilizează logica termostatică de funcționare;
8) Acești senzori sunt compatibil cu software DS1822și sunt utilizate pe scară largă în controlere termostatice industriale, sisteme industriale, electronice de larg consum și alte sisteme sensibile la temperatură.

Descrierea și principiul de funcționare a dispozitivului:

În articolul meu, voi descrie un exemplu de lucru cu un senzor realizat în pachetul TO-92.

Arata cam asa:

În interiorul acestui instrument este aranjat foarte simplu, aruncați o privire:

Să aruncăm o privire mai atentă la această diagramă bloc.

Cu toate acestea, alimentarea în acest mod introduce unele restricții asupra parametrilor de timp ai senzorului. Menținerea liniei de date pentru o perioadă va descărca condensatorul, ceea ce va duce la o dezactivare a liniei INTERNE Vdd și, în consecință, a senzorului în ansamblu. Prin urmare, în timpul nefolosit, linia DQ trebuie ținută sus. Trebuie remarcată o remarcă importantă. La conversia temperaturii și la copierea datelor din Scratchpad în EEPROM (în unul dintre registre), curentul consumat de linia INTERNĂ Vdd poate ajunge la 1,5 mA, ceea ce este insuportabil pentru condensatorul intern și va exista o cădere mare de tensiune la tracțiune. -rezistor de sus, care va afecta în mod inacceptabil funcționarea dispozitivului în general. Pentru a face acest lucru, este necesar să organizați liniile DQ într-o schemă de pull-up puternică, implementată conform următoarei scheme:

După emiterea comenzii ConvertitT sau CopieCarnet pentru notițe este necesar să porniți un pull-up puternic al liniei DQ cu un tranzistor MOSFET nu mai târziu de 10 μs (max.), Potrivit dezvoltatorilor senzorului, apoi așteptați timpul de conversie (Tconv) sau timpul de transfer de date (Twr). = 10 ms), iar în acest moment nu se întreprinde nicio acțiune când pull-up-ul puternic este pornit pe linia DQ nu ar trebui să fie!

Puțin trebuie spus despre puterea standard, deoarece totul este simplu aici și nici măcar un MOSFET nu este deloc necesar:

Subsistemul „64-BIT ROM AND 1-Wire PORT” conține un cod unic de identificare serial de 64 de biți situat în memoria ROM nevolatilă, iar acest nod conține, de asemenea, o interfață pentru interacțiunea cu sistemul de control 1-Wire. Subsistemul „Memory Control Logic” realizează transferuri de date între subsistemul de interfață 1-Wire și memoria de tip Scratchpad, care, la rândul său, are acces la registrele senzorilor de temperatură, registrele pentru setarea pragurilor de alarmă superioare și inferioare, configurația registrul și suma de control de 8 biți a registrului generatorului pentru a proteja sistemul de date incorecte.

Când este pornit, senzorul este implicit la o rezoluție de conversie de 12 biți și intră imediat în modul de putere redusă. Pentru a iniția conversia, comandantul trebuie să trimită comanda ConvertitT . După convertirea temperaturii într-un cod digital, acest cod este stocat în memoria Scratchpad ca un cuvânt de doi octeți, iar senzorul comută înapoi în modul de economisire a energiei.

Conversia temperaturii.

Acum să ne dăm seama cum este convertită temperatura în senzor. De fapt, ADC-ul este situat în interiorul senzorului de temperatură în sine, iar datele de ieșire situate în registrul de temperatură sunt transferate în memoria Scratchpad. Datele de temperatură au următorul format:

Steagul S este un steag de semn, folosit pentru a indica semnul unui număr (S=0 este numărul conținut în biții 10-0 este pozitiv, iar S=1 dacă numărul conținut în aceiași biți este negativ, adică în acest caz temperatura este reprezentată în codul complementului a doi (codul complementului a doi)).

Când se setează la rezoluția de conversie de 12 biți, toți cei 12 biți (bit 11-bit 0) sunt activați și conțin date valide. Când se setează la 11 biți, conținutul bitului 0 ar trebui ignorat, când se setează la 10 biți, biții 0 și 1 nu trebuie luați în considerare și așa mai departe.

Semnalul de alarma este o functie a termostatului.

Pentru aceasta, sunt furnizate 2 registre de 8 biți, Th și Tl. Th conține valoarea pragului superior de temperatură, iar Tl, respectiv, a celui inferior. Dacă temperatura este peste Th sau sub Tl, este setat un semnal de alarmă. Acest flag de alarmă este detectat de către master prin lansarea comenzii Căutare alarmă la linia DQ. Indicatorul de alarmă este actualizat după fiecare operație de conversie a temperaturii. De altfel, doar biții de la 11 la 4 ai registrului de temperatură sunt utilizați în comparație cu registrul Th sau Tl, ceea ce înseamnă că funcția termostat funcționează numai pentru temperaturi întregi. Registrele sunt fizic memorie EEPROM, astfel încât își păstrează valorile atunci când alimentarea este oprită. Registrele în sine sunt similare cu registrul de temperatură, doar că sunt pe 8 biți, steag-ul S are exact aceeași semnificație ca în cazul precedent:

Acest cod, așa cum sa menționat mai devreme, este necesar pentru a identifica fiecare dispozitiv de pe linie în sistemele de măsurare a temperaturii multipunct.

Formatul acestei memorii este:

Cei 8 biți inferiori sunt rezervați pentru denumirea familiei și conțin valoarea 0x28. Următorii 48 de biți conțin numărul de serie unic al dispozitivului. Cel mai semnificativ octet conține valoarea sumei de control CRC calculată pentru cei 56 de biți inferiori ai memoriei ROM.

Organizarea memoriei.

Memoria senzorului constă dintr-un spațiu de memorie Scratchpad și un EEPROM pentru stocarea datelor de configurare și a valorilor registrului de alarmă ridicat și scăzut.

Când alimentarea este oprită, octeții de date 2, 3 și 4 își păstrează valoarea în EEPROM. Ei bine, atunci când sunt pornite, valoarea din ele rămâne neschimbată. Octeții 0 și 1 conțin valoarea temperaturii convertite, octeții 5, 6, 7 sunt rezervați pentru uz intern și nu pot fi accesați de utilizator pentru nevoile sale.

Al 8-lea octet conține valoarea generată de logica de generare CRC încorporată pentru octeții de la 0 la 7, ceea ce minimizează posibilitatea unor citiri eronate de temperatură în final.

Trebuie remarcat faptul că, dacă funcția termostat nu este utilizată, atunci registrele Th și Tl pot fi folosite ca memorie de uz general - puteți stoca orice informație în ele.

Datele sunt scrise pe octeții 2, 3 și 4 începând cu bitul cel mai puțin semnificativ din octetul 2 folosind instrucțiunea Scrie Scratchpad. Pentru a verifica integritatea datelor înregistrate, le puteți citi, pentru care trebuie să trimiteți comanda senzorului Citiți Scratchpad, după care masterul ar trebui să primească date începând de la bitul cel mai puțin semnificativ al octetului 0.

Pentru a stoca datele registrelor înalte, scăzute ale termostatului, precum și registrul de configurare în memoria EEPROM, dispozitivul principal trebuie să trimită comanda senzorului Copiați Scratchpad.

După cum sa menționat mai devreme, datele deja scrise pe EEPROM sunt păstrate atunci când alimentarea este oprită. Dar când alimentarea este pornită, valorile din celulele EEPROM corespunzătoare sunt încărcate automat în registrele de memorie scratchpad corespunzătoare. Convenabil, nu? :)

În plus, datele scrise pe EEPROM pot fi suprascrise în memoria scratchpad în orice moment. Acest lucru este necesar, de exemplu, atunci când modificați configurația în timpul funcționării și apoi trebuie să treceți la „modul normal”, adică. returnează configurația de operare care a fost înainte de modificarea conținutului registrelor de memorie scratchpad. De fapt, pentru aceasta, dispozitivul principal trebuie să trimită comanda senzorului Amintiți-vă pe E2 .

În registrul de configurare, doar 2 biți pot fi definiți de utilizator: R0 și R1. Acești biți determină rezoluția de conversie a temperaturii și sunt setați implicit la 1, care este setarea inițială pentru rezoluția de conversie de 12 biți.

Toate configurațiile posibile ale acestor biți și permisiunile corespunzătoare sunt prezentate în tabelul de mai jos. Trebuie remarcat faptul că, cu cât rezoluția de conversie este mai mare, cu atât timpul de conversie este mai lung, de exemplu, pentru rezoluția de 12 biți, timpul de conversie este de 750 ms (max.).

Interacțiunea cu sistemul de control.

DS18B20, după cum sa menționat mai devreme, utilizează o magistrală de date cu interfață cu 1 fir pentru a comunica cu un dispozitiv slave. Prin urmare, pentru a-l conecta, sistemul de control trebuie să ofere o ieșire cu dren deschis sau cu o stare de linie Hi-Z.

Configurația internă a interfeței senzorului este prezentată mai jos:

În starea inactivă (starea inactivă), linia DQ este trasă în sus de un rezistor la sursa de alimentare „+”. Astfel, între tranzacții (transferuri de date), această linie trebuie să fie întotdeauna menținută în această stare. Dacă, din orice motiv, tranzacțiile trebuie suspendate, linia DQ trebuie menținută la nivel ridicat dacă acest transfer urmează să fie reluat în continuare. În procesul de oprire a tranzacției, putem menține linia DQ la un nivel logic ridicat atât timp cât ne dorim, începând de la 1 µs. Dar, dacă magistrala de date este menținută la nivel scăzut mai mult de 480 µs, va avea loc o resetare completă a tuturor senzorilor prezenți pe această magistrală.

Secvența operațiunilor pentru schimb.

De fiecare dată când sistemul de control accesează senzorul, trebuie respectată următoarea secvență de acțiuni:

1) Inițializare;
2) comanda ROM (urmată de schimbul de date necesar);
3) Comanda funcției senzor (urmată de comunicarea necesară).

Dacă nu există niciun pas la accesarea senzorului, senzorul nu va răspunde. Excepția sunt comenzile Căutarerom [ F0 h] Și AlarmaCăutare [ ECH] , după executarea lor, comandantul trebuie să revină la prima etapă a secvenței de control.

Asa de. Toate tranzacțiile încep cu inițializare. Această operație este urmată de generarea unui impuls de resetare de către master, după care slave (în acest caz, senzorul(i)) transmit un impuls de prezență către master, care îi anunță că senzorii sunt conectați și pregătiți pentru Operațiune.

În general, magistrala de interfață 1-Wire implementată în senzor definește mai multe tipuri de semnale pe linia de date: impuls de resetare, impuls de prezență, scriere 0, scriere 1, citire 0, citire 1. Toate aceste operații sunt implementate de dispozitivul master. , cu excepția pulsului de prezență. Este format numai din senzor(i).

Deci, pentru început, dispozitivul principal intră în modul transmițător și setează linia DQ la 0 pentru cel puțin 480 µs (evidențiat cu negru aldine). Aceasta resetează senzorul. Apoi linia trebuie eliberată și dispozitivul principal trebuie să fie pus în modul receptor, în timp ce rezistorul de pull-up va seta linia de date la un nivel logic înalt (evidențiat cu negru subțire). După ce senzorul detectează o margine ascendentă, senzorul va aștepta 15-60 µs și va reseta linia de date la 0 prin interfața sa hardware și o va menține timp de 60-240 µs. După acest timp, senzorul va elibera linia și va fi setat la nivelul logic 1 pentru cel puțin 480 µs după ce senzorul detectează impulsul de resetare.

Acum să vorbim despre modul în care se realizează procesul de transfer de date. În general, transferuri de biți. Ideea este următoarea. Se ia o perioadă de timp, iar în acest timp maestrul se uită la ceea ce avem pe linie, să spunem 1 - înseamnă că am notat 1, dacă 0 - înseamnă că am notat zero. Dar aceasta este doar o explicație abstractă. De fapt, există câteva nuanțe asociate cu intervalul de timp al întregului caz.

Vezi imagini:

Totul începe cu faptul că masterul trebuie să coboare linia de date la un nivel logic scăzut, iar din acel moment începe slotul de scriere/citire 1/0, cu o durată de la 60 la 120 μs. Între sloturile de scriere/citire, linia de date trebuie setată la 1 pentru un timp nu mai mic decât timpul de recuperare (1 μs). Pentru a organiza un slot de scriere 0, este necesar să păstrați linia de date la 0 tot timpul slotului, dar dacă este necesar să scrieți la senzorul 1, atunci mai întâi resetați linia de date la 0, apoi așteptați cel puțin 1 μs și eliberați linia la 1, în timpul slotului de scriere 1 (60-120 µs) va scrie 1 pe senzor (vezi figura din dreapta sus).

De fapt, dacă 1 este detectat pe linia de date în termen de 15-60 µs după pornire, atunci va fi scris 1, iar dacă 0 este detectat în 60-240 µs, atunci va fi scris 0.

Citirea datelor este însoțită de dispozitivul master, când resetează linia, așteaptă cel puțin 1 µs, iar timp de 15 µs se uită la ceea ce se întâmplă pe linie: dacă rămâne 0, atunci senzorul transmite 0, dacă a trecut la 1, apoi 1 a fost transmis.

echipe.

comenzi ROM.

Aceste comenzi trebuie să urmeze secvența de inițializare și să conțină instrucțiuni pentru găsirea senzorului corespunzător etc. Capacitatea fiecărei instrucțiuni este de 8 biți. După executarea comenzii corespunzătoare, puteți trimite o comandă de funcție către senzor.

CĂUTARE ROM

Când sistemul este conectat inițial, acesta trebuie să recunoască toate dispozitivele conectate la magistrală. Pentru asta este această comandă. Dar, din moment ce avem un singur senzor, nu vom folosi această comandă.

CITEȘTE ROM

Această comandă este utilizată numai atunci când există un singur senzor pe magistrală. Acest lucru permite dispozitivului master să citească conținutul a 64 de biți de memorie ROM fără a utiliza comanda find. Și dacă încercați să utilizați această comandă cu mai mult de 1 senzori conectați, toți vor începe să transmită conținutul acestei memorie, ceea ce va duce la consecințe nedorite.

MECI ROM

Aceasta este comanda ROM match. Masterul eliberează 64 de biți din ROM-ul corespunzător al senzorului conectat la magistrală și deja stabilește ce să facă cu el (măsoară temperatura etc.). Alți senzori de pe autobuz își vor aștepta rândul în acest moment.

SKIP ROM

Aceasta este comanda ROM skip. Nu ia în considerare adresa vreunui senzor anume de pe magistrală, ci adresează toate odată. După această comandă, puteți emite, de exemplu, o comandă de conversie a temperaturii, iar toți senzorii vor începe conversia. Cu toate acestea, emiterea unei comenzi de citire a memoriei după apelarea acestei comenzi va duce la rezultate imprevizibile (deoarece toți senzorii vor transmite date simultan). Aceasta înseamnă că doar cu un singur senzor conectat o astfel de situație este posibilă.

CĂUTARE ALARMĂ

Această comandă este identică cu prima din acest tabel, cu excepția faptului că caută senzori pe magistrală cu indicatorul de alarmă setat.

comenzi funcționale.

Aceste comenzi efectuează operațiunile funcționale ale oricăror procese, de exemplu, pornirea operației de conversie a temperaturii, copierea memoriei etc. Există 6 comenzi în total, fiecare lungime de biți este de 8 biți.

CONVERTĂ T

Porniți conversia temperaturii. După executarea acestei comenzi, datele de 2 octeți sunt introduse în registrul de temperatură.

SCRIE SCRATCHPAD

Scrie date în registrele 2-4 începând de la al doilea, primul bit cel mai puțin semnificativ. În timpul transferului de date în cele trei registre, trebuie avut grijă ca masterul să nu reseteze senzorii, deoarece este posibilă pierderea datelor.

CITEȘTE SCRATCHPAD

Inițiază un proces de transfer de date pentru toate registrele de memorie scratchpad, începând cu bitul cel mai puțin semnificativ al octetului 0 și terminând cu bitul cel mai semnificativ al octetului 8 (CRC).

COPIEAZĂ SCRATCHPAD

Această instrucțiune copiază conținutul registrelor de octeți 2, 3 și 4 în locațiile EEPROM corespunzătoare.

REAMINTEȚI E2

Această comandă copiază datele din EEPROM în locațiile corespunzătoare din scratchpad. După cum sa menționat mai devreme, această operațiune are loc automat la pornirea alimentării.

CITIȚI SURSA DE ALIMENTARE

Aceasta este, de fapt, toată înțelepciunea lucrului cu senzorul de temperatură DS18B20. Pentru informații mai detaliate, vă rugăm să consultați fișa de date (). Acum este necesar să implementăm toată această afacere în fier.

Schema schematică a dispozitivului:

Desen de asamblare al plăcii de circuit imprimat (scuze pentru calitate, tocmai am făcut-o să funcționeze, pentru depanare):

Nu uitați să oglindiți placa corect

Deoarece aceasta este o placă, am scos-o din vechiul proiect, așa că placa de mai sus este puțin diferită de cea pe care o am (pe a mea, acum am eliminat tot ce era de prisos și a devenit exact ca în pozele de mai sus).

Iată ce mi s-a întâmplat:

S-a dovedit a fi un sandviș

Codul sursă al programului a fost scris în mediul de dezvoltare. Nu am încercat să folosesc maximum de biblioteci de compilatoare avr-gcc gata făcute, ci am scris totul, așa cum se spune, „de mână”. Scopul meu nu este să demonstrez virtuozitatea C, ci doar un exemplu scris într-o oră care le poate oferi începătorilor o idee generală despre lucrul cu senzorul.
Dispozitivul este destinat utilizării într-o cameră, prin urmare nu prevede măsurarea temperaturilor negative.

Descărcați surse și placă de circuit imprimat LAY puteți mai jos

Orice întrebări sau sugestii suplimentare sunt binevenite la: [email protected]

Acest senzor folosește exclusiv protocolul 1-Wire - acesta formează o conexiune care comunică pe magistrală folosind un singur semnal de control. Busul trebuie conectat la sursa de alimentare printr-un rezistor pull-up.

Specificații DS18B20
ParametruSens
Tip ieșire ICDigital
Interval de precizie de detectare± 0,5°C
domeniul de detectare a temperaturii-55°C până la +125°C
curent de alimentare1mA
Gama de tensiune de alimentare3V până la 5,5V
Rezoluție (biți)9...12
Stilul carcasei senzoruluiTO-92
Nu. de pini3
numărul de bază18
Temperatura de operare Max85°C
Temperatura de operare Min-10°C
intervalul de temperatură de funcționare-10°C până la +85°C
curent de ieșire4mA
tipul de ieșireDigital
Pachet / CutieTO-92
Rezoluţie9...12
Tip senzor / traductortemperatura
Tensiune de alimentare Max5,5 V
Tensiune de alimentare min3V
Tip de terminareGaură
Temperatura de functionare, °C0...+55
Umiditatea relativă de funcționare, %...55
ProductieDallas/Maxim
Perioada de garanție de funcționare12 luni de la data cumpararii
Greutate, g10

DS1820, DS18S20, DS18B20- Senzori de temperatură digitali populari de la DALLAS-MAXIM cu o interfață cu un singur fir cu 1 fir. Din cauza ambiguității marcajelor și a abundenței circuitelor de pe acești senzori termici digitali apărute în literatura de radioamatori, considerăm că este necesar să oferim câteva explicații.
Chip DS1820 a fost întrerupt si se recomanda un microcircuit pentru inlocuirea lui DS18S20. Cu toate acestea, trebuie remarcat faptul că microcircuite DS18S20 din pachetul TO-92 sunt etichetate „DS1820” (fără litera S). Cip nou Software DS18S20 compatibil cu vechiul DS1820și, conform producătorului, în majoritatea cazurilor poate fi un înlocuitor direct pentru vechiul DS1820. Poate că producătorul a vrut să indice această compatibilitate prin marcarea fără litera S. Compatibilitatea software a noului DS18S20 cu vechiul DS1820 este garantată dacă programul folosește algoritmul din fișa de date.
După cum se poate observa din tabel, noul cip DS18S20 este realizat într-un pachet standard TO-92, în timp ce vechiul DS1820 avea un pachet alungit. Pe această bază, vă puteți asigura, de asemenea, că vânzătorii nu vă „împinge” cu un microcircuit învechit.
Cipul DS18B20 are întotdeauna marcajul corespunzător „DS18B20” și nu poate fi schimbat la DS1820/DS18S20 și invers fără a schimba codul programului.

Specificații senzori digitali Temperaturi maxime
Tip senzorDS1820 DS18S20DS18B20
MarcareDS1820 DS1820DS18B20
CadruPR-35
(prelungirea TO-92)
TO-92TO-92
Adâncime de biți9 biți 9 biți9...12 biți
Timp de conversie200mS (tip.)
500nS (maximum)
750nS (maximum)750nS (maximum)
Precizie de măsurare ±0,5%
în intervalul de temperatură
0 ….+70°С -10 ….+85°С-10 ….+85°С
Tensiunea de alimentare
pentru precizie de măsurare ±0,5%
4,3-5,5V 3,0-5,5V3,0-5,5V
Descriere

Articolul prevede descriere detaliata senzor de temperatură integrat DS18B20 în rusă. Informația a fost tradusă în limba rusă din documentația oficială a producătorului de senzori, Dallas Semiconductor.

Descriere generala.

DS18B20 este contor digital temperatura, cu rezoluție de conversie de 9 până la 12 cifre și funcție de alarmă de monitorizare a temperaturii. Parametrii de control pot fi setați de utilizator și stocați în memoria nevolatilă a senzorului.

DS18B20 comunică cu microcontrolerul printr-o linie de comunicație cu un singur fir folosind protocolul de interfață cu 1 fir.

Intervalul de măsurare a temperaturii este de la -55 la +125 °C. Pentru intervalul de la -10 la +85 °C, eroarea nu depășește 0,5 °C.

Fiecare cip DS18B20 are un cod serial unic de 64 de biți care permite conectarea mai multor senzori la o linie de comunicație comună. Acestea. printr-un port al microcontrolerului, se poate face schimb de date cu mai multi senzori repartizati pe o distanta considerabila. Modul este extrem de convenabil pentru utilizarea în sistemele de control al mediului, monitorizarea temperaturii în clădiri, nodurile de echipamente.

Pe scurt despre caracteristicile DS18B20.

  • Pentru o interfață cu un singur fir, este suficient un port de comunicație cu controlerul.
  • Fiecare dispozitiv are un cod serial unic de 64 de biți.
  • Posibilitatea de a conecta mai mulți senzori printr-o singură linie de comunicație.
  • Nu este nevoie de componente externe.
  • Abilitatea de a primi energie direct de la linia de comunicație. Tensiune de alimentare între 3,0 V ... 5,5 V.
  • Domeniu de măsurare a temperaturii -55 ... +125 °C.
  • Eroarea nu depășește 0,5 °C în intervalul -10 ... +85 °C.
  • Rezoluție de conversie 9 ... 12 biți. Setat de utilizator.
  • Timpul de măsurare nu depășește 750 ms, cu rezoluția maximă posibilă de 12 biți.
  • Posibilitatea de programare a parametrilor de alarma.
  • Semnalul de alarmă transmite date despre adresa senzorului a cărui temperatură este în afara limitelor specificate.
  • Compatibilitate software cu DS1822.
  • Domenii de aplicare extrem de largi.

Atribuirea concluziilor.

Prezentare generală a senzorului DS18B20.

Figura 1 este o diagramă bloc a senzorului DS18B20. ROM-ul pe 64 de biți stochează codul serial unic al dispozitivului. RAM conține:

  • valoarea măsurată a temperaturii (2 octeți);
  • pragurile de alarmă superioare și inferioare (Th, Tl);
  • registru de configurare (1 octet).

Prin registrul de configurare, puteți seta rezoluția de conversie a senzorului de temperatură. Rezoluția poate fi setată la 9, 10, 11 sau 12 biți. Registrul de configurare și pragurile de alarmă sunt stocate în memoria nevolatilă (EEPROM).

Mod - măsurarea temperaturii.

Funcția principală a DS18B20 este de a converti temperatura senzorului într-un cod digital. Rezoluția de conversie este setată la 9, 10, 11 sau 12 biți. Aceasta corespunde unei rezoluții de 0,5 (1/2) °C, 0,25 (1/4) °C, 0,125 (1/8) °C și 0,0625 (1/16) °C. La pornire, starea registrului de configurare este setată la 12 biți de rezoluție.

După pornire, DS18B20 este într-o stare de repaus cu consum redus. Pentru a iniția o măsurare a temperaturii, comandantul (microcontroler) trebuie să emită o comandă CONVERSIE TEMPERATURĂ. După finalizarea conversiei, rezultatul măsurării temperaturii va fi în 2 octeți din registrul de temperatură, iar senzorul se va opri din nou.

Dacă DS18B20 este conectat conform schemei cu alimentare externă, masterul poate monitoriza starea comenzii de conversie. Pentru a face acest lucru, trebuie să citească starea liniei (efectuează un slot temporar de citire), după finalizarea comenzii, linia va intra într-o stare ridicată. Linia este menținută jos în timp ce comanda de conversie este executată.

DS18B20 măsoară temperatura în grade Celsius. Rezultatul măsurării este prezentat ca un număr de 16 biți, semnat într-un cod suplimentar (Fig. 2.) . Bitul de semn (S) este 0 pentru numerele pozitive și 1 pentru numerele negative. Cu o rezoluție de 12 biți, registrul de temperatură are toți biții semnificativi, adică au valori valabile. Pentru o rezoluție de 11 biți, bitul 0 nu este definit. Pentru o rezoluție de 10 biți, biții 0, 1 nu sunt definiți. Cu o rezoluție de 9 biți, biții 0, 1 și 2 au o valoare nevalidă. Tabelul 2 arată exemple despre cum codurile digitale corespund unei valori de temperatură.

Pentru persoanele care nu au experiență în matematică binară, voi scrie că pentru a calcula temperatura de care aveți nevoie:

  • La valoare pozitivă(S=0) Convertiți codul în zecimal și înmulțiți cu 0,0625 °C.
  • Cu o valoare negativă (S=1), trebuie mai întâi să convertiți codul complementar al celor doi într-unul direct. Pentru a face acest lucru, inversați fiecare cifră a codului binar și adăugați 1. Apoi convertiți în zecimală și înmulțiți cu 0,0625 ° C.

Mod - transmiterea unui semnal de alarmă.

După executarea comenzii de conversie a temperaturii, valoarea măsurată este comparată cu pragurile superioare și inferioare din registrele Th, Tl (format din Figura 3). Acestea sunt valori de octet, semnate, în complementul a doi, S=0 înseamnă că numărul este pozitiv, iar S=1 înseamnă negativ. Valorile pragului sunt stocate în memoria nevolatilă (EEPROM). Th și Tl sunt disponibile pentru citire și scriere prin octeții 2, 3 ai RAM. Mai multe despre asta în secțiune.

Datorită lungimilor diferite ale registrelor TH, TL și de temperatură, acestea se compară doar cu biții 11 până la 4 ai registrului de temperatură. Dacă valoarea temperaturii măsurate depășește TH sau este mai mică decât TL, atunci este generat un simptom de alarmă în DS18B20. Atributul este suprascris cu fiecare măsurătoare de temperatură, iar dacă temperatura revine în limitele specificate, este resetat.

Maestrul poate verifica starea simptomului de alarmă folosind comanda CĂUTARE ALARMĂ. Orice senzor cu un steag activ va răspunde la comanda de căutare. În acest fel, expertul va determina exact care DS18B20 generează alarma. După modificarea valorilor registrelor TH și TL, numai următoarea conversie a temperaturii va genera o indicație de alarmă validă.

Alimentare pentru senzorul de temperatură DS18B20.

Cu toate acestea, atunci când DS18B20 efectuează o conversie a temperaturii sau o copiere a memoriei în funcționarea EEPROM, consumul de curent poate ajunge la 1,5 mA. Un astfel de curent poate provoca o scădere a tensiunii de alimentare a dispozitivului la o valoare inacceptabilă. Curentul rezistenței de tragere și energia stocată în Cpp nu sunt suficiente pentru a alimenta aceste două moduri. Pentru a asigura o putere suficientă dispozitivului, este necesar să se asigure o tragere puternică a magistralei la un nivel ridicat în momentul în care conversia temperaturii sau copierea datelor din memorie în EEPROM este în curs. Acest lucru se poate face cu un MOSFET, așa cum se arată în schema (Figura 4). Busul de date trebuie conectat la o sursă de alimentare puternică:

  • în termen de 10 µs după comenzile CONVERT și COPY MEMORY ;
  • în timpul de conversie (tconv) și transfer de date (nu mai puțin de t WR =10ms).

Nu pot fi permise alte operațiuni în autobuz în această perioadă.

De regulă, pentru microcontrolerele moderne, curentul de ieșire de un nivel ridicat este suficient pentru a alimenta DS18B20. Atunci nu este nevoie de un MOSFET.

Pentru a alimenta DS18B20, poate fi utilizată metoda obișnuită - conectarea unei surse de alimentare externă prin pinul V DD (Figura 5). Avantajele evidente ale acestei metode sunt că nu este nevoie de un MOSFET și că magistrala rămâne liberă în timpul conversiei și poate fi folosită în alte scopuri.

Eu, în astfel de cazuri, folosesc următoarea schemă de conectare DS18B20.

În acest circuit, senzorul de temperatură funcționează în modul de alimentare externă, care este stocat pe un condensator suplimentar printr-o diodă. Circuitul funcționează bine pe dispozitivele mele.

Codul serial pe 64 de biți al dispozitivului.

memorie senzor.

Organizarea memoriei DS18B20 este prezentată în Figura 7. Toată memoria include acces aleatoriu (SRAM) și memorie non-volatilă (EEPROM). EEPROM stochează registrele TH, TL și registrul de configurare. Dacă funcția de alarmă nu este utilizată, registrele TH și TL pot fi utilizate ca registre de uz general. Toate comenzile de gestionare a memoriei sunt descrise în detaliu în secțiune.

Octeții de la adresele 0 și 1 stochează octeții mici și mari ai registrului de temperatură măsurată. Acești octeți sunt doar pentru citire. 2 și 3 octeți - registrele TH și TL. Octetul 4 este registrul de configurare. Mai multe detalii despre acest registru in sectiunea REGISTRU DE CONFIGURARE. Octeții 5, 6, 7 sunt rezervați, nu pot fi scriși și, atunci când sunt citiți, returnează întotdeauna 1.

Octetul 8 este doar pentru citire. Conține codul ciclic (CRC) pentru primii opt octeți. DS18B20 generează acest cod conform metodei descrise în partea .

Datele sunt scrise pe octeții 2, 3 și 4 prin comanda WRITE MEMORY. Datele trebuie transmise începând cu bitul cel mai puțin semnificativ al octetului 2. Pentru a verifica scrierea datelor, memoria poate fi citită cu comanda READ MEMORY [code BEh]. La citire, datele sunt transferate pe magistrală, în secvență începând de la bitul cel mai puțin semnificativ al octetului 0. Datele TH, TL și registrul de configurare sunt scrise în EEPROM prin comanda COPY MEMORY.

Când alimentarea este pornită, datele din memoria EEPROM nevolatilă sunt reîncărcate în memoria cu acces aleatoriu (SRAM). Reîncărcarea datelor din EEPROM se poate face și cu comanda RELOAD E 2. Masterul trebuie să monitorizeze starea magistralei pentru a determina dacă repornirea este completă. Un slot de citire de nivel scăzut înseamnă că repornirea nu s-a încheiat încă. La finalizarea repornirii, DS18B20 predă slotul de citire 1.

Registrul de configurare a senzorului de temperatură.

Octetul 4 al memoriei este registrul de configurare (format din Figura 8). Biții R0, R1 pot seta rezoluția de conversie (codurile din tabelul 3). Când alimentarea este pornită, starea biților R0, R1 = 11, care corespunde unei rezoluții de 12 biți. Trebuie amintit că există o dependență directă a timpului de conversie de rezoluție. Biții 7 și 0…4 sunt rezervați, nu pot fi utilizați, ei returnează 1 când sunt citiți.

Generarea de cod ciclic(CRC)

Octeții codului ciclic (CRC) sunt localizați în codul ROM pe 64 de biți și în al nouălea octet al SRAM. Codul ciclic din ROM este calculat pentru 56 de biți ai codului ROM și este situat în octetul înalt al ROM-ului. Codul ciclic din SRAM este calculat din octeții 0...7 ai SRAM. Codul ciclic vă permite să controlați corectitudinea citirii datelor de la DS18B20. Maestrul calculează codul ciclic pentru datele primite și îl compară cu codul primit. Pe baza acesteia, se ia o decizie cu privire la corectitudinea datelor.

Polinomul generator al codului ciclic arată astfel:

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

Expertul poate calcula codul ciclic folosind generatorul de polinomi, așa cum se arată în Figura 9. Acesta constă dintr-un registru de deplasare și porți XOR. Registrul de deplasare este inițial în starea 0. Biții intră în registrul de deplasare, începând cu bitul cel mai puțin semnificativ, cod din ROM sau din SRAM, câte un bit pe ciclu de deplasare. După deplasarea celui de-al 56-lea bit al ROM sau al bitului înalt al celui de-al 7-lea octet al SRAM, codul ciclic calculat va fi în registrul de deplasare. Dacă mutați 8 biți de ROM sau SRAM primiți de la DS18B20 în generator, atunci în cazul datelor corecte, registrul de deplasare va conține toți 0.

Interfață cu un singur fir 1 fir

Un sistem de magistrală cu 1 fir constă dintr-un dispozitiv master (MASTER) care controlează unul sau mai multe dispozitive slave (SLAVES). DS18B20 poate fi doar slave. Un sistem cu un singur slave se numește un singur punct. Sistem multi-slave - multipunct. Toate comenzile și datele de schimb sunt transmise prin magistrală cu bitul cel mai puțin semnificativ mai întâi. Informații suplimentare despre interfața 1-Wire sunt împărțite în trei secțiuni: configurație hardware, flux de lucru și semnale (tipuri și cerințe de sincronizare).

configurație hardware.

Interfața cu 1 fir are o linie de comunicație. Fiecare dispozitiv (master sau slave) este conectat la magistrala de date cu un colector deschis sau un port de ieșire cu trei stări. Această configurație permite fiecărui dispozitiv din sistem să nu ocupe linia de comunicație atunci când nu este activă și să păstreze magistrala liberă pentru alte dispozitive. În cipul DS18B20, ieșirea (DQ) este o scurgere deschisă. Circuitul său echivalent este prezentat în Figura 10. Busul 1-Wire necesită un rezistor extern de tragere de aproximativ 5 kΩ pentru a furniza un nivel ridicat de semnal atunci când dispozitivele sunt inactive. Dacă o operațiune urmează să fie suspendată, magistrala trebuie să fie setată în mod inactiv până la următoarea operațiune. Autobuzul poate fi într-o stare de nivel înalt pentru un timp arbitrar lung. Scăderea magistralei mai mult de 480 µs va duce la resetarea tuturor componentelor sistemului.

Secvența operațiilor.

Secvența de operații pentru accesarea senzorului de temperatură DS18B20 arată astfel.

  • Inițializare.
  • Comanda ROM (necesară pentru orice comunicare).
  • Comanda funcție (necesară pentru orice comunicare).

Această secvență trebuie respectată cu strictețe. În caz contrar, DS18B20 nu va răspunde la comenzi. ROM SEARCH [cod F0h] și TROUBLE SEARCH [cod ECh] sunt excepții. După generarea acestor două comenzi, dispozitivul master trebuie să revină la primul pas (inițializare).

Inițializare.

Comunicarea cu autobuzul începe întotdeauna cu o operație INITIALIZE. Pentru inițializare, masterul generează un impuls de resetare, urmat de un impuls de prezență de la slave. Impulsul de prezență informează masterul că slave este prezent în sistem și este gata să efectueze o operație. Timpurile de resetare și de prezență ale impulsului sunt descrise în secțiunea .

comenzi de cod ROM.

După ce dispozitivul master primește un impuls de prezență, acesta poate funcționa pe comenzile ROM. Acestea sunt comenzi pentru operațiuni pe codurile individuale de 64 de biți ale fiecărui slave. Ele permit maestrului să aleagă un anumit sclav din multe altele. De asemenea, folosind aceste comenzi, puteți afla câte dispozitive slave sunt conectate la magistrală, tipurile acestora, selectați dispozitivele în alarmă. Există 5 instrucțiuni ROM, fiecare cu lungimea de 8 biți. Maestrul trebuie să trimită o comandă ROM înainte de a executa comenzile funcției DS18B20. Diagrama bloc a execuției comenzilor ROM este prezentată în Figura 11.

Caută în ROM

După pornire, dispozitivul master trebuie să citească codurile ROM ale tuturor dispozitivelor slave conectate la magistrală. Aceasta va determina numărul de dispozitive slave și tipurile acestora. Dispozitivul master învață codurile ROM prin procesul de identificare a codurilor fiecărui dispozitiv de pe magistrală. Trebuie să execute comanda ROM de căutare de câte ori este necesar pentru a identifica toți sclavii. Cu un singur slave în sistem, este mai ușor să utilizați comanda READ ROM. După căutarea ROM-ului, operațiunile cu magistrala trebuie să înceapă din nou cu inițializare.

Citirea ROM-ului

Comanda este utilizată în sistemele cu un singur punct cu un singur slave. Permite dispozitivului gazdă să citească codul ROM pe 64 de biți fără a utiliza comanda SEARCH ROM. Utilizarea comenzii READ ROM într-un sistem multidrop va duce la conflicte de date între slave.

meci ROM

Comanda ROM MATCH, urmată de un cod ROM pe 64 de biți, permite masterului să se adreseze unui anumit slave. Doar un slave al cărui cod se potrivește cu codul transmis va răspunde la comenzile funcției. Alți slave vor fi inactivi până la următorul impuls de resetare.

Sari peste ROM

Comanda permite dispozitivului master să acceseze toate dispozitivele de pe magistrală în același timp, fără a utiliza coduri ROM. De exemplu, puteți rula o operație de conversie a temperaturii pe toate dispozitivele executând ROM SKIP urmat de CONVERSIE TEMPERATURĂ. O comandă READ MEMORY poate urma doar o comandă ROM SKIP cu un slave conectat la legătură. Această secvență de comenzi economisește semnificativ timpul de schimb cu senzorii. Este deosebit de eficient când se utilizează un singur dispozitiv slave în sistem.

Căutare alarmă

Comanda este identică cu comanda SEARCH ROM. Diferă prin faptul că numai sclavii în starea de alarmă vor răspunde la aceasta. Comanda permite slavei să determine ce senzori de temperatură sunt în alarmă de la ultima conversie a temperaturii. După fiecare CĂUTARE DE ALARMĂ, este necesar să reveniți la INITIALIZARE.

Grup de comandă de funcții

După executarea comenzii ROM pentru a selecta DS18B20 cu codul dorit, dispozitivul master poate trimite comenzi pentru funcția senzorului. Acestea vă permit să scrieți și să citiți date din memoria RAM DS18B20, să inițiați conversia temperaturii și să determinați modul de alimentare. Comenzile funcționale ale DS18B20 sunt descrise mai jos, colectate în Tabelul 4, algoritmul de lucru cu ele este prezentat în Figura 12.

Conversia temperaturii

Înregistrare în memorie

Comanda permite încărcarea a 3 octeți în memoria RAM a senzorului. Primul octet este scris în registrul Th (byte de memorie 2), al doilea octet în Th (octetul de memorie 3), iar al treilea octet în registrul de configurare (octetul 4). Masterul transmite date de la bitul cel mai puțin semnificativ. Toți cei trei octeți trebuie să fie scrieți înainte ca masterul să genereze un semnal de resetare.

Citirea memoriei

Comanda este folosită pentru a citi memoria dispozitivului. Transferul de date începe de la bitul cel mai puțin semnificativ al octetului 0 al memoriei și continuă până când toți cei 9 octeți au fost citiți. Dacă este necesară doar o parte din date, gazda poate anula transmisia emitând un impuls de resetare.

Copie de memorie

Comanda reîncarcă valorile registrelor Th, Tl și registrul de configurare din EEPROM în RAM. După trimiterea comenzii RESET, gazda poate executa slotul de citire și DS18B20 va raporta starea de resetare. Trecerea 0 va însemna că operația este încă în curs, 1 - operația este finalizată. Operația de resetare are loc automat când este pornită alimentarea. Prin urmare, memoria RAM conține date valide imediat după ce este aplicată alimentarea.

Citiți modul de alimentare

Tabelul 4. Comenzi ale funcției DS18B20.

COMANDA DESCRIERE CODUL OPERAȚII DE AUTOBUZ NOTĂ
COMANDA DE CONVERSIE TEMPERATURĂ
Măsurarea temperaturii Inițializează măsurarea temperaturii 44h DS18B20 trimite comandantului starea operațiunii de conversie a temperaturii 1
COMENZI DE MEMORIE
Citirea memoriei Citește toată memoria RAM, inclusiv codul CRC ciclic BEh DS18B20 trimite până la 9 octeți către master 2
Înregistrare în memorie Scrie octeții 2, 3 și 4 în RAM
(TH, TL și registru de configurare)
4Eh Master-ul trimite 3 octeți către DS18B20. 3
Copie de memorie Copiază TH, TL și registrul de configurare din RAM în EEPROM 48h 1
Reîncarcă TH, TL și registrul de configurare din EEPROM în RAM. B8h DS18B20 trimite starea de resetare către master
Citiți modul de alimentare Informează comandantul despre modul de alimentare al DS18B20. B4h DS18B20 trimite modul de alimentare către master

Note.

Interfață cu 1 fir

DS18B20 utilizează protocolul de interfață cu 1 fir pentru a comunica, care asigură controlul integrității datelor. Acest protocol definește semnale:

  • resetează pulsul,
  • impulsul prezenței,
  • scriind un bit cu valoarea 0,
  • scrie bit cu valoarea 1,
  • bit de citit cu valoarea 0,
  • bit de citit cu valoarea 1.

Toate aceste semnale, cu excepția impulsului de prezență, sunt generate de master.

Inițializare - resetare și impulsuri de prezență

Orice operațiune de comunicare a DS18B20 începe cu o secvență de inițializare care constă dintr-un impuls de resetare de la master la slave și un impuls de răspuns la prezență de la DS18B20. Acest proces este prezentat în Figura 13. Senzorul de temperatură trimite un impuls de prezență ca răspuns la impulsul de resetare pentru a spune masterului că este conectat la magistrală și gata de utilizare.

În timpul secvenței de inițializare, masterul transmite un impuls de resetare (Tx), conducând magistrala la nivel scăzut timp de cel puțin 480 µs. Apoi, comandantul eliberează magistrala și intră în modul recepție (Rx). Când magistrala este eliberată, este trasă la un nivel logic ridicat de un rezistor de 5 kΩ. Senzorul detectează o margine pozitivă, așteaptă 15-60 µs și transmite un impuls de prezență, ținând linia scăzută timp de 60-240 µs.

Sloturi temporare de citire și scriere.

Schimbul de date pe magistrala 1-Wire are loc în intervale de timp (intervalle de timp). Un interval de timp conține un bit de informații.

Sloturi temporare de înregistrare.

Protocolul definește două tipuri de intervale de timp de scriere a datelor în DS18B20: valoarea de scriere 1 și valoarea de scriere 0. Durata intervalului de scriere este de cel puțin 60 µs cu o pauză de recuperare între sloturi de minim 1,0 µs. Orice slot de scriere este inițiat de marginea descendentă a semnalului magistralei (Figura 14).

Pentru a forma slotul de scriere 1, după ce magistrala a scăzut, masterul trebuie să elibereze magistrala timp de 15 µs. Rezistorul pull-up de 5 kΩ va crea o tensiune de nivel înalt pe magistrală.

Pentru a forma un slot de scriere 0, după conducerea magistralei scăzute, masterul trebuie să continue să țină magistrala scăzută pe toată durata slotului (cel puțin 60 µs).

DS18B20 verifică starea semnalului între 15 și 60 µs, numărând de la începutul slotului de scriere. Starea magistralei pe acest segment corespunde valorii bitului de scris la senzor.

Sloturi de citire temporare.

Durata slotului de citire, precum și a slotului de scriere, trebuie să fie de cel puțin 60 µs cu o pauză de recuperare între sloturi de cel puțin 1 µs. Orice slot de citire este inițiat de marginea descendentă a semnalului magistralei (Figura 14).

După ce gazda a inițializat slotul de citire, DS18B20 transmite un bit de date. Pentru transmisia 1, senzorul lasă magistrala liberă (în stare ridicată), iar pentru transmisia 0, formează un nivel scăzut pe magistrală.

Când transmite 0, DS18B20 trebuie să elibereze magistrala la capătul slotului. Rezistorul de tragere va forma un nivel ridicat pe el. Ieșirea DS18B20 este valabilă timp de 15 µs de la începutul slotului de citire.

Pe fig. 15 arată că suma totală a timpilor de citire Tinit , TRC și TSAMPLE nu trebuie să fie mai mare de 15 µs.

Orez. 16 arată că pentru fiabilitatea maximă a recepției datelor, este necesar să se reducă Tinit și TRC și să se citească starea magistralei la sfârșitul segmentului de 15 µs.

Exemplul 1 de lucru cu DS18B20.

MOD MASTER

DATE AUTOBUZ

EXPLICAȚII

TX resetare RX Prezenţă TX 55h TX Cod ROM pe 64 de biți TX 44h Maestrul trimite o comandă de conversie a temperaturii. TX TX resetare Masterul generează un impuls de resetare. RX Prezenţă DS18B20 răspunde cu un impuls de prezență. TX 55h Maestrul execută comanda de potrivire a codului ROM. TX Cod ROM pe 64 de biți Master trimite codul ROM DS18B20. TX BEh RX 9 octeți de date

Exemplul 2 de lucru cu DS18B20.

MOD MASTER

DATE AUTOBUZ

EXPLICAȚII

TX resetare Masterul generează un impuls de resetare.
RX Prezenţă
TX CCh
TX 4Eh Maestrul execută o comandă de scriere în memorie.
TX 9 octeți de date Master-ul trimite trei octeți (TH, TL și registrul de configurare).
TX resetare Masterul generează un impuls de resetare.
RX Prezenţă DS18B20 răspunde cu un impuls de prezență.
TX CCh Maestrul emite o comandă skip ROM.
TX BEh Maestrul trimite o comandă de citire a memoriei.
RX 9 octeți de date Masterul citește toată memoria RAM, inclusiv codul CRC ciclic. Apoi calculează CRC pentru primii opt octeți și îl compară cu codul primit. Dacă codurile nu sunt egale, comandantul repetă operația de citire.
TX resetare Masterul generează un impuls de resetare.
RX Prezenţă DS18B20 răspunde cu un impuls de prezență.
TX CCh Maestrul emite o comandă skip ROM.
TX 48h Maestrul execută o comandă de copiere a memoriei.
TX Linie DQ conectată la șina de alimentare Maestrul conectează DQ-ul la șina de alimentare pe durata conversiei.

Parametrii maxim admisi DS18B20

Sunt indicate valorile limită ale parametrilor. Depășirea acestor parametri este inacceptabilă. Funcționarea pentru o perioadă lungă de timp la valorile limită ale parametrilor poate reduce fiabilitatea dispozitivului.

Note:

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

PARAMETRU SIMBOL TERMENI MIN. TIP. MAX. ED. MĂSURI.
Scrieți timpul ciclului twr 2 10 Domnișoară
Numărul de înregistrări NEEWR -55°C - +55°C 50000 ciclu
Timp de depozitare t EEDR -55°C - +55°C 10 ani

Date electrice AC (- 55 … + 125 °C, V DD = 3,0 ... 5,5 V).

PARAMETRU SIMBOL TERMENI MIN. TIP. MAX. ED. MĂSURI. PRIM
CHANIE
Timp de conversie a temperaturii tCONV rezoluție 9 biți 93.75 Domnișoară 1
permisiune
10 biți
187.5 Domnișoară 1
permisiune
11 biți
375 Domnișoară 1
permisiune
12 biți
750 Domnișoară 1
Timp de conectare la putere t SPON Trimiterea unei comenzi de conversie a temperaturii 10 Domnișoară
Slot time tSLOT 60 120 Domnișoară 1
Timp de recuperare tREC 1 Domnișoară 1
Timp de înregistrare 0 r LOW0 60 120 Domnișoară 1
Timp de înregistrare 1 tLOW1 1 15 Domnișoară 1
Timp de citire a datelor tRDV 15 Domnișoară 1
Resetează timpul maxim t RSTH 480 Domnișoară 1
Resetați timpul scăzut t RSTL 480 Domnișoară 1,2
Timp de prezență ridicat tPDHIGH 15 60 Domnișoară 1
Timp de prezență scăzut t PDLOW 60 240 Domnișoară 1
Capacitate C IN/OUT 25 pkf

Note:

Figura 18. Diagrame de timp.

Descrierea este grozavă. Senzorii nu sunt ușor de lucrat. Acestea necesită funcții software destul de complexe, dar din punct de vedere hardware, DS18B20 este ușor de conectat, măsurat cu precizie, nu necesită ADC etc.

Ca exemplu de utilizare a senzorilor de temperatură DS18B20, pot cita dezvoltarea mea -. Se folosesc doi senzori de temperatură. Unul măsoară temperatura aerului în interior, al doilea - temperatura radiatorului.

Categorie: . Puteți marca.