该单片机是普通io仿AD检测,电路如图所示,想知道为何能实现数值获取,以及单片机如何编程?
图中的C应该是电容吧(画成电阻有些干扰判断)
其实不大想答这题的,因为我盲猜这题是哪位老师给学生留下的课后作业。
首先明确一下问题的目标:
这电路应该是一个通过普通I/O进行AD检测的示例,实现的功能是通过一个普通I/O进行电路内NTC处温度的获取。
易知,温度是一个模拟量,而温度的数值是数字量,这个电路就是要获取温度信息。
由于温度是通过NTC的阻值变化来获取的,我们的目标就是获取NTC的当前阻值。
然后是总体思路:
我们观察电路,电路中有两个引脚,分别连接到了两个电阻,一个为固定56K的电阻,我们且称之为参考电阻。
另一个为NTC,NTC阻值根据温度发生变化。
两个电阻又与一个接地的电容相连。
不难看出,就单独来看,不管另一个电阻,NTC和参考电阻分别和电容形成了两个RC电路。
这样我们就可以通过计算电容的充放电时间来计算RC电路的阻值。(RC电路有τ=R×C,电路中的C是已知的,时间常数τ也就可知了,这部分不细说,自行百度)
当我们获取到NTC的阻值后,再根据已知的NTC电阻-温度变化曲线,查找对应阻值的温度,则实现了ADC转化
具体来看如何编程:
我们首先应该对参考电阻进行一次充放电电操作,获取参考的56K电阻下充满电的时间。
编程上,即将参考电阻所在引脚配置为输出,且输出高电平,NTC所在引脚配置为高阻态。待稳定后,再将参考引脚配置为输入,同时使用定时器进行计时,每次计时结束读取一次电位,得到从电容充满电的满电压,到电压低至会被单片机判定为低电平的电压的这个放电时间。计时间隔应该比较小,不然可能抓不到数据。
再对NTC所在引脚执行相同操作,获取另一个时间。RC电路的电阻大小和充放电时间是成正比的,直接计算出NTC阻值,再根据阻值映射到温度即可。
这个设计实际上是很理想化的,存在不少的漏洞,如:引脚切换模式是需要时间的,这个时间按以上方式,会被计算在放电时间内;NTC所在电路会有干扰,所以要准确的话,可能需要考虑计算R56和NTC的总电阻,并将两个引脚都配置为输入来计算NTC的放电时间,但这又会带来单片机另一个引脚作为输入时的干扰。
总的来说,这题目更偏向于微电子方向,主要考察RC电路的特性和单片机引脚的一些模式配置。作为一个嵌入式软件工程师,我上面只是大概给了思路,并大致将每个模块涉及的知识点点出来了。如果有不懂可以搜索相关知识点进行拓展学习。
码字不易,望采纳。
我的看法与一楼一样,这个是典型的RC充放电模型,主要靠充满电的时间对比参考电阻的充满电时间来判断电阻大小,但是不能测量电压。
你想了解AD转化,就需要了解转换原理,没有芯片型号,不知道用那种转换,但归根到底是比较,通过比较电路,转换成数字信号,0,1,比如该电路,温度信号转换成电压值,然后将电压值与标准电压比较,8位ADC精度是1/256,量程如果是10v,那么实际电压与0/256,1/256,2/256.。。。。。。比较,就能得到一组0和1组成的数字量值,这一组信号就是可以给单片机的数字量,单片机通过数据转换就能得到对应的温度值