一、前言
在以前的有些单片机应用中,有的时候会遇到 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%左右。