差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
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) |