01 IO口测量电阻
一、前言
在以前的有些单片机应用中,有的时候会遇到 AD 端口资源不够用的情况,但又需要测量电阻的大小。比如一个热敏电阻的阻值。有人给出了一个利用两个 IO 端口完成电阻精确测量的一个老的方法。下面通过实验来测试一下这个古老的 IO 端口测量电阻的方法。
▲ 图1.1.1 单片机实验电路板
二、测量原理
测量原理比较简单。使用两个单片机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.3.2 测量电压波形
这是给出的测量结果,第一个是 电阻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%左右。
作者:卓晴
文章来源:TsinghuaJoking
推荐阅读
欢迎大家点赞留言,更多Arm技术文章动态请关注极术社区嵌入式客栈专栏欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。