Arduino și senzor digital DS18B20. Senzori de temperatură digitală de la senzorul de temperatură semicotatoare Dallas 18 20

Senzorul de temperatură din Arduino este unul dintre cele mai frecvente tipuri de senzori. Dezvoltatorul proiectelor cu termometre pe Arduino este disponibil diferite opțiunidiferă în principiu de acțiune, exactitate, execuție constructivă. Senzorul digital DS18B20 este unul dintre cei mai populari senzori de temperatură, este adesea folosit într-un caz impermeabil pentru măsurarea temperaturii apei sau a altor lichide. În acest articol, veți găsi o descriere a senzorului DS18B20 în limba rusă, vom lua în considerare caracteristicile de conectare la Arduino, principiul funcționării senzorului, descrierea bibliotecilor și schițele.

DS18B20 este un senzor de temperatură digitală cu o varietate de caracteristici utile. În esență, DS18B20 este un microcontroler întreg care poate stoca valoarea măsurării, semnalează ieșirea de temperatură pentru frontierele stabilite (limitele în sine pot fi instalate și modificări), modificați precizia măsurătorilor, metoda de interacțiune cu controlerul și mult Mai Mult. Toate acestea se află într-o clădire foarte mică, care, pe lângă acestea, este disponibilă în performanțe impermeabile.

Senzorul de temperatură DS18B20 are o varietate de tipuri de locuințe. Puteți alege unul din cele trei - 8-pini, astfel (150 de milii), 8-pin μSop și 3-PIN la-92. Acesta din urmă este cel mai frecvent și fabricat într-un caz special de protecție a umidității, astfel încât să poată fi în siguranță sub apă. Fiecare senzor are 3 contacte. Pentru cazul TO-92, trebuie să vă uitați la culoarea firelor: negru - pământ roșu și alb / negru / albastru - semnal. În magazinele online puteți cumpăra un modul DS18B20 gata.

Unde să cumpărați un senzor

În mod natural, DS18B20 este mai ieftin să cumpere mai ieftin pe Aliexpress, deși este vândut în orice magazine online de specialitate online cu Arduino. Iată câteva linkuri, de exemplu:

Memoria senzorului este formată din două tipuri: operaționale și non-volatile - SRAM și EEPROM. Aceste registre și registre de configurare sunt înregistrate, TLS care pot fi utilizate ca registre. scop generalDacă nu este utilizat pentru a indica gama de valori de temperatură admise.

Sarcina principală a DS18B20 este de a determina temperatura și transformarea rezultatului obținut într-o vizualizare digitală. Putem stabili în mod independent permisiunea necesară prin stabilirea cantității de biți de precizie - 9, 10, 11 și 12. În aceste cazuri, rezoluția va fi egală cu 0,5 ° C, 0,25С, 0,125С și 0,0625С.

Măsurătorile de temperatură rezultate sunt salvate în senzorul SRAM. 1 și 2 octeți păstrează valoarea temperaturii rezultată, 3 și 4 Salvați limitele de măsurare, 5 și 6 rezervate, 7 și 8 sunt utilizate pentru determinarea temperaturii de înaltă precizie, ultimele 9 octeți stochează codul CRC rezistent la cod.

Conexiune DS18B20 la Arduino

DS18B20 este un senzor digital. Senzori digitali Transmiteți valoarea temperaturii măsurate sub forma unui anumit cod binar, care intră în pinii digitali sau analogici Arduino și este apoi decodificat. Codurile pot fi cele mai diferite, DS18B20 funcționează prin protocol de date cu 1 fir. Nu vom intra în detaliile acestui protocol digital, indicăm doar minimul necesar pentru înțelegerea principiilor interacțiunii.

Schimbul de informații în 1 fir se datorează următoarelor operații:

  • Inițializare - definiția unei secvențe de semnale de la care începe măsurarea și alte operații. Maestrul aplică un impuls de resetare, după care senzorul trebuie să prezinte un impuls de prezență care raportează disponibilitatea de a efectua operația.
  • Înregistrarea datelor - Byte de date este transmisă senzorului.
  • Citirea datelor - octetul preia de la senzor.

Pentru a lucra cu senzorul, vom avea nevoie de software:

  • Arduino IDE;
  • Biblioteca Onewire Dacă mai mulți senzori sunt utilizați în autobuz, puteți utiliza biblioteca Dallastmperature. Va lucra pe partea de sus a Onewire.

Din echipamentul de care aveți nevoie:

  • Unul sau mai mulți senzori DS18B20;
  • Arduino Microcontroler;
  • Conectori;
  • Rezistor cu 4,7 kΩ (în cazul conectării unui senzor, un rezistor va fi dimensionat de la 4 la 10k);
  • Placă de circuit;
  • Cablu USB pentru conectarea la un computer.

Pentru panoul Arduino, senzorul se conectează pur și simplu: GND de la senzorul termic este atașat la Arduino GND, VDD este conectat la 5V, date pe orice știft digital.

Cea mai simplă diagramă a conectării senzorului digital DS18B20 este prezentată în figură.

Algoritmul de obținere a informațiilor despre temperatura în schiță constă în următorii pași:

  • Definiția adresei senzorului, verificați conexiunea acestuia.
  • Senzorul servește ca o cerință de a citi temperatura și de a stabili valoarea măsurată în registru. Procedura durează mai mult decât restul, este nevoie de aproximativ 750 ms.
  • O comandă este servită pentru a citi informații din registru și trimiterea valorii la "Monitorul portului",
  • Dacă este necesar, acesta este convertit în grade Celsius / Fahrenheit.

Exemplu de schiță simplă pentru DS18B20

Cea mai simplă schiță pentru lucrul cu un senzor digital este după cum urmează. (În schiță folosim biblioteca Onewire, care va fi discutată mai mult decât puțin mai târziu).

