📄 trans.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 + -