本文为2023年第七届全国大学生集成电路创新创业大赛(“集创赛”)信诺达杯全国三等奖作品分享,参加极术社区的【有奖征集】分享你的2023集创赛作品,秀出作品风采,分享2023集创赛作品扩大影响力,更有丰富电子礼品等你来领!
参赛单位:南京信息工程大学
队伍名称:温热你的小手AR
指导老师:李敏,顾芳
参赛队员:徐国栋,于沐熙,魏晶晶
总决赛奖项:信诺达杯三等奖
信诺达杯以模拟芯片LM386N-1为依托,要求参数队伍完成工业测试的全流程。参赛作品为自制测试接口板(硬件)及基于ST3020芯片测试系统的程序(软件),接口板和测试程序有对应关系,主要难点在于软件配合硬件的调试,以芯片测试的全流程。
LM386(TI)是一种音频功率放大器,主要应用于低电压应用场景。输入端以地为参考,输出端被自动偏置到电源电压的一半,在6V电源电压下,静态电流为4mA,功耗仅为24mW,使得LM386适用于电池供电的场景。
我们团队根据ST3020系统手册进行学习,了解测试设备的相关功能,对测试设备可以做哪些,哪些需要电路或功能需要自制接口板提供进行清晰的评估,为接口板的设计做最初步的规划。其次,仔细阅读LM386芯片手册,在透彻理解各参数定义的基础上对所需电路有一个大体的框架,再根据国标,结合芯片手册提炼出电路图,有必要时查阅相关论文,参考权威测试电路。其中测试不同参数使用的电路或许有所不同,但无需将所有模块的在接口板上体现,可通过继电器进行灵活切换,被测引脚也通过接口板与ST3020系统连接,通过程序实现多电路的测量以测得所需的若干参数。
定义:输入端对参考点交流短路时,经电源端流入器件的电流。
测试条件:VCC=6V,VIN=0
测试原理:如图1所示,在芯片引脚6(Vcc)处连接系统的VIS源,进行加压测流。
测试原理图中继电器K2闭合,其余打开,得到上述电路图。
程序段:
//静态电流IQ
double IQ;
SET_RELAY("2");
Delay(20);
SET_VIS(FVMI,6,V,10,MA);
IQ=1000\*VI_MEASURE(10);
//延时10ms测量电压电流,测量返回值单位为A, *1000换算成mA
if(SHOW_RESULT("IQ",IQ,"MA",8,No_LoLimit))
BIN(1);
定义:器件输入端输入交流电压与输入交流电流之比。
测试原理:如图2所示,在正输入端设置AS音频源,通过AVM测量电阻R1和C1两端电压有效值,根据欧姆定律I=U/R,计算电流IIN。输入电阻可由欧姆定律计算得出
测试原理图中继电器K6闭合,其余打开,得到上述电路图,注意此处电容值对阻抗的影响。
程序段:(在备赛分赛区决赛时程序有所改进,详见附录,此处仅作参赛作品格式展示,后不再表述)
定义:器件有负反馈时,输出电压与输入电压之比。
测试条件:Vcc=6V,f=1kHz——增益为26dB
引脚1和引脚8之间连接一个10μF电容——增益为46dB
测试原理:如图3所示,增益为26dB:设置AS施加输入,测量芯片输出,计算增益
电压增益计算公式: Avf=20lg(Uo/Ui) dB
如图4所示,增益为46dB:在引脚1和8之间连接一个10μF电容,重复上述测量步骤
图 4 增益为46dB的电压增益测试原理图
测试原理图中继电器K4,K5闭合,其余打开,得到上述电路图。
在图3基础上再闭合继电器K1,其他保持不变得到图4。
定义:器件输出总谐波电压有效值与基波电压之比。
测试条件:Vcc=6V,RL=8Ω,Pout=125mW,f=1kHz,引脚1和引脚8断开
测试原理:根据测试条件给出的输出功率及负载电阻的大小可求得输出电压Uo=(Po * RL)^1/2=1V,增益26dB,计算得输入应为0.05V(50mV)。通过AS施加1kHz的交流信号,输入0.05V。输出端先设置AVM2电压测量基波幅值U3,再设置AVM2测得谐波幅值U4,根据公式即可计算出全谐波失真度: THD=U4/U3 或通过傅里叶变换测量
定义:全谐波失真度不超过规定值时,器件输出的最大功率。
测试条件:Vcc=6V,RL=8Ω,THD =10%
测试原理:如图6所示,设置AS输入信号,通过上述方式测量THD,若THD小于10%,通过AVM2测输出电压计算输出功率。
公式如下: Po=(Uo^2)/RL
图 6 输出功率测试原理图
测试原理图中继电器K4,K5闭合,其余打开,得到上述电路图。
定义:器件增益下降3dB时的频率范围。
测试条件:VS=6V,引脚1和引脚8断开
测试原理:如图7所示,设置AS源输入有效值为50mV,频率为1kHz的信号,当AS频率为1kHz时,电压增益为26dB,计算可得此时输出电压并通过AVM2测试电压,计算增益,设置AS增加每次1kHz扫频,直至增益下降为原来的0.707倍,记录此时的频率,该频率与1kHz的差值即为即为带宽BW。
图 7 带宽测试原理图
测试原理图中继电器K4,K5闭合,其余打开,得到上述电路图。
定义:器件的电源纹波电压与其输出纹波电压之比。
测试条件:VS=6V,f=1kHz,CBYPASS=10μF,引脚1和8断开
测试原理:如图8所示,设置6V供电,同时在DPS1S上叠加正电源纹波,其有效值为10mA,频率为1kHz,通过AVM2设置电压测量通路为1kHz带通滤波器,测量基波幅值Uor,纹波抑制比可由如下公式计算得出:
PSRR=20lg(Ur/Uor)
测试原理图中继电器K2,K5,K9闭合,其余打开, 得到上述电路图。
定义:流过正输入端和负输入端电流的均值。
测试条件:VS=6V,引脚2和引脚3断开
测试原理:偏置电流是第一级放大器输入晶体管的基极直流电流,普通运放通常设计成基极开路,例如通用运放LM358的输入级如图:
而根据LM386芯片手册上的电路图:
LM386有一个50k电阻到地来提供偏置电流的,所以测试条件是输入端开路(原理图中加了两个电容,可起到防止可能出现的不稳定),两个输入端通过单刀双掷的继电器送给运放对电压进行放大,放大到伏特量级再进行测量,然后再两路求平均得到偏置电流。
如图9所示,设置DPS给LM386提供6V的工作电源,辅助运放OPA189输出端连接DVM8。单刀双掷开关K7与1连接时,DVM8测得出Uo1,再将单刀双掷开关K7拨至2,通过DVM8测量得出Uo2,偏置电流由如下公式计算可得:
IB=((U1/1000+U2/1000))/(2*50000)
图 9 输入偏置电流测试原理图
测试原理图中继电器K2,K8闭合,其余打开,通过DVM8测量Uo1;测试原理图中继电器K2,K7闭合,其余打开,通过DVM8测量Uo2。
分区域决赛参赛心得:
此次决赛的主要目的是将自己设计的PCB制作回来并完成元器件的焊接,通过欧式插座与机器相连从而使用测试设备的模块进行测量。
实际测量时在程序中按照芯片手册设置好上下限以便发现哪些参数不在范围内以便调试,两个小时的实测时间固然紧张,遇到问题时要根据测得的数据排除可能出现该错误的原因,若有多个错误的可能,使用控制变量法一边测试一边排错。自己设计的接口板要尽量保证干扰要小,在此基础上可以适当让自己的接口板更加灵活些,在比赛中若测试值不理想也便于测试,给调试更多可能。
上图为调试过程中的记录,干扰信号放大问题、电容充放电问题等都将会明显的影响测试结果,这就要求参赛队伍有扎实的模电知识和较丰富的电路实验经验来对电路进行最后一个环节的改进,虽然我们团队在最初设计电路的阶段对各个器件的参数做了严密计算,但还是会有一下意想不到的问题,所以在比赛时调试过程非常重要且非常考验知识水平和解决问题的能力。
图 11 分区决赛接口板实物图示(正面)
图 12 分区决赛接口板实物图示(背面)
全国总决赛备赛纪要:
(写此文档的时间是在全国总决赛前,故未对比赛数字芯片实测过,只做备赛分享)
全国总决赛备赛模式和之前会有所不同,初赛包括区域决赛都是从最基础的做起,无论时电路设计还是仿真或实际搭建电路的验证都是服务于上机实测,而全国总决赛备赛时为了快速入门则是通过模仿系统手册上的案例不断的扩展数字电路测试的基础知识,这种自上而下的模式要注重基础知识的积累,不能只停留在模仿上。
代码
//静态电流
double IQ;
double IQ0;
SET_RELAY("1"); //输出结电容到地
SET_DPS_POS(6, V,100, MA);//600MW
Delay(20);
IQ0=DPS_MEASURE_POS(20);
IQ=1000*IQ0;
//延时 10ms 测量电压电流,测量返回值单位为 A
//\*1000 换算成 mA
if(SHOW_RESULT("IQ",IQ,"MA",8,No_LoLimit))
//此处上限由芯片手册给出
BIN(1);
//输入电阻/
double Ui1=0,I1=0,,Ri1=0; //1为正输入端
double Rx=51; //单为为kΩ
//此处的电阻值可定义为万用表在电路板上测得的值
double Uas=0; //验证参数
SET_RELAY("2");
Delay(20);
SET_DPS_POS(6, V,150, MA); //电源供电
Delay(100);
SET_AS(0.1,V,1,KHZ);
Delay(20);
SET_AVM_PATH(LPPASS,BPPASS);
Delay(20);
Uas=AVM_MEASURE(2,0.2,V,200);
Ui1=AVM_MEASURE(1,0.2,V,200);
I1=(Uas-Ui1)/Rx;
//计算输入交流电压,单位为mA
Ri1=Ui1/I1;//单位 kΩ
if(SHOW_RESULT("Ri1",Ri1,"kΩ",No_UpLimit,No_LoLimit)) //芯片手册上未给上下限
BIN(1);
/\*if(SHOW_RESULT("Uas",Uas,"V",No_UpLimit,No_LoLimit))
BIN(2);
if(SHOW_RESULT("Ui1",Ui1,"V",No_UpLimit,No_LoLimit))
BIN(3);\*/
//换负输入端测输入电阻
double Ui2=0,I2=0,Ri2=0; //2为负输入端
SET_RELAY("1,4,5,7");
SET_DPS_POS(6, V,150, MA); //电源供电
Delay(20);
SET_AS(0.1,V,1,KHZ);
SET_AVM_PATH(LPPASS,BPPASS);
Delay(20);
Uas=AVM_MEASURE(2,0.2,V,200);
Ui2=AVM_MEASURE(1,0.2,V,200);
I2=(Uas-Ui2)/Rx;//计算输入交流电压,单位为mA
Ri2=Ui2/I2;//单位 kΩ
if(SHOW_RESULT("Ri2",Ri2,"kΩ",No_UpLimit,No_LoLimit))
BIN(4);
/*if(SHOW_RESULT("Uas",Uas,"V",No_UpLimit,No_LoLimit))
BIN(5);
if(SHOW_RESULT("Ui2",Ui2,"V",No_UpLimit,No_LoLimit))
BIN(6);*/
//偏置电流
double Uo1,Uo2,IB; //1为正端输入放大后的电压,2为负
double Rix; //单位为kΩ
SET_DPS_POS(6,V,100,MA);
SET_RELAY("1,14"); //测正,K1,2,3为100为LM386正接电容到地
Delay(20);
Uo1=DVM_MEASURE(3,3,V,200); //LM386正端
SET_RELAY("1,13"); //测负,K4,5,6为000为LM386正接电容到地
Delay(20);
Uo2=DVM_MEASURE(3,3,V,200); //LM386负端
//250nA*50kΩ=12.5mV,再放大200 倍
IB=(Uo1+Uo2)/(2\*200\*Rix)*1000000000; // V/Ω=A->nA
if(SHOW_RESULT("IB",IB,"nA", No_UpLimit,No_LoLimit))
BIN(1);
if(SHOW_RESULT("Uo1+",Uo1,"V", No_UpLimit,No_LoLimit))
BIN(2);
if(SHOW_RESULT("Uo2+",Uo2,"V", No_UpLimit,No_LoLimit))
BIN(3);
//纹波抑制比
double Vor,PSRR;
SET_DPS_POS(6, V,150, MA);
SET_RELAY("1,12");
Delay(20);
SET_POS_RIPPLE(40,MV,1000);
SET_AVM_PATH(LPPASS,BP1K);
Vor=AVM_MEASURE(2,0.02,V,200);
PSRR=20\*log10(0.04/Vor);
if(SHOW_RESULT("PSRR",PSRR,"dB",No_UpLimit,No_LoLimit))
BIN(1);
//电压增益为26dB
double U21,A1,Uas;
SET_RELAY("6");
SET_DPS_POS(6, V,150, MA);//电源供电
Delay(20);
SET_AS(0.05,V,1,KHZ);
Delay(200);
SET_AVM_PATH(LPPASS,BPPASS);
Delay(20);
U21=AVM_MEASURE(2,0.2,V,200);
Delay(20);
Uas=AVM_MEASURE(1,0.2,V,200);
A01=20\*log10(U21/(Uas));
if(SHOW_RESULT("U21",U21,"V",No_UpLimit,No_LoLimit))
BIN(1);
if(SHOW_RESULT("Uas",Uas,"V",No_UpLimit,No_LoLimit))
BIN(2);
if(SHOW_RESULT("Avf1",A01,"dB",No_UpLimit,No_LoLimit))
BIN(3);
//电压增益为46dB
double A2,U22;
SET_RELAY("6,15");
SET_DPS_POS(6, V,150, MA);//电源供电
Delay(20);
SET_AS(0.005,V,1,KHZ);
Delay(200);
SET_AVM_PATH(LPPASS,BPPASS);
Delay(20);
U22=AVM_MEASURE(2,2.2,V,200);
Delay(20);
Uas=AVM_MEASURE(1,0.02,V,200);
A2=20\*log10(U22/Uas);
if(SHOW_RESULT("U22",U22,"V",No_UpLimit,No_LoLimit))
BIN(1);
if(SHOW_RESULT("Uas",Uas,"V",No_UpLimit,No_LoLimit))
BIN(2);
if(SHOW_RESULT("Avf1",A2,"dB",No_UpLimit,No_LoLimit))
BIN(3);
//THD
double U3=0,U4=0,THD=0,total1=0;
int j;
double samplingdate\[32\]={0},FFT\[16\]={0},samplingdate2\[16\]={0};
SET_DPS_POS(6,V,150, MA);
SET_RELAY("6,9,11");
Delay(20);
SET_AS(0.05,V,1,KHZ);
Delay(200);
SET_AVM_PATH(LPPASS,BPPASS);
Delay(200);
U3=AVM_MEASURE(2,2,V,200);
Delay(20);
SET_AVM_PATH(LPPASS,BPNOT);
Delay(200);
U4=AVM_MEASURE(2,2,V,200);
Delay(20);
/\*
MAT_DVM_MEASURE(1,2,V,100, 32,3125,samplingdate);
//最后一个参数是指针变量,应该给地址
//MAT_DVM_MEASURE(int iMeasNo,double fVoltage, int iVolUnit,unsigned int tDelay, int ipNumber,in fFreq,double \*fValue)
Delay(200);
for(j=0;j<16;j++)
{
samplingdate2[j]=samplingdate[j+10];
}
Delay(2000);
DFT(samplingdate2,16,FFT);
\*/
//输出功率 //可在THD电路中测量
double U5=0,U6=0,THDx=0,Pmax=0;
double RL=8;
SET_DPS_POS(6, V,100, MA);
SET_RELAY("6,9,11");
Delay(200);
SET_AS(0.1,V,1,KHZ); //0.1V放大20倍后输出2V
Delay(20);
SET_AVM_PATH(LPPASS,BPPASS);
Delay(200);
U5=AVM_MEASURE(2,4,V,200);
Delay(20);
SET_AVM_PATH(LPPASS,BPNOT);
Delay(200);
U6=AVM_MEASURE(2,4,V,200);
THDx=U6/U5;
Pmax=U5\*U5/RL;
//带宽
double BW=0,U6=0;
SET_DPS_POS(6, V,100, MA);
//最大输出电压,有待寻找
for(i=0;U6>=0.707\*3.6;i++)
{
SET_AS(0.08,V,1+i,KHZ);
SET_AVM_PATH(LPPASS,BPPASS);
U6=AVM_MEASURE(2,2,V,100);
}
if(SHOW_RESULT("BW",i,"kHz",No_UpLimit,No_LoLimit))
BIN(5);
参加极术社区的【有奖征集】分享你的2023集创赛作品,秀出作品风采,分享2023集创赛作品扩大影响力,更有丰富电子礼品等你来领!