2369|2

1万

帖子

25

TA的资源

版主

楼主
 

STTS751的MicroPython驱动移植 [复制链接]

 
本帖最后由 dcexpert 于 2019-7-17 10:25 编辑

看到STTS751的名称,很容易联想到Si7051这个温度传感器。两者都是高精度温度传感器,STTS751最高可以达到12位分辨率,而Si7051是14位。功耗方面Si7051占优,1Hz采样率下平均电流195nA。电源范围上Si7051也稍好,最低是1.9V。而封装上STTS751更小,只有2x2mm。功能上STTS751明显胜出,支持事件和中断输出,可以设置温度上下限和过温启动风扇。软件方面也是STTS751更方便,可以直接读取温度,而Si7051还需要经过换算才行。

 

STTS7551的使用非常简单,上电后默认参数就可以读取温度,不像有些传感器上电后是掉电状态,需要设置为工作模式才运行。温度值存放在寄存器0和2,寄存器0存放整数部分和符号位,寄存器2存放小数部分,如果不需要太高精度,只读取寄存器0就可以。稍有不便的是两个寄存器地址不连续。

 

寄存器3是配置寄存器,可以设置数据分辨率(Tres1/Tres0),默认是10bit。而RUN/STOP可以设置为运行和待机模式。在待机模式下,如果向oneshot寄存器(0F)写入任意数据,就会启用oneshot功能(运行一次),转换温度后自动进行待机模式以降低功耗。

上面简单分析了STTS751的工作模式,下面是完整的micropython驱动:


此内容由EEWORLD论坛网友dcexpert原创,如需转载或用于商业用途需征得作者同意并注明出处
 

# STTS751 temperature seneor micropython drive
# ver: 1.0
# License: MIT
# Author: shaoziyang (shaoziyang@micropython.org.cn)
# v1.0 2019.7

STTS751_RESOLUTION = (8, 0, 4, 12, 10, 11, 9, 12)
STTS751_REG_STATUS = const(1)
STTS751_REG_CONFIG = const(3)
STTS751_REG_CONRAT = const(4)
STTS751_REG_TEMPVH = const(0)
STTS751_REG_TEMPVL = const(2)
STTS751_REG_TEMPHH = const(5)
STTS751_REG_TEMPHL = const(6)
STTS751_REG_TEMPLH = const(7)
STTS751_REG_TEMPLL = const(8)
STTS751_REG_ONESHOT = const(15)
STTS751_REG_THERM = const(32)
STTS751_REG_THERMHYS = const(33)

class STTS751():
    def __init__(self, i2c, addr = 0x4A):
        self.i2c = i2c
        self.addr = addr
        self.tb = bytearray(1)
        self.rb = bytearray(1)
        self.oneshot = False
        self.mode(False)

    def int16(self, d):
        return d if d < 0x8000 else d - 0x10000

    def setreg(self, reg, dat):
        self.tb[0] = dat
        self.i2c.writeto_mem(self.addr, reg, self.tb)

    def getreg(self, reg):
        self.i2c.readfrom_mem_into(self.addr, reg, self.rb)
        return self.rb[0]

    def get2reg(self, reg):
        return self.getreg(reg) + self.getreg(reg+1) * 256

    def resolution(self, res = None):
        self.getreg(STTS751_REG_CONFIG)
        if res is None:
            return STTS751_RESOLUTION[(self.rb[0] & 0x0C)//4 + 4]
        else:
            if res > 12 or res < 9: return
            self.rb[0] = (self.rb[0] & 0xF3) | STTS751_RESOLUTION[res-9]
            self.setreg(STTS751_REG_CONFIG, self.rb[0])

    def mode(self, oneshot=None):
        if oneshot is None:
            return self.oneshot
        else:
            self.getreg(STTS751_REG_CONFIG)
            self.oneshot = oneshot
            if oneshot: self.rb[0] |= 0x40
            else: self.rb[0] &= 0xBF
            self.setreg(STTS751_REG_CONFIG, self.rb[0])

    def ONE_SHOT(self):
        if self.oneshot:
            self.setreg(STTS751_REG_ONESHOT, 1)
            while 1:
                if self.getreg(STTS751_REG_STATUS) < 0x80:
                    return

    def temperature(self):
        try:
            self.ONE_SHOT()
            return self.int16((self.getreg(STTS751_REG_TEMPVH)<<8) + self.getreg(STTS751_REG_TEMPVL))/256
        except MemoryError:
            return self.temperature_irq()
 
    def temperature_irq(self):
        self.ONE_SHOT()
        self.getreg(STTS751_REG_TEMPVH)
        return self.rb[0] if self.rb[0] < 128 else self.rb[0] - 256


 

1.jpg (27.15 KB, 下载次数: 0)

1.jpg

2.jpg (23.04 KB, 下载次数: 0)

2.jpg
点赞 关注
 
 

回复
举报

1万

帖子

25

TA的资源

版主

沙发
 

 

使用方法:

from machine import I2C
import STTS751

i2c = I2C(1)
stt = STTS751.STTS751(i2c)
stt.temperature()

 

 
 
 

回复

1万

帖子

25

TA的资源

版主

板凳
 

回调函数中用法

from machine import I2C
from pyb import Timer
import STTS751

i2c = I2C(1)
stt = STTS751.STTS751(i2c)

def tim_irq(t):
    print(stt.temperature_irq())

tim = Timer(1, freq = 1)
tim.callback(tim_irq)

因为回调函数不支持浮点计算,所以在回调函数中只能读取温度的整数部分。

 

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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