Fabricantes de sensores chinos

China Temperature Sensor & Thermistor manufacturer

El Microcontrolador 51/2.3 Controla el Módulo del Sensor de Temperatura DS18B20

A través del ejemplo anterior de detección de temperatura digital LCD1602, creo que tengo una comprensión básica del control y retraso del puerto IO. Aquí hay otro ejemplo de un sensor de temperatura, que también solo requiere operación y retraso del puerto IO. Primero, demos una introducción al sensor de temperatura DS18B20. Dado que es un sensor de temperatura, debe haber un sensor que detecte la temperatura. Este sensor convierte la temperatura a su alrededor directamente en un número y lo almacena en la memoria del scratchpad. No necesitamos comprender este proceso de detectar la temperatura y convertirla en una señal digital. Lo que tenemos que hacer es leer el contenido de la memoria y algunas otras configuraciones. El diagrama esquemático es el siguiente:
Sensor de Temperatura DS18B20 con 3 Cables Conector de conversión del sensor de temperatura DS18B20
Sensor de Temperatura DS18B20 con 3 Cables Conector de conversión del sensor de temperatura DS18B20

Figura 1, descripción general del sensor de temperatura DS18B20

Hay un sensor de temperatura en DS18B20 (como se muestra en la imagen de arriba), que puede detectar la temperatura ambiente y convertir directamente el resultado de la temperatura en una señal digital para su almacenamiento. No necesitamos preocuparnos por el proceso de convertir la señal de temperatura en una señal digital. Entonces, ¿dónde existe la señal digital? Existe una memoria llamada ScratchPad en DS18B20, con un total de 9 bytes (Byte0-Byte8), y las señales digitales se almacenan en Byte0_LSM y Byte1_MSB. Entre ellos, Byte0 es el bit bajo y Byte1 es el bit alto. De hecho, nuestro propósito es leer las señales digitales almacenadas en Byte0 y Byte1. Se puede ver que aunque el nombre es módulo sensor de temperatura, no necesitamos preocuparnos en absoluto por el proceso de detección en nuestro proceso de pensamiento. En realidad, este es el mismo que el LCD1602 mencionado anteriormente, todo lo que tenemos que hacer es leer o escribir. Para eso están los módulos, podemos tratarlos como cajas negras. Según sus reglas, sólo necesitas saber lo que ingresas y lo que producirá, no necesitas prestar atención al proceso intermedio. Combinamos Byte0_LSM y Byte1_MSB en una señal digital de 16 bits, con Byte0_LSB como bit bajo y Byte1_MSB como bit alto, y lo llamamos "T-16bit", como se muestra en la figura anterior. Entonces, ¿cómo convertir esta señal digital "T-16bit" en temperatura? Como puede verse en la figura, los bits 11 y 15 son S, lo que indica la temperatura positiva y negativa. Si S=0, entonces la temperatura es positiva, si S=1 entonces la temperatura es negativa. Para los siguientes bit10-bit0, cada aumento del valor en uno significa que la temperatura aumenta en 0,0625°C. Por ejemplo: si el LSB lee 1100 0011 y el MSB lee 0000 0110, entonces la combinación de LSB y MSB "T-16bit" es 0000 0110 1100 0011. Los 5 bits altos son 0, lo que indica que la temperatura es positiva. Los 11 bits restantes bit10-bit0 (110 1100 0011=1731), ponga 1731×0.0625=108.1875, luego la temperatura medida es +108.1875°C. Si el LSB y MSB combinados "T-16bit" es 1111 1110 1100 0011, entonces la temperatura medida es -108,1875°C. En "T-16bit", también podemos entenderlo de esta manera. Cada incremento de bit0 por 1 significa 20×0,0625°C, y cada cambio de bit1 por 1 significa 21×0,0625°C. Por analogía, cada cambio en el bit4 es 24×0,0625°C=1°C.