#Include. / * * Descrierea interacțiunii cu senzorul digital DS18B20 * Conectarea DS18B20 la Arduino prin Pin 8 * / OneWire DS (8); // Creați un obiect Onewire pentru autobuzul cu 1 fir, cu care veți lucra cu senzorul de configurare VOID (Serial.Bel (9600);) () (// determină temperatura de la senzorul de date DS18b20 Byte ; // loc pentru DS.Reset () Valoarea temperaturii; // Începem interacțiunea cu resetarea tuturor comenzilor anterioare și a parametrilor DS.WRITE (0xcc); // Oferim comanda DS18B20 pentru a sări peste adresa adresei. În Cazul nostru, doar un firmware ds.write (0x44); // dați senzorului DS18B20 pentru a măsura temperatura. Valoarea temperaturii în sine nu este încă încă - senzorul îl va pune în memoria internă a întârzierii (1000); // Microcircitarul măsoară temperatura și așteptăm. DS.Reset (); // Acum vă pregătiți să obțineți valoarea temperaturii DS -WRITE măsurat (0xcc); ds.write (0xbe); // vă rugăm să transferați Valoarea registrelor cu valoarea de temperatură // obțineți și citiți datele \u003d ds.read () Răspuns (); // citiți valoarea temperaturii de date mai tânără \u003d ds.read (); // Acum senior // formează Valoarea finală I: // - prima valoare "lipici", // - apoi multiplicați-l pe coeficientul corespunzător rezoluției (pentru 12 biți în mod implicit - aceasta este 0.0625) Temperatura flotă \u003d ((date<< 8) | data) * 0.0625; // Выводим полученное значение температуры в монитор порта Serial.println(temperature); }

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

Puteți complica un mic program pentru DS18B20 pentru a scăpa de frânarea performanței schiței.

#Include. Onewire DS (8); // Object Onewire Int Temperatura \u003d 0; // Valoarea temperaturii variabile la nivel global din senzorul DS18B20 LastUpDateTime \u003d 0; // variabilă pentru stocarea ultimului timp de citire de la senzorul const int temp_update_time \u003d 1000; // Determinați frecvența de configurare a vidului (Serial.Bel (9600);) buclă () (detecttemperature (); // determinarea temperaturii de la senzorul DS18B20 serial.println (temperatura); // afișează rezultatul Temperatura // t. Variabila de temperatură are un tip int, partea fracțională va fi pur și simplu aruncată) int detecttemperature () (date de octet; ds.reset (ds.write (0xcc); ds.write (0x44) ; dacă (Millis () - LastUpdateTime\u003e Temp_updateTime \u003d Millis (); DS.Reset (); ds.write (0xcccc); ds.write (0xbe); date \u003d ds.read (); date \u003d ds.read () ; // formarea unei temperaturi de valoare \u003d (date<< 8) + data; temperature = temperature >> 4; } }

Dallastemperature și biblioteca DS18B20

În schițele dvs., putem folosi biblioteca de dallastmperatură care simplifică unele aspecte de lucru cu senzorul DS18B20 la 1 fir. Exemplu de schiță:

#Include. // Numărul de Pina Arduino cu un #define PIN_DS18B20 8 // Crearea unui obiect Onewire Onewire (PIN_DS18B20); // Creați un obiect dallastmperatură pentru a lucra cu senzorii, după ce a transferat-o un link către obiect pentru a lucra cu 1 fir. Dallastemperatura Dallassensors (& Onewire); // obiect special pentru stocarea dispozitivului de adresă dispozitive disprețuitor; Loopul Void (VOID) (// Cerere de măsurare a senzorului de temperatură Serial.Print ("Măsurați temperatura ..."); Dallassensors.Requesttemperature (); // cerem DS18B20 să colecteze date serial.println ("executat" ); // solicitarea de a primi o valoare de temperatură a tipărităi salvată (Sensoraddress); // întârziere, astfel încât să puteți dezasambla ceva pe ecranul de întârziere (1000);) // Valori de temperatură a funcției auxiliare pentru dispozitivul DependentDressAdressAddress (Float Tempc \u003d Dallassensors.GetTempC (Deviceddress); Serial.print ("Temp C:"); Serial.println (Tempc);) // Funcție auxiliară pentru a afișa adresa senzorului DS18B20 PRINTADDRESS (pentru (pentru (pentru UINT8_T I \u003d 0; I< 8; i++) { if (deviceAddress[i] < 16) Serial.print("0"); Serial.print(deviceAddress[i], HEX); } }

Onewire Bibliotecă pentru lucrul cu DS18B20

DS18B20 utilizează protocolul cu 1 fir pentru a face schimb de informații cu Arduino, pentru care o bibliotecă excelentă a fost deja scrisă. Puteți și trebuie să utilizați acest lucru pentru a nu implementa manual toate funcțiile. . Pentru a instala biblioteca, descărcați arhiva, despachetați directorul ARDUINO în dosarul bibliotecii. Biblioteca se conectează utilizând comanda #include

Toți senzorii DS18B20 sunt conectați în paralel, pentru toate rezistența suficientă. Folosind biblioteca Onewire, puteți citi simultan toate datele de la toți senzorii. Dacă numărul senzorilor conectați este mai mare de 10, trebuie să selectați un rezistor cu o rezistență de cel mult 1,6 com. De asemenea, pentru măsurarea mai precisă a temperaturii, trebuie să puneți un rezistor suplimentar la 100 ... 120 ohmi între ieșirea de date de pe arduino și placa de date pe fiecare senzor. Puteți afla din ce senzor sau această valoare este obținută utilizând un cod unic de 64 de biți unic, care va fi emis ca urmare a executării programului.

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

Concluzii

Microcircuitul Dallas DS18B20 este un dispozitiv foarte interesant. Senzorii de temperatură și termometrele, create pe bază, sunt potrivite pentru cele mai multe sarcini cu caracteristici dezvoltate de funcțional, relativ nu drum. Un senzor special de popularitate DS18B20 a scăzut ca un dispozitiv rezistent la umiditate pentru măsurarea temperaturii fluidului.

Pentru oportunități suplimentare, este necesar să plătiți dificultatea relativă de a lucra cu senzorul. Pentru a conecta DS18B20, vom avea nevoie în mod necesar un rezistor cu o valoare par de aproximativ 5k. Pentru a lucra cu senzorul din schițele Arduino, trebuie să instalați o bibliotecă suplimentară și să obțineți anumite abilități pentru a lucra cu acesta - totul nu este destul de trivial acolo. Cu toate acestea, puteți cumpăra un modul deja gata, și pentru schiță în majoritatea cazurilor, există suficiente exemple simple date în acest articol.

