本应用笔记介绍了基于MAXQ2000微控制器、MAX31875高分辨率本地温度传感器和MAX7219八位LED显示驱动器的带LED显示屏的温度监测系统。
介绍
MAX31875为精度为±2°C的本地温度传感器,具有I2C/SMBus 接口。该器件采用4焊球晶圆级封装,平均电源电流<10μA,工作温度范围为-20°C至+150°C。 MAX31875具有纤巧的封装、低功耗和出色的精度,可用于各种温度测量应用,如便携式设备、手持电子设备和工业设备。本应用笔记提出了温度监测系统的想法。系统基于MAXQ2000微控制器、MAX31875高分辨率本地温度传感器和MAX7219 8位LED显示驱动器。MAXQ2000通过I读取温度2MAX31875的C接口和LED显示屏通过串行外设接口(SPI)使用MAX7219 LED驱动器实现。
概述
温度监测系统使用MAXQ2000作为控制器。它用作温度传感器和LED显示屏之间的接口。MAXQ2000通过I接收温度信息2MAX31875的C接口,为MAX7219产生一个SPI,驱动LED显示屏。我2MAXQ2000提供的C接口工作频率为400kHz或100kHz,SPI命令的发送频率可达8MHz。MAXQ2000通过I持续检查环境温度2MAX31875的C接口。一个八位LED以摄氏度为单位显示MAX31875的本地温度。MAX7219为紧凑的串行输入/输出共阴极显示驱动器。只需将其连接到八位七段数字LED显示屏,然后通过SPI从微控制器发送温度信息。
硬件设置
测试程序在Maxim命令模块(CMAXQUSB)上运行。它用作从PC接收命令的接口,并创建SPI或SMBus/I2C兼容接口,用于向MAX31875和MAX7219发送命令。板载电平转换器将MAXQ2000 2.5V逻辑信号转换为外部VDD逻辑电平。VDD逻辑电平可通过跳线选择2.5V、3.3V或5V,由板载超低噪声LDO MAX8511提供。MAX3373为双向电平转换器,专为I级设计。2C总线。板载提供可选的用户可切换 SCL/SDA 上拉电阻。MAX31875评估板带有VDD、GND、SCL和SDA测试点接头,连接至CMAXQUSB上的P7连接器。MAX7219用于驱动8位、7段LED显示屏。MAX7219的SPI连接到CMAXQUSB上的连接器P8。固件通过连接器P5加载到MAXQ2000中。硬件配置如图 1 所示。实际设置如图 2 所示。
图1.温度监控系统。
图2.温度监控设置。
软件功能
温度监测程序包括三个主要功能:从MAX31875到I获取温度读数2C接口,向MAX7219发送SPI命令,并将结果输出到LED显示屏上。
CMAXQUSB模块提供了一个“位撞击”I2C 使用MAXQ2000的GPIO引脚。MAXQ系列微控制器具有高速、灵活的GPIO模块和独立的I/O电源电压,非常适合此类位敲击应用。
选择两个 GPIO 引脚用作 SCL 和 SDA。包括MAXQ2000 I2项目目录中的 C 库文件(maxq2000_i2c.h 和 maxq2000_i2c.c),并为 I 配置所需的 I/O2C 接口。
为 SCL 和 SDA 信号选择 GPIO 引脚的代码如下:
#define SCL_ENABLE PD6 |= 0x01;
#define SCL_DISABLE PD6 &= 0xFE;
#define SDA_ENABLE PD6 |= 0x02;
#define SDA_DISABLE PD6 &= 0xFD;
#define SCL_HIGH PO6 |= 0x01;
#define SCL_LOW PO6 &= 0xFE;
#define SDA_HIGH PO6 |= 0x02;
#define SDA_LOW PO6 &= 0xFD;
要从MAX31875读取温度,请向IC地址0x90发送读取命令,并0x00温度寄存器地址。MAX31875的温度寄存器以二进制补码格式显示;MSB 是符号位。
获取温度的代码如下所示。maxq2000_i2c.c文件中的TxByte用于传输I上的8位字节2C总线,和我2C_RxByte用于从从接收8位字节。要从浮点型 GetTEMP() 读取温度:
{
int temp;
float number=0;
int temp_reg;
// first set the address
I2C_Start();
I2C_TxByte(0x90);
if (!checkForValidAck()) return -1;
I2C_TxByte(0x00);
if (!checkForValidAck()) return -1;
I2C_Stop();
// now read the data
I2C_Start();
I2C_TxByte(0x91);
if (!checkForValidAck()) return -1;
temp=I2C_RxByte();
I2C_TxBit(0);
temp=temp<<8;
temp|=I2C_RxByte();
I2C_TxBit(1);
I2C_Stop();
temp_reg=temp&0X7FFF;//get unsigned bit
temp=temp>>15;//get sign
if(temp)
sign=1;
else
sign=0;
number=(temp_reg-sign*32768)*0.0625/8 ;
return number;
}
从MAX31875接收的温度读数通过SPI和MAX7219的寄存器发送到MAX7219。spi_transmit() 执行如下所示的 SPI 传输。
unsigned int spi_transmit(const unsigned int ch)
{
unsigned int spib;
while(SPICN_bit.STBY); /* Wait until the character can be sent. */
SPICN_bit.SPIC = 0; /* In case it is already set, clear the */
/* transfer complete flag. */
SPIB = ch; /* Send the data. */
while(!SPICN_bit.SPIC); /* Wait for the transfer to complete. */
spib = SPIB; /* Get the data received. */
SPICN_bit.SPIC = 0; /* Clear the tansfer complete flag. */
return spib;
}
MAX7219驱动8位、7段LED显示屏。MAX7219提供BCD码B解码器。但是,为了显示摄氏符号,我们使用无解码模式。MAX7219的寄存器数据被分配一个数字模式,因此,每个LED可以显示相应的数字。
char digit_pattern[] =
{ 0x7E, // 0
0x30, // 1
0x6D, // 2
0x79, // 3
0x33, // 4
0x5b, // 5
0x5F, // 6
0x70, // 7
0x7F, // 8
0x7B, // 9
0x77, // A
0x1F, // b
0x4E, // C
0x3d, // d
0x4f, // E
0x47 // F
};
max7219_writeregister(MAX7219REG_Degree,digit_pattern[12],LENGTH_16);// Display Celsius sign
测试结果
将此温度监测器放入福禄克®油浴校准器内,收集 -20°C 至 +150°C 的温度读数。 监视器在整个温度范围内的精度(图3)低于1°C。
图3.精度与温度的关系。
结论
MAX31875为精确的本地温度传感器。使用MAXQ2000的SPI和I2C接口,该温度监测系统可通过MAX7219显示实时温度,作为低成本温度监测器工作。
全部0条评论
快来发表一下你的评论吧 !