Arduino与Proteus仿真实例-TC72温度传感器驱动仿真

TC72温度传感器驱动仿真

1、TC72介绍

TC72 是一种数字温度传感器,能够读取 -55°C 至 +125°C 的温度。 该传感器具有串行接口,允许与主机控制器或其他外围设备进行通信。 TC72 接口兼容 SPI 协议,不需要任何额外的外部组件。 但是,建议在 VDD 和 GND 引脚之间提供一个 0.01 µF 至 0.1 µF 的去耦电容。

TC72 可用于连续温度转换模式或一次性转换模式。连续转换模式大约每 150 毫秒测量一次温度并将数据存储在温度寄存器中。 相比之下,One-Shot 模式执行一次温度测量并返回到省电关机模式。

TC72 具有温度精度高、易于使用的特点,是在各种系统中实施热管理的理想解决方案。 该器件提供 8 引脚 MSOP 和 8 引脚 DFN 节省空间封装。 TC72 还具有用于低功耗操作的关断模式。

TC72主要应用于•个人电脑和服务器、硬盘驱动器和其他 PC 外围设备、娱乐系统、办公用品、数据通信设备、手机、通用温度监控等。

在这里插入图片描述

TC72具有如下特点:

  • 4 线 SPI™ 兼容接口
  • 10 位分辨率(0.25°C/位)
  • ±2°C 精度,-40°C 至 +85°C
  • ±3°C 精度从 -55°C 到 +125°C
  • 低工作电流:250uA(典型值)
  • 关断模式:1uA(最大值)
  • 省电一键测温
  • 提供节省空间的 3x3 无铅封装

TC72的引脚功能如下:

在这里插入图片描述

2、仿真电路原理图

在这里插入图片描述

3、仿真代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <SPI.h>

//Assign the Chip Select signal to pin 09.
const int CS = SS;

//TC72 Registers
const char MODE = 2; //1 = conti && 2 = one shot
const char CONT = 0x04;
const char SET = 0x14;
const char ONE_SHOT = 0x05;
const char CNTL_R = 0x00;
const char CNTL_W = 0x80;
const char ID = 0x03;
const char TEMP_LSB = 0x01;
const char TEMP_MSB = 0x02;

void writeRegister(char registerAddress, char value);
char readRegister(char registerAddress);

//Conversion mode
void mode\_selection(int mode) //mode 1 == conti && mode2 == one\_shot
{
if(mode == 1)
{
writeRegister(CNTL_W, CONT); // continues mode set
}
else if(mode == 2)
{
writeRegister(CNTL_W, ONE_SHOT); //shut-down mode set
}
}

void setup()
{
pinMode(CS, OUTPUT);
digitalWrite(CS, LOW);
delay(500);
digitalWrite(CS, HIGH);
//Console Setup
Serial.begin(9600);
//SPI Port Setup
SPI.begin();
mode\_selection(MODE); //1 = conti && 2 = one\_shot
}

void loop()
{
float new_data;
char msbvalue = readRegister(TEMP_MSB,MODE);
char lsbvalue = readRegister(TEMP_LSB,MODE);
if(lsbvalue && 0b10000000 == 0b10000000)
{
new_data = msbvalue + 0.50;
}
else if (lsbvalue && 0b01000000 == 0b01000000)
{
new_data = msbvalue + 0.25;
}
else
{
new_data = msbvalue;
}

Serial.print("Live temp is = ");
Serial.print(new_data);
Serial.println();
delay(1000);
}

void writeRegister(char registerAddress, char value)
{
SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE1));
digitalWrite(CS, LOW);
digitalWrite(CS, HIGH);
SPI.transfer(registerAddress);
SPI.transfer(value);
digitalWrite(CS, LOW);
SPI.endTransaction();
}

char readRegister(char registerAddress,char mode)
{
if(mode == 2)writeRegister(CNTL_W, SET); //for one\_Shot mode…
SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE1));
digitalWrite(CS, LOW);
digitalWrite(CS, HIGH);
SPI.transfer(registerAddress);
char values = SPI.transfer(0x00);
digitalWrite(CS, LOW);
SPI.endTransaction();
return values;
}

4、仿真结果

在这里插入图片描述

文章来源: https://iotsmart.blog.csdn.net/article/details/121436881