În procesul de studiere a microcontrolerelor, mai devreme sau mai târziu este necesar să se măsoare un astfel de parametru meteorologic. înconjurătorca temperatura sa. Piața componentelor electronice globale moderne oferă o gamă largă de senzori de temperatură. Principalele diferențe dintre ele constau în intervalul de temperatură măsurată, tensiunea de alimentare, domeniul de aplicare, dimensiunile globale, metodele de conversie a temperaturii, interfața pentru a interacționa cu sistemul de control al utilizatorului. Atât de istoric, sa întâmplat că, în momentul de față unul dintre cei mai populari senzori de temperatură este senzorul DS18.B20.corporația Dallas Semiconductor. Despre el următoarea narațiune.

DS18.B20.- senzor de temperatură digitală cu rezoluție de conversie programabilă.

Trăsături distinctive:

1) utilizând autobuzul de interfață de date cu 1 fir pentru a interacționa cu sistemul de control;
2) prezența unui cod de identificare secvențial unic pe 64 de biți situat în memoria ROM intern și destinată sistemelor multipoactive în care trebuie să fie abordat senzorul specific;
3) Tensiunea de alimentare este de 3-5,5V, ceea ce îi permite nu numai în sisteme de 5 volți, ci și 3,3 (majoritatea microcontrolerelor);
4) Intervalul temperaturii măsurate este de -55 ... + 125 ° C;
5) precizia de ± 0,5 o C, deși este adevărat numai pentru intervalul -10 ... + 85 o C;
6) Rezoluția de conversie este determinată de utilizator și este de 9 ... 12 biți;
7) are declanșatoare interne ale pragurilor de declanșare superioare și inferioare, cu alarmă de alarmă de alarmă pentru sistemele care utilizează logica de lucru termostatică;
8) Acești senzori sunt compatibili programatici cu DS1822. Și utilizate pe scară largă în regulatori termostatici industriali, sisteme industriale, în electronică de consum și alte sisteme sensibile la termoizolare.

Descrierea și principiul funcționării dispozitivului:

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

Se pare așa:

În interior, acest lucru este aranjat foarte simplu, aruncați o privire:

Luați în considerare mai detaliat această diagramă bloc.

Cu toate acestea, hrănirea în acest mod face unele restricții asupra parametrilor de timp ai senzorului. Deținerea liniei de date de ceva timp discută condensatorul, ceea ce va duce la de-energiația liniei VDD interne și, respectiv, senzorul ca un întreg. Prin urmare, un nivel logic ridicat ar trebui menținut în timpul neutilizat pe linia DQ. Trebuie remarcat o remarcă importantă. La conversia temperaturii și copierea datelor de la scratchpad în EEPROM (într-unul din registre), curentul curent consumat de curentul actual VDD poate ajunge la 1.5, ceea ce este o infirmitate a condensatorului intern și va exista o scădere de tensiune mare Pe rezistorul de suspensie, care va afecta inacceptabil funcționarea dispozitivului în general. Pentru a face acest lucru, este necesar să se organizeze o schemă de linie DQ a unui suspendat puternic implementat de acest sistem:

După emiterea unei echipe Convertit.T. sau Copie.Carnet pentru notițe. Trebuie să activați o linie puternică de ridicare MOSFET-TRANSISISTOR DQ nu mai târziu de 10 mx (max.), În funcție de dezvoltatorii senzorilor, după care timpul de conversie (TCONV) sau timpul de transfer de date (TWR \u003d 10 MC) și la acel moment Nu există nicio acțiune cu un suspend puternic pe linia DQ nu ar trebui să fie!

Despre alimentele standard Trebuie să spui puțin, pentru că totul este simplu, iar chiar și MOSFET nu este deloc necesar:

Subsistemul "64-biți ROM și 1-Wire Port" conține un cod de identificare serial unic de 64 de biți situat în memoria non-volatile ROM, de asemenea, în acest nod există o interfață de interacțiune cu sistemul de control cu \u200b\u200b1 fire. Subsistemul logic de control al memoriei transmite date între subsistemul de interfață cu 1 fir și memoria Scratchpad, care, la rândul său, are acces la registre. senzor de temperatura, Înregistrând pragurile superioare și inferioare ale alarmei, registrului de configurare și un registru al generatorului de control pe 8 biți pentru a proteja sistemul de la date incorecte.

Când alimentarea este activată în mod implicit, senzorul are o rezoluție de conversie a 12 biți și introduce imediat modul de alimentare redus. Pentru a iniția convertirea, comandantul trebuie să treacă comanda Convertit.T. . După conversia temperaturii la codul digital, acest cod este amplasat în memoria Scratchpad sub forma unui cuvânt dublu-octet, iar senzorul se întoarce la modul de economisire a energiei.

Conversia temperaturii.

Acum ne vom imagina cum este converti temperatura din senzor. De fapt, ADC este situat în interiorul senzorului de temperatură, iar ieșirea, situată în registrul de temperatură, este transferată în memoria Scratchpad. Datele privind temperatura au următorul format:

Steagul de pictograme S este utilizat pentru a indica numărul de numere (S \u003d 0 - numărul conținut în biți 10-0 pozitiv și s \u003d 1, dacă numărul conținut în aceleași biți este negativ, adică în acest caz, temperatura Pare într-un cod suplimentar (cod supliment până la două)).

Când configurați rezoluția de conversie a 12 biți, toți cei 12 biți (biți 11-biți 0) sunt implicați și conțin date fiabile. La configurarea rezoluției 11 biți, conținutul biți 0 nu trebuie luat în considerare, atunci când setarea a 10 biți nu trebuie luată în considerare 0 și 1 etc.

Alarma este funcția termostatului.

