RC充放电测温

首先检讨一下,用的cpu是本人很不喜欢的甚至讨厌的stc某一系列的,不为别的,就因为
祖父祖母的,太扯淡了。言归正传。。
一提到温度测量,我们通常往往都会想到AD采样,但是在一些对测量精度要求不是很高的场合,
我们是不是可以换一种思路,抛弃AD,用其他的方式来实现呢,呵呵,正好接触到一个项目,所
以打算挑战一下,没错,就是RC充放电来实现温度测量。
先看一下基本的电路连接: 
(原文件名:RC0.PNG) 
图O:cpu拿出三个GPIO管脚,分别连接热敏电阻、100K高精电阻R1、泄流电阻R2,然后
通过一只电容器连接到GND。在这里电容器可以理解成一只小电池,而且还是一只可
充电电池。 
挠性电路板
(原文件名:RC1.PNG) 
管式热交换器原理图图1:将RT设置成高阻太(输入),这样热敏电阻相当于断开(虚线),R1设置成输出,泄流电阻R2
设置成输出,如果cpu内部有上拉的话,最好打开,或者配置成强推挽,具体情况根据所选则的cpu而定。
这样R2给电容器充电,程序中一直检测R1管脚,直到R1管脚为高 while(R1 == 1);其实电容器被不一定被充满
电,只要满足R1管脚处的电平对于cpu来说是个高电平就足以。
(原文件名:RC2.PNG) 
图2:保持RT继续高阻(断开),将R1设置成输出,输出0(低电平),R2设置成输入,此时电容通过100K
高精度电阻进行放电,程序中一直检测R2管脚,直到R2管脚为低电平 while(R2 == 0);记录时间T1,T1就是
电容器通过100k电阻放电所需要的时间。
图3:过程跟图一是一模一样的,给电容器充电(不一定充满),原因你懂的;
(原文件名:RC3.PNG) 
(原文件名:RC4.PNG) 
图4:将R1设置成高阻(断开),RT设置成输出,并且输出低电平,将R2设置成输出;此时电容器通过RT进行放电,程序中一直检测R2管脚,直到R2管脚为低电平 while(R2 == 0)
;记录时间T2,T2就是电容器通过100k电阻放电所需要的时间。
 
到此,我们就可以算出热敏电阻RT的阻值了:
织布机维修(原文件名: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);      // 一直等到电容满

本文发布于:2024-09-21 22:19:39,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/157951.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:电阻   温度   管脚   输出   测量   设置   放电   泄流
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议