- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
首先检讨一下,用的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 * 参考电阻为100K
006 *@param
007 * unsignedcharchannel:采集哪个通道的温度
008 * NTP_OUTSIDE: 温控器外部温度探头
009 * NTP_INSIDE: 温控器内部探头
010 *@return
011 * ERROR_NTP_PARA_ERROR:参数错误
012 * ERROR_NTP_LOST_ERROR:温度探头丢失
013 * 非负:采集到的温度值
014 *
015 *@brief
016 * bykaka,2011,2,20
017 */
018
019
020#defineNTP_CHECK (1)
021shortntp_100k_get_temperature(unsignedcharchannel){
022 doublex, y, z;
023 unsignedlongtemperature_cnt_a,temperature_cnt_b;
024 unsignedchartmp;
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); // 热
文档评论(0)