设计小技巧:如何用MCU或FPGA的一个数字IO测量2个电位计的阻值变化?
还记得我们“2022寒假在家一起练”的RP2040游戏机平台上的4向摇杆么?很多同学用它实现了游戏机的位置操控,还制作了鼠标的功能。4向摇杆本质是2个电位计 - X轴和Y轴各一个电位计。
用RP2040制作的游戏机平台
四向摇杆的结构和内部原理图
在RP2040游戏机平台中占用了RP2040的两个ADC输入管脚,通过检测由这两个电位计带来的分压电压的变化,从而判断摇杆的相对位置。
想一下,如果MCU内部没有ADC,只有数字IO,或者用FPGA是否也能检测电位计的变化?甚至给出电位计的阻值变化?而且能够用一根输入管脚同时感知2个电位计?
初听起来是不是有点天方夜谈?如果我们能巧妙利用PWM信号这个神器,就能实现对2只电位计的检测。
大家知道PWM信号的特点 - 一根数字信号,两个基本参数 -?频率和占空比。我们多数情况下是产生PWM信号来控制外部的器件,反过来我们能否测量这两个参数的变化,从而用于感知外部的变量呢?
测量PWM信号的这两个参量很容易,用高频率的时钟数数就可以实现,无论MCU用定时器来实现,还是FPGA用计数器来实现,都很简单,在这里就不再赘述了。
下面的问题就是通过变化的PWM测量外部的参量:
我们设计一个电路,能够产生调频、调占空比的PWM信
用一只电位计来控制产生的PWM信号的频率
用另外一只电位计控制产生的PWM信号的占空比
这个电路是啥样的?想一下PWM信号的生成原理:
我们如果能够控制比较器输入端锯齿波的频率,就能调整PWM脉冲的频率;
我们如果能够调节比较器另一端参考电压的变化,就能调整PWM脉冲的占空比。
那么,电路就有了:
一颗普通的4运放LM324 + 几颗电阻 +?几颗电容即可。在这个电路中用到的供电电压是5V,此电路结构同样也适用于3.3V供电。
?用两个运放产生可调频率(一个电位计P1控制)的三角波,送给一个用作比较器的运放,运放的输出为占空比可调的脉冲波形。比较器的一个输入端电压由另一个电位计来控制。
这个电路的频率调节范围为250Hz - 500Hz,脉宽变化从10%到90%,根据电路中的电阻参数就可以计算出两个电位计变化的阻值。
是不是挺简单的?
要不要用MCU和FPGA分别试一试?
如果你试了,可以将过程和结果分享在电子森林的项目页面哦。