Teknologi Sensor Suhu

Reka bentuk Penderia Suhu Digital DS18B20 untuk STM32

Kit Probe Keluli Tahan Karat Wayar Pengesan Suhu DS18B20

DS18B20 ialah penderia suhu digital yang menggunakan pemasaan bas tunggal untuk berkomunikasi dengan hos. Sahaja 1 Wayar diperlukan untuk melengkapkan bacaan data suhu;

DS18B20 mempunyai nombor siri produk 64-bit terbina dalam untuk pengenalan mudah. Berbilang penderia DS18B20 boleh disambungkan kepada 1 Wayar, dan melalui pengesahan identiti 64-bit, maklumat suhu yang dikumpul daripada penderia yang berbeza boleh dibaca secara berasingan.

Kit Probe Keluli Tahan Karat Wayar Pengesan Suhu DS18B20

Kit Probe Keluli Tahan Karat Wayar Pengesan Suhu DS18B20

DS18B20 sensor suhu kit TPE Overmolding

DS18B20 sensor suhu kit TPE Overmolding

1 wayar DS18B20 sensor suhu

1 wayar DS18B20 sensor suhu

Pengenalan kepada DS18B20
2.1 Ciri utama DS18B20
1. Penukaran dan output suhu digital sepenuhnya.
2. Komunikasi data bas tunggal lanjutan.
3. Sehingga resolusi 12-bit, dengan ketepatan sehingga ±0.5 darjah Celsius.
4. Kitaran kerja maksimum pada resolusi 12-bit ialah 750 milisaat.
5. Mod kerja parasit boleh dipilih.
6. Julat suhu pengesanan ialah –55° C ~+125° C (–67° F ~+257° F).
7. EEPROM terbina dalam, fungsi penggera had suhu.
8. 64-ROM fotolitografi bit, nombor siri produk terbina dalam, mudah untuk sambungan berbilang mesin.
9. Pelbagai bentuk pembungkusan, menyesuaikan diri dengan sistem perkakasan yang berbeza.

Struktur pakej cip DS18B20

Struktur pakej cip DS18B20

2.2 Fungsi pin DS18B20
GND voltan tanah;
Bas data tunggal DQ;
Voltan bekalan kuasa VDD;
Pin kosong NC;

RAM cip DS18B20 dan gambar rajah struktur EEPROM

RAM cip DS18B20 dan gambar rajah struktur EEPROM

2.3 DS18B20 prinsip kerja dan aplikasi
Pengesanan suhu DS18B20 dan output data digital disepadukan sepenuhnya pada satu cip, jadi ia mempunyai keupayaan anti-gangguan yang lebih kuat. Satu kitaran kerjanya boleh dibahagikan kepada dua bahagian, iaitu pengesanan suhu dan pemprosesan data.

18B20 mempunyai tiga bentuk sumber ingatan. Mereka adalah: memori baca sahaja ROM, digunakan untuk menyimpan kod DS18B20ID; yang pertama 8 bit ialah kod siri satu baris (Kod DS18B20 ialah 19H), berikut 48 bit ialah nombor siri unik cip; yang terakhir 8 bit ialah kod CRC (pemeriksaan redundansi) daripada perkara di atas 56 bit. Data ditetapkan pada pengeluaran dan tidak boleh diubah oleh pengguna. DS18B20 mempunyai sejumlah 64 bit ROM.

Daftar data RAM, digunakan untuk pengiraan dalaman dan capaian data, data hilang selepas kegagalan kuasa, DS18B20 mempunyai sejumlah 9 bait RAM, setiap bait ialah 8 bit. Bait pertama dan kedua ialah maklumat nilai data selepas penukaran suhu; bait ketiga dan keempat ialah imej cermin EEPROM pengguna (biasa digunakan untuk penyimpanan nilai penggera suhu). Nilainya akan dimuat semula apabila kuasa ditetapkan semula. Bait kelima ialah imej cermin EEPROM ketiga pengguna. yang ke-6, 7ke, dan bait ke-8 ialah daftar kiraan, yang direka untuk membolehkan pengguna memperoleh resolusi suhu yang lebih tinggi. Ia juga merupakan unit storan sementara untuk penukaran dan pengiraan suhu dalaman. Bait ke-9 ialah kod CRC yang pertama 8 bait. EEPROM ialah memori tidak meruap yang digunakan untuk menyimpan data yang perlu disimpan untuk jangka masa yang lama, nilai penggera suhu atas dan bawah, dan data pengesahan. DS18B20 mempunyai sejumlah 3 bit EEPROM, dan terdapat imej cermin dalam RAM untuk memudahkan operasi pengguna.

