跳到主要内容

模拟式旋钮

一、本例程实现功能

调整旋钮的位置,获取当前位置旋钮的电压输出值,并通过 print() 函数在电脑串口调试终端打印输出当前旋钮的输出电压值。

二、模拟式旋钮介绍

  • 工作电流:26uA
  • 工作电压:3~5.5V
  • 电阻值范围:0~10K

product

模拟式旋钮本质上就是一个电位器,当我们转动旋钮时就相当于调整器内部可变电阻的值,从而改变了其OUT引脚输出的电压值。通过AD转换计算出这个电压值后我们就可以精确的知道模拟旋钮当前转动的位置或角度。当模拟式旋钮作为电子设备的输入端时,我们就可以用它为人机交互提供一种更精细化的输入。

三、接线图

layout

三、材料清单

名称推荐购买链接(或者您可以自己制作)
模拟式旋钮模块模块购买链接
声明:这里推荐的购买链接仅供参考,您完全可以去其他商家或渠道购买,只要功能相似即可,如果需要更低的成本建议自己开发硬件模块或定制。

四、完整代码

--配置Core的USB口以虚拟串口模式工作,这样print()输出的内容就可以在电脑串口终端上显示了
LIB_UsbConfig("CDC")
--配置AD电压采集功能,最大值采样值4096对应3.6V输入电压
--当通道采集满1个点时缓存满,每个点的采集时间间隔为300ms
LIB_ADConfig(1,300000)
--开始大循环
while(GC(1) == true)
do
--每隔300ms查询A0通道是否转换完成
--开发者也可以将模拟旋钮模块接至A1-A3中的任一通道,也可以多个通道接多个旋钮,用法都和下面一样
LIB_DelayMs(300)
A0_full_flag, A0_buf = LIB_ADCheckBufFull("A0")
if A0_full_flag == 1 then
--打印输出A0通道的AD采样值以及对应的电压值
print(string.format("A0=%04d Voltage=%.2fv", A0_buf[1], A0_buf[1]*3.6/4096.0))
end
end
--注意:程序中的300ms是任意选的时间,您也可以用更小或更大的时间间隔
如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。

五、实验过程及结论

步骤一:将旋钮逆时针旋转到底

pic1

result1

可以看到模块此时输出的电压值在0V左右

步骤二:将旋钮顺时针旋转到底

pic2

result2

可以看到模块此时输出的电压值为满压3.29V~3.30V,该值和模块的供电VCC有关。

结论:

通过上面实验可以看出模拟旋钮在两极的电压分别是0.00V左右、3.30V左右(VCC)。

在实际应用中我们不仅可以使用模块的电压值,也可以用其AD转换原始值来作为识别旋钮位置的值。对于精度要求高的场合,可能需要根据两极的值校准一下。