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
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!