⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trans.c

📁 MSP430z_f247.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
	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 + -