本例中的电路给出了一种方法,用一个输入端,将混合的模拟与数字输入传送给一个微控制器。电路输出被连接到一个微控制器的ADC输入端。电路包括一个可变电阻和几个SpST(单刀单掷)开关(图1)。用户可以用按键来选择模式、状态或选项,而模拟输入提供了一种传送可调节参数的方法。这个实现要求分析一个并行电阻电路和一个分压器。如果仔细选择了电阻值,则电路就能提供一个可识别的模拟输入,以及一系列分立的按键输入状态。
图1,本电路可用一只微控制器管脚,读出多个开关和一只电位器的值。
电阻值的选择是一个多步的过程,用一个电子表可帮助完成这个计算。例如,假设你想要用5kΩ的电位器RADJ,为微控制器产生一个0至100%的值。通常会将0至255的采样值映像为0至100的值,用于表示某个百分数。不过,通过选择偏置电阻RBIAS的值,可以将模拟输入直接定位于ADC的0至255范围内,如78至178。
要计算相应的高侧和低侧偏置电阻值,可用下式,将电路作为一个简单分压器作计算:
代入并算出RBIAS,当最大电压值为255时,最大低电压值为78,最大高电压值为178,而RADJ的值为5kΩ时,则得下式:
计算得到RBIAS的值为3875Ω。电位器选用标准值3.3kΩ,则输入范围从73至182。这个范围的动态范围大于你的需求,但电位器值与按键值之间有了一个保护区。当按下开关时,RADJ的位置影响着电路看到的总电阻,因此微控制器必须为每个开关解析一系列值。为S1或S2确定开关电阻RSW时,可在电位器两个端点位置上使用一个并联电阻网络。
当按下S1,而RADJ在最大位置时,分压器下端的有效电阻为RADJ与RBIAS串联后再与RSW并联。在最小位置时,有效电阻为RSW与RBIAS并联:
按下S1时,求出RBIAS与RRFFMAX构成的分压器值,就确定了值:
注意,当RADJ在最大值并按下S1时,产生的值必须小于RADJ自身提供的最小值,这样才能唯一地确定按下了哪个开关。因此最大有效电阻REFFMAX必须产生一个小于最大低电压的值,如下式所示:
将开关电阻代入并解算式,得到:
用电子表格算出开关电阻,得1558Ω,可以选择标称为1.5kΩ的电阻。这样,当按下开关S1时,根据电位器的位置可得到28至71的区间。同样,为S2选择相同的值可得到184至227的区间。这些区间可以用于确定所需按下开关的一系列值,而与电位器的位置无关。虽然没有必要选择相同的电阻,但这样可以减少计算量,简化设计。此外,选择较小的串联开关电阻可扩展它们与电位器之间的保护区,如果获得的值之间过于靠近,这可能是可取的方法。微控制器使用一个小例程来确定开关的位置以及电位器的设置。
这种方法也有局限,那就是在任何时间时,不能按下一个以上的按键。而且,只有当你未按任何其它按键时,微控制器才能读出电位器的位置。本例给出了如何用两个按键,但按键的数量可以修改。输入范围可以多达10个按键和一只电位器,所有这些均可共享相同的输入端(图2)。尽管计算范围并不重叠且是唯一的,但你的ADC能否在所有情况下都可靠地区分出这些区段,则是有问题的。选择较小的电阻值可以使这些频段相隔较远,创建一个较大的保护区。
图2,电路最多可以有10个按键和一只电位器。
用这一技巧加上四只按键与一只电位器,为最佳组合。用电子表作试验,有助于快速地确定每个开关的正确串联电阻值,以及其输出范围。