LDO基础及其ATE测试

399 阅读9分钟

一.PMIC简介

  • <前言> PMIC是Power management IC(电源管理芯片)的缩写,其主要作用是给电子设备提供稳定的电源,或者用于管理和监控电子设备的电压和电流等电源属性。LDO(低压差线性稳压器)和DCDC(直流-直流转换器)都属于最常见的PMIC芯片。PMIC是模拟芯片领域中占比最大的芯片类别,其应用需求比较广泛且需求量比较大,国内做PMIC的公司有圣邦微、士兰微、华润微、艾为电子等;国外的模拟大厂如TI(德州仪器)等。随着模拟芯片的需求量日益增加,对于模拟芯片的封装和测试需求也逐渐增加。对于绝大多数模拟厂家的ATE测试,华峰测控(Accotest)旗下的STS8200和STS8300是国内主流的ATE测试设备(设备我在后面的博客中会详细展开,此篇博客的重点和设备无关)。

二.LDO基础及ATE测试原理

1.LDO工作原理

  • LDO的工作原理是将较高的输入电压降为一个固定的较低的输出电压,目的是给后级电路提供一个稳定且干净的电压源,其特点是输入和输出之间的压差足够低。LDO因其低噪声和高PSRR适用于低噪声和低功耗的场景。LDO根据内部结构的不同,可大致分为NMOS-LDO和PMOS-LDO,绝大多数的LDO都采用P管结构:

a1212060a29cc88558b41442fd1de80.png

  • 用比较简洁的语言来讲,LDO内部其实就是一个​​负反馈调节系统​​。注意到,Vout上面接R1和R2,误差放大器的同相输入端接到R1和R2之间,这个点称为FB(负反馈引脚)。LDO的工作就是将FB的电压无限接近内部的参考电压VREF,以达到稳压的目的。
  • <工作原理> 误差放大器在采集到VFB之后,通过误差放大器和VREF进行比较(​​注意是误差放大器不是比较器,误差放大器工作在线性区​​),如果VFB>VREF,说明VOUT偏高,那么误差放大器输出就会降低,从而使MOS管的G极电压降低,那么此时G和S之间的压差减小,MOS管导通能力变弱,即RDS(on)增大,从而实现将VOUT调小的目的。反之如果VFB<VREF,那么此时G和S之间的压差增大,MOS管导通能力变强,即RDS(on)减小,从而实现将VOUT调大的目的。
  • <分压电阻> 计算LDO输出电压的公式一般为: Vout=Vfb(1+R1/R2)Vout=Vfb*(1+R1/R2)
  • LDO根据其输出特性可分为可调(ADJ)和不可调,ADJ版本的LDO和上图一样,通过更换R1和R2的阻值来选择你需要的输出电压;而固定输出的LDO(如1.8V,3.3V,3.6V,5V···)则是被固定在某个确定的电压档位。不论是否为可调LDO,都需要通过Trim芯片内部的电阻网络来实现,区别是,ADJ版本的LDO仅Trim基准电压,而固定输出的LDO需要把内部的电阻网络如R1_init和R2_init也进行Trim,直接在内部精准命中一个固定的输出电压。

2.LDO工作曲线

  • 下图是我用测试机抓的LDO扫描Vrop的波形,可以看到,当VIN(蓝色)下降到某一个点时,Vrop(即VIN和VOUT之间的压差)会变得越来越小,当其小于LDO本身的设计边界时,VOUT将会下降(黄色),此时LDO将不再稳压,无法正常工作。作为ATE工程师,只需要关心这一条曲线就足够了。

106ace9eaac822fcd2510229dcf4150.jpg

3.LDO的外围电路

  • 下图为艾为的一颗固定输出LDO的典型应用图,在VIN和VOUT两端分别挂一颗1uF的电容,那么实际上Cin的选型一般在0.1uF到1uF之间,Cout的选型在1uF到10uF之间。Cin用来过滤掉电源的一些噪声,保证输入信号的干净;Cout则是抑制LDO的自激振荡,其次对输出的电压做最终的滤波。

20210411193807603.png

