原创 MSP430F2616开发笔记(十一)题外话之LM358做电压跟随器的输出电压

2014-3-22 15:31 6852 30 36 分类: MCU/ 嵌入式 文集: MSP430

由于DAC的输出可能会经过电阻分压、经过加减法器运算之类的,所以很多时候在它的后级会加上电压跟随器,以增加输入阻抗、减小输出阻抗;使用ADC时,也同样经常会使用它来处理信号。

在使用LM358搭建电压跟随器时,我遇到过输入电压接近零点而输出电压保持在0.6V以上的情况,从网上了解到这并不是个别现象,而是经常出现,有人给出的解决方法是使用正负电源供电,或者加下拉电阻。但是LM358的技术手册描述,它的输出电压摆幅在0V附近时并没有问题(技术手册上提供的最低输出电压典型值为5mV),同样有人做过实验,确实表现非常好。那这个0.6V到底从哪里来呢?难道买到的LM358是假货吗?

为了找出问题所在,首先根据下面的原理图,使用实验板搭建出电路:
20140318194123137.jpg

第一步:电位器的输出从0V~+5V,无论抽头是悬空还是接到5pin,IC5A的1pin输出电压摆幅为0V~+3.8V,这说明第一个电压跟随器工作正常;

第二步:1pin的输出为0V~+3.8V时,无论它是悬空还是接到ADC引脚,IC5B的7pin输出电压摆幅为0V~+3.8V,这说明第二个跟随器也工作正常,前一个电压跟随器接到后一个电压跟随器是没有问题的。

第三步:此时把一个10K的电阻接入ADC引脚做上拉,IC5B的7pin输出电压摆幅为0.7V~+3.8V;当更换这个上拉电阻为1K时,IC5B的7pin输出电压摆幅为+1V~+3.8V;当更换这个上拉电阻为50K时,IC5B的7pin输出电压摆幅为+0.6V~+3.8V;当更换这个电阻慢慢接近于0欧姆时,IC5B的7pin输出电压慢慢接近VCC。

为了进一步验证上拉电阻的影响,将这个运放的输出接到STM32F103RBT6的ADC引脚上,此时发现,当ADC的引脚设置为GPIO_Mode_AIN时,运放的输出摆幅正常;而当ADC的引脚设置为GPIO_Mode_IPU时,出现了上面的输出摆幅+0.6V~+3.8V的情况。通过查询STM32F103RBT6的技术手册知道,当IO口设置为上拉时,会使能内部的弱上拉电阻,大约40K欧姆。这一现象刚好符合上面的分析。

再进一步验证,将运放的输出从ADC断开,直接加上50K的上拉电阻,会发现它的输出摆幅有同样的变化。

由此可见,LM358运放的输出对上拉电阻敏感,但这是为什么呢?难道运放输出不应该是不受负载电阻影响吗?为什么加上拉电阻之后输出会出现错误,而加上下拉电阻又完全没有问题呢?为了搞清楚这个,有必要把俺这本尘封已久的《模拟电子技术基础》拿出来了!

这是LM358的芯片内部原理图,来自ON Semiconductor公司的LM358技术手册,它和《模拟电子技术基础》书中F324的原理图非常类似:
20140318194144668.jpg


首先,最右侧的灰色部分是一个恒流源,用于给整个电路提供恒流偏置,Q19、Q16、Q15因为集电区面积的不同而构成了不同比例的电流源,Q8和Q10构成了镜像电流源,给末级提供静态电流;

其次,最左侧是一个双端输入单端输出的共集共射差分放大电路,Q3和Q4是有源负载,将Q18的集电极电流变化转换成输出电流,接到Q5;

然后,中间是一个共集共射放大电路,具备很强的放大能力;

最后,靠右部分是射极输出电路,25欧姆的电阻和Q12一起构成了正向电流保护,正常工作时Q12截止,Q10上有50uA的偏置电流,而Q11处于截止状态,Uo=U9c-U14be-U13be-Ur;正常情况下,Q11应该处于截止状态,因为Q9的集电极电位比Q11的发射极电位要高;当上拉电阻接入时,(由于Q9集电极电位接近零点,Q11发射极被拉高,所以Q11被打开,Uo为Q11的EB电压,约为0.7V左右,而0.7V反馈接入正向输入引脚,又使得Q9的集电极电平保持零点,当输入电压大于0.7V时,Q9的集电极电平会接近VCC,并且在负反馈的作用下重新达到平衡,???)破坏了射极输出电路的负反馈,因此零点附近的信号被钳位到0.7V左右。

