Bootstrap

DSP实验三:DS18B20数字温度测量实验


前言

  鄙人本次主要介绍一下做的关于DSP的第三次实验:DS18B20数字温度测量实验,主要包括DS18B20的引脚定义、工作原理、运行代码、硬件结果以及心得体会。


一、设计内容

  DS18B20是常用的数字温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。

1.1 DS18B20引脚定义

  DS18B20电路图如下所示,不同的引脚分别对应:
  1)DQ为数字信号输入/输出端;
  2)GND为电源地;
  3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
在这里插入图片描述

1.2 工作原理

  工作温度范围:-55℃到+125℃(-67°F到+257°F),其中在-10℃到+85℃精确到±0.5℃。DS18B20数字温度计提供9位到12位摄氏温度测量。转换温度为12位数字在750ms(最大)。
在这里插入图片描述

1.3 实验要求

  数码管前四位能够显示DS18B20 的温度值。

二、实验代码

代码如下(示例):

#include "stdio.h"
#include "evm5515.h"
#include "evm5515_emif.h"
int  databuffer,temp,temp1;
int *SEG_souraddr,*DS18B20_souraddr; 
int LED_DATA[]={0x0F80,0x0FF2,0x0F48,0x0F60,0x0F32,0x0F24,0x0F04,		0x0FF0,0x0F00,0x0F20,0x0F10,0x0F06,0x0F8C,0x0F42,0x0F0C,0x0F1C};
//七段数码管的显示数字,0亮1灭,前两位为位码,后两位是段码
Int16 EMIF_init()
{
    Uint16  i;
    *(ioport volatile unsigned *)0x1C04=0x10;
    *(ioport volatile unsigned *)0x1C05=0x2;
    for(i=0;i<500;i++){;}
    *(ioport volatile int *)0x1C02 &= 0x77FF;//打开EMIF时钟 
    *(ioport volatile unsigned *)0x1C04=0x020; 
    *(ioport volatile unsigned *)0x1C05=0x00fb;
    for(i=0; i<50; i++);	
    EMIF_AWCCR1 = 0x0080;
    EMIF_AWCCR2  = 0x00E4;	
    EMIF_ACS2CR1 = 0xFFF9;
    return 0;
}
void main( void )
{
    EVM5515_init();
    EMIF_init();
    DS18B20_souraddr =  (int *)0x600030; //温度传感器的地址  
    SEG_souraddr=  (int *)0x600006;  //数码管的地址
    while(1)
    {
       databuffer = *DS18B20_souraddr; 
       temp = databuffer; //读取地址赋值到temp
       temp1 = databuffer;//读取地址赋值到temp1
       temp=(temp>>4)&0XFF;  //整数
       temp1=temp1&0X000F;  //小数
       temp1=temp1*625; //将小数部分扩大1万倍
       *SEG_souraddr= LED_DATA[temp/10]&0X08FF;  //显示温度的十位
       EVM5515_waitusec(500);  //等待时间
      *SEG_souraddr= LED_DATA[temp%10]&0X04FF; //显示温度的个位		
       EVM5515_waitusec(500);   //等待时间 
      *SEG_souraddr= LED_DATA[temp1/1000]&0X02FF; //显示温度的十分位
       EVM5515_waitusec(500);  //等待时间  	 
      *SEG_souraddr= LED_DATA[(temp1%1000)/100]&0X01FF; //显示温度的百分位
      EVM5515_waitusec(500); //等待时间
    }
}

三、 硬件验证结果

测试结果如下所示:第一幅图测得的温度为30.81摄氏度,第二幅图是用手触摸DS18B20器件后,温度提升为30.87摄氏度。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、遇到问题

  问题1:不明白16位二进制数和温度一一对应的关系。
  解决办法:参照DS18B20的器件说明(如下图),随后分析出了:高五位为符号位:1是正数,0是负数(负数为对应正数的补码+1);随后的BIT10-BIT0分别对应2^(6)-2(-4),其中BIT10-BIT4为整数部分,BIT3-BIT0为小数部分。
在这里插入图片描述
  问题2:不明白程序中的语句temp1=temp1*625;的含义。
  解决办法:通过老师的讲解,才明白乘上625是精度,例如上图BIT0对应的是0.0625。


总结

  这次的实验分为两个部分:DS18B20测温原理的分析,以及使用电路板测量温度。
  在第一个部分中,我刚开始是不明白DS18B20的测温原理,然后通过翻译老师提供的关于DS18B20器件的PDF,才明白的DS18B20生成的16位二进制数与温度的以一一对应关系。
  在第二个部分中,在按照老师给定的程序进行对温度的测量时,运行完程序之后,用手触摸DS18B20器件后来提升器件的温度,提高测量的温度,但我测量的温度从30.81摄氏度提升到了30.87摄氏度,可能是由于手有点凉,实验效果不明显,但最终还是成功完成了实验。
  总之,这次的实验对我来说难度还是比较大的,也是遇到了很多问题,主要是第一部分的DS18B20测温原理的分析用了不少时间,通过对资料的一点点分析才明白了实验原理,但是最终都顺利完成了实验,让我对外文文献的分析翻译有了一定的提升,收获很多。

;