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

📄 trans.h

📁 MSP430z_f247.rar
💻 H
字号:
# ifndef TRANS_H_H_
# define TRANS_H_H_

# include "AVR_Environment_Configure.h"

# include "UART0.h"
# include "ADC12.h"
# include "USCIA1_SPI.h"


# define ABS_INT(n) ((n)>0? (n): (-(n)))
/////////////////
//上位机握手信号
# define IMPT	0
# define OUT	1

# define DIODE	1
# define PNP	2
# define NPN	3
/////////////////
# define IB		0
# define IC		1
# define VCE	2
# define PLUS	3
# define VBE	4
# define VBC	3

# define DA_VBE		0
# define DA_VBC		1

# define NPN_EBC			0
# define NPN_BCE			1
# define PNP_EBC			2
# define PNP_BCE			3
# define TRANS_NOT_FOUND	4

# define PARAM_SUM				5
//采样点40为最佳,此时最大饱和值为40*60=2400--2V*3=6,为安全值(9V供电)
# define TRANS_HITS				50
# define IC_INDENT				50

# define TRANS_IC_INIT			200
//画线数为6条,一般放大倍数在200左右的都能将整个64区间沾满
//当然这还取决于取样值与压缩率的商,这里压缩率为35,则取样值
//最高可达35*63/100=22.05Ma,对应于200的放大倍数时,Ib最高可
//到1.1Ma左右
# define LINES_SUM				6

# define LVCE_HOR_MOVE			1
# define LVCE_MAX				51

# define RVCE_HOR_MOVE			52
# define RVCE_MAX				102
//设置饱和区VCE值(取每条线的最大值)//(TRANS_HITS * IC_Indent[i]+100)
# define VCE_PID_SATUR			(TRANS_HITS * IC_Indent[i]+100)
//建立晶体管饱和的条件
# define NPN_VCE_SATUR			2520
# define PNP_VCE_SATUR			650
//每条采样线集电极的起始电压
# define NPN_VC_INIT			700
# define PNP_VC_INIT			2520
//PID控制完成的阀值2460
# define PID_OK					10

//继电器动作宏
# define RELAY_PORT			BIT0

# define OPEN_RELAY			(P4OUT |= RELAY_PORT)
# define CLOSE_RELAY		(P4OUT &= ~RELAY_PORT)

//液晶显示控制宏
# define L_REG				1
# define R_REG				0

# define CLEAR_LCD			1
# define N_CLEAR_LCD		0

///////////////////////输入特性测试///////////////////////////
//Vbe坐标移动单位,Vbe对10取整,可以精确到0.1mv
# define VBE_SUB				25
# define L_VBE_MOVE				(VBE_SUB + LVCE_HOR_MOVE)
# define R_VBE_MOVE				VBE_SUB-RVCE_HOR_MOVE
//IB_DAC初始值
# define NPN_IB_INIT			700
# define PNP_IB_INIT			2500
//Ib每次自增或自减量		
# define IB_INDENT				20
# define IMP_LINE_SUM			2

//画线容错处理宏
# define TRANS_VCE_CE			if(TRANS[VCE][Index] < TRANS[VCE][Index-1])\
	  								TRANS[VCE][Index] = TRANS[VCE][Index-1];

# define TRANS_LVCE_CE			if(TRANS[VCE][Index] < TRANS[VCE][Index-1])\
	  								TRANS[VCE][Index] = TRANS[VCE][Index-1];\
								if(TRANS[VCE][Index] >= LVCE_MAX )\
									TRANS[VCE][Index] =  LVCE_MAX;
					
# define TRANS_RVCE_CE			if(TRANS[VCE][Index] < TRANS[VCE][Index-1])\
	  								TRANS[VCE][Index] = TRANS[VCE][Index-1];\
								if(TRANS[VCE][Index] >= RVCE_MAX )\
									TRANS[VCE][Index] =  RVCE_MAX;
									  
# define TRANS_IC_CE			if(TRANS[IC][Index] < TRANS[IC][Index-1])\
	  								TRANS[IC][Index] = TRANS[IC][Index-1];//递增

////////////////////////////////////////////////////////////////////////////////
//输入特性测试
# define TRANS_VBE_CE			if(TRANS[VBE][Index] < TRANS[VBE][Index-1])\
	  								TRANS[VBE][Index] = TRANS[VBE][Index-1];\
									  
# define TRANS_IB_CE			if(TRANS[IB][Index] < TRANS[IB][Index-1])\
	  								TRANS[IB][Index] = TRANS[IB][Index-1];\
								if(TRANS[IC][Index] > 63)\
									TRANS[IC][Index] = 63;//画线不能越界
								

# define TRANS_STR_INIT			unsigned char STR_IB[] = "Ib : ";\
								unsigned char STR_IC[] = "Ic : ";\
								unsigned char STR_VCE[] = "Vce : ";\
								unsigned char STR_Plus[] = "Plus : ";\
								unsigned char STR_VBE[] = "Vbe : ";

