打印
[Kinetis]

【FRDM-KL02】+LM75A温度传感器+串口显示

[复制链接]
746|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
春风的暖暖|  楼主 | 2015-12-25 18:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LM75A是一款内置带隙温度传感器和∑-Δ模数转换功能的温度数字转换器,它也是温度检测器,可提供过热输出功能。LM75A包含多个数据寄存器:配置寄存器(Conf)用来存储器件的某些设置,如器件的工作模式、OS工作模式、OS极性和OS错误队列等;温度寄存器(Temp)用来存储读取的数字温度;设定点寄存器(Tos & Thyst)用来存储可编程的过热关断和滞后限制,器件通过两线的串行I2C总线接口与控制器通信。LM75A还包含一个开漏输出(OS)管脚,当温度超过编程限制的值时该输出有效。LM75A有3个可选的逻辑地址管脚,使得同一总线上可同时连接8个器件而不发生地址冲突。
  LM75A可配置成不同的工作模式。它可设置成在正常工作模式下周期性地对环境温度进行监控,或进入关断模式来将器件功耗降至最低。OS输出有2种可选的工作模式:OS比较器模式和OS中断模式。OS输出可选择高电平或低电平有效。错误队列和设定点限制可编程,可以激活OS输出。
  温度寄存器通常存放着一个11位的二进制数的补码,用来实现0.125℃的精度,在需要精确地测量温度偏移或超出限制范围的应用中非常有用。当LM75A在转换过程中不产生中断(I2C总线部分与∑-Δ转换部分完全独立)或LM75A不断被访问时,器件将一直更新温度寄存器中的数据。

相关帖子

沙发
春风的暖暖|  楼主 | 2015-12-25 18:13 | 只看该作者
正常工作模式下,当器件上电时,OS工作在比较器模式,温度阈值为80℃,滞后75℃,这时,LM75A就可用作独立的温度控制器,预定义温度设定点。
特点
器件可以完全取代工业标准的LM75,并提供了良好的温度精度(0.125℃),单个器件的电源范围可超出2.8V~5.5V的范围


        具有I2C总线接口,同一总线上可连接多达8个器件
        电源电压范围:2.8V~5.5V
        环境温度范围:Tamb=-55℃~+125℃
        提供0.125℃的精度的11位ADC
        温度精度:

使用特权

评论回复
板凳
春风的暖暖|  楼主 | 2015-12-25 18:13 | 只看该作者
  •     -25℃~+100℃时为±2℃
  •     -55℃~+125℃时为±3℃
    • 可编程温度阈值和滞后设定点
    • 为了减低功耗,关断模式下消耗的电流仅为3.5μA
    • 上电时器件可用作一个独立的温度控制器
    • ESD保护:
  •     JESD22-A114为2000V HBM
  •     JESD22-A115为200V和JESD22-C101为1000V CDM
    • 超过100mA的JESDEC标准JESD78要进行栓锁测试(Latch-up testing



使用特权

评论回复
地板
春风的暖暖|  楼主 | 2015-12-25 18:15 | 只看该作者

44.PNG (74.83 KB, 下载次数: 0)
下载附件
2015-11-27 20:00 上传



上表中的11位2进制以补码形式存储。

使用特权

评论回复
5
春风的暖暖|  楼主 | 2015-12-25 18:16 | 只看该作者
1.  bit  D10 = 0, 温度是正的,温度值(°C) = +(Temp data) × 0.125 °C.
2.  bit D10 = 1,  温度是负的,温度值
[size=13.3333px](°C) = -(0x800-Temp data) × 0.125 °C.
#include <stdio.h>
#include <string.h>
#include "gpio.h"
#include "common.h"
#include "i2c.h"
#include "uart.h"
float L75_Temp;



使用特权

评论回复
6
春风的暖暖|  楼主 | 2015-12-25 18:16 | 只看该作者
void LM75A_Temp(void)
{
  
  uint8_t Temp_Data[2]={0};
  uint16_t Temp;
  I2C_BurstRead(HW_I2C0, 0x48, 0x00, 0, Temp_Data, 2);
  Temp=(uint16_t)Temp_Data[0];
  Temp=(Temp<<8|Temp_Data[1])>>5;
  if(!(Temp_Data[0]&0x80))
  {      
      L75_Temp=Temp*0.125;
      printf("当前温度:+%.3f度\r\n",L75_Temp);
  }
  else
  {      
      L75_Temp=(0x800-Temp)*0.125;
       printf("当前温度:-%.3f度\r\n",L75_Temp);
  }
}

使用特权

评论回复
7
春风的暖暖|  楼主 | 2015-12-25 18:17 | 只看该作者
int main(void)
{
   
    /* 开机延时 */
    DelayInit();
    /* UART 初始化 */
    GPIO_QuickInit(HW_GPIOB, 6, kGPIO_Mode_OPP);
    UART_QuickInit(UART0_RX_B2_TX_B1, 9600);
    UART_ITConfig(HW_UART0, kUART_IT_Rx, true);
    I2C_QuickInit(I2C0_SCL_PB03_SDA_PB04, 576000);
printf("LM75A温度传感器\r\n");
    while(1)
    {
LM75A_Temp();  
GPIO_ToggleBit(HW_GPIOB, 6);
        DelayMs(1000);
    }   
   
}

使用特权

评论回复
8
春风的暖暖|  楼主 | 2015-12-25 18:18 | 只看该作者




使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

306

帖子

2

粉丝