Luego están las funciones de alarma de Byte2_TH y Byte3_TL. En la figura, Byte2_TH representa la temperatura máxima establecida y Byte3_TL representa la temperatura mínima establecida. De manera similar, S representa la temperatura positiva y negativa. Si S=0, significa positiva; si S=1, entonces la temperatura es negativa. Byte2_TH y Byte3_TL representan el rango de temperatura establecida. Tenga en cuenta que Byte2_TH y Byte3_TL aquí corresponden al bit11 al bit4 en "T-16bit", como se muestra en la parte azul de la figura. Como se mencionó anteriormente, en "T-16bit", cada cambio de 1 en el bit4 es 1°C, por lo que cada cambio de 1 en el bit más bajo en Byte2_TH y Byte3_TL significa que la temperatura cambia en 1°C. Por ejemplo, Byte2_TH se establece en 01111001 (121 en decimal) y el primer bit es 0, lo que significa +121 °C. Byte3_TL es 01001001 (73 en decimal) y el primer bit es 0, lo que significa +73 °C. . Por lo tanto, el rango de ajuste de temperatura es: 73-121°C. Cuando la temperatura en "T-16bit" sea superior/igual a +121°C, o inferior/igual a 73°C, se activará la alarma.

El siguiente paso es configurar la precisión de la recopilación de temperatura, como se muestra en Byte4_Config en la figura. Bit5 y bit6 son R0 y R1 respectivamente, y los otros bits son fijos. R0 y R1 pueden ser 0 o 1 respectivamente, por lo que se pueden combinar en 4 situaciones, 00/01/10/11, correspondientes a diferentes precisiones, como se muestra en la siguiente tabla:
El proceso de convertir la temperatura del sensor DS18B20 en una señal digital
Byte5-Byte7 no se proporcionan, Byte8 es CRC utilizado para la detección de errores de comunicación. Dejémoslo así por ahora y consideremos primero la parte fácil.

A través de la explicación anterior, creo que tengo una comprensión preliminar de DS18B20. Ahora hablemos de cómo se comunica con el microcontrolador. DS18B20 tiene tres pines en total, dos pines de alimentación (fuente de alimentación positiva y negativa) y un pin de datos DQ. Su diagrama de estructura se muestra a continuación. El caparazón negro mira hacia arriba, los pines hacia abajo y la superficie plana mira hacia usted. El primer pin de la izquierda es GND. Si los polos positivo y negativo del DS18B20 se conectan al revés, podría quemarse.

Se puede ver que la comunicación entre el microcontrolador y DS18B20 solo puede depender de esta línea. Además, se pueden conectar varios DS18B20 a esta línea al mismo tiempo. Entonces, ¿cómo se comunica con precisión el microcontrolador con varios DS18B20 a través de esta única línea? El microcontrolador no sabe si hay un DS18B20 en la línea DQ, si hay varios o si hay uno pero está roto. De la misma manera que las personas se comunican, cuando no sabes lo que está pasando en la habitación, primero saludarás y preguntarás si hay alguien allí. Lo mismo ocurre con los microcontroladores. Primero hagamos una inicialización, saludemos y veamos si hay 18B20 en la línea DQ. Cómo saludar es el mismo que el LCD1602 mencionado anteriormente, por supuesto de acuerdo con las reglas de DS18B20. El microcontrolador primero debe bajar el DQ durante al menos 480 μS y luego liberar el DQ. Después de aproximadamente 15-60 μS, si hay un DS18B20 en la línea y funcionando normalmente, entonces el DS18B20 bajará el DQ y lo mantendrá durante 60-240 μS. El microcontrolador verifica esta señal para determinar si hay un DS18B20 en la línea que pueda funcionar normalmente.Hay tantos DS18B20 como señales. Esta es la regla de DS18B20, como sigue:

¿Puedo comunicarme con DS18B20 después de la inicialización? Si hay varios DS18B20 en línea, ¿con cuál desea comunicarse? Por lo tanto, primero debes identificar el objetivo antes de comunicarte. Aquí tomamos el DS18B20 más simple. Una vez que comprenda uno, naturalmente podrá controlar varios DS18B20. Echemos un vistazo a cómo escribir el código de inicialización.
Método de cableado del chip DS18B20
Paso 1: Primero, el DQ se reduce y se mantiene al menos en 480Us. Aquí tomamos 500Us por seguro.

Paso 2: Suelte el bus (DQ=1). Después de esperar entre 15 y 60 U, DS18B20 bajará el DQ. Entonces, ¿debería elegir 15Us o 60Us aquí?

Paso 3: En este momento, DS18B20 extrae la señal baja de DQ (L_DQ) durante 60-240Us. Entonces, ¿debería elegir 60Us o 240Us?