# define TRANS_STR_SHOW			Display_A_String(STR_IB);\
								UART_Show_Number(Get_Real_Value(Transistor[IB], 1), 0);\
								Display_A_String(STR_IC);\
								UART_Show_Number(Get_Real_Value(Transistor[IC], 1), 0);\
								Display_A_String(STR_VCE);\
								UART_Show_Number(Get_Real_Value(Transistor[VCE], 1), 0);\
								Display_A_String(STR_Plus);\
								UART_Show_Number(Get_Real_Value(Transistor[PLUS], 0), 0);\
								Display_A_String(STR_VBE);\
								UART_Show_Number(Get_Real_Value(Transistor[VBE], 1), 1);

# define DAC_DELAY				Delay_nMS(3);
//测量晶体管参数宏
# define GET_VCE				Transistor[VCE] = (AD_Result_Array[0]- AD_Result_Array[1])*3;\
								Transistor[VCE] = ABS_INT(Transistor[VCE]);
# define GET_VBE				Transistor[VBE] = (AD_Result_Array[2] -  AD_Result_Array[1])*3;\
								Transistor[VBE] = ABS_INT(Transistor[VBE]);
# define GET_IB					Transistor[IB] = (AD_Result_Array[3] -  AD_Result_Array[2])*3;\
								Transistor[IB] = ABS_INT(Transistor[IB]);
# define GET_IC					Transistor[IC] = (AD_Result_Array[4] - AD_Result_Array[0])*3;\
								Transistor[IC] = ABS_INT(Transistor[IC]);
//上位机数据握手宏定义
# define SEND_NPN_OUT			Display_A_String("beg");\
		  						UART0_Transmit(OUT);\
								UART0_Transmit(NPN);
# define SEND_NPN_IN			Display_A_String("beg");\
		  						UART0_Transmit(IMPT);\
								UART0_Transmit(NPN);
# define SEND_PNP_OUT			Display_A_String("beg");\
		  						UART0_Transmit(OUT);\
								UART0_Transmit(PNP);
# define SEND_PNP_IN			Display_A_String("beg");\
		  						UART0_Transmit(IMPT);\
								UART0_Transmit(PNP);
# define SEND_OVER				Display_A_String("end");

# define DIODE_IMPT				Display_A_String("beg");\
								UART0_Transmit(IMPT);\
								UART0_Transmit(DIODE);

/*
typedef struct Transistor
{
	unsigned int Plus;					//放大倍数(有效值)
	
	unsigned char ch_Ib[TRANS_HITS];	//基极电流(坐标点)
	unsigned char ch_Ic[TRANS_HITS];	//集电极电流(坐标点)
	unsigned char ch_Vce[TRANS_HITS];	//集射电压(坐标点)
	unsigned char ch_Vbe[TRANS_HITS];	//基射电压(坐标点)
}TRANS;
*/

typedef struct Trans_Struct
{
  	UINT8 *Ptr_x;
	UINT8 *Ptr_y;
	INT16 wPlus;
}Trans_Info;

void TRANS_Device_INIT(void);
void Test(unsigned char TRANS_Type);
////////////////////////////////////
//11月7号更改:怎加了输入输出测试参数
void Show_Transistor(unsigned int Index, 
					 unsigned char Testing_Type);
/////////////////////////////////////
void TRANS_IB_PID(unsigned int Ib_SP, 
				  unsigned int Ib_FA, 
				  unsigned char TRANS_Type);

void PID_Test(unsigned int Ib_SP, 
			  unsigned int VCE_INIT);

void Set_Ib(unsigned int Ib_SP, 
			unsigned int VCE_Saturation, 
			unsigned char TRANS_Type);

unsigned int Get_SP(unsigned int INIT, 
					unsigned int TOLES,
					unsigned char i);

void Ib_CV_Limit(unsigned int MIN, unsigned int MAX);
Trans_Info *TRANS_Import_Measure(unsigned char TRANS_Type,
								unsigned char Time);
Trans_Info * TRANS_Out_Measure(unsigned char TRANS_Type,
								unsigned char Time);
Trans_Info *Diode_Measure(void);

void TRANS_Measure_Over(void);
/*
Trans_Info *Import_Measure(unsigned char TRANS_Type,unsigned char Time);
*/
/*
void Import_Measure(unsigned char TRANS_Type,
					unsigned char REG_SEL,
					unsigned char IS_Clear_LCD);
*/

unsigned char Judge_TRANS_Type(void);

////////////////////////////////////////////////////////////////////////////////

//每条采样线集电极的起始电压(输出)
# define NMOS_VD_INIT			700
# define PMOS_VD_INIT			2520

# define NMOS_VG_INIT			1000


//测试输入转移特性曲线

void NMOSE_Measure_Out(unsigned int Vg_Indent,
					   unsigned char REG_SEL,
					   unsigned char IS_Clear_LCD);

void NMOSE_Measure_IMPT(unsigned char REG_SEL,
					    unsigned char IS_Clear_LCD);
////////////////////////////////////////////////////////////////////////////////
extern unsigned int PLUS_[2][6];
void Get_TRANS(void);
# endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -