该单片机是普通io仿AD检测,电路如图所示,想知道为何能实现数值获取,以及单片机如何编程?
3条回答 默认 最新
- Norcor 2022-09-12 23:58关注
图中的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电路的特性和单片机引脚的一些模式配置。作为一个嵌入式软件工程师,我上面只是大概给了思路,并大致将每个模块涉及的知识点点出来了。如果有不懂可以搜索相关知识点进行拓展学习。
码字不易,望采纳。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
- ¥20 怎么用dlib库的算法识别小麦病虫害
- ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
- ¥15 java写代码遇到问题,求帮助
- ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
- ¥15 有了解d3和topogram.js库的吗?有偿请教
- ¥100 任意维数的K均值聚类
- ¥15 stamps做sbas-insar,时序沉降图怎么画
- ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
- ¥15 关于#Java#的问题,如何解决?