最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

RC充放电测温

来源:动视网 责编:小OO 时间:2025-09-28 12:30:27
文档

RC充放电测温

首先检讨一下,用的cpu是本人很不喜欢的甚至讨厌的stc某一系列的,不为别的,就因为祖父祖母的,太扯淡了。言归正传。一提到温度测量,我们通常往往都会想到AD采样,但是在一些对测量精度要求不是很高的场合,我们是不是可以换一种思路,抛弃AD,用其他的方式来实现呢,呵呵,正好接触到一个项目,所以打算挑战一下,没错,就是RC充放电来实现温度测量。先看一下基本的电路连接: 0 (原文件名:RC0.PNG) 图O:cpu拿出三个GPIO管脚,分别连接热敏电阻、100K高精电阻R1、泄流电阻R2,然后通过一
推荐度:
导读首先检讨一下,用的cpu是本人很不喜欢的甚至讨厌的stc某一系列的,不为别的,就因为祖父祖母的,太扯淡了。言归正传。一提到温度测量,我们通常往往都会想到AD采样,但是在一些对测量精度要求不是很高的场合,我们是不是可以换一种思路,抛弃AD,用其他的方式来实现呢,呵呵,正好接触到一个项目,所以打算挑战一下,没错,就是RC充放电来实现温度测量。先看一下基本的电路连接: 0 (原文件名:RC0.PNG) 图O:cpu拿出三个GPIO管脚,分别连接热敏电阻、100K高精电阻R1、泄流电阻R2,然后通过一
首先检讨一下,用的cpu是本人很不喜欢的甚至讨厌的stc某一系列的,不为别的,就因为 

祖父祖母的,太扯淡了。言归正传。 

一提到温度测量,我们通常往往都会想到AD采样,但是在一些对测量精度要求不是很高的场合, 

我们是不是可以换一种思路,抛弃AD,用其他的方式来实现呢,呵呵,正好接触到一个项目,所 

以打算挑战一下,没错,就是RC充放电来实现温度测量。 

先看一下基本的电路连接:  

0 (原文件名:RC0.PNG) 

图O:cpu拿出三个GPIO管脚,分别连接热敏电阻、100K高精电阻R1、泄流电阻R2,然后 

通过一只电容器连接到GND。在这里电容器可以理解成一只小电池,而且还是一只可 

充电电池。  

1 (原文件名:RC1.PNG) 

图1:将RT设置成高阻太(输入),这样热敏电阻相当于断开(虚线),R1设置成输出,泄流电阻R2 

设置成输出,如果cpu内部有上拉的话,最好打开,或者配置成强推挽,具体情况根据所选则的cpu而定。 

这样R2给电容器充电,程序中一直检测R1管脚,直到R1管脚为高 while(R1 == 1);其实电容器被不一定被充满 

电,只要满足R1管脚处的电平对于cpu来说是个高电平就足以。 

2 (原文件名:RC2.PNG) 

图2:保持RT继续高阻(断开),将R1设置成输出,输出0(低电平),R2设置成输入,此时电容通过100K 

高精度电阻进行放电,程序中一直检测R2管脚,直到R2管脚为低电平 while(R2 == 0);记录时间T1,T1就是 

电容器通过100k电阻放电所需要的时间。 

图3:过程跟图一是一模一样的,给电容器充电(不一定充满),原因你懂的; 

3 (原文件名:RC3.PNG) 

4 (原文件名:RC4.PNG) 

图4:将R1设置成高阻(断开),RT设置成输出,并且输出低电平,将R2设置成输出;此时电容器通过RT进行放电,程序中一直检测R2管脚,直到R2管脚为低电平 while(R2 == 0);记录时间T2,T2就是电容器通过100k电阻放电所需要的时间。 

  

到此,我们就可以算出热敏电阻RT的阻值了: 

6 (原文件名:RC6.PNG) 

001 /** 

002  *青岛昊阳智能微控技术有限公司 

003  * 

004  * 温度采集 

005  * 参考电阻为100 K 

006  * @param  

007  *              unsigned char channel:采集哪个通道的温度     

008  *              NTP_OUTSIDE: 温控器外部温度探头 

009  *              NTP_INSIDE: 温控器内部探头 

010  *@return 

011  *              ERROR_NTP_PARA_ERROR:参数错误 

012  *              ERROR_NTP_LOST_ERROR:温度探头丢失 

013  *              非负:采集到的温度值 

014  * 

015  * @brief  

016  *              by kaka,2011,2,20          

017  */ 

018   

019    

020 #define NTP_CHECK (1) 

