744|0

408

帖子

1

资源

一粒金砂(中级)

【GD32L233C-START评测】7、温度传感器驱动 [复制链接]

本帖最后由 xinmeng_wit 于 2022-4-4 20:19 编辑

 

一、温度传感器DS18B20介绍

 

DS18B20 单线数字温度传感器,即“一线器件”,其具有独特的优点:

    采用单总线的接口方式 与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量。
    测量温度范围宽,测量精度高 DS18B20 的测量范围为 -55 ℃ ~+ 125 ℃ ; 在 -10~+ 85°C范围内,精度为 ± 0.5°C 。
    在使用中不需要任何外围元件。
    持多点组网功能 多个 DS18B20 可以并联在惟一的单线上,实现多点测温。
    供电方式灵活 DS18B20 可以通过内部寄生电路从数据线上获取电源。因此,当数据线上的时序满足一定的要求时,可以不接外部电源,从而使系统结构更趋简单,可靠性更高。
    测量参数可配置 DS18B20 的测量分辨率可通过程序设定 9~12 位。
    负压特性电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
    掉电保护功能 DS18B20 内部含有 EEPROM ,在系统掉电以后,它仍可保存分辨率及报警温度的设定值。

 

结构框图:

1.png

寄存器MAP:

2.png

温度寄存器存储格式:

 

3.png

二、操作时序

 

1、初始化时序

4.png

主机首先发出一个最少480微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。

做为从器件的DS18B20在一上电后就一直在检测总线上是否有至少480微秒的低电平出现,如果有,在总线转为高电平后等待15-60微秒后将总线电平拉低60-240微秒做出响应存在脉冲,告诉主机本器件已做好准备。若没有检测到就一直在检测等待。

 

//DS18B20复位
void ds18b20_reset(void)
{
	
	gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0);//DQ-PA1	
	DS18B20_DQ_OUT_L;
	delay_xus(480);//480
	DS18B20_DQ_OUT_H;
	delay_xus(15);	//15us

}

2、写操作时序

 

5.png 写周期最少为60微秒,最长不超过120微秒。若主机想写0,则把总线拉低电平最少60微秒直至写周期结束。若主机想写1,则一开始主机先把总线拉低1微秒表示写周期开始,1微秒后就释放总线为高电平,一直到写周期结束。做为从机的DS18B20则在检测到总线被拉底后等待15微秒然后从15us到45us开始对总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。

 

//向DS18B20写数据
void ds18b20_write(uint8_t data)
{
	uint8_t i;
	gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0);//DQ-PA1	
//	for(i = 0; i < 8; i++)
//	{

//			DS18B20_DQ_OUT_L;
//			delay_xus(2);
//			DS18B20_DQ_OUT_H;
//			delay_xus(2);
//			if(data & 0x01)
//			{
//				DS18B20_DQ_OUT_H;
//			}
//			else
//			{
//				DS18B20_DQ_OUT_L;
//			}
//			delay_xus(50);
//			DS18B20_DQ_OUT_H;		

//			data >>= 1;
//	}	
	
	
	
	for(i = 0; i < 8; i++)
	{
		if(data & 0x01)
		{
			DS18B20_DQ_OUT_L;
			delay_xus(2);
			DS18B20_DQ_OUT_H;
			delay_xus(60);
		}
		else
		{
			DS18B20_DQ_OUT_L;
			delay_xus(60);
			DS18B20_DQ_OUT_H;
			delay_xus(2);			
		}
		data >>= 1;
	}
}

3、读操作时序

 

6.png  对于读数据操作时序也分为读0时序和读1时序两个过程。读时序是从主机把单总线拉低之后,在1微秒之后就得释放单总线为高电平,以让DS18B20把数据传输到单总线上。DS18B20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。主机在一开始拉低总线1微秒后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0。采样期内总线为高电平则确认为1。完成一个读时序过程,至少需要60us才能完成。
 

//从DS18B20读取一个bit数据
uint8_t ds18b20_read_bit(void)
{
	uint8_t data = 0;
	gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0);//DQ-PA1
	DS18B20_DQ_OUT_L;
	delay_xus(2);
	DS18B20_DQ_OUT_H;
	gpio_mode_set(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0);//DQ-PA1			
	data = DS18B20_DQ_IN;
	delay_xus(50);	
	return data;
}

三、测试效果

7.png

工程源代码:

gd_finger.7z (357.64 KB, 下载次数: 0)


回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    关闭
    站长推荐上一条 1/7 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表