4.LDO的测试参数

  • 除了OS和Leakage等常规的参数以外,LDO有几个ATE测试需要特别关注的测试项目:

    1.静态功耗,通常是指LDO在待机时从VIN脚流出的漏电流;测试方法为,VIN给一个正常工作的电压,其他pin脚悬空,测量VIN脚的电流值。

    2.输出电压,通常指LDO在正常工作状态下输出的电压是否在误差范围内;测试方法为,VIN给一个正常工作的电压(通常是Vtyp),Vout带轻载,测量Vout的电压。

    3.负载调整率,通常反映LDO在不同的负载下输出电压的稳定性;测试方法为,测量轻载和重载下的Vout作差,不超过特定值即可。

    4.线性调整率,通常反映LDO在不同输入电压下输出电压的稳定性;测试方法为,测量不同的Vin下的Vout作差(一般取Vin电压范围的Vmin和Vmax),不超过特定值即可。

    5.跌落电压,称为Vdrop,指使LDO能正常工作的最小压差(Vin-Vout),测试方法为,扫描VIN(从高往低扫),测量VOUT,当VOUT的电压发生跌落时,记录此时的VIN,将两者作差即为Vdrop。

  • ​ATE测试注意事项​​:1.在对VOUT带载时注意VIN的档位是否合理(注意不要钳位);2.先测轻载,再测重载;3.VIN有挂容,功耗测试需要看波形是否稳定;4.如果有FB脚,不要把FB脚拉到地,否则会导致芯片直通打坏;5.测试之前最好用示波器测试芯片的纹波是否正常;6.trim时尽量使数据集中。

5.Vdrop电压的扫描代码(ACCO)