Tenga en cuenta que nuestro propósito aquí es detectar si DS18B20 reduce la señal DQ (L_DQ). Entonces, en el paso 2, después de liberar el bus (DQ=1), ¿cuánto tiempo necesitamos retrasar (Tdelay) para leer la señal si DQ es igual a 0?

Hagamos una suposición extrema, los valores mínimo y máximo.

(1) En el paso 2, el microcontrolador libera el bus (DQ = 1) y, después de esperar 15 U (valor mínimo), DS18B20 baja el DQ. En el paso 3, DQ bajó a 60Us (valor mínimo)

En este caso, si Tdelay>75Us, no se puede detectar la señal L_DQ. Por lo tanto, el Tdelay debería ser inferior a 75Us.

(2) En el paso 2, el microcontrolador libera el bus (DQ = 1) y, después de esperar 60 U (valor máximo), DS18B20 baja el DQ. En el paso 3, el descenso del DQ duró 60/240Us (dos situaciones)

En este caso, si Tdelay<60Us, no se puede detectar la señal L_DQ. Por ejemplo, si configura Tdelay=50Us y luego lee DQ, DQ sigue siendo 1. ¿Por qué? Porque después de 60 nosotros

DS18B20 solo reduce el DQ. Por lo tanto Tdelay>60Us.

En resumen, el tiempo del seguro es: 75Us>Tdelay>60Us, y el código es el siguiente:

anular ds18b20_init (anular)

{

DQ=0;//baja el autobús

retrasoUs(240); //Retraso 526Us

DQ=1;//Liberar el autobús

delayUs(28);//retraso 66Us (entre 60-75Us)

si(DQ==0)

{

LED1=0;//(Establezca un LED, si se detecta DQ=0, encienda el LED1)

}

demás

{

LED2=0;

}

delayUs(240);//Tenga en cuenta que después de leer DQ, continúe retrasando 480Us

}

La señal de ID de DS18B20 está en ROM, por lo que podemos omitir la lectura de ROM aquí (Omitir ROM [CCh]).

Luego viene la parte de comunicación con DS18B20. DS18B20 es pasivo cuando está encendido, lo que significa que es pasivo y no funcionará sin instrucciones. Por lo tanto, la primera instrucción dada por el microcontrolador al DS18B20 es dejar que comience a medir la temperatura (Convertir T [44h]). ¿Qué hace DS18B20 cuando recibe este comando? Aquí volvemos a la Figura 1 de la que hablamos antes. DS18B20 comienza a detectar la temperatura circundante y la convierte en señales digitales y las almacena en Byte0 y Byte1 en ScratchPad. Desde aquí sabemos que solo necesitamos un comando, Convertir T, para permitir que DS18B20 inicie la medición y el almacenamiento de temperatura. No nos importa cómo ocurre este proceso. Desde aquí vemos que en realidad no existe una diferencia esencial entre el módulo de control DS18B20 y el módulo LCD1602. Todo lo que tenemos que hacer es leer las reglas. Estas reglas provienen de sus manuales de chips. En pocas palabras, es leer y comprender el manual del chip. En realidad, muchos principiantes ignoran este punto, que no están dispuestos o no están acostumbrados a consultar el manual del chip. DS18B20 necesita una cierta cantidad de tiempo para convertir la señal de temperatura en una señal digital, por lo que antes de emitir el siguiente comando, debemos verificar si DS18B20 todavía está funcionando. Si quieres simplificarlo, utiliza un retraso. Una vez completada la conversión, DS18B20 vuelve a estar en estado pasivo y este proceso de conversión no es continuo. Por lo tanto, si desea que se vuelva a convertir, debe ejecutar el comando Convertir T nuevamente.

Entonces, ¿cómo dar instrucciones? Esto implica la parte de 'escritura DS18B20'. Consulte la hoja de datos y busque el 'Tiempo de escritura'.

Primero, veamos cómo el microcontrolador escribe 0 y 1 en DS18B20.

(1) Escriba 0: DQ se reduce y se mantiene al menos en 60Us. Aproximadamente entre 15 y 60 U, DS18B20 comienza a aceptar datos