Aceasta oferă 2 registre pe 8 biți, TH și TL. Valoarea pragului superior de temperatură și, respectiv, TL, cea inferioară. Dacă temperatura de deasupra valorii lui sau sub TL este setată la steagul de alarmă. Acest steag de alarmă este detectat de dispozitivul principal prin emiterea unei comenzi. Căutare de alarmă. pe linia DQ. Steagul de alarmă este actualizat la fiecare operație de conversie a temperaturii. Apropo, numai biți de la 11 la cel de-al patrulea registru de temperatură sunt utilizați în comparație cu registrul TH sau TL, rezultă că funcția termostatului funcționează numai pentru valorile temperaturii întregi. Registrele sunt EEPROM fizic cu memoria, astfel încât ei păstrează valorile atunci când alimentarea este oprită. Registrele în sine sunt similare cu registrul de temperatură, doar fiind 8 biți, pavilionul S este absolut aceeași valoare ca în cazul precedent:

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

Formatul acestei memorii este:

Cei mai tineri 8 biți sunt descărcați pentru a desemna familia și conțin valoarea de 0x28. Următorii 48 de biți conțin un număr de serie unic al dispozitivului. Cea mai veche octet conține valoarea controlului CRC, calculată pentru cei mai tineri 56 de biți ai memoriei ROM.

Organizația de memorie.

Memoria senzorului constă dintr-un spațiu de memorie Notepad (Scratchpad) și memorie EEPROM pentru stocarea datelor de configurare și a valorilor registrelor de praguri de alarmă superioară și inferioară.

Când alimentarea este oprită, datele de byte 2, 3 și 4 își salvează valoarea către EEPROM. Ei bine, când este pornit, valoarea din ele rămân neschimbate. Byte 0 și 1 conține valoarea temperaturii convertite, octeți 5, 6, 7 sunt rezervate pentru uz intern și nu pot fi accesibile utilizatorului pentru nevoile sale.

Cea de-a 8-a octet conține valoarea generată de logica încorporată a formării codului CRC pentru octeți de la 0 la 7, care minimizează posibilitatea determinării de temperatură eronată în cele din urmă.

Trebuie remarcat faptul că dacă funcția termostatului nu este utilizată, atunci registrele TH și TL pot fi folosite ca o memorie cu scop general - puteți stoca orice informație în ele.

Datele sunt înregistrate în Bytes 2, 3 și 4 începând cu bitul mai mic 2 utilizând comanda Scratchpad.. Pentru a verifica integritatea datelor înregistrate, le puteți citi, pentru care este necesar să treceți comanda la senzor Citiți scratchpad.După care Maestrul trebuie să primească date de la micul byte 0.

Pentru a salva datele senior, registrul termostatului junior, precum și registrul de configurare în memoria EEPROM, Maestrul trebuie să treacă comanda la comandă Copiați scratchpad..

După cum sa menționat mai devreme, datele deja înregistrate în EEPROM, când alimentarea este dezactivată, este salvată. Dar când alimentarea este pornită din celulele EEPROM corespunzătoare, valorile sunt descărcate automat la registrele de memorie de scratpad corespunzătoare. Convenabil, nu-i așa? :)

În plus, datele înregistrate în EEPROM pot fi în orice moment suprascrise în memoria Scratchpad. Acest lucru este necesar, de exemplu, când ați schimbat configurația în acest proces și apoi trebuie să vă ridicați pe "modul standard de funcționare", adică Întoarceți-vă configurația lucrării care a fost înainte de a schimba conținutul registrelor de memorie alcorării. Iată de fapt, dispozitivul de conducere trebuie să treacă comanda la senzor. Recall E.2 .

În registrul de configurare, se pot determina numai 2 biți: R0 și R1. Aceste biți determină rezoluția conversiei temperaturii și, în mod implicit, este setată la 1, care determină setarea inițială la o rezoluție de conversie pe 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 atât este mai mare rezoluția convertiției, mai mult timp de conversie, de exemplu, pentru o rezoluție pe 12 biți, timpul de conversie este de 750ms (maxim).

Interacțiunea cu sistemul de control.

DS18B20, după cum sa menționat mai devreme, pentru a comunica cu dispozitivul condus, utilizați magistrala de date de interfață cu 1 fire. Prin urmare, pentru a le conecta, sistemul de control trebuie să furnizeze o ieșire de ieșire sau cu starea liniei Hi-Z.

Configurația interfeței senzorilor interne este prezentată mai jos:

Într-o stare inactivă (în stare inactiv), linia DQ este trasă în rezistor la putere "+". Astfel, această linie ar trebui să fie întotdeauna păstrată în această stare între tranzacții (transmisii de date de date). Dacă din orice motiv, tranzacția trebuie suspendată, linia DQ ar trebui păstrată într-un nivel logic ridicat dacă această transmisie continuă în continuare. În procesul de oprire a tranzacției, putem păstra linia DQ pentru o lungă perioadă de timp într-un nivel logic ridicat, începând cu 1 SCS. Dar, dacă autobuzul de date este păstrat la nivelul logic scăzut mai lung de 480μs, va apărea o resetare completă a întregului senzor prezentă în acest autobuz.

Secvența operațiunilor pentru schimb.

De fiecare dată când sistemul de control este accesat la senzor, trebuie urmată următoarea secvență de acțiuni:

1) inițializarea;
2) comanda ROM (urmată de partajarea de date necesară);
3) Comanda funcțională a senzorului (urmată de partajarea de date necesară).

Dacă nu există nici un pas atunci când accesați senzorul lipsește - senzorul nu va răspunde. Excepția este echipa Căutare.rom [ F.0 h.] și Alarma.Căutare. [ Ech.] , după executarea lor, maestrul trebuie să revină la prima etapă a secvenței de control.

Asa de. Toate tranzacțiile încep cu inițializarea. Această operațiune este însoțită de dezvoltarea unui dispozitiv de resetare a impulsului la care dispozitivele acționate (în acest caz, senzorul (senzor)) transmit prezența impulsului de prezență pe care senzorii sunt conectați și gata de lucru.

