📄 trans.c
字号:
else
{
PID_Flag ++; //当误差小于等于4时自加一次
}
}
void Ib_CV_Limit(unsigned int MIN, unsigned int MAX)
{
if(Ib_CV > MAX)
{
Ib_CV = MAX;
}
else if(Ib_CV < MIN)
{
Ib_CV = MIN;
}
}
unsigned int Get_SP(unsigned int INIT, unsigned int TOLES, unsigned char i)
{
return (INIT + TOLES*i);
}
void Set_Ib(unsigned int Ib_SP, unsigned int VCE_Saturation,
unsigned char TRANS_Type)
{
unsigned int AD_Result_Array[5] = {0};
int Transistor[PARAM_SUM]={0};
Set_DAC_Data(VCE_Saturation, 2); //设置饱和电压
while(1)
{
Get_ADC12_SM(AD_Result_Array);
Transistor[IB] = (AD_Result_Array[3] - AD_Result_Array[2])*3;
Transistor[IB] = ABS_INT(Transistor[IB]);
TRANS_IB_PID(Ib_SP, Transistor[IB], TRANS_Type);
if(PID_Flag > PID_OK)
{
PID_Flag = 0;
break;
}
}
////////////////////////////////////
//UART_Show_Number(Get_Real_Value(Transistor[IB], 1), 0);
//UART_Show_Number(Get_Real_Value(Ib_CV, 0), 1);
///////////////////////////////////
}
unsigned char Judge_TRANS_Type(void)
{
unsigned int AD_Result_Array[5] = {0};
int Transistor[PARAM_SUM]={0};
int Dispersion = 0;
unsigned char Trans_Type =TRANS_NOT_FOUND;
CLOSE_RELAY;
Set_DAC_Data(650, 3);
Set_DAC_Data(1000, 1);
Set_DAC_Data(0, 2);
DAC_DELAY;
Get_ADC12_SM(AD_Result_Array);
Transistor[DA_VBE] = (AD_Result_Array[3] - AD_Result_Array[1])*3;
Transistor[DA_VBE] = ABS_INT(Transistor[DA_VBE]);
Transistor[DA_VBC] = (AD_Result_Array[3] - AD_Result_Array[4])*3;
Transistor[DA_VBC] = ABS_INT(Transistor[DA_VBC]);
Transistor[VBC] = (AD_Result_Array[2]- AD_Result_Array[0])*3;
Transistor[VBC] = ABS_INT(Transistor[VBC]);
Transistor[VBE] = (AD_Result_Array[2] - AD_Result_Array[1])*3;
Transistor[VBE] = ABS_INT(Transistor[VBE]);
Dispersion = Transistor[DA_VBE] - Transistor[VBE];
Dispersion = ABS_INT(Dispersion);
if(Dispersion > 1000)
{
Dispersion = Transistor[DA_VBC] - Transistor[VBC];
Dispersion = ABS_INT(Dispersion);
if(Dispersion > 1000)
{
Trans_Type = NPN_EBC;//Display_A_String("NPN_EBC\n");
}
else
{
Trans_Type = PNP_BCE;//Display_A_String("PNP_BCE\n");
}
}
else
{
Set_DAC_Data(2000, 3);
Set_DAC_Data(1000, 1);
Set_DAC_Data(2000, 2);
DAC_DELAY;
Get_ADC12_SM(AD_Result_Array);
Transistor[DA_VBE] = (AD_Result_Array[3] - AD_Result_Array[1])*3;
Transistor[DA_VBE] = ABS_INT(Transistor[DA_VBE]);
Transistor[DA_VBC] = (AD_Result_Array[3] - AD_Result_Array[4])*3;
Transistor[DA_VBC] = ABS_INT(Transistor[DA_VBC]);
Transistor[VBC] = (AD_Result_Array[2]- AD_Result_Array[0])*3;
Transistor[VBC] = ABS_INT(Transistor[VBC]);
Transistor[VBE] = (AD_Result_Array[2] - AD_Result_Array[1])*3;
Transistor[VBE] = ABS_INT(Transistor[VBE]);
Dispersion = Transistor[DA_VBE] - Transistor[VBE];
Dispersion = ABS_INT(Dispersion);
Set_DAC_Data(650, 3);
if(Dispersion > 1000)
{
Dispersion = Transistor[DA_VBC] - Transistor[VBC];
Dispersion = ABS_INT(Dispersion);
if(Dispersion > 1000)
{
Trans_Type = PNP_EBC;//Display_A_String("PNP_EBC\n");
}
else
{
Trans_Type = NPN_BCE;//Display_A_String("NPN_BCE\n");
}
}
else
{
Trans_Type = TRANS_NOT_FOUND;//Display_A_String("NOT_FOUND\n");
}
}
return Trans_Type;
}
////////////////////////////////////////////////////////////////////////////////
//MOSFET测试函数//
////////////////////////////////////////////////////////////////////////////////
void NMOSE_Measure_Out(unsigned int Vg_Indent,
unsigned char REG_SEL,
unsigned char IS_Clear_LCD)
{
unsigned int i=0;
unsigned int j=0;
unsigned int Hits_Index=0;
for(i = 0; i <LINES_SUM; i ++)
{
SEND_NPN_OUT;
CLOSE_RELAY;
Set_DAC_Data(NMOS_VD_INIT, 3);
DAC_IC = NMOS_VD_INIT; //设置集电极起始电压
//设置基极电压
Set_DAC_Data(Get_SP(NMOS_VD_INIT+720, Vg_Indent, i), 1);
DAC_DELAY; //待电压稳定,各参数建立完成
for(j=0; j< TRANS_HITS; j++)
{ //设置集电极电压,每次递增TRANS_IC_INDENT
Set_DAC_Data(DAC_IC, 2);
DAC_IC += IC_Indent[i];
DAC_DELAY; //待电压稳定,各参数建立完成
Show_Transistor(Hits_Index, OUT);
Hits_Index++;
}
TRANS[VCE][0] = TRANS[VCE][1]; //第一个通常是误差点
TRANS[IC][0] = TRANS[IC][1]; //所以将第一个点与第二个点重合来画
Hits_Index=0;
SEND_OVER;
}
Set_DAC_Data(0, 3);
TRANS_Measure_Over();
}
void NMOSE_Measure_IMPT(unsigned char REG_SEL,
unsigned char IS_Clear_LCD)
{
unsigned int DAC_Ib = 0;
unsigned char i = 0;
unsigned char j =0;
/////////////////////////////////////////////
///////////////////////////////////////////
//Draw_xy_REF(63, 63);
/////////////////////////////////////////////
///////////////////////////////////////////
for(i=0; i<IMP_LINE_SUM; i++)
{
SEND_NPN_IN;
Set_DAC_Data(700, 3);
DAC_DELAY;
DAC_Ib = 900; //这个增量必须加上,否则将引入很大的误差
Set_DAC_Data(700, 2);
DAC_DELAY;
for(j=0; j< TRANS_HITS; j++)
{
DAC_Ib += 20;//IB_INDENT;
Set_DAC_Data(DAC_Ib, 1);
DAC_DELAY;
Show_Transistor(j, IMPT);
}
TRANS[VBE][0] = TRANS[VBE][1]; //第一个通常是误差点
TRANS[IB][0] = TRANS[IB][1]; //所以将第一个点与第二个点重合来画
/////////////////////////////////////////////
///////////////////////////////////////////
//Draw_Graph(TRANS[VBE], TRANS[IB], TRANS_HITS);
/////////////////////////////////////////////
///////////////////////////////////////////
SEND_OVER;
}
}
void PID_Test(unsigned int Ib_SP, unsigned int VCE_INIT)
{
//Set_DAC_Data(Ib_SP, 1);
//Set_DAC_Data(VCE_INIT, 2);
unsigned int AD_Result_Array[5] = {0};
TRANS_STR_INIT;
unsigned long IC_Temp = 0;
unsigned long IB_Temp = 0;
int Transistor[PARAM_SUM]={0};
//Set_DAC_Data(Ib_SP, 1);
Set_DAC_Data(VCE_INIT, 2);
while(1)
{
Get_ADC12_SM(AD_Result_Array);
Transistor[IB] = (AD_Result_Array[3] - AD_Result_Array[2])*3;
Transistor[IB] = ABS_INT(Transistor[IB]);
UART_Show_Number(Get_Real_Value(AD_Result_Array[3], 0), 0);
UART_Show_Number(Get_Real_Value(AD_Result_Array[2], 0), 0);
UART_Show_Number(Get_Real_Value(Transistor[IB], 0), 1);
TRANS_IB_PID(Ib_SP, Transistor[IB], PNP);
//Delay_nMS(500);
if(PID_Flag > PID_OK)
{
PID_Flag = 0;
break;
}
}
while(1)
{
Get_ADC12_SM(AD_Result_Array);
Transistor[IB] = (AD_Result_Array[3] - AD_Result_Array[2])*3;
Transistor[IB] = ABS_INT(Transistor[IB]);
Transistor[IC] = (AD_Result_Array[4] - AD_Result_Array[0])*3;
Transistor[IC] = ABS_INT(Transistor[IC]);
Transistor[VCE] = (AD_Result_Array[0] - AD_Result_Array[1])*3;
Transistor[VCE] = ABS_INT(Transistor[VCE]);
IC_Temp = 100*(unsigned long)Transistor[IC]; //求放大倍数
IB_Temp = (unsigned long)Transistor[IB];
Transistor[PLUS] = (unsigned int)(IC_Temp / IB_Temp);
TRANS_STR_SHOW;
Delay_nMS(1000);
}
}
void Get_TRANS(void)
{
unsigned int AD_Result_Array[5] = {0};
TRANS_STR_INIT;
unsigned long IC_Temp = 0;
unsigned long IB_Temp = 0;
int Transistor[PARAM_SUM]={0};
while(1)
{
Get_ADC12_SM(AD_Result_Array);
Transistor[IB] = (AD_Result_Array[3] - AD_Result_Array[2])*3;
Transistor[IB] = ABS_INT(Transistor[IB]);
Transistor[IC] = (AD_Result_Array[4] - AD_Result_Array[0])*3;
Transistor[IC] = ABS_INT(Transistor[IC]);
Transistor[VCE] = (AD_Result_Array[0] - AD_Result_Array[1])*3;
Transistor[VCE] = ABS_INT(Transistor[VCE]);
Transistor[VBE] = (AD_Result_Array[2] - AD_Result_Array[1])*3;
Transistor[VBE] = ABS_INT(Transistor[VBE]);
IC_Temp = 100*(unsigned long)Transistor[IC]; //求放大倍数
IB_Temp = (unsigned long)Transistor[IB];
Transistor[PLUS] = (unsigned int)(IC_Temp / IB_Temp);
TRANS_STR_SHOW;
Delay_nMS(1000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -