kingmic 2022-09-12 21:06 采纳率: 20%
浏览 69
已结题

普通IO仿AD检测,通过所示电路,如何实现并编程

该单片机是普通io仿AD检测,电路如图所示,想知道为何能实现数值获取,以及单片机如何编程?

img

  • 写回答

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条)

报告相同问题?

问题事件

  • 系统已结题 9月21日
  • 已采纳回答 9月13日
  • 创建了问题 9月12日

悬赏问题

  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)