差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
tempsensor [2023/08/01 16:28]
chengshunkai
tempsensor [2023/08/01 16:39] (当前版本)
chengshunkai
行 760: 行 760:
 **数字温度传感器TCN75A** **数字温度传感器TCN75A**
  
-TCN75AVUA是一种温度传感器芯片其测温物理原理基于热敏电阻(Thermistor)的工作原理。热敏电阻是一种电阻器,其电阻值随温度的变化而变化+TCN75AVUA是一种温度传感器芯片其测温物理原理基于热敏电阻原理。
  
 在TCN75AVUA芯片中,使用了一种称为负温度系数(NTC)的热敏电阻。 在TCN75AVUA芯片中,使用了一种称为负温度系数(NTC)的热敏电阻。
行 766: 行 766:
 NTC热敏电阻的电阻值随温度升高而下降,而在温度下降时电阻值则上升。 NTC热敏电阻的电阻值随温度升高而下降,而在温度下降时电阻值则上升。
  
-该芯片中的热敏电阻与温度敏感元件(通常为PTAT电流源)组成一个温度敏感电路。+该芯片中的热敏电阻与温度敏感元件组成一个温度敏感电路。
  
 在特定的温度下,电路会产生一个电压,该电压与温度成比例。 在特定的温度下,电路会产生一个电压,该电压与温度成比例。
  
-芯片内部的模拟电路和ADC(模数转换器)将该电压转换为相应的数字值,这个数字值就代表测量到的温度。+芯片内部的模拟电路和ADC将该电压转换为相应的数字值,这个数字值就代表测量到的温度。 
 + 
 +由芯片TCN75A设计了一款数字温度传感器,该传感器使用I2C通信,可直接读取温度。 
 + 
 +{{ :​20230801163603.jpg?​600 |}} 
 + 
 +{{ :​20230728165827.jpg?​600 |}} 
 + 
 +    from machine import I2C,Pin 
 +    import math 
 +    import time 
 + 
 +    # I2C 地址 
 +    TCN75A = 0x48 
 + 
 +    #​I2C设备内部寄存器 
 +    TA = 0x00#​温度寄存器地址 
 +    CONFIG = 0x01#​配置寄存器地址 
 +    THYST = 0x02#​温度报警下限地址 
 +    TSET = 0x03#​温度报警上限地址 
 + 
 +    #​常用参数 
 +    Temp_9bit = 0x00#​设置温度精度为0.5 C 
 +    Temp_10bit = 0x20#​设置温度精度为0.25 C 
 +    Temp_11bit = 0x40#​设置温度精度为0.125 C 
 +    Temp_12bit = 0x60#​设置温度精度为0.0625 C 
 +    Comparator = 0x00#​设置报警输出为比较器模式 
 +    Interrupt = 0x02#​设置报警输出为中断模式 
 +    Alert_high = 0x04#​设置报警输出为高 
 +    Alert_low = 0x00#​设置报警输出为低 
 + 
 + 
 +    code=0 
 +    temp=0 
 +    #​初始化I2C 
 +    i2c = I2C(id=0,​scl=Pin(21),​sda=Pin(20),​freq=50_000) 
 + 
 +    #​向指定寄存器写入数据 
 +    def reg_write(i2c,​ addr, reg, data): 
 +        # Construct message 
 +        msg = bytearray() 
 +        msg.append(data) 
 + 
 +        i2c.writeto_mem(addr,​ reg, msg) 
 + 
 +    #​从指定寄存器中读取指定字节的数据 
 +    def reg_read(i2c,​ addr, reg, nbytes): 
 + 
 +        data = i2c.readfrom_mem(addr,​ reg, nbytes) 
 +        return data 
 + 
 +    #​读取总线上挂载的I2C设备并返回其地址 
 +    addr_list = i2c.scan() 
 +    print(addr_list) 
 + 
 +    reg_write(i2c,​TCN75A,​TA,​Temp_12bit)#​设置温度精度 
 + 
 +    while True: 
 +        code=reg_read(i2c,​TCN75A,​TA,​ 2) 
 +        temp=code[0]+code[1]*0.00390625#​将接收到的数据转换为温度 
 +        print("​Temperature = "​+str(temp)+"​ C") 
 +        time.sleep(1)