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

[复制链接]
1333|4
 楼主| 春风的暖暖 发表于 2015-11-27 21:55 | 显示全部楼层 |阅读模式
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不断被访问时,器件将一直更新温度寄存器中的数据。
  正常工作模式下,当器件上电时,OS工作在比较器模式,温度阈值为80℃,滞后75℃,这时,LM75A就可用作独立的温度控制器,预定义温度设定点。
器件可以完全取代工业标准的LM75,并提供了良好的温度精度(0.125℃),单个器件的电源范围可超出2.8V~5.5V的范围


    • 具有I2C总线接口,同一总线上可连接多达8个器件
    • 电源电压范围:2.8V~5.5V
    • 环境温度范围:Tamb=-55℃~+125℃
    • 提供0.125℃的精度的11位ADC
    • 温度精度:
  •     -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-11-27 21:57 | 显示全部楼层




上表中的11位2进制以补码形式存储。
1.  bit  D10 = 0, 温度是正的,温度值(°C) = +(Temp data) × 0.125 °C.
2.  bit D10 = 1,  温度是负的,温度值
(°C) = -(0x800-Temp data) × 0.125 °C.

 楼主| 春风的暖暖 发表于 2015-11-27 21:59 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "gpio.h"
  4. #include "common.h"
  5. #include "i2c.h"
  6. #include "uart.h"
  7. float L75_Temp;
  8. void LM75A_Temp(void)
  9. {
  10.   
  11.   uint8_t Temp_Data[2]={0};
  12.   uint16_t Temp;
  13.   I2C_BurstRead(HW_I2C0, 0x48, 0x00, 0, Temp_Data, 2);
  14.   Temp=(uint16_t)Temp_Data[0];
  15.   Temp=(Temp<<8|Temp_Data[1])>>5;
  16.   if(!(Temp_Data[0]&0x80))
  17.   {      
  18.       L75_Temp=Temp*0.125;
  19.       printf("当前温度:+%.3f度\r\n",L75_Temp);
  20.   }
  21.   else
  22.   {      
  23.       L75_Temp=(0x800-Temp)*0.125;
  24.        printf("当前温度:-%.3f度\r\n",L75_Temp);
  25.   }
  26. }
  27. int main(void)
  28. {
  29.    
  30.     /* 开机延时 */
  31.     DelayInit();
  32.     /* UART 初始化 */
  33.     GPIO_QuickInit(HW_GPIOB, 6, kGPIO_Mode_OPP);
  34.     UART_QuickInit(UART0_RX_B2_TX_B1, 9600);
  35.     UART_ITConfig(HW_UART0, kUART_IT_Rx, true);
  36.     I2C_QuickInit(I2C0_SCL_PB03_SDA_PB04, 576000);
  37. printf("LM75A温度传感器\r\n");
  38.     while(1)
  39.     {
  40. LM75A_Temp();  
  41. GPIO_ToggleBit(HW_GPIOB, 6);
  42.         DelayMs(1000);
  43.     }   
  44.    
  45. }
大苏牙 发表于 2015-11-28 09:05 | 显示全部楼层
现在这个LM75用的没有那么多了吧
 楼主| 春风的暖暖 发表于 2015-11-29 21:16 | 显示全部楼层
LM75A也是用I2C的接口,很常用的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

306

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部