DUT_API int VDO(short funcindex, LPCTSTR funclabel)
{
    CParam *VDO = StsGetParam(funcindex,"VDO1");
    CParam *VDO = StsGetParam(funcindex,"VDO2");
    CParam *VDO = StsGetParam(funcindex,"VDO3");
    
	//方法1:多工位粗加细扫描
	double vx=0;
	double vstep1=0.1;
	double vstep2=0.01;
	double vh=VO+1;//5+1=6
	double vl=VO-0.3;//5-0.3=4.7
 
	for(int i=0;i<2;i++)
	{
		flag[i]=1;//在工位1、工位2不工作时,设置flag[0],flag[1]为1
	}
	//获取工位是否进行测试的信息,获取各个工位有效信息,SITENUM=2,如果程序设置的工位数小于 SITENUM,则返回-1,否则返回 0
	StsGetSiteStatus(sitesta,SITENUM);
	for(int i=0;i<SITENUM;i++)
	{
		if(sitesta[i])
			flag[i]=0;//工位1工作,i=0代表工位1工作,i=1代表工位2,谁工作谁flag为0
	}
	//输出端 给电流
	VOUT.Set(FI,-100E-3,FPVI10_10V,FPVI10_100MA,RELAY_ON);
	delay_ms(2);
	
	//粗扫描
	//循环,从vx=vh=6开始循环,6>=4.7,进入循环,直到vx<4.7,结束循环
	for(vx=vh;vx>=vl;)
	{
		VIN.Set(FV,vx,FPVI10_10V,FPVI10_1A,RELAY_ON);//输入端给6V电压
		delay_us(10);
		VOUT.MeasureVI(50,10);
		for(int i=0;i<SITENUM;i++)
		{
			temp[i]=VOUT.GetMeasResult(i,MVRET);//输出端,测量电压
			if((flag[i]==0)&&(temp[i]<=out1[i]*0.95))//flag为0,与电压条件同时成立,则此时的输入电压vx记入寄存器中 
			{
				result[i]=vx;
				//result=vx+0.1
				
			}
		} 
		vx=vx-vstep1;//电压不成立,继续递减,继续循环//result=vx+0.1
	}
	//细扫描
	//此时已经测得一个vx,如果测得的vx=4.6<vl=4.7,则进入循环
	if(vx<vl)
	{
		for(int i=0;i<SITENUM;i++)
		{
			if(sitesta[i]&&vx<result[i]&&result[i]!=0)//工位有效,4.6<4.7,4.7不为0,同时成立,则将result的值给vx,vx=4.7
				vx=result[i];
		}
		vx=vx+vstep1;//vx=4.8
	}
	else
		vx=vh;//这里的vx也可以VOUT1*0.98+规范的上限
	
	for(int i=0;i<2;i++)
	{
		flag[i]=1;
	}
 
	StsGetSiteStatus(sitesta,SITENUM);
	for(int i=0;i<SITENUM;i++)
	{
		if(sitesta[i])
			flag[i]=0;
	}
	VIN.Set(FV,0,FPVI10_10V,FPVI10_1A,RELAY_ON);
	delay_ms(2);
	//vx=4.8>4.7进入循环
	for(;vx>=vl;)
	{
		VIN.Set(FV,vx,FPVI10_10V,FPVI10_1A,RELAY_ON);//vx=4.80,输入端电压
		delay_us(200);
		VOUT.MeasureVI(10,10);
		for(int i=0;i<SITENUM;i++)
		{
			temp[i]=VOUT.GetMeasResult(i,MVRET);
			if((flag[i]==0)&&(temp[i]<=out1[i]*0.95))//符合条件的输入电压,result=vx,flag为1
			{
				result[i]=vx;
				flag[i]=1;
			}
		}
		if((flag[0]==1)&&(flag[1]==1))
			break;
		vx=vx-vstep2;//vx=result-0.01
	}
	for(int i=0;i<SITENUM;i++)
	{
		VDO1->SetTestResult(i,0,(result[i]-temp[i])*1000);
	}
        
-----------------------------------------------------------------------------------        
//方法2:二分法多工位扫描
	double vh[4][4];//扫描上限
	double vl[4][4];//扫描下限
	double vc[4][4];//中心值
	int m;
	for(i=0;i<2;i++)
	{
		flag[i]=1;
	}
 
	StsGetSiteStatus(sitesta,SITENUM);
	for(i=0;i<SITENUM;i++)
	{
		if(sitesta[i])
			flag[i]=0;
	}
	vh[0][0]=4;
	vl[0][0]=3.1;  
	vh[1][0]=4;
	vl[1][0]=3.1;
	vc[0][0]=(vh[0][0]+vl[0][0])/2;
	vc[1][0]=(vh[1][0]+vl[1][0])/2;
	VOUT.Set(FI,-500E-3,FPVI10_10V,FPVI10_1A,RELAY_ON);
	for(i=0;i<20;i++)//使用循环(i从0到19)来逐步逼近每个工位的合适电压
	{
		
		double setValue[2]={vc[0][i],vc[1][i]};

		int siteSize=2;
		VIN.SetSyn(FV,setValue,siteSize,FPVI10_10V,FPVI10_1A,RELAY_ON);
		delay_us(200);
		VOUT.MeasureVI(10,10);
		for(m=0;m<SITENUM;m++)
		{
			temp[m]=VOUT.GetMeasResult(m,MVRET);
			if((flag[m]==0)&&(temp[m]<=out1[m]*0.98))//工位有效,同时满足电压条件temp[m]<=out1[m]*0.98)则,扫描上限不变,扫描下限变为中心值。范围越来越小,直到找到合适电压
			{
				vh[m][i]=vh[m][i];
				vl[m][i]=vc[m][i];
				result[m]=vc[m][i];//中心值,只有在满足temp[i]<=out1[i]*0.98条件,才把此时中心值写入为result输出电压
				flag[m]=1;//已经得到了合适电压
			}
			if((flag[m]==0)&&(temp[m]>out1[m]*0.98))//工位有效,同时满足电压条件temp[m]>out1[m]*0.98则,扫描下限不变,扫描上限变为中心值。范围越来越小,直到找到合适电压
			{
				vl[m][i]=vl[m][i];
				vh[m][i]=vc[m][i];
				flag[m]=1;//已经得到了合适电压
			}
		}
	
		if((flag[0]==1)&&(flag[1]==1))
			break;
	}
 
	for(int m=0;m<SITENUM;m++)
	{
		VDO2->SetTestResult(m,0,(result[m]-temp[m])*1000);//Vdrop =Vin -Vout
	}  
        
-----------------------------------------------------------------------------------       
//方法3:普通扫描
	int i=0;
	double vx;
	double vstep=0.01;
	for(i=0;i<2;i++)
	{
		flag[i]=1;
	}
 
	StsGetSiteStatus(sitesta,SITENUM);
	for(i=0;i<SITENUM;i++)
	{
		if(sitesta[i])
			flag[i]=0;
	}
	
	
	
	VOUT.Set(FI,-100E-3,FPVI10_10V,FPVI10_1A,RELAY_ON);
	for(vx=3.8;vx>2.6;)
	{
		VIN.Set(FV,vx,FPVI10_10V,FPVI10_1A,RELAY_ON);
		delay_us(200);
		VOUT.MeasureVI(10,10);
		for(i=0;i<SITENUM;i++)
		{
			temp[i]=VOUT.GetMeasResult(i,MVRET);
			if((flag[i]==0)&&(temp[i]<=out1[i]*0.98))
			{
				result[i]=vx;
				flag[i]=1;
			}
		}
		if((flag[0]==1)&&(flag[1]==1))
			break;
		vx=vx-vstep;
	}
	for(int i=0;i<SITENUM;i++)
	{
		VDO3->SetTestResult(i,0,(result[i]-temp[i])*1000);
	}
 
 
    return 0;
} 
        

三.LDO和DCDC的区别

  • 工作原理:LDO是线性调节;DCDC是开关转换
  • 效率:LDO效率比较低且发热严重;DCDC效率较高
  • 噪声:LDO纹波小,低噪声;DCDC开关纹波很大,需要挂滤波电容
  • 外围复杂度:LDO外围器件简单;DCDC外围器件比较复杂
  • 适用场景:LDO适用于低噪声,低功耗的场景;DCDC适用于压差大、效率高、电流大的场景

一句话总结:要精度和低噪声选LDO,如单片机的供电,传感器的供电;要效率选DCDC,如主板、设备的供电。