基于CW32热敏电阻采集温度应用

电子说

1.3w人已加入

描述

1.利用NTC热敏电阻来采集温度具有高灵敏度、快速响应、宽温度测量范围和成本效益高等优势,这使得它成为许多应用中常用的温度传感器之一。

本期视频就来讲解基于CW32热敏电阻采集温度的应用。

2.本实验用到了CW32 Cortex-M实训套件实验箱、NTC热敏电阻及Keil5开发环境。

热敏电阻

CW32 Cortex-M实训套件

热敏电阻

NTC热敏电阻实物

热敏电阻

热敏电阻原理图

热敏电阻

热敏电阻主要技术参数

热敏电阻

热敏电阻

热敏电阻

3.NTC具体原理可观看视频,或参考以下链接中的文章

https://zhuanlan.zhihu.com/p/179181715

4.核心代码

/*

用TFT屏幕显示

1.热敏电阻的阻值

2.转换得到的温度

显示界面如下

 

-----------------------        
    NTC
  R:****   
  Tempture:****
-----------------------
*/

#include "main.h"
#include "table.h"   //阻温表
#include "config.h"
#include "LCD_calculate.h"
#include "Lcd_Driver.h"

char temp[10];  
unsigned char cnt = 0;
float dat_AD = 0;  //ADC采集电压
int R = 0;  //电阻值
float tempture = 0; //温度

void ADC_Configuration(void); // ADC初始化配置
float Get_ADC(void);  //采集电压值

int main()
{    
   unsigned char max,min,mid;    
   unsigned  int temp;  
   char strings[10];
  
  RCC_Configuration(); //时钟配置  A
  DC_Configuration(); //ADC配置
  
  Lcd_Init();          //TFT屏初始化配置  
  Lcd_Clear(GRAY0);    //清屏操作
  
  Gui_DrawFont_GBK16(0,0,WHITE,RED,"       NTC      "); //第一行:ADC TEST:  
  Gui_DrawFont_GBK16(0,32,WHITE,RED,"R:");             //第二行:R:  
  Gui_DrawFont_GBK16(0,48,WHITE,RED,"Temperature:"); //第三行:Temperature:
  
  while(1)  
  {        
     dat_AD = Get_ADC()*3.3/4095;  //单片机的参考电压为3.3V,12位的ADC    
     R = dat_AD*10000/(5-dat_AD);//VCC接5V,测得VCC实际电压值为4.58V,更为精准
    
    max = 97;  //温度上限97    
    min = 0;   //温度下限0
    
    while(1)   //二分查找法    
    {      
        mid = ( max + min ) / 2;      
        if( Table[mid] < R ) max = mid;      
        else min = mid;      
        if( (max-min) <= 1 ) break;    
    }
    
    if ( max == min ) tempture = min * 10;    
    else    
    {      
        temp = ( Table[min] - Table[max] ) / 10;  //计算温度的小数部分      
        temp = ( Table[min] - R ) / temp;           
        tempture = temp;       
        tempture = 10 * min + tempture;  //扩大十倍,方便计算    
    }    
    tempture /= 10;
    
    sprintf(strings,"%d",R);  //TFT显示阻值    
    Gui_DrawFont_GBK16(16,32,WHITE,RED,strings);    
    Gui_DrawFont_GBK16(48,32,WHITE,RED,"          ");
    
    sprintf(strings,"%.1f",tempture);    
    Gui_DrawFont_GBK16(96,48,WHITE,RED,strings); //TFT显示温度
    
    delay_ms(500);  
    }
}
float Get_ADC() //ADC采集
{  
   unsigned int temp_dat_adc = 0;
  ADC_SoftwareStartConvCmd(ENABLE);  
  while(ADC_GetITStatus(ADC_IT_EOC))  
  {    
      ADC_ClearITPendingBit(ADC_IT_EOC);          
      temp_dat_adc=ADC_GetConversionValue();        
  }  
  return   (float)temp_dat_adc;
}

 

5.实验最终现象

热敏电阻

实验接线箱

热敏电阻

来源:CW32生态社区

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理

审核编辑 黄宇

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分