DS18B20 berfungsi dalam mod resolusi 12-bit secara lalai. Data 12-bit yang diperoleh selepas penukaran disimpan dalam dua RAM 8-bit DS18B20 (dua bait pertama). Yang pertama 5 bit dalam binari adalah bit tanda. Jika suhu yang diukur lebih besar daripada 0, ini 5 bit adalah 0. Hanya darabkan nilai yang diukur dengan 0.0625 untuk mendapatkan suhu sebenar. Jika suhu kurang daripada 0, ini 5 bit adalah 1. Nilai yang diukur perlu diterbalikkan, ditambah oleh 1, dan kemudian didarab dengan 0.0625 untuk mendapatkan suhu sebenar. Atau gunakan operasi bit untuk mengekstrak suhu: tempat perpuluhan menduduki tempat yang lebih rendah 4 bit, dan bit atas adalah bit integer (nombor negatif tidak diambil kira).

2.4 Jadual arahan ROM cip DS18B20
1. Baca Rom [33H] (perkataan perintah heksadesimal berada dalam kurungan segi empat sama).
Perintah ini membenarkan pengawal bas membaca ROM 64-bit DS18B20. Arahan ini hanya boleh digunakan apabila terdapat hanya satu DS18B20 di dalam bas. Jika lebih daripada satu disambungkan, konflik data akan berlaku semasa komunikasi.

2. atch ROM [55H]
Arahan ini diikuti dengan nombor siri 64-bit yang dikeluarkan oleh pengawal. Apabila terdapat berbilang DS18B20 di dalam bas, hanya cip dengan nombor siri yang sama seperti yang dikeluarkan oleh pengawal boleh bertindak balas, dan cip lain akan menunggu set semula seterusnya. Arahan ini sesuai untuk sambungan cip tunggal dan berbilang cip.

3. Langkau rom [CCH]
Arahan ini menjadikan cip tidak bertindak balas kepada kod ROM. Dalam kes bas tunggal, arahan ini boleh digunakan untuk menjimatkan masa. Jika arahan ini digunakan apabila berbilang cip disambungkan, konflik data akan berlaku, mengakibatkan kesilapan.

4. Cari ROM [F0H]
Selepas cip dimulakan, arahan carian membolehkan ROM 64-bit semua peranti dikenal pasti melalui penyingkiran apabila berbilang cip disambungkan ke bas.

5. Carian Penggera [SETIAP]
Dalam kes berbilang cip, arahan carian cip penggera hanya bertindak balas kepada cip yang memenuhi keadaan penggera suhu lebih tinggi daripada TH atau kurang daripada TL. Selagi cip tidak dimatikan, keadaan penggera akan dikekalkan sehingga suhu diukur semula dan keadaan penggera tidak tercapai.

6. Tulis Pad Conteng [4EH]
Ini adalah arahan untuk menulis data ke RAM. Dua bait data yang ditulis kemudiannya akan disimpan di alamat 2 (TH RAM penggera) dan alamat 3 (TL penggera RAM). Proses menulis boleh ditamatkan dengan isyarat set semula.

7. Baca Pad Conteng (membaca data daripada RAM) [BEH]
Arahan ini akan membaca data daripada RAM, bermula dari alamat 0 dan terpulang kepada alamat 9, melengkapkan pembacaan keseluruhan data RAM. Cip membenarkan isyarat set semula untuk menamatkan proses membaca, itu, bait seterusnya yang tidak diperlukan boleh diabaikan untuk mengurangkan masa membaca.

8. Salin Pad Conteng (salin data RAM ke EEPROM) [48H]
Arahan ini menyimpan data dalam RAM ke dalam EEPROM supaya data tidak akan hilang apabila kuasa dimatikan. Oleh kerana cip sibuk dengan pemprosesan storan EEPROM, apabila pengawal menghantar slot masa baca, keluaran bas “0”, dan apabila kerja penyimpanan selesai, bas akan keluar “1”.
Dalam mod kerja parasit, Tarik ke atas yang kuat mesti digunakan serta-merta selepas arahan ini dikeluarkan dan dikekalkan sekurang-kurangnya 10MS untuk mengekalkan operasi cip.

9. Tukarkan T (penukaran suhu) [44H]
Selepas menerima arahan ini, cip akan melakukan penukaran suhu dan menyimpan nilai suhu yang ditukar dalam alamat 1 dan 2 RAM. Oleh kerana cip sibuk dengan pemprosesan penukaran suhu, apabila pengawal menghantar slot masa baca, keluaran bas “0”, dan apabila kerja penyimpanan selesai, bas akan keluar “1”. Dalam mod kerja parasit, Tarik ke atas yang kuat mesti digunakan serta-merta selepas arahan ini dikeluarkan dan dikekalkan sekurang-kurangnya 500MS untuk mengekalkan operasi cip.

