温故而知新,因工作需要,最近重新学习了一下运算放大器 测试开发,基于ASL1000的平台 DOAL的。在这里记录一下,并分享给刚入行的兄弟们,也许你已经知道!
参考资料:
– 什么是运算放大器
– 通用集成运算放大器测试方法
– ASL1000 DOAL programming manual
– Op Amps For Everyone (运算放大器权威指南)
定义:失调电压(Input Offset Voltage),又称输入失调电压。运放输出电压为零(或规定值时)时,运放两输入端间所加的直流补偿电压。
在运放的应用中,不可避免的会碰到运放的输入失调电压VOS问题,尤其对直流信号进行放大时,由于输入失调电压VOS的存在,放大电路的输出端总会叠加我们不期望的误差。因此,我们希望VOS越小越好(不考虑成本因素)。
常用 辅助放大器测试方法 来测试运算放大器,基本原理图如图一:
图一
其中,A为辅助放大器,DUT为待测运放,且K4为close。
通过 瞬时信号极性分析法 进行分析,假设 a. 点信号增大(+),则可以推导出,经过反馈回路,将反馈回一个减小的信号(-)。因此为负反馈回路,电路最终会处于稳定状态。且电路稳定时,a. 点的电压 = 0.0V, 即DUT 的输出电压VO = -VREF。因此,可以通过改变VREF的值,来设置DUT的输出电压。比如,VREF=-1.4V时,VO=1.4V。
A运放的输出电压为: VL=(VOS+IOS*RI)(1+RF/RI)
当 IOS*RI<<VOS,且 RF/RI>>1 时,
则有: VOS≌RI/RF*VL=VL/(RF/RI)。
以上就是VOS的测试方法与计算公式。那么,如何应用DOAL来进行运放测试呢?
ASL1000的DOAL板,全名为 Dual Operational Amplifier Loop,是ASL1000测试机内部一块资源板;可以直接用来进行运放测试,而不需要辅助运放。事实上,辅助运放已经集成在DOAL内部了。如下图二 是DOAL的测试电路原理图:
图二
其中,DUT为待测运放,SUM AMP 可视为辅助运放,INT_DAC_POLE 与 GAIN_DAC_ZERO可以消除振荡,使测试回路稳定。
基于之前的分析,可以很容易知道整个测试回路也是负反馈。不过有一点不同,前面的VOS是通过VL近似计算得出,而DOAL是通过IA直接测量DUT输入端之间的电压,得到VOS。
查询DOAL Manual可知,VOS的测试过程为:
—————————————————————————————
Force the output to 0 V using the feedback loop and OUTPUT_DAC. Use the following
procedure to measure the difference between the inputs with the instrument amplifier.
1. Connect the feedback loop.
2. Open the INT_RESET switch on the INT_DAC.
3. Set the pole and the zero values required to achieve circuit stability.
4. Measure the offset with the DUT inputs shorted.
5. Apply a reference voltage to the OUTPUT_DAC.
6. Measure the offset voltage and subtract it from the previously measured value.
—————————————————————————————
测试代码如下:
—————————————————————————————
// Definitions & Variables
int temp, cal;
float vos;
// set up for 10mV measure range
oal_8->open_switch(IA_100MV);
oal_8->close_switch(IA_10MV);
// do cal with inputs shorted
oal_8->close_relay(DUT_POS_ISOL);
oal_8->close_relay(DUT_NEG_ISOL);
oal_8->close_relay(DUT_INP_SHORT);
oal_8->close_switch(IA_POS_IN);
oal_8->close_switch(IA_NEG_IN);
oal_8->select_adc_mux(IA_AMP);
delay(ours->meas_delay);
cal = oal_8->convert_read_adc();
// set up to test Vos
oal_8->open_relay(DUT_INP_SHORT);
oal_8->close_switch(CLOSE_LOOP);
dvi_9->set_current(DVI_CHANNEL_0, 0.02);
dvi_11->set_current(DVI_CHANNEL_0, 0.02);
// set compensation
oal_8->set_int_dac_ch0 (ours->pole_stab);
oal_8->set_gain_dac_ch0(ours->zero_stab);
// power up and get measurement
dvi_9->set_voltage(DVI_CHANNEL_0, 3.0);
dvi_11->set_voltage(DVI_CHANNEL_0, -3.0);
oal_8->set_output_voltage(0); //设置DUT的输出电压,为0 或者 规定值
oal_8->open_switch(INT_RESET);
delay(ours->meas_delay);
temp = oal_8->convert_read_adc() – cal; //ADC直接测试VOS
vos = temp / 3276800.0; // 32768 = 10mV //根据ADC的位数,来计算VOS值
// Power down
power_down();
// Datalog
do_dlog(func, 0, vos, ours->fail_bin, “vos”, POWER_MILLI);
—————————————————————————————
结合前面的分析,与Manual中的说明,可知DOAL内部是通过设置 SET_OUTPUT_DAC 的输出电压,来控制 DUT 的VOUT值的,相当于前面的VREF。
查询ASL1000 programming guide,可知函数 void set_output_dac(unsigned short value) 可直接控制 SET_OUTPUT_DAC 的输出电压。
因此我们只需要将测试代码中的 set_output_voltage(0) 修改为 set_output_dac(value),value为设置值,且与VOUT值反相。运行并得到测试结果,即可验证。有兴趣的朋友可以试试。
以上,更多细节与内容在参考资料已经有详细说明,在此不再赘述。
本文地址: http://www.kanwoda.com/blog/archives/08224334021067.html
|