在测量行业中,一个非常关键的功能块是可编程增益放大器 (PGA)。如果您是电子爱好者或大学生,您可能已经看到非常宝贵的万用表或示波器测量非常小的电压,因为该电路具有内置 PGA 和强大的 ADC,有助于进行精确的测量过程。
如今,现成的 PGA 放大器提供基于运算放大器的非反相放大器,具有用户可编程的增益因子。这种类型的器件具有非常高的输入阻抗、宽带宽和内置于 IC 中的可选输入电压基准。但是所有这些功能都是有代价的,对我来说,将这么昂贵的芯片用于通用应用程序是不值得的。
因此,为了克服这些情况,我想出了一个由运算放大器、MOSFET 和 Arduino 组成的装置,通过它我能够以编程方式改变运算放大器的增益。因此,在本教程中,我将向您展示如何 使用 LM358 运算放大器和 MOSFET 构建您自己的可编程增益放大器,并在测试的同时讨论该电路的一些优缺点。
运算放大器的基础知识
要了解该电路的工作原理,了解运算放大器的工作原理非常重要。按照此运算放大器测试器电路了解有关运算放大器的更多信息。
在上图中,您可以看到一个运算放大器。放大器的基本工作是放大输入信号,除了放大之外,运算放大器还可以执行各种运算,如求和、微分、积分等。在此处了解有关求和放大器和差分放大器的更多信息。
运算放大器只有三个端子。带(+)号的端子称为同相输入,带(-)号的端子称为反相输入。除了这两个端子之外,第三个端子是输出端子。
运算放大器只遵循两个规则
没有电流流入或流出运算放大器输入。
运算放大器试图将输入保持在相同的电压电平。
因此,清除了这两个规则后,我们可以分析以下电路。此外,通过各种基于运算放大器的电路了解更多关于运算放大器的信息。
可编程增益放大器工作
上图让您对我的 crud PGA Amplifier 的电路布置有一个基本的了解。在这个电路中,运算放大器被配置为同相放大器,众所周知,在同相电路布置中,我们可以通过改变反馈电阻或输入电阻来改变运算放大器的增益,从上面的电路布置中可以看出,我只需要一次切换一个 MOSFET 来改变运算放大器的增益。
在测试部分,我只是一次切换一个MOSFET,并将测量值与实际值进行比较,您可以在下面的“测试电路”部分观察结果。
所需组件
Arduino 纳米 - 1
LM358 集成电路 - 1
LM7805 稳压器 - 1
BC548 通用 NPN 晶体管 - 2
BS170 通用 N 沟道 MOSFET - 2
200K 电阻 - 1
50K 电阻 - 2
24K电阻 - 2
6.8K电阻 - 1
1K 电阻 - 4
4.7K电阻 - 1
220R, 1% 电阻 - 1
轻触开关通用 - 1
琥珀色 LED 3mm - 2
面包板通用 - 1
通用跳线 - 10
电源±12V - 1
原理图,示意图
对于可编程增益放大器的演示,电路在原理图的帮助下构建在无焊面包板上;为了减少面包板的内部寄生电感和电容,所有组件都尽可能靠近放置。
如果你想知道为什么我的面包板上有一簇电线?让我告诉你这是为了建立良好的接地连接,因为面包板中的内部接地连接非常差。
这里电路中的运算放大器配置为非反相放大器,来自 7805 稳压器的输入电压为 4.99V。
电阻 R6 的测量值为 6.75K,R7 为 220.8R,这两个电阻构成一个分压器,用于为运算放大器生成输入测试电压。电阻器R8 和 R9用于限制晶体管 T3 和 T4 的输入基极电流。电阻 R10 和 R11用于限制 MOSFET T1 和 T2的开关速度,否则会引起电路振荡。
在这篇博客中,我想向您展示使用MOSFET而不是 BJT 的原因,以及电路布置。
PGA 的 Arduino 代码
这里 Arduino Nano 用于控制晶体管的基极和 MOSFET 的栅极,并且使用万用表来显示电压电平,因为 Arduino 的内置 ADC 在测量低电平时做得很差电压水平。
该项目的完整 Arduino 代码如下所示。由于这是一个非常简单的 Arduino 代码,我们不需要包含任何库。但是我们确实需要定义一些常量和输入引脚,如代码所示。
void setup()是主要功能块,其中所有输入和输出的读写操作都根据要求执行。
#define BS170_WITH_50K_PIN 9
#define BS170_WITH_24K_PIN 8
#define BC548_WITH_24K_PIN 7
#define BC548_WITH_50K_PIN 6
#define BUTTON_PIN 5
#define LED_PIN1 2
#define LED_PIN2 3
#define PRESSED_CONFIDENCE_LEVEL 5000
int button_is_pressed = 0;
int debounce_counter = 0;
无效设置(){
pinMode(BS170_WITH_50K_PIN,输出);
pinMode(BS170_WITH_24K_PIN,输出);
pinMode(BC548_WITH_24K_PIN,输出);
pinMode(BC548_WITH_50K_PIN,输出);
pinMode(LED_PIN1,输出);
pinMode(LED_PIN2,输出);
pinMode(BUTTON_PIN,输入);
}
无效循环(){
bool val = digitalRead(BUTTON_PIN); // 读取输入值
如果(val == LOW){
debounce_counter++;
if (debounce_counter 》 PRESSED_CONFIDENCE_LEVEL)
{
debounce_counter = 0;
button_is_pressed++;
}
如果(button_is_pressed == 0){
数字写入(BS170_WITH_50K_PIN,高);
数字写入(BS170_WITH_24K_PIN,低);
数字写入(BC548_WITH_24K_PIN,低);
数字写入(BC548_WITH_50K_PIN,低);
数字写入(LED_PIN1,低);
数字写入(LED_PIN2,低);
}
如果(button_is_pressed == 2){
数字写入(BS170_WITH_24K_PIN,高);
数字写入(BS170_WITH_50K_PIN,低);
数字写入(BC548_WITH_24K_PIN,低);
数字写入(BC548_WITH_50K_PIN,低);
数字写入(LED_PIN1,低);
数字写入(LED_PIN2,高);
}
如果(button_is_pressed == 3){
数字写入(BC548_WITH_24K_PIN,高);
数字写入(BC548_WITH_50K_PIN,低);
数字写入(BS170_WITH_24K_PIN,低);
数字写入(BS170_WITH_50K_PIN,低);
数字写入(LED_PIN1,高);
数字写入(LED_PIN2,高);
}
如果(button_is_pressed == 1){
数字写入(BC548_WITH_50K_PIN,高);
数字写入(BS170_WITH_50K_PIN,低);
数字写入(BS170_WITH_24K_PIN,低);
数字写入(BC548_WITH_24K_PIN,低);
数字写入(LED_PIN1,高);
数字写入(LED_PIN2,低);
}
如果 (button_is_pressed 》= 4) {
button_is_pressed = 0;
}
}
}
可编程增益放大器的计算
PGA 放大器电路的测量值如下所示。
输入电压 = 4.99V
R7 = 220.8 Ω
R6 = 6.82 KΩ
R5 = 199.5K
R4 = 50.45K
R3 = 23.99K
R2 = 23.98K
R1 = 50.5K
笔记!显示电阻器的测量值是因为通过测量电阻器值,我们可以密切比较理论值和实际值。
现在分压器计算器的计算如下所示,
分压器的输出为0.1564V
计算 4 个电阻的同相放大器的增益
当R1为选定电阻时的Vout
Vout = (1+ (199.5 / 50.5) ) * 0.1564 = 0.77425V
当R2为选定电阻时的Vout
Vout = (1+ (199.5 / 23.98) ) * 0.1564 = 1.45755V
当R3为选定电阻时的Vout
Vout = (1+ (199.5 / 23.99) ) * 0.1564 = 1.45701V
当R4为选定电阻时的Vout
Vout = (1+ (199.5 / 50.45) ) * 0.1564 = 0.77486V
我所做的一切都是为了尽可能地比较理论值和实际值。
完成所有计算后,我们可以继续进行测试部分。
可编程增益放大器电路的测试
上图显示了MOSFET T1导通时的输出电压,因此电流流过电阻器 R1。
上图显示了晶体管 T4导通时的输出电压,因此电流流过电阻器 R4。
上图显示了MOSFET T2导通时的输出电压,因此电流流过电阻器 R2。
上图显示了晶体管 T3导通时的输出电压,因此电流流过电阻器 R3。
从原理图中可以看出,T1、T2 是 MOSFET,T3、T4 是晶体管。因此,当使用 MOSFET 时,误差在 1 到 5 mV 范围内,但当晶体管用作开关时,我们会在 10 到 50 mV 范围内得到误差。
从以上结果可以看出,MOSFET是此类应用的首选解决方案,而理论上和实际中的误差可能是由于运放的失调误差造成的。
笔记!请注意,我添加了两个 LED 只是为了测试,您在实际原理图中找不到它们,它显示二进制代码以显示哪个引脚处于活动状态
可编程增益放大器的优缺点
由于该电路便宜、简单且简单,因此可以在许多不同的应用中实现。
这里 MOSFET 用作开关,将所有电流通过电阻器接地,这就是为什么温度的影响不确定的原因,并且由于我有限的工具和测试设备,我无法向您展示不同温度对电路。
将 BJT 与 MOSFET 一起使用的目的是因为我想向您展示 BJT 对于此类应用的性能有多差。
反馈电阻和输入电阻的值必须在 KΩ 范围内,这是因为电阻值越小,流过 MOSFET 的电流就越多,因此 MOSFET 上的压降越大,导致不可预知的结果。
进一步增强
可以进一步修改电路以提高其性能,就像我们可以添加滤波器来抑制高频噪声一样。
由于本测试使用的是 LM358 果冻豆运算放大器,因此运算放大器的失调误差在输出电压中起主要作用。所以它可以通过使用仪表放大器而不是LM358来进一步改进。
该电路仅用于演示目的。如果您考虑在实际应用中使用此电路,则必须使用斩波型运算放大器和高精度 0.1 欧姆电阻来实现绝对稳定性。
评论
查看更多