分享一种单片机IO口测量外部电阻的方法

电子说

1.3w人已加入

描述

一、前言

在以前的有些单片机应用中,有的时候会遇到 AD 端口资源不够用的情况,但又需要测量电阻的大小。比如一个热敏电阻的阻值。有人给出了一个利用两个 IO 端口完成电阻精确测量的一个老的方法。下面通过实验来测试一下这个古老的 IO 端口测量电阻的方法。

二、测量原理

测量原理比较简单。使用两个单片机IO口,连接两个电阻,向同一个电容充电。设置一个IO口为输出端口,另一个为输入端口。输出端口通过连接的电阻向电容充电。电容上的电压上升,当超过一定阈值,输入端口逻辑电平就会变成1。这个充电时间与 终止电压、阈值电压以及 RC对应的时间常数有关系。具体数值由这个公式决定。这个过程再测量一遍。

对应的时间与R2成正比。因此,两次时间的比值,就等于电阻的比值。如果已知其中一个电阻阻值,另外一个电阻便可以根据时间比值计算出来。这就是IO口测量电阻的基本原理。

阈值电压

三、实验结果

1、端口阈值电压

这是 STM32F030K6 单片机,给它端口 PF0 施加一个三角波。程序循环查询输入逻辑电平,并在 PF1 输出反向逻辑。可以看到单片机对输入信号进行了离散化。上升和下降具有一定的回滞特性。回滞电压大约是 200mV。

阈值电压
▲ 图1.3.1 单片机端口的阈值电压`

2、测量元器件

下面利用F030 单片机的 PF0, PF1 两个管脚,来测量电阻。测试一下这种方式测量的精度。

实验中需要一个电容和两个电阻。电容容值为 313.8nF,电阻1 的阻值为 19.545kΩ; 电阻2的阻值为 4.718kΩ。将它们安装在面包板上进行测试。

阈值电压

电路器件参数:
电容C:313.8nF
电阻R1:19.545k
电阻R2:4.718k

电容一端接地,另外一端与两个电阻相连。两个电阻分别与单片机的 PF0,PF1 端口相连。下面对单片机进行软件编程。利用其中的定时器作为时标,对延迟计时。

阈值电压

PF0管脚连接R2,PF1连接R1。设置PF0 为输出端口,PF1 为输入端口。周期改变PF0高低电平。分别测量 PF0,以及电容上的电压信号。可以看到电容上的电压呈现充电曲线。时间常数大约为 1.5ms。根据已知器件数值,可以看到与测量的结果是相符合的。

阈值电压

这是电阻2对电容的充放电曲线。下面测量电阻1对电容的充放电过程。由于电阻1的阻值为20k欧姆,所以对应的充放电过程就比较慢,时间常数大约是 R2对应的时间常数的4倍。为 6.3ms。在测量过程中,两个端口同时对电容进行放电。放电时间取20ms。

阈值电压

3、测量单片机软件

测量软件先将 PF0,PF1 输出 0 电平,对于电容进行放电。然后将其中一个设置为输入端口,另外一个置为高电平,对电容充电。同时启动定时器1进行计时。在此过程中,监视输入端口逻辑电平是否为 1。当输入端口变为1时,停止定时器,并读取时间。然后再进行放电,更换另外一个端口为输入端口。测试充电时间。这是测量 PF0 和 电容上电压信号。可以看到两个充放电过程。黄色曲线是 PF0电压信号,青色是电容上的充放电电压信号。这是 PF0 作为输出端口,PF1作为输入端口时的测量过程。这两个充电时间与电阻成正比。

这是给出的测量结果,第一个是 电阻1 对应的充电时间。第二个是电阻2 对应的充电时间。它们的比值在4.1左右。根据前面测量的 R1,R2 的阻值,对应的比值大约为 4.143. 由此可以看到测量时间比值与电阻比值接近。

阈值电压

测试 298 个数据进行统计。数据的平均值为 4.119,标准方差为 0.043。测量平均值比实际电阻比值 4.143 小了 0.6% 左右。

数据统计结果:
测量次数:298
平均值:4.119
标准方差:0.043

总结

本文测试了利用单片机 IO 口测量电阻的方法。单片机平台是 STM32F030K6。测量得到的电阻充放电比值 比 电阻值的比值小了 0.6%左右。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分