În general, magistrala de interfață cu 1 fire, implementată în senzor, determină mai multe tipuri de semnale pe linia de date: Reset Pulse, Pulse de prezență, înregistrare 0, înregistrare 1, Citire 0, Citire 1. Toate aceste operații implementează dispozitivul principal , cu excepția prezenței pulsului. Se formează numai senzorul (senzorilor).

Deci, pentru început, dispozitivul principal trece la modul transmițător și stabilește linia DQ la 0 pentru o perioadă de cel puțin 480μs (evidențiată în negru îndrăzneț). Se resetează senzorul. Apoi, linia trebuie eliberată și traduceți dispozitivul principal în modul receptor, în timp ce rezistența de tragere va seta linia de date într-un nivel logic ridicat (evidențiată în culoarea subțire neagră). După ce senzorul onorează frontul în creștere, senzorul va aștepta la 15-60μs și va reseta linia de date la 0 și va fi păstrată pentru 60-240μs. După acest timp, senzorul eliberează linia și va fi instalat în nivelul logic 1 timp de cel puțin 480μs după detectarea senzorului pulsului de evacuare.

Acum, să vorbim despre modul în care se efectuează procesul de transfer de date. În general, biți. Cazul este următorul. Un segment de timp este luat și, în acest timp, maestrul arată că avem pe linie acolo, să spunem că 1 - înseamnă că au înregistrat 1, dacă 0 înseamnă că a fost înregistrată zero. Dar aceasta este doar o explicație abstractă. De fapt, există unele nuanțe asociate cu cadrul temporar al tuturor cazurilor.

Urmăriți imagini:

Totul începe cu faptul că prezentatorul ar trebui să omite linia dată unui nivel logic scăzut și din acest punct, slotul de înregistrare / citire 1/0, care este de la 60 la 120 mx. Între sloturile de înregistrare / citire, linia de date trebuie instalată la 1 la un moment dat, nu mai puțin timp de recuperare (1μs). Pentru a organiza un slot de înregistrare 0, este necesar să păstrați linia de date în 0 tot timpul slotului, dar dacă trebuie să scrieți la senzorul 1, atunci primim prima dată linia de date la 0, atunci așteptăm cel puțin 1 MX și eliberați linia în 1, în timpul slotului de înregistrare 1 (60-1 120μs) vor fi înregistrate 1 la senzor (vezi figura din dreapta sus).

De fapt, dacă pentru 15-60 μs, după început, 1 va fi detectat pe linia de date, apoi 1 va fi înregistrată și dacă va fi eliberat pentru 60-240μs.

Citirea datelor este însoțită de un dispozitiv de conducere atunci când resetează linia, așteptând cel puțin 1 mx și se uită la 15 mx că se întâmplă: Dacă rămâne 0, senzorul transmite 0 dacă este comutat la 1, apoi 1.

Echipe.

Echipa ROM.

Aceste comenzi trebuie să urmeze secvența de inițializare și să conțină instrucțiunile de căutare pentru senzorul corespunzător etc. Descărcarea fiecărei comenzi este de 8bit. După executarea comenzii corespunzătoare, puteți transfera comanda funcțională la senzor.

Căutare Rom.

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

Citește Rom.

Această comandă este utilizată numai atunci când există un singur senzor în autobuz. Acest lucru permite dispozitivului de conducere să citească conținutul celor 64 de biți de memorie ROM fără a utiliza comanda de căutare. Și dacă încercați să utilizați această comandă atunci când numărul de senzori este conectat, mai mult de 1, vor începe să treacă conținutul acestei memorii, ceea ce va duce la consecințe nedorite.

Meciul Rom.

Aceasta este o comandă de conformitate Rom. Expertul eliberează 64 de biți de memorie ROM corespunzătoare conectată la magistrala senzorului și se determină deja ce să facă cu aceasta (măsurați temperatura etc.). Alți senzori de pe anvelopă vor aștepta la rândul lor în acest moment.

Skip Rom.

Aceasta este o comandă ROM. Nu ia în considerare adresa unui anumit senzor în autobuz și a apela imediat la toți. După această comandă, puteți da, de exemplu, comanda de conversie a temperaturii și toți senzorii vor începe conversia. Cu toate acestea, pentru a afișa comanda de citire a memoriei după apelarea acestei comenzi va duce la rezultate imprevizibile (deoarece, deodată, toți senzorii vor transmite date). Deci, numai cu un senzor conectat este posibil o astfel de situație.

Căutare de alarmă.

Această comandă este identică cu prima din acest tabel, cu excepția faptului că senzorii caută anvelopa cu steagul de alarmă setat.

Echipe funcționale.

Aceste comenzi efectuează operațiuni funcționale ale oricăror procese, de exemplu, lansarea operațiunii de conversie a temperaturii, copierea memoriei etc. Comenzi totale 6, descărcarea fiecărui 8bit.

Conversia T.

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

Scratchpad.

Înregistrează datele în registrele 2-4 începând cu o secundă, bitoane mai tineri înainte. În timpul transmiterii, datele din trei registre trebuie monitorizate astfel încât expertul să nu scadă senzorii, deoarece pierderile de date este posibilă.

Citiți scratchpad.

Acesta inițiază procesul de transfer de date la toate registrele de memorie de scraturi, începând cu puținul byte 0 și terminând cu bitul mai vechi de octeți 8 (CRC).

Copiați scratchpad.

Această comandă copiază conținutul registrelor octeților 2, 3 și 4 la celulele EEPROM corespunzătoare.

Recall E.2

Această comandă copiază datele de la EEPROM în locurile potrivite din notele de scraturi. După cum sa menționat mai devreme, când porniți puterea, această operație are loc automat.

Citiți sursa de alimentare

Aici, de fapt, toată înțelepciunea de a lucra cu senzorul de temperatură DS18B20. Pentru informații mai detaliate, atragem la datashet (). Acum este necesar să se implementeze toate aceste activități în hardware.

Schema dispozitivului:

Desenul de asamblare al plăcii de circuite imprimate (îmi cer scuze pentru calitatea, tocmai aș fi lucrat, pentru depanare):

Nu uitați să modificați taxa