10. Ingat EEPROM (Salin nilai penggera dalam EEPROM ke RAM) [B8H]
Arahan ini menyalin nilai penggera dalam EEPROM kepada bait ke-3 dan ke-4 dalam RAM. Oleh kerana cip sibuk dengan pemprosesan penyalinan, apabila pengawal menghantar slot masa baca, keluaran bas “0”, dan apabila kerja penyimpanan selesai, keluaran bas “1”. Di samping itu, arahan ini akan dilaksanakan secara automatik apabila cip dihidupkan dan ditetapkan semula. Dengan cara ini, dua bit bait penggera dalam RAM akan sentiasa menjadi imej cermin data dalam EEPROM.

11. Baca Bekalan Kuasa (Suis Mod Kerja) [B4H]
Selepas arahan ini dikeluarkan, jurang masa baca dikeluarkan, dan cip akan mengembalikan perkataan status kuasanya. “0” ialah keadaan kuasa parasit dan “1” ialah keadaan kuasa luar.

2.5 DS18B20 Rajah Masa
2.5.1 DS18B20 Set Semula dan Gambarajah Perhubungan Respons
Tetapan semula mesti dilakukan sebelum setiap komunikasi. Masa set semula, masa menunggu, dan masa tindak balas hendaklah diprogramkan dengan ketat mengikut masa.
DS18B20 membaca dan menulis jurang masa: Pembacaan dan penulisan data DS18B20 disahkan oleh bit pemprosesan jurang masa dan perkataan perintah untuk bertukar maklumat.

DS18B20 set semula dan rajah perhubungan tindak balas

DS18B20 set semula dan rajah perhubungan tindak balas

2.5.2 Tulis data 0 dan data 1 kepada DS18B20
Dalam 15uS pertama jurang masa data tulis, bas perlu ditarik rendah oleh pengawal, dan kemudian ia akan menjadi masa pensampelan cip untuk data bas. Masa pensampelan ialah 15~60uS. Jika pengawal menarik bas tinggi semasa masa pensampelan, maksudnya menulis “1”, dan jika pengawal menarik bas rendah, maksudnya menulis “0”.
Setiap bit penghantaran harus mempunyai bit permulaan tahap rendah sekurang-kurangnya 15uS, dan data seterusnya “0” atau “1” hendaklah disiapkan dalam tempoh 45uS.
Masa penghantaran keseluruhan bit hendaklah dikekalkan pada 60~120uS, jika tidak, komunikasi biasa tidak dapat dijamin.
Nota: DS18B20 membaca dan menulis data daripada bit rendah.

Tulis data 0 dan data 1 kepada DS18B20

Tulis data 0 dan data 1 kepada DS18B20

2.5.3 Membaca data 0 dan data 1 daripada DS18B20
Masa pensampelan kawalan semasa jurang masa baca harus lebih tepat. Semasa jurang masa membaca, hos juga mesti menjana tahap rendah sekurang-kurangnya 1uS untuk menunjukkan permulaan masa baca. Kemudian, dalam 15uS selepas bas dilepaskan, DS18B20 akan menghantar bit data dalaman. Pada masa ini, jika kawalan mendapati bas itu tinggi, maksudnya membaca “1”, dan jika bas rendah, ia bermaksud membaca data “0”. Sebelum membaca setiap bit, pengawal menambah isyarat mula.

Baca data 0 dan data 1 daripada DS18B20

Baca data 0 dan data 1 daripada DS18B20

Nota: Bit data mesti dibaca dalam 15uS dari permulaan jurang bacaan untuk memastikan komunikasi yang betul.

Semasa komunikasi, 8 bit daripada “0” atau “1” digunakan sebagai bait, dan bacaan atau penulisan bait bermula dari bit rendah.

2.5.4 Susunan suhu bacaan sekali (hanya satu DS18B20 di dalam bas)

1. Hantar isyarat set semula
2. Kesan isyarat tindak balas
3. Hantar 0xCC
4. Hantar 0x44
5. Hantar isyarat set semula
6. Kesan isyarat tindak balas
7. Tulis 0xcc
8. Tulis 0xbe
9. gelung 8 kali untuk membaca bait rendah suhu
10. gelung 8 kali untuk membaca bait tinggi suhu
11. Mensintesis data dan proses suhu 16-bit