要验证这一点,将LM358的深度负反馈去掉,而直接使用开环放大。发现当没有上拉电阻时,U+=VCC,U-=1.5V,则Uo=+3.8V;而U+=0V,U-=1.5V,则Uo=0V;当使用了上拉电阻,U+=VCC,U-=1.5V,则Uo=+3.8V;而U+=0V,U-=1.5V,则Uo=0.7V。更换不同阻值的上拉电阻,现象几乎一样。

so,结论:LM358的输出摆幅符合技术手册的描述,在接近零点的范围内依然表现良好;而在它的输出端使用上拉电阻会影响它的工作。

 

文章评论6条评论)

登录后参与讨论

用户1861780 2016-1-31 14:43

楼主处理的是ADC,不是DAC。

用户1329008 2014-12-31 10:22

赞扬博主钻研的精神,楼下的评论也不错,共同学习进步

DiracFatCat 2014-9-28 13:24

谢谢~

用户413254 2014-9-26 13:55

在下小小硬件工程师一枚,期待博主更多的模电数电技术文章。

用户377235 2014-7-2 12:11

STM32内部的BUF问题也很多

用户343153 2014-3-24 09:20

根本就不用分析358的内部电路,只要懂得DAC的二进制加权电阻开关树原理,就不应该画蛇添足在DAC开关树的输出引脚和外部电压跟随器之间加上拉电阻!作者肯定没有使能STM32内部的DAC输出缓冲运放! 所以在DAC设定为数字零的情况下,上拉电阻与DAC内部二进制加权电阻开关树构成了分压电路,使得外部电压跟随器的+端向上抬高脱离0V! 所以我的类似电路就根本不自做多情外加上拉电阻。 如果使能STM32内部的DAC模块输出缓冲功能,在零伏附近会好些,但因为STM32 最大供电3.3V, 在DAC输出设定值为4095时,内部输出缓冲运放达不到3.3V。 所以用外部运放搭成的电压跟随电路供电最好用5伏供电并且选用轨到轨运放例如LMV358。

用户432169 2013-6-18 08:11

学习
相关推荐阅读
DiracFatCat 2018-09-05 12:14
【博客大赛】卡尔曼滤波学习笔记(11)从位置估计速度
卡尔曼滤波器,不仅仅是一个低通滤波器,否则也不会持续发展50年。 示例:桑先生需要测试高速列车的性能。测试的目的是判断列车在直线上能否保持80m/s的速度。速度和位置每0.1秒测量一次,但是由于...
DiracFatCat 2018-08-31 19:32
【博客大赛】卡尔曼滤波学习笔记(10)一个简单的示例
《Kalman Filtering: Theory and Practice Using MATLAB》第三章,看不懂,暂时略过。《Kalman Filtering: Theory and Pract...
DiracFatCat 2018-07-19 15:09
对sed命令的练习
sed是流编辑器。它每次处理一个输入,因此很有效率。官方手册:https://www.gnu.org/software/sed/manual/sed.html学习Linux命令,当然要阅读官方手册,所...
DiracFatCat 2018-06-19 15:10
【博客大赛】卡尔曼滤波学习笔记(八)可观测性和可控制性 ...
可观测性是指,在给定模型的情况下,动力学系统的状态是否由它的输入输出唯一确定。可观测性是系统模型的特征。如果传感器矩阵H是可逆的,则本系统可观测,因为有:如果传感器矩阵H某些时候是不可逆的,则本系统仍...
DiracFatCat 2018-06-19 10:56
【博客大赛】卡尔曼滤波学习笔记(七)Z变换
如果我们仅仅对离散线性系统感兴趣,那么就使用下面这个表达式:如果u是常量,那么可以写成:为了简化表达式,我们可以将上面写成:离散线性时不变系统的Φ求解,可以使用Z变换。(* 由于本人已经忘记了Z变换的...
DiracFatCat 2018-06-19 10:54
【博客大赛】卡尔曼滤波学习笔记(六)拉普拉斯变换
对于线性时变/时不变系统,求解Φ(t)有多种方式,拉普拉斯变换是其中一种。(* 由于本人已经忘记了拉普拉斯变换的内容,因此本节待续。)...
我要评论
6
30
关闭 站长推荐上一条 /2 下一条