Din moment ce acesta este un mock, l-am scos din vechiul proiect, așa că la bord, care este deasupra - puțin nu ceea ce am (pe mine am scos totul prea mult și a devenit exact ca în desenele de mai sus) .

Asta mi sa întâmplat:

Sa dovedit un fel de sandwich

Codul sursă al programului a fost scris în mediul de dezvoltare. Nu am încercat să folosesc maximul de biblioteci compilatoare AVR-GCC gata, dar am scris totul așa cum spun ei, "cu mâna". Scopul meu nu este de a demonstra posesia virtuozo a Si, ci doar un exemplu scris într-o oră capabilă să ofere nou-veniți la prezentarea generală privind lucrul cu senzorul.
Dispozitivul este destinat utilizării în cameră, prin urmare nu prevede măsurarea temperaturilor negative.

Descărcați codul sursă I. pCB. Puneți-vă mai jos

Toate întrebările suplimentare, dorește să aștepte la adresa: [E-mail protejat]

În cele două articole anterioare, am privit și. În acest articol, considerăm schema de conectare a unuia sau mai multor senzori la microcontroler și programarea funcționării MK cu senzorul (senzorii) peste anvelopa cu 1 fire cu sursa de alimentare externă

Schema tipică de conectare a senzorului DS18B20 la microcontroler:


După cum se poate observa din sistem, senzorul DS18B20 (sau senzorii) este conectat la microcontroler dacă au o putere comună, trei conductori:
- Concluzie Numărul 1 - Sârmă comună (masă, Pământ)
- Numărul de ieșire 2 - este DQ , pentru care apare comunicarea dintre MK și DS18B20, se conectează la orice concluzie a oricărui port MK. Ieșirea DQ trebuie să fie "trasă" prin rezistor la Power Plus
- Numărul de ieșire 3 - Puterea senzorului - +5 volți
Dacă în dispozitiv sunt utilizați mai mulți senzori de temperatură, aceștia pot fi conectați la diferite concluzii ale portului MK, dar atunci programul va crește. Senzorii sunt mai bine să se conecteze așa cum se arată în diagrama - în paralel, la o ieșire a portului MK.
Permiteți-mi să vă reamintesc despre magnitudinea rezistenței de strângere:
"Rezistența rezistorului trebuie aleasă din compromisul dintre rezistența cablului utilizat și interferența externă. Rezistența rezistenței poate fi de la 5,1 până la 1 com. Pentru cablurile de rezistență ridicată, este necesar să se utilizeze o rezistență mai mare. Și unde este prezentă interferențe industriale - alegeți rezistență mai mică și utilizați cablu cu o secțiune transversală mai mare. Pentru un taida telefonică (4 vene) timp de 100 de metri, este necesar un rezistor 3.3 COM. Dacă aplicați o "pereche răsucite" chiar 2 categorii, lungimea poate fi mărită da 300 de metri "

Programarea funcționării microcontrolerului cu senzorul DS18B20

Cum este comunicarea senzorului DS18B20 cu un microcontroler, ne vom uita la utilizarea unui program Sensor Dailure și algoritm Builder.

Secvența operațiunilor de comunicare
Este foarte important să urmați secvența stabilită (care este formată din trei puncte) de fiecare dată când accesează DS18B20:
1. Inițializare
2. Comandamentul romului
3. Comandă funcțională DS18B20
Doar două echipe sunt efectuate în două etape: Căutare Rom. și Căutați un accident.

Inițializare DS18B20.

Secvența de inițializare constă din două părți:
- descărcarea pulsului - care formează un microcontroler
- prezența pulsului - care formează DS18B20
Starea inițială a magistralei DQ, conform căreia se produce MK și comunicarea senzorului - logică 1, deoarece autobuzul DQ este "strâns" prin rezistor la sursa de alimentare.
La magistrala DQ, puteți defini dacă senzorul este conectat la microcontroler:
- Dacă autobuzul logic este conectat la senzor
- dacă nu logic 1 înseamnă că senzorul nu este conectat (sau a uitat să se conecteze sau să spargă linia DQ)
Prin urmare, secvența de inițializare poate fi adăugată un alt element - verificarea conexiunii senzorului. Dar rețineți că această verificare poate fi efectuată numai cu un senzor.

Verificați conexiunea senzorului DS18B20:

Unde:
- INI_DS18B20. - inițializarea programului
- dq_pin. - numele pe care l-am atribuit categoria de port la care este conectat senzorul (dacă arăți conform schemei, atunci acesta este portul PB0 IN)
- dq_pin \u003d 1 - Verificarea conexiunii senzorilor - dacă pe unitatea logică DQ_PIN de ieșire, treceți prin săgeată, dacă nu, atunci:
- 1-\u003e term_errorÎn cazul în care Term_Error este o variabilă în care codul de eroare este înregistrat în acest caz "1"
- show_term_error. - Mergeți la afișarea unui subprogram de ieșire de eroare
De exemplu, atunci când utilizați un afișaj cu șapte segmente de trei segmente, puteți emite o astfel de linie:
- ER1.Ce înseamnă - a apărut o eroare, codul de eroare-1 (senzor nu este conectat)

Acum, uitați-vă la senzorii senzorului și vedeți programul de timp al procedurii de inițializare:


Transferați programul la cuvinte:
1. Nivelul inițial al magistralei DQ este o unitate logică (datorită rezisorului de strângere)
2. Microcontrolerul generează un impuls de resetare:
- MK traduce autobuzul DQ într-o stare de zero logic pentru un timp de cel puțin 480 microsecunde
- MK lansează o anvelopă (traducem ieșirea în modul Recepție), în timp ce magistrala DQ se duce din nou într-o stare de unitate logică
3. DS18B20 După ce a găsit o scădere a nivelului în autobuz (de la un zero logic la o unitate logică) după 15-60 microsecunde transmite pulsul de prezență - traduce autobuzul DQ la o stare de zero logic la durata de 60-240 microsecunde
4. La finalizarea impulsului de prezență, DS18B20 returnează autobuzul DQ la nivelul unei unități logice (judecând după graficul - după 480 microsecunde, de la capătul impulsului de resetare, anvelopa trebuie returnată pentru a reveni la logic Nivel unitar)