3. Kod pemandu

3.1 DS18B20.c
#termasuk “ds18b20.h”
/*
Fungsi: Permulaan DS18B20
Sambungan perkakasan: PB15
*/
batal DS18B20_Init(batal)
{
RCC->APB2ENR|=1<<3; //PB
GPIOB->CRH&=0x0FFFFFFF;
GPIOB->CRH|=0x30000000;
GPIOB->ODR|=1<<15; //Tarik ke atas
}

/*
Fungsi: Semak sama ada peranti DS18B20 wujud
Nilai pulangan: 1 bermakna peranti itu tidak wujud 0 bermakna peranti itu normal
*/
u8 DS18B20_CheckDevice(batal) //Mengandungi set semula nadi, nadi pengesanan
{
DS18B20_OUTPUT_MODE();//Mulakan ke mod output
DS18B20_OUT=0; //Hasilkan semula nadi
DelayUs(750); //Hasilkan 750us tahap rendah
DS18B20_OUT=1; //Lepaskan bas
DelayUs(15); //Tunggu respons DS18B20
jika(DS18B20_CleckAck())//Kesan nadi kewujudan
{
kembali 1;
}
kembali 0;
}

/*
Fungsi: Kesan nadi kewujudan peranti DS18B20
Nilai pulangan: 1 menunjukkan ralat 0 menunjukkan normal
*/
u8 DS18B20_CleckAck(batal)
{
u8 cnt=0;
DS18B20_INPUT_MODE();//Mulakan ke mod input
sementara(DS18B20_IN&&cnt<200) //Tunggu nadi kewujudan tindak balas DS18B20
{
DelayUs(1);
cnt++;
}
jika(cnt>=200)kembali 1; //ralat

cnt=0;
sementara((!DS18B20_IN)&&cnt<240) //tunggu DS18B20 melepaskan bas
{
DelayUs(1);
cnt++;
}
jika(cnt>=240)kembali 1; //ralat
kembali 0;
}

/*
Fungsi: Tulis satu bait
Mula-mula belajar menulis sedikit.
*/
batalkan DS18B20_WriteByte(u8 cmd)
{
u8 i;
DS18B20_OUTPUT_MODE(); //Mulakan ke mod output
untuk(i=0;i<8;i++)
{
DS18B20_OUT=0; //Menjana jurang masa menulis (menulis permulaan)
DelayUs(2);
DS18B20_OUT=cmd&0x01; //Hantar bit data sebenar
DelayUs(60); //Tunggu sehingga penulisan selesai
DS18B20_OUT=1; //Lepaskan bas dan bersedia untuk penghantaran seterusnya
cmd>>=1; //Teruskan menghantar bit data seterusnya
}
}

/*
Fungsi: Baca satu bait
Mula-mula belajar membaca sedikit.
*/
u8 DS18B20_ReadByte(batal)
{
u8 i,data=0;
untuk(i=0;i<8;i++)
{
DS18B20_OUTPUT_MODE(); //Mulakan ke mod output
DS18B20_OUT=0; //Hasilkan jurang masa baca (baca mula)
DelayUs(2);
DS18B20_OUT=1; //Lepaskan bas
DS18B20_INPUT_MODE(); //Mulakan ke mod input
DelayUs(8); //Tunggu output data DS18B20
data>>=1; //Isikan tinggi sedikit dengan 0, lalai ialah 0
jika(DS18B20_IN) data|=0x80;
DelayUs(60);
DS18B20_OUT=1; //Lepaskan bas, tunggu untuk membaca sedikit data seterusnya
}
mengembalikan data;
}

/*
Fungsi: Baca data suhu DS18B20 sekali
Nilai pulangan: data suhu dibaca
Keadaan yang dipertimbangkan: Terdapat hanya satu DS18B20 yang disambungkan ke bas
*/
u16 DS18B20_ReadTemp(batal)
{
u16 suhu=0;
u8 temp_H,temp_L;
DS18B20_CheckDevice(); //Hantar nadi set semula, mengesan nadi
DS18B20_WriteByte(0xCC); //Langkau pengesanan jujukan ROM
DS18B20_WriteByte(0x44); //Mulakan penukaran suhu

//Tunggu sehingga penukaran suhu selesai
sementara(DS18B20_ReadByte()!=0xFF){}

DS18B20_CheckDevice(); //Hantar nadi set semula, mengesan nadi
DS18B20_WriteByte(0xCC); //Langkau pengesanan jujukan ROM
DS18B20_WriteByte(0xBE); //Baca suhu

temp_L=DS18B20_ReadByte(); //Baca data suhu rendah
temp_H=DS18B20_ReadByte(); //Baca data suhu tinggi
temp=temp_L|(temp_H<<8); //Suhu tersintesis
temp balik;
}

