DS18B20 es un sensor de temperatura digital que utiliza una sincronización de bus único para comunicarse con el host. Solo 1 Se necesita cable para completar la lectura de datos de temperatura.;
DS18B20 tiene un número de serie de producto integrado de 64 bits para una fácil identificación. Se pueden conectar varios sensores DS18B20 a 1 Cable, y mediante autenticación de identidad de 64 bits, La información de temperatura recopilada de diferentes sensores se puede leer por separado..
Introducción a DS18B20
2.1 Características principales de DS18B20
1. Conversión y salida de temperatura totalmente digitales.
2. Comunicación de datos avanzada de un solo bus.
3. Resolución de hasta 12 bits, con una precisión de hasta ±0,5 grados Celsius.
4. El ciclo de trabajo máximo a una resolución de 12 bits es 750 milisegundos.
5. Se puede seleccionar el modo de trabajo parásito.
6. El rango de temperatura de detección es –55° C ~+125° C (–67°F ~+257°F).
7. EEPROM incorporada, función de alarma de límite de temperatura.
8. 64-Bit Photolitography ROM, número de serie del producto incorporado, conveniente para la conexión de varias máquinas.
9. Varias formas de embalaje., adaptarse a diferentes sistemas de hardware.
2.2 Función de pin DS18B20
Tierra de voltaje GND;
Bus de datos único DQ;
Tensión de alimentación VDD;
Pasador vacío NC;
2.3 Principio de funcionamiento y aplicación del DS18B20
La detección de temperatura DS18B20 y la salida de datos digitales están completamente integradas en un chip, por lo que tiene una mayor capacidad antiinterferencia. Su único ciclo de trabajo se puede dividir en dos partes., a saber, detección de temperatura y procesamiento de datos.
18B20 tiene tres formas de recursos de memoria.. Ellos son: Memoria ROM de sólo lectura, utilizado para almacenar el código DS18B20ID; la primera 8 Los bits son códigos de serie de una sola línea. (El código DS18B20 es 19H), la siguiente 48 Los bits son el número de serie único del chip.; el ultimo 8 Los bits son el código CRC. (control de redundancia) de lo anterior 56 brocas. Los datos se configuran en producción y el usuario no puede cambiarlos.. DS18B20 tiene un total de 64 bits de ROM.
registro de datos RAM, Se utiliza para cálculos internos y acceso a datos., Los datos se pierden después de un corte de energía., DS18B20 tiene un total de 9 bytes de RAM, cada byte es 8 brocas. El primer y segundo bytes son la información del valor de los datos después de la conversión de temperatura.; El tercer y cuarto bytes son la imagen reflejada de la EEPROM del usuario. (comúnmente utilizado para el almacenamiento de valores de alarma de temperatura). Su valor se actualizará cuando se restablezca la alimentación.. El quinto byte es la imagen especular de la tercera EEPROM del usuario.. El 6, 7th, y el octavo byte son registros de conteo, que están diseñados para permitir a los usuarios obtener una mayor resolución de temperatura. También son unidades de almacenamiento temporal para conversión y cálculo de temperatura interna.. El noveno byte es el código CRC del primero. 8 bytes. EEPROM es una memoria no volátil que se utiliza para almacenar datos que deben guardarse durante mucho tiempo., valores de alarma de temperatura superior e inferior, y datos de verificación. DS18B20 tiene un total de 3 bits de EEPROM, y hay imágenes reflejadas en la RAM para facilitar la operación del usuario.
DS18B20 funciona en modo de resolución de 12 bits de forma predeterminada. Los datos de 12 bits obtenidos después de la conversión se almacenan en dos RAM de 8 bits de DS18B20 (los primeros dos bytes). La primera 5 Los bits en binario son bits de signo.. Si la temperatura medida es mayor que 0, estos 5 Los bits son 0. Simplemente multiplique el valor medido por 0.0625 Para obtener la temperatura real. Si la temperatura es menor que 0, estos 5 Los bits son 1. Es necesario invertir el valor medido., añadido por 1, y luego multiplicado por 0.0625 Para obtener la temperatura real. O use la operación de broca para extraer la temperatura: los decimales ocupan la parte inferior 4 brocas, y los bits superiores son bits enteros (Los números negativos no se consideran.).
2.4 Tabla de instrucciones ROM del chip DS18B20
1. Leer rom [33h] (la palabra de comando hexadecimal está entre corchetes).
Este comando permite al controlador de bus leer la ROM de 64 bits de DS18B20. Esta instrucción solo se puede utilizar cuando solo hay un DS18B20 en el bus. Si hay más de uno conectado, Se producirán conflictos de datos durante la comunicación..
2. capturar ROM [55h]
Esta instrucción va seguida de un número de serie de 64 bits emitido por el controlador.. Cuando hay varios DS18B20 en el autobús, sólo el chip con el mismo número de serie que el emitido por el controlador puede responder, y los otros chips esperarán el próximo reinicio. Esta instrucción es adecuada para conexión de un solo chip y de varios chips..
3. Buque [CCH]
Esta instrucción hace que el chip no responda al código ROM. En el caso de un solo autobús, esta instrucción se puede utilizar para ahorrar tiempo. Si esta instrucción se utiliza cuando se conectan varios chips, Se producirán conflictos de datos., resultando en errores.
4. Buscar rom [F0H]
Después de inicializar el chip, La instrucción de búsqueda permite identificar por eliminación la ROM de 64 bits de todos los dispositivos cuando se conectan varios chips al bus..
5. Búsqueda de alarmas [CADA]
En el caso de múltiples chips, la instrucción de búsqueda de chip de alarma solo responde a chips que cumplen la condición de alarma de temperatura superior a TH o inferior a TL. Mientras el chip no esté apagado, El estado de alarma se mantendrá hasta que se vuelva a medir la temperatura y no se alcance la condición de alarma..
6. Escribir bloc de notas [4EH]
Esta es la instrucción para escribir datos en la RAM.. Los dos bytes de datos escritos posteriormente se almacenarán en la dirección 2 (TH de RAM de alarma) y dirección 3 (TL de RAM de alarma). El proceso de escritura puede finalizar mediante una señal de reinicio..
7. Leer bloc de notas (leer datos de la RAM) [BEH]
Esta instrucción leerá datos de la RAM., comenzando desde la dirección 0 y hasta la dirección 9, completar la lectura de todos los datos de la RAM. El chip permite que la señal de reinicio finalice el proceso de lectura., eso es, los bytes innecesarios posteriores se pueden ignorar para reducir el tiempo de lectura.
8. Copiar bloc de notas (copiar datos de RAM a EEPROM) [48h]
Esta instrucción almacena los datos de la RAM en EEPROM para que no se pierdan cuando se corta la alimentación.. Dado que el chip está ocupado con el procesamiento de almacenamiento EEPROM, cuando el controlador envía un intervalo de tiempo de lectura, las salidas del bus “0”, y cuando se complete el trabajo de almacenamiento, el bus saldrá “1”.
En modo de trabajo parásito, Se debe utilizar un pull-up fuerte inmediatamente después de emitir esta instrucción y mantenerlo durante al menos 10 MS para mantener el funcionamiento del chip..
9. Convertir T (conversión de temperatura) [44h]
Después de recibir esta instrucción, el chip realizará una conversión de temperatura y almacenará el valor de temperatura convertido en la primera y segunda dirección de la RAM. Dado que el chip está ocupado con el procesamiento de conversión de temperatura, cuando el controlador envía un intervalo de tiempo de lectura, las salidas del bus “0”, y cuando se complete el trabajo de almacenamiento, el bus saldrá “1”. En modo de trabajo parásito, Se debe utilizar un pull-up fuerte inmediatamente después de emitir esta instrucción y mantenerlo durante al menos 500 MS para mantener el funcionamiento del chip..
10. Recuperar EEPROM (Copie el valor de la alarma en EEPROM a la RAM) [B8H]
Esta instrucción copia el valor de la alarma en EEPROM al tercer y cuarto byte en la RAM.. Dado que el chip está ocupado con el procesamiento de copias., cuando el controlador envía un intervalo de tiempo de lectura, las salidas del bus “0”, y cuando se complete el trabajo de almacenamiento, las salidas del bus “1”. Además, Esta instrucción se ejecutará automáticamente cuando el chip se encienda y se reinicie.. De este modo, Los dos bits de bytes de alarma en la RAM siempre serán la imagen reflejada de los datos en la EEPROM..
11. Leer fuente de alimentación (Interruptor de modo de trabajo) [B4H]
Después de que se emita esta instrucción, se emite un intervalo de tiempo de lectura, y el chip devolverá su palabra de estado de energía. “0” es el estado de poder parásito y “1” es el estado de poder externo.
2.5 Diagrama de sincronización DS18B20
2.5.1 Diagrama de relación de respuesta y reinicio de DS18B20
Se debe realizar un reinicio antes de cada comunicación.. El tiempo de reinicio, tiempo de espera, y el tiempo de respuesta debe programarse estrictamente de acuerdo con el tiempo.
DS18B20 intervalo de tiempo de lectura y escritura: La lectura y escritura de datos DS18B20 se confirma mediante el bit de procesamiento de intervalo de tiempo y la palabra de comando para intercambiar información.
2.5.2 Escribir datos 0 y datos 1 a DS18B20
En los primeros 15uS del intervalo de tiempo de escritura de datos, El controlador debe bajar el autobús., y luego será el tiempo de muestreo del chip para los datos del bus.. El tiempo de muestreo es de 15~60uS. Si el controlador eleva el bus durante el tiempo de muestreo, significa escribir “1”, y si el controlador baja el bus, significa escribir “0”.
Cada bit de transmisión debe tener un bit de inicio de bajo nivel de al menos 15uS., y los datos posteriores “0” o “1” debe completarse dentro de 45uS.
El tiempo de transmisión de todo el bit debe mantenerse entre 60 y 120 uS., de lo contrario no se puede garantizar la comunicación normal.
Nota: DS18B20 lee y escribe datos desde el bit bajo.
2.5.3 Leyendo datos 0 y datos 1 de DS18B20
El tiempo de muestreo del control durante el intervalo de tiempo de lectura debería ser más preciso. Durante el intervalo de tiempo de lectura, el host también debe generar un nivel bajo de al menos 1uS para indicar el inicio del tiempo de lectura. Entonces, en 15uS después de que se libere el autobús, el DS18B20 enviará el bit de datos interno. En este momento, si el control encuentra que el autobús está alto, significa leer “1”, y si el bus esta bajo, significa leer datos “0”. Antes de leer cada bit, El controlador añade una señal de inicio..
Nota: El bit de datos debe leerse dentro de los 15 uS del inicio del espacio de lectura para garantizar una comunicación correcta..
Durante la comunicación, 8 pedazos de “0” o “1” se utilizan como un byte, y la lectura o escritura del byte comienza desde el bit bajo.
2.5.4 Orden de lectura de temperatura una vez (sólo un DS18B20 en el autobús)
1. Enviar señal de reinicio
2. Detectar señal de respuesta
3. Enviar 0xCC
4. Enviar 0x44
5. Enviar señal de reinicio
6. Detectar señal de respuesta
7. Escribe 0xcc
8. Escribe 0xbe
9. Bucle 8 veces para leer el byte bajo de temperatura
10. Bucle 8 veces para leer el byte alto de temperatura
11. Sintetizar datos y procesos de temperatura de 16 bits
3. código de conductor
3.1 DS18B20.c
#incluir “ds18b20.h”
/*
Función: Inicialización DS18B20
Conexión de hardware: PB15
*/
nulo ds18b20_init(vacío)
{
RCC->APB2ENR|=1<<3; //PB
GPIOB->CRH&=0x0FFFFFFFF;
GPIOB->CRH|=0x30000000;
GPIOB->ODR|=1<<15; //Pullado
}
/*
Función: Compruebe si el dispositivo DS18B20 existe
Valor de retorno: 1 significa que el dispositivo no existe 0 significa que el dispositivo es normal
*/
u8 DS18B20_CheckDevice(vacío) //Contiene pulso de reinicio, pulso de detección
{
DS18B20_OUTPUT_MODE();//Inicializar al modo de salida
DS18B20_OUT=0; //Generar pulso de reinicio
Retrasarnos(750); //Genera 750us de bajo nivel
DS18B20_OUT=1; //Liberar autobús
Retrasarnos(15); //Espere la respuesta DS18B20
si(DS18B20_CleckAck())//Detectar pulso de existencia
{
devolver 1;
}
devolver 0;
}
/*
Función: Detectar pulso de existencia del dispositivo DS18B20
Valor de retorno: 1 indica error 0 indica normalidad
*/
u8 DS18B20_CleckAck(vacío)
{
u8 cont=0;
DS18B20_INPUT_MODE();//Inicializar al modo de entrada
mientras(DS18B20_IN&&CNT<200) //Espere el pulso de existencia de respuesta DS18B20
{
Retrasarnos(1);
cnt++;
}
si(CNT>=200)devolver 1; //error
cnt=0;
mientras((!DS18B20_IN)&&CNT<240) //Espere a que DS18B20 suelte el autobús.
{
Retrasarnos(1);
cnt++;
}
si(CNT>=240)devolver 1; //error
devolver 0;
}
/*
Función: escribe un byte
Primero aprende a escribir un poco..
*/
vacío DS18B20_Writyte(u8 cmd)
{
u8 yo;
DS18B20_OUTPUT_MODE(); //Inicializar al modo de salida
para(yo=0;i<8;yo ++)
{
DS18B20_OUT=0; //Generar intervalo de tiempo de escritura (escribir inicio)
Retrasarnos(2);
DS18B20_OUT=cmd&0x01; //Enviar bit de datos real
Retrasarnos(60); //Espere a que se complete la escritura
DS18B20_OUT=1; //Suelta el autobús y prepárate para la próxima transmisión.
cmd>>=1; //Continuar enviando el siguiente bit de datos
}
}
/*
Función: leer un byte
Primero aprende a leer un poco..
*/
u8 DS18B20_ReadByte(vacío)
{
u8 yo,datos=0;
para(yo=0;i<8;yo ++)
{
DS18B20_OUTPUT_MODE(); //Inicializar al modo de salida
DS18B20_OUT=0; //Generar intervalo de tiempo de lectura (leer inicio)
Retrasarnos(2);
DS18B20_OUT=1; //Liberar autobús
DS18B20_INPUT_MODE(); //Inicializar al modo de entrada
Retrasarnos(8); //Espere la salida de datos DS18B20
datos>>=1; //Llene el bit alto con 0, el valor predeterminado es 0
si(DS18B20_IN) datos|=0x80;
Retrasarnos(60);
DS18B20_OUT=1; //Liberar autobús, espere a leer el siguiente bit de datos
}
devolver datos;
}
/*
Función: Lea los datos de temperatura de DS18B20 una vez
Valor de retorno: los datos de temperatura leídos
Situación considerada: Sólo hay un DS18B20 conectado al bus
*/
u16 DS18B20_ReadTemp(vacío)
{
temperatura u16=0;
u8 temp_H,temp_L;
DS18B20_CheckDevice(); //Enviar pulso de reinicio, detectar pulso
Ds18b20_writyte(0xCC); //Saltar detección de secuencia ROM
Ds18b20_writyte(0x44); //Iniciar una conversión de temperatura
//Espere a que se complete la conversión de temperatura
mientras(Ds18b20_readbyte()!=0xFF){}
DS18B20_CheckDevice(); //Enviar pulso de reinicio, detectar pulso
Ds18b20_writyte(0xCC); //Saltar detección de secuencia ROM
Ds18b20_writyte(0xBE); //Leer temperatura
temp_L=DS18B20_ReadByte(); //Leer datos de baja temperatura
temp_H=DS18B20_ReadByte(); //Leer datos de alta temperatura
temperatura=temp_L|(temperatura_H<<8); //Temperatura sintetizada
Temperadora de retorno;
}
3.2 DS18B20.h
#ifndef DS18B20_H
#definir DS18B20_H
#incluir “stm32f10x.h”
#incluir “sistema.h”
#incluir “retraso.h”
#incluir “ds18b20.h”
#incluir “usart.h”
/*Interfaz del paquete*/
//Inicialice DS18B20 al modo de entrada
#definir DS18B20_INPUT_MODE() {GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x80000000;}
//Inicialice DS18B20 al modo de salida
#definir DS18B20_OUTPUT_MODE(){GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x30000000;}
//Salida del puerto IO DS18B20
#definir DS18B20_OUT PBout(15)
//Entrada del puerto IO DS18B20
#definir DS18B20_IN PBin(15)
//Declaración de función
u8 DS18B20_CleckAck(vacío);
u8 DS18B20_CheckDevice(vacío);
nulo ds18b20_init(vacío);
u16 DS18B20_ReadTemp(vacío);
u8 DS18B20_ReadByte(vacío);
vacío DS18B20_Writyte(u8 cmd);
#endif
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png
3.3 Función de retardo
/*
Función: retraso en nosotros
*/
anular DelayUs(en nosotros)
{
#ifdef_SYSTICK_IRQ_
ent yo,j;
para(yo=0;iVAL=0; //Valor del contador CNT
SysTick->CARGAR=9*nosotros; //9 significa 1nosotros
SysTick->CONTROL|=1<<0; //Iniciar temporizador
hacer
{
tmp=SysTick->CONTROL; //Estado de lectura
}mientras((!(tmp&1<<16))&&(tmp&1<<0));
SysTick->VALOR=0; //Valor del contador CNT
SysTick->CONTROL&=~(1<<0); //Apaga el temporizador
#endif
};yo ++)>
3.4 main.c Llame a DS18B20 para leer la temperatura e imprimirla en el puerto serie
#incluir “stm32f10x.h”
#incluir “ds18b20.h”
u8 DS18B20_ROM[8]; //Almacene el código ROM de 64 bits de DS18B20
ent principal(vacío)
{
temperatura u16;
USARTx_Calor(USART1,72,115200);//Inicialización del puerto serie 1
Ds18b20_init(); //Inicialización DS18B20
/*1. Lea el código ROM de 64 bits de DS18B20*/
//Enviar pulso de reinicio, detectar pulso de existencia
mientras(DS18B20_CheckDevice())
{
imprimirf(“El dispositivo DS18B20 no existe!\norte”);
retraso señora(500);
}
//Envía el comando para leer el código ROM de 64 bits.
Ds18b20_writyte(0x33);
//Lectura en bucle de código ROM de 64 bits
para(yo=0;i<8;yo ++)
{
DS18B20_ROM[i]= DS18B20_ReadByte();
imprimirf(“DS18B20_ROM[%d]=0x%X\n”,i,DS18B20_ROM[i]);
}
mientras(1)
{
/*2. Opere simultáneamente todos los DS18B20 en el bus para comenzar a convertir la temperatura*/
DS18B20_CheckDevice(); //Enviar pulso de reinicio, detectar pulso
Ds18b20_writyte(0xCC); //Saltar detección de secuencia ROM
Ds18b20_writyte(0x44); //Iniciar una conversión de temperatura (Deje que todos los DS18B20 del bus conviertan la temperatura)
retraso señora(500); //Espere a que se completen todas las conversiones de temperatura DS18B20 en la línea
/*3. Lectura única y dirigida de la temperatura de cada DS18B20*/
DS18B20_CheckDevice(); //Enviar pulso de reinicio, detectar pulso
Ds18b20_writyte(0x55); //Enviar comando para que coincida con la ROM
para(yo=0;i<8;yo ++) //Enviar código de 64 bits
{
Ds18b20_writyte(DS18B20_ROM[i]);
}
Ds18b20_writyte(0xBE); //Leer temperatura
temperatura=DS18B20_ReadByte(); //Leer datos de temperatura de orden inferior
temperatura|=DS18B20_ReadByte()<<8; //Leer datos de temperatura de orden superior
imprimirf(“temp1=%d.%d\n”,temperatura>>4,temperatura&0xf);
imprimirf(“temp2=%f\n”,temperatura*0.0625);
retraso señora(500);
}
}
English
Afrikaans
العربية
বাংলা
bosanski jezik
Български
Català
粤语
中文(简体)
中文(漢字)
Hrvatski
Čeština
Nederlands
Eesti keel
Suomi
Français
Deutsch
Ελληνικά
हिन्दी; हिंदी
Magyar
Bahasa Indonesia
Italiano
日本語
한국어
Latviešu valoda
Lietuvių kalba
македонски јазик
Bahasa Melayu
Norsk
پارسی
Polski
Português
Română
Русский
Cрпски језик
Slovenčina
Slovenščina
Español
Svenska
ภาษาไทย
Türkçe
Українська
اردو
Tiếng Việt







