[Arduino] ADC测量交流电*

ADC(Analog to Digital Converter)是模拟转数字采样器。Arduino的ADC口只能测量直流电,即0.0v ~ REFv(REF ≥ 0.0),但有时我们需要测量-REFv ~ +REFv的交流电,如音频信号,那就变得尴尬了~= ̄ω ̄=

设计思路

让交流音频信号可被Arduino测量:

∵ Arduino的ADC只能采集0 ~ VREF的电压值,且VREF ≥ 0
∵ 音频信号是-v ~ +v的交流信号,v ≥ 0
∴ 为音频信号加上+v的偏置电压,使其电压变化范围全部大于等于0,再将其放大到VREF即可被Arduino测量

在Arduino中对畸变的信号还原:

∵ 假设原始音频信号为V,它的最低电压为Vorg_min
∵ 对其加上偏置电压后为V' = V + Vorg_min
∵ 对其放大后的电压为V'' = n · (V + Vorg_min)
∴ 解算后的实际电压 V = (1 / n) · V'' - Vorg_min

如下图所示:


[Arduino] ADC测量交流电*_第1张图片
原始音频信号

[Arduino] ADC测量交流电*_第2张图片
原始音频信号 + 偏置电压

[Arduino] ADC测量交流电*_第3张图片
(原始音频信号 + 偏置电压) * 放大

参考电路

共射极放大电路

共射极放大电路可以为信号添加一个固定的直流偏置电压,使信号完全偏移到正电压上,另外它也可以放大信号的电压,满足Arduino ADC接口的测量标准。


[Arduino] ADC测量交流电*_第4张图片
共射极放大电路

电路分析

上面的电路为固定偏置共射极放大电路。我们计算的共射极放大电路中使用到的三极管是NPN型三极管,它有三个极:

  • 基极:符号b,可看作是控制水管流量的阀门
  • 集电极:符号c,可看作是水管的注水端
  • 发射极:符号e,可看作是书管的出水端
NPN晶体三极管

三极管有两种半导体类型:

  • 硅管,集电极与发射极之间的压降为VBE = 0.7v
  • 锗管,集电极与发射极之间的压降为VBE = 0.2v(因为穿透电流大,容易损坏,现在应该基本弃用了)

三极管的放大倍数:

  • β,三极管的放大倍数通常用β来表示

参数计算

我们一般计算一个放大电路的参数,会把里面的电流都控制到一个静态的点上去计算,这样可以避开复杂的电流变化带来的计算上的麻烦。而我们输入端有个阻隔直流的电容C,所以信号静止不变时,能够输入放大电路的电压就为0v了,这就引入了静态工作点的参数估算,习惯上也把它称作Q点。

静态工作点

因为输入放大电路的电压为0v,所以这个时候在三极管基极b(阀门端)上输入的电压就只有电阻Rb上的电压Vb了,此时我们就知道了流入三极管基极b(阀门端)的电流Ib

Ib = Vcc / Rb

进而由三极管VT放大后输出的电流Ic

Ic = β * Ib = β * Vcc / Rb

所以三极管VT输出的电压Vce

Vce = Vcc - Ic * Rc

一般情况下,Vcc和VT的放大倍数β都已经事先确定,所以接下来要确认的是分压电阻Rc和偏置电阻Rb

  • 调整Rc可以调节VT输出的最大电压
  • 调整Rb可以调节对输入信号施加的偏置电压,使信号的负半周全部提高到0v以上
偏置电阻Rb

电源电流通过偏置电阻Rb流入三极管VT基极b(阀门端)的电流是Ib = Vcc / Rb,在三极管VT的集电极c和发射极e之间就会产生一个β * Ib*倍的电流,经过电阻Re的转换,在电阻Re两端就会得到一个电压Ve,这就是偏置电压。

偏置电压负责处于正负半周上的信号提高到正半周,使信号在任何时候都不会有电压为负的情况出现。

所以我们调整偏置电阻Rb的目的也就明了了,我们要调整一个足够的偏置电压,使得信号在任何时候都不会有负电压,但也不能调整得太大,使信号的最高电压超过三极管VT的放大极限,出现饱和的情况(因为饱和部分其实会被“削顶”,而不是像下面的示意图一样好好活着~)

[Arduino] ADC测量交流电*_第5张图片
偏置电压
稳定Q点

因为三极管VT的放大系数β会随着温度的升高而升高,即通过集电极c与发射极e之间的电流Ice会增加,从而流向基极b的电流Ib会减少,这就造成偏置电压降低。
这会让偏置并放大后的音频信号上下浮动,而且可能造成"削顶"失真。

要解决这个问题,我们需要改良放大电路,为分压式偏置共射极放大电路,如下图。


[Arduino] ADC测量交流电*_第6张图片
分压式偏置共射极放大电路

我们添加了电阻Rb2和电阻Re来平衡偏置电压。
偏置电阻Rb1和Rb2把电源电压Vcc按电阻比例稳定的分为两部分,输入三极管VT基极b(阀门端)的电压Vb也由偏置电阻Rb1和Rb2的分压值决定,所以Vb是稳定的。
此时,如果三极管VT温度上升,通过集电极c与发射极e之间的电流Ice会增加,那么电阻Re的电压Ve也会上升,三极管VT的基极b和发射极e之间的压降就下降了,所以流入三极管基极b的电流Ib也降低了,从而降低了偏置电压,使偏置电压处于稳定状态。

计算各电阻的值

三极管VT的基极b的电压Vb

Vb = (Rb2 / (Rb1 + Rb2)) * V~cc

三极管VT的发射极b的电流Ie

Ie = (Vb - Vbe) / Re

三极管VT的集电极c与发射极e之间压降Vce

Vce = Vcc - Ic * (Rc + Re) ≈ Vcc - Ie * (Rc + Re)

[未完,但要不要待续咧~←_←]

运算放大器

又有新东西了

运放输入阻抗高,输出阻抗低,放大倍数高,做ADC的信号匹配再合适不过了~

如果使用运放来适配ADC采集交流电信号,做到如下两级就通常就足够了:

加法器 → 反向放大器

  • 加法器,用于把交流信号偏置到正电压上,进入ADC的电压采集范围
  • 反向放大器,把交流电信号适配到ADC的最大量程上,提高ADC采集的分辨率

你可能感兴趣的:([Arduino] ADC测量交流电*)