3.2 DS18B20.h

#ifndef DS18B20_H
#takrifkan DS18B20_H
#termasuk “stm32f10x.h”
#termasuk “sys.h”
#termasuk “kelewatan.h”
#termasuk “ds18b20.h”
#termasuk “usart.h”

/*Antara muka pakej*/

//Mulakan DS18B20 kepada mod input
#tentukan DS18B20_INPUT_MODE() {GPIOB->CRH&=0x0FFFFFFF;GPIOB->CRH|=0x80000000;}

//Mulakan DS18B20 kepada mod output
#tentukan DS18B20_OUTPUT_MODE(){GPIOB->CRH&=0x0FFFFFFF;GPIOB->CRH|=0x30000000;}

//Output port IO DS18B20
#takrifkan DS18B20_OUT PBout(15)

//Input port IO DS18B20
#takrifkan DS18B20_IN PBin(15)

//Pengisytiharan fungsi
u8 DS18B20_CleckAck(batal);
u8 DS18B20_CheckDevice(batal);
batal DS18B20_Init(batal);
u16 DS18B20_ReadTemp(batal);
u8 DS18B20_ReadByte(batal);
batalkan DS18B20_WriteByte(u8 cmd);
#endif

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png
3.3 Fungsi kelewatan

/*
Fungsi: Kelewatan dalam diri kita
*/
batalkan DelayUs(int kami)
{
#ifdef _SYSTICK_IRQ_
int i,j;
untuk(i=0;iVAL=0; //nilai kaunter CNT
SysTick->MUAT=9*kami; //9 bermakna 1us
SysTick->CTRL|=1<<0; //Mulakan pemasa
buat
{
tmp=SysTick->CTRL; //Baca status
}sementara((!(tmp&1<<16))&&(tmp&1<<0));
SysTick->VAL=0; //nilai kaunter CNT
SysTick->CTRL&=~(1<<0); //Matikan pemasa
#endif
};i++)>

3.4 main.c Panggil DS18B20 untuk membaca suhu dan mencetaknya ke port bersiri

#termasuk “stm32f10x.h”

#termasuk “ds18b20.h”

u8 DS18B20_ROM[8]; //Simpan kod ROM 64-bit DS18B20

int utama(batal)
{
u16 temp;
USARTx_Heat(USART1,72,115200);//Permulaan port bersiri 1
DS18B20_Haba(); //Permulaan DS18B20

/*1. Baca kod ROM 64-bit DS18B20*/
//Hantar nadi set semula, mengesan nadi kewujudan
sementara(DS18B20_CheckDevice())
{
printf(“Peranti DS18B20 tidak wujud!\n”);
KelewatanCik(500);
}
//Hantar arahan untuk membaca kod ROM 64-bit
DS18B20_WriteByte(0x33);

//Gelung baca kod ROM 64-bit
untuk(i=0;i<8;i++)
{
DS18B20_ROM[i]= DS18B20_ReadByte();
printf(“DS18B20_ROM[%d]=0x%Xn”,i,DS18B20_ROM[i]);
}

sementara(1)
{
/*2. Pada masa yang sama mengendalikan semua DS18B20 pada bas untuk mula menukar suhu*/
DS18B20_CheckDevice(); //Hantar nadi set semula, mengesan nadi
DS18B20_WriteByte(0xCC); //Langkau pengesanan jujukan ROM
DS18B20_WriteByte(0x44); //Mulakan penukaran suhu (biarkan semua DS18B20 di dalam bas menukar suhu)
KelewatanCik(500); //Tunggu sehingga semua penukaran suhu DS18B20 pada talian selesai

/*3. Bacaan sasaran tunggal suhu setiap DS18B20*/
DS18B20_CheckDevice(); //Hantar nadi set semula, mengesan nadi
DS18B20_WriteByte(0x55); //Hantar arahan untuk memadankan ROM
untuk(i=0;i<8;i++) //Hantar kod 64-bit
{
DS18B20_WriteByte(DS18B20_ROM[i]);
}
DS18B20_WriteByte(0xBE); //Baca suhu
temp=DS18B20_ReadByte(); //Baca data suhu tertib rendah
temp|=DS18B20_ReadByte()<<8; //Baca data suhu pesanan tinggi
printf(“temp1=%d.%dn”,temp>>4,temp&0xF);
printf(“temp2=%fn”,temp*0.0625);

KelewatanCik(500);
}
}