021 short ntp_100k_get_temperature(unsigned char channel){ 

022     double x, y, z; 

023     unsigned long temperature_cnt_a, temperature_cnt_b; 

024     unsigned char tmp; 

025   

026     if(channel == NTP_INSIDE){ 

027         SET_P2(7, IO_PORT_TRI_IN); //参考电阻 输入 

028         SET_P2(6, IO_PORT_PULL_OUT); // 泄流电阻输出 

029         SET_P4(4, IO_PORT_TRI_IN); // 热敏电阻输入 

030   

031         RFL0 = 0; //泄流电阻输出0 

032         while(RE0);   // 一直等到电容空 

033           

034         RFL0 = 1; //泄流电阻输出1 

035         while(!RE0);      // 一直等到电容满 

036   

037         SET_P2(7, IO_PORT_NO_PULL_IO); //参考电阻 输出 

038         SET_P2(6, IO_PORT_TRI_IN); // 泄流电阻输入 

039         SET_P4(4, IO_PORT_TRI_IN);// 热敏电阻输入 

040       

041         RE0 = 0; //参考电阻输出0, 给电容放电 

042         temperature_cnt_a = 1; 

043         while(RFL0){ // 等到电容电量放空 

044             temperature_cnt_a ++; 

045             if(temperature_cnt_a > NTP_MAX_COUNTER){

046                 return ERROR_NTP_LOST_ERROR; 

047             } 

048         } 

049   

050         SET_P2(7, IO_PORT_TRI_IN); //参考电阻 输入 

051         SET_P2(6, IO_PORT_PULL_OUT); // 泄流电阻输出 

052         SET_P4(4, IO_PORT_TRI_IN); // 热敏电阻输入 

053   

054         RFL0 = 0; //泄流电阻输出0 

055         while(RE0);   // 一直等到电容空 

056   

057         RFL0 = 1; //泄流电阻输出1 

058         while(!RE0);      // 一直等到电容满 

059           

060         SET_P2(7, IO_PORT_TRI_IN); //参考电阻 输入 

061         SET_P2(6, IO_PORT_TRI_IN); // 泄流电阻输入 

062         SET_P4(4, IO_PORT_NO_PULL_IO);// 热敏电阻输出 

063         RT0 = 0; //通过热敏电阻给电容充电 

0         temperature_cnt_b = 1; 

065         while(RFL0){ 

066             temperature_cnt_b ++; 

067             if(temperature_cnt_b > NTP_MAX_COUNTER){

068                 return ERROR_NTP_LOST_ERROR; 

069             } 

070         } 

071     }else if(channel == NTP_OUTSIDE){ 

072         SET_P2(4, IO_PORT_TRI_IN); //参考电阻 输入 

073         SET_P2(3, IO_PORT_PULL_OUT); // 泄流电阻输出 

074         SET_P2(5, IO_PORT_TRI_IN); // 热敏电阻输入 

075       

076         RFL1 = 1; //泄流电阻输出1 

077         while(!RE1);      // 一直等到电容放满 

078   

079         SET_P2(4, IO_PORT_NO_PULL_IO); //参考电阻 输出 

080         SET_P2(3, IO_PORT_TRI_IN); // 泄流电阻输入 

081         SET_P2(5, IO_PORT_TRI_IN);// 热敏电阻输入 

082       

083         RE1 = 0; //参考电阻输出0, 给电容放电 

084         temperature_cnt_a = 1; 

085         while((RFL1)){ // 等到电容电量充满 

086             temperature_cnt_a ++; 

087             if(temperature_cnt_a > NTP_MAX_COUNTER){

088                 return ERROR_NTP_LOST_ERROR; 

0             } 

090         } 

091         SET_P2(4, IO_PORT_TRI_IN); //参考电阻 输入 

092         SET_P2(3, IO_PORT_PULL_OUT); // 泄流电阻输出 

093         SET_P2(5, IO_PORT_TRI_IN); // 热敏电阻输入 

094       

095         RFL1 = 1; //泄流电阻输出1 

096         while(!RE1);      // 一直等到电容满 

097           

098         SET_P2(4, IO_PORT_TRI_IN); //参考电阻 输入 

099         SET_P2(3, IO_PORT_TRI_IN); // 泄流电阻输入 

100         SET_P2(5, IO_PORT_NO_PULL_IO);// 热敏电阻输出 

101         RT1 = 0; //通过热敏电阻给电容放电 

102         temperature_cnt_b = 1; 

103         while(RFL1){ 

104             temperature_cnt_b ++; 

105             if(temperature_cnt_b > NTP_MAX_COUNTER){

106                 return ERROR_NTP_LOST_ERROR; 

107             } 

108         } 

109     }else{ 

110         return ERROR_NTP_PARA_ERROR; 

111     } 

112   

113     x = 0; 

114     y = temperature_cnt_a; 

115     z = temperature_cnt_b*100000; 

116     x = z / y;  //热敏电阻除以参考电阻 

117     tmp = ntp_100k_conversion(x); 

118   

119     return tmp; 

120 }

文档

RC充放电测温

首先检讨一下,用的cpu是本人很不喜欢的甚至讨厌的stc某一系列的,不为别的,就因为祖父祖母的,太扯淡了。言归正传。一提到温度测量,我们通常往往都会想到AD采样,但是在一些对测量精度要求不是很高的场合,我们是不是可以换一种思路,抛弃AD,用其他的方式来实现呢,呵呵,正好接触到一个项目,所以打算挑战一下,没错,就是RC充放电来实现温度测量。先看一下基本的电路连接: 0 (原文件名:RC0.PNG) 图O:cpu拿出三个GPIO管脚,分别连接热敏电阻、100K高精电阻R1、泄流电阻R2,然后通过一
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top