Acum vom traduce totul în limba programului. Dar trebuie remarcat faptul că încă două erori pot apărea în timpul procesului de inițializare:
- DS18B20 nu a emis un impuls de prezență
- După prezența impulsului din DS18B20, magistrala DQ nu sa întors într-o stare de o unitate logică.


Graficul prezintă caracteristicile minime de timp, astfel încât în \u200b\u200bprogram sunt oarecum supraestimate sau luate maxim (de la minim) valori:
- Resetarea impulsului de la MK - nu 480 A 500 microsecunde
- pauza de la capătul impulsului de evacuare la impulsul prezenței - 60 microsecunde
- întoarcerea anvelopei într-o stare a unei unități logice după un impuls de prezență după 420 microsecunde
Sper că cu prima întrebare - inițializare, ne-am dat seama
Mergeți la următorul pas al secvenței obligatorii - "Comandamentul ROM"

Echipa Rom

Următorul pas al comunicării noastre cu DS18B20. Trebuie să-i trimitem acest lucru necesar rom comanda
Vă reamintesc că comenzile ROM sunt doar cinci:
1. Căutați Rom. - Poate fi utilizat (și nu poate fi aplicat, de exemplu, în majoritatea cazurilor nu îl folosesc) în cazul utilizării mai multor senzori sau alte dispozitive care comunică cu MK pe magistrala cu 1 fire
2. Citirea ROM-ului. - utilizat cu un senzor conectat pentru a citi codul său de 64 de biți
3. potrivirea ROM-ului. - utilizat în cazul în care senzorii de caz mai mult decât unul pentru a face apel la un senzor specific
4. Skip Rom. - Comanda este folosită imediat pentru a face apel la toți senzorii (dispozitivelor) conectate la MK. Este aproape folosit pentru a trimite o comandă funcțională pentru a converti temperatura (definiția temperaturii) de către toți senzorii conectați în același timp
5. Alarma de căutare - Dacă vom seta limita de temperatură DS18B20 și limitarea temperaturii pe care trebuie să o controlam. În acest caz, vom răspunde doar senzorilor de temperatură măsurată care corespund limitelor specificate.

Fiecare comandă ROM are un cod de șaisprezece cifre (precum și comenzi funcționale), deci pentru comoditate în program puteți identifica foarte multe constante care au nume de echipă clare, de exemplu:


Acest tabel stabilește constantele dorite de a lucra cu senzorii de comandă.
După primul pas - inițializarea și transmiterea senzorului DS18B20 a comenzii ROM, senzorul este gata să efectueze o comandă funcțională.
În articolul precedent, am spus în detaliu despre comenzile ROM și echipele funcționale, nu mă voi repeta (vorbesc despre comenzi funcționale).

Două exemple ale algoritmului de lucru cu DS18B20:
1. Când utilizați un senzor:
- Efectuați inițializarea

- Aplicați echipa de funcționare a senzorului - "Conversia temperaturii" (pentru a măsura temperatura)
În procesul de conversie, controlați funcționarea senzorului - Dacă pe magistrala zero, conversia nu se termină dacă unitatea logică este finalizată pe anvelopă.
Acum puteți lua în considerare temperatura de la senzor:
- Efectuați inițializarea
- Să dăm comenzii senzorului ROM - "Skip Rom"
- Aplicați comanda funcției senzorilor - "Citire memorie"
Conform comenzii "Memorie de lectură", senzorul începe să transmită date din memoria sa - toți cei nouă octeți. Dar avem nevoie doar de primii doi octeți - temperatura curentă măsurată de senzor este înregistrată în ele. Prin urmare, am citit doar primii doi octeți și am ieșit din subrutină.

Acest senzor utilizează un protocol excepțional de sârmă - se formează conexiunea, care comunică în autobuz utilizând doar un singur semnal de control. Anvelopa trebuie să fie conectată la o sursă de alimentare printr-un rezistor de tragere.

Specificații DS18B20.
ParametruValoare
Tipul de ieșire IC.Digital.
Sensing Gama de precizie.± 0,5 ° C
Domeniul de detectare a temperaturii.-55 ° C până la + 125 ° C
Curent de aprovizionare1ma.
Gama de tensiune de alimentare.3V la 5.5V.
Rezoluție (biți)9...12
Stilul de caz senzor.La-92.
Nu. De pini.3
Numărul de bază18
Temperatura de funcționare Max.85 ° C.
Temperatura de funcționare 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 / caz.La-92.
Rezoluţie9...12
Tipul senzorului / traductoruluiTemperatura.
Tensiune de alimentare maximă5.5V.
Tensiunea de alimentare min.3V.
Tipul de terminarePrin gaura.
Temperatura de funcționare, ° C0...+55
Umiditatea relativă de funcționare,%...55
ProducțieDallas / Maxim.
Perioada de funcționare de garanție12 luni de la data achiziționării
Greutate, G.10

DS1820, DS18S20, DS18B20 - Senzori termici digital Dallas-maxim maxim, cu interfață cu 1 fire cu un singur fir. Datorită ambiguității marcării și a abundenței circuitelor pe date ale senzorilor termici digitali, care au apărut în literatura amator, considerăm că este necesar să se ofere câteva explicații.
Cip DS1820 eliminat din producție Și pentru înlocuirea sa, este recomandat un microcircuit DS18S20.. Cu toate acestea, ar trebui să fie plătită faptului că jetoanele DS18S20 în cazul TO-92 sunt marcate cu inscripția "DS1820" (fără literele). Microcircuit nou Software-ul DS18S20 este compatibil cu vechiul DS1820 Și, potrivit producătorului, în majoritatea cazurilor poate fi înlocuit direct de vechiul DS1820. Poate că marcajul fără producătorul de litere a vrut să specifice această compatibilitate. Compatibilitatea programului noului DS18S20 cu vechiul DS1820 este garantată dacă programul este aplicat din algoritmul fișa tehnică.
După cum se poate observa din tabel, noul microcircuit DS18S20 este realizat în cazul standard la 92, iar vechiul DS1820 a avut o carcasă alungită. Pe această bază, puteți, de asemenea, asigurați-vă că vânzătorii nu "stoarce" un cip depășit.
Microcircuitul aceluiași DS18B20 are întotdeauna eticheta corespunzătoare "DS18B20" și nu pot fi înlocuite cu DS1820 / DS18S20 și înapoi fără a schimba codul programului.