(2) Escriba 1: baje DQ, retrase 2Us y luego suelte DQ. En este momento, la resistencia pull-up elevará DQ, con un retraso de al menos 60Us. A 15-60Us, DS18B20 comienza a recibir datos

Entonces el código para escribir la instrucción es el siguiente

void ds18b20_com (char mycom sin firmar)

{

temperatura de carbón sin firmar;

carácter i sin firmar;

para (i=0;i<8;i++)

{

temp=mycom & 0x01;

si (temperatura==1)

{

DQ=0;

_nop_();

_nop_();

DQ=1;

retrasarnos(35);

}

demás

{

DQ=0;

retrasarnos(35);

DQ=1;

}
micom>>=1;
}
}
Entonces, si desea emitir el comando ds18b20_com(0xcch)//skip rom, DS18B20 sabrá que debe omitir la lectura de la ROM. Si desea enviar el comando Convertir T, ds18b20_com (0x44h), DS18B20 inicia la conversión de temperatura y almacena los primeros dos bytes en ScratchPad.

Cuando se completa la conversión, los datos se almacenan en Byte0 y Byte1, y la siguiente tarea es leer Byte0 y Byte1. Lo que hay que tener en cuenta aquí es que antes de cada instrucción enviada por el microcontrolador, debe ser: inicialización-> instrucción ROM-> instrucción de función. Esto está especificado en el manual del chip. Por lo tanto, antes de leer Byte0 y Byte1, debe inicializarlo nuevamente, omitir ROM ([CCh]) y podrá leer Byte0 y Byte1. Luego combine Byte0 y Byte1 y luego conviértalos en temperatura.

Ahora veamos cómo leer DS18B20. Consulte también el manual del chip para encontrar el diagrama de sincronización leído.

DS18B20 quiere enviar datos al microcontrolador. Entonces, ¿cómo sabe DS18B20 cuándo el microcontrolador comienza a solicitar datos? También hay una regla aquí: cuando el microcontrolador baja el DQ, retrasa 1U y luego libera el DQ. En este momento, DS18B20 sabe, oh, el microcontrolador comienza a solicitar datos. Si DS18B20 quiere escribir 0 en este momento, baje DQ, por el contrario, si quiere escribir 1, mantenga DQ alto. La información de los datos leídos se envía desde el microcontrolador, el DS18B20 proporciona los datos y el microcontrolador los recopila. Este proceso debe completarse en 15 U y luego debe retrasarse en 45 U. Para estar seguros, tomamos 65 U aquí. Debe haber al menos un intervalo de 1Us entre dos lecturas. Por lo tanto, es fácil obtener el código para que el microcontrolador lea DS18B20:

int sin firmar ds18b20_read(nulo)

{
temp1 de carácter sin firmar = 0;
sin firmar int temp2=0;
temperatura int sin signo = 0;
carácter i sin firmar;
para (i=0;i<8;i++)

{
temp1>>=1;
DQ=0;
_nop_();
_nop_();
DQ=1;
si(DQ==1)
temp1 |=0x80;
retrasarnos(35);
}

para (i=0;i<8;i++)

{
temp2>>=1;
DQ=0;
_nop_();
_nop_();
DQ=1;

si(DQ==1)
temp2 |=0x80;
retrasarnos(35);

}

temp2 <<=8;
temperatura=temp1+temp2;
temperatura de retorno;

}
Se puede ver en los dos ejemplos de LCD1602 y DS18B20 que el control de estos dos módulos en realidad solo utiliza el control de pin y el programa de retardo del microcontrolador. El foco y la dificultad radica en comprender las reglas de control de cada módulo. De hecho, estos se pueden encontrar leyendo atentamente el manual del chip correspondiente. Las partes de control y retardo de los pines del microcontrolador no difieren del funcionamiento del LED. No es de extrañar que algunas personas digan que si realmente comprende el proceso de funcionamiento de los LED, habrá aprendido la mitad del microcontrolador. Más adelante utilizaremos repetidamente el LED como ejemplo para explicar otros contenidos relacionados con los microcontroladores.
PREV:Ejemplo de Medición de Temperatura del Sensor de Temperatura Digital DS18B20
NEXT:Principio de Funcionamiento del Sensor Inteligente DS18B20

RELATED POSTS




Skype

WhatsApp

WangWang

QQ
Email me

Mail to us