Specificațiile senzorilor de temperatură maximă maximă
Tipul senzoruluiDS1820. DS18S20.DS18B20.
MarcareDS1820. DS1820.DS18B20.
Locuințe.PR-35.
(Udlen. La-92)
La-92.La-92.
Bigness.9-bit. 9-bit.9 ... 12bit
Timp de conversie200ms (tip.)
500ns (max)
750ns (max)750ns (max)
Precizia măsurării ± 0,5%
În intervalul de temperatură
0 .... + 70 ° С -10 ... + 85 ° С-10 ... + 85 ° С
Tensiunea de alimentare
pentru precizia măsurării ± 0,5%
4.3-5.5V. 3.0-5.5v.3.0-5.5v.
Descriere

DS18B20. - senzor de temperatură digitală DALC DALLAS. Trimite datele de temperatură utilizând doar o ieșire digitală și un protocol special, numit 1-sârmă. Puteți conecta mai mulți senzori la un singur contact. Senzorul măsoară temperatura în grade Celsius.

Specificații DS18B20.

  • Senzorul poate fi utilizat cu tensiune de la 3 la 5,5V
  • Senzorul poate măsura temperatura de la -55 la 125 ° C
  • Senzorul are o rezoluție digitală de la 9 la 12 biți
  • Acuratețea de măsurare +/- 0,5 ° C în intervalul de la -10 până la 85 ° C
  • Precizia măsurării: + / - 2 ° C pentru intervalul de la -55 la 125 ° C
  • Măsurarea drift +/- 0,2 ° C

Schema de conectare DS18B20.

Ce este permisiunea?

ÎN specificații Este raportat că senzorul DS18B20 poate măsura temperatura cu o rezoluție diferită. Rezoluția este ca un conducător: milimetri între centimetri. De asemenea, cu rezoluția DS18B20 este o etapă între etapele consistente ale grade Celsius.

Rezoluția este selectată utilizând numărul de biți. Gama de alegere de la 9 la 12 biți. Alegerea permisiunii implică anumite consecințe. Cu cât rezoluția este mai mare, cu atât trebuie să așteptați rezultatul măsurării.

Pentru permisiunea de 9 biți, există 2 pași între nivelurile secvențiale:

  • 0,0 ° C.
  • 0,5 ° C.

Pentru permisiunile de 10 biți există 4 pași între nivelurile secvențiale:

  • 0,0 ° C.
  • 0,25 ° C.
  • 0,5 ° C.
  • 0,75 ° C.

În acest caz, citim temperatura cu o rezoluție de 0,25 ° C. Timpul de măsurare pentru rezoluția de 10 biți este de 187,5 ms, ceea ce vă permite să efectuați 5.3 măsurători pe secundă.

Pentru permisiunea de 11 biți, există 8 pași între nivelurile consistente:

  • 0,0 ° C.
  • 0,125 ° C.
  • 0,25 ° C.
  • 0,375 ° C.
  • 0,5 ° C.
  • 0,625 ° C.
  • 0,75 ° C.
  • 0,875 ° C.

Adică rezoluția este de 0,125 ° C. Timpul de măsurare pentru permisiunile de 11 biți este de 375 ms. Acest lucru vă permite să efectuați 2.6 măsurători pe secundă.

Pentru permisiunea de 12 biți, există 16 pași între nivelurile consistente:

  • 0,0 ° C.
  • 0,0625 ° C.
  • 0,125 ° C.
  • 0,1875 ° C.
  • 0,25 ° C.
  • 0,3125 ° C.
  • 0,375 ° C.
  • 0,4375 ° C.
  • 0,5 ° C.
  • 0,5625 ° C.
  • 0,625 ° C.
  • 0,6875 ° C.
  • 0,75 ° C.
  • 0,8125 ° C.
  • 0,875 ° C.
  • 0,9375 ° C.

În consecință, rezoluția este de 0,0625 ° C. Timp de măsurare pentru permisiunea de 12 biți în zona de 750 ms. Adică, puteți face 1.3 măsurători pe secundă.

Care este acuratețea măsurării?

Nimic din lume, și mai ales în electronică, nu este perfect. Puteți aborda doar perfecțiunea, cheltuiți tot mai mulți bani și forță. De asemenea, cu acest senzor. Are niște inexactități pe care trebuie să le cunoașteți.

Caracteristicile tehnice spun că în intervalul de măsurare de la -10 până la 85 ° C, senzorul DS18B20 are precizie la nivelul +/- 0,5 ° C. Aceasta înseamnă că atunci când avem o temperatură de 22,5 ° C în cameră, senzorul poate returna rezultatul măsurătorilor de la 22 la 23 ° C la noi. Adică, poate arăta cu 0,5 ° C mai mult sau mai puțin. Toate acestea depind de caracteristicile individuale ale senzorului.

În intervalul de la -55 la 125 ° C, eroarea de măsurare poate crește la +/- 2 ° C. Adică atunci când măsurați ceva cu o temperatură de 100 ° C, senzorul poate arăta temperatura de la 98 la 102 ° C.

Toate aceste abateri pot fi oarecum diferite pentru fiecare temperatură, dar atunci când se măsoară aceeași temperatură, deviația va fi întotdeauna aceeași.

Ce este o drift de măsurare?

Drift de măsurare este cea mai gravă formă de inexactitate. Esența driftului de măsurare este aceea că atunci când se măsoară o temperatură constantă - cu o singură măsurătoare, senzorul poate prezenta o temperatură și pe altul ulterior (prin valoarea drivetului).

DRAF DS18B20 +/- 0,2 ° C. De exemplu, atunci când o temperatură constantă este de 24 ° C în cameră, senzorul poate produce rezultatul în intervalul de la 23,8 ° C până la 24,2 ° C.

(379,0 KB, descărcat: 913)