基于微控制器的二极管和双极结晶体管测试仪的说明

电子说

1.2w人已加入

描述

简介

如今,大多数数字万用表都具有用于测试二极管(有时是晶体管)的内置功能。该项目的目的是演示一种使用微控制器为二极管和双极结传输器(BJT)构建测试设备的简单方法。该测试算法基于一个简单的事实,即工作中的 PN结仅在一个方向上传导电流。此项目中使用了PIC16F688微控制器,该开关可切换二极管和晶体管PN结之间的偏置电压,并确定特定结是正常,开路还是短路。

理论

测试二极管的逻辑很简单。二极管是PN结,仅允许一个方向的电流传导。因此,好的二极管将仅在一个方向上传导电流。如果在两个方向上都工作,则表示二极管短路,而在两个方向上都工作时,则表示开路。该逻辑的电路实现如下所示。

测试仪

通过意识到这一点,可以很容易地将此概念扩展为测试晶体管。晶体管由两个PN结组成:一个在基极和发射极之间(BE结),另一个在基极和集电极之间(BC结)。如果两个结仅在一个方向上传导,则晶体管正常,否则出现故障。我们还可以通过考虑电流传导的方向来确定晶体管的类型(PNP或NPN)。需要一个微控制器的三个I/O引脚来实现晶体管的测试算法。

测试仪

晶体管的测试顺序如下。

将D2设置为高电平并读取D1和D3。如果D1为高电平,则BE结导通,否则不导通。如果D3为高电平,则BC结导通,否则不导通。

将D1设置为高电平并读取D2。如果D2为高电平,则EB结导通,否则为非。

将D3设置为高电平并读取D2。如果D2为高电平,则CB结导通,否则不导通。

现在,如果仅BE和BC结导通,则该晶体管为NPN型且工作正常。而且,如果仅EB和CB结导通,则该晶体管仍然正常,但晶体管类型为PNP。其他所有情况(例如EB和BE均导通,或BC和CB均不导通等)表明晶体管不佳。

电路图和说明

该项目的电路图非常简单。它具有两个用于输入的按钮开关,分别为选择和详细信息。按下“选择”按钮可以在二极管测试和晶体管测试之间进行选择,“详细信息”按钮仅在进行晶体管测试时才可用,并显示测试结果的详细信息,例如晶体管类型和结状态。测试晶体管的三个支路(E,B和C)通过1 K电阻接地,并且两个PN结将通过PIC16F688微控制器的RA0,RA1和RA2端口引脚进行测试。二极管的测试仅需要两个引脚,并且将使用E和C引脚。这就是为什么它们在电路图中具有备用标签D1和D2的原因。

测试仪

测试仪

电路在面包板上设置

软件

此项目的固件是使用MikroC编译器开发的。编程时,您必须非常小心三个测试引脚(RA0,RA1和RA2)的方向设置,因为它们在运行测试算法时会经常变化。在将任何测试引脚设置为高电平之前,必须确保将其他两个引脚定义为输入引脚,以免端口引脚之间出现任何电压冲突或短路。

/*

项目:二极管和晶体管测试仪

内部振荡器@ 4MHz,启用了MCLR,启用PWRT,关闭WDT

版权@ Rajendra Bhatt

2010年11月9日

*/

//LCD模块连接

sbit LCD_RS at RC4_bit;

位RC5_bit的LCD_EN;

位RC0_bit的LCD_D4;

位RC1_bit的LCD_D5;

sbit LCD_D6为RC2_bit;

sbit LCD_D7为RC3_bit;

sbit LCD_RS_Direction为TRISC4_bit;

sbit LCD_EN_Direction位于TRISC5_bit;

sbit LCD_D4_Direction位于TRISC0_bit;

sbit LCD_D5_Direction位于TRISC1_bit;

sbit LCD_D6_Direction at TRISC2_bit;

sbit LCD_D7_Direction at TRISC3_bit;

//结束LCD模块连接

sbit TestPin1 at RA0_bit;

sbit TestPin2 at RA1_bit;

sbit TestPin3 at RA2_bit;

sbit RA4_bit的详细信息;

sbit SelectButton在RA5_bit;

//定义消息

char message1 [] =“二极管测试仪”;

char message2 [] =“ BJT Tes ter”;

char message3 [] =“结果:”;

char message4 [] =“短”;

char message5 [] =“打开”;

char message6 [] =“良好”;

char message7 [] =“ BJT是”;

char * type =“ xxx”;

char * BE_Info =“ xxxxx”;

char * BC_Info =“ xxxxx”;

unsigned int select,test1,test2,update_select,detail_select;

unsigned int BE_Junc,BC_Junc,EB_Junc,CB_Junc;

void debounce_delay(void){

Delay_ms(200);

}

void main(){

ANSEL = 0b00000000;//所有I/O引脚都配置为数字

CMCON0 = 0x07;//散售比较器

PORTC = 0;

PORTA = 0;

TRISC = 0b00000000;//PORTC所有输出

TRISA = 0b00111000;//PORTA的所有输出,RA3除外(仅I/P)

Lcd_Init();//初始化LCD

Lcd_Cmd(_LCD_CLEAR);//清除显示

Lcd_Cmd(_LCD_CURSOR_OFF);//光标关闭

Lcd_Out(1,2,message1);//在第1行中写message1

select = 0;

test1 = 0;

test2 = 0;

update_select = 1;

detail_select = 0;

做{

if(!SelectButton){

debounce_delay() ;

update_select = 1;

开关(选择){

case 0:select = 1;

break;

case 1:select = 0;

break;

}//案例结束

}

if(select == 0){//二极管测试仪

if(update_select){

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,2,message1);

Lcd_Out(2,2,message3);

update_select = 0;

}

TRISA = 0b0 0110100;//RA0 O/P,RA2 I/P

TestPin1 = 1;

test1 = TestPin3;//读取RA2上的I/P

TestPin1 = 0;

TRISA = 0b00110001;//RA0 I/P,RA2 O/P

TestPin3 = 1;

test2 = TestPin1;

TestPin3 = 0;

if((test1 == 1)&&(test2 == 1)){

Lcd_Out(2,10,message4);

}

if((test1 == 1)&&(test2 == 0)){

Lcd_Out(2, 10,message6);

}

if((test1 == 0)&&(test2 == 1)) {

Lcd_Out(2,10,message6);

}

if((test1 == 0)&&(test2 == 0)){

Lcd_Out(2,10,message5);

}

}//结束if(select == 0)

if(select &&!detail_select){//晶体管测试仪

if(update_select){

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,2 ,message2);

update_select = 0;

}

//测试BE NPN

的BC和BC交界处TRISA = 0b00110101;//RA0,RA2 I/P,RA1 O/P

TestPin2 = 1;

BE_Junc = TestPin1;//读取RA0处的I/P

BC_Junc = TestPin3;//在RA2处读取I/P

TestPin2 = 0;

//测试PNP的EB和CB结点

TRISA = 0b00110110;//RA0 O/P,RA1/RA2 I/P

TestPin1 = 1;

EB_Junc = TestPin2;

TestPin1 = 0;

TRISA = 0b00110011;//RA0 O/P,RA1/RA2 I/P

TestPin3 = 1;

CB_Junc = TestPin2;

TestPin3 = 0;

if( BE_Junc && BC_Junc &&!EB_Junc &&!CB_Junc){

Lcd_Out(2,2,message3);

Lcd_Out( 2,10,message6);

type =“ NPN”;

BE_info =“ Good”;

BC_info =“好”;

}

else

if(!BE_Junc &&!BC_Junc && EB_Junc && CB_Junc){

Lcd_Out(2,2,message3);

Lcd_Out(2,10,message6);

type =“ PNP”;

BE_info =“良好”;

BC_info =“良好”;

}

其他{

Lcd_Out(2,2,message3);

Lcd_Out( 2,10,“ Bad”);

type =“ Bad”;

}

}

if(select &&!Detail){

debounce_delay();

开关(detail_select){

情况0:detail_select = 1;

break;

情况1:detail_select = 0;

break;

}//案例结束

update_select = 1;

}

if(detail_select && update_select){

//测试BE结是否打开

if(!BE_Junc &&!EB_Junc){

BE_info =“打开”;

}

//测试BC结是否打开

if(!BC_Junc &&!CB_Junc ){

BC_info =“打开“;

}

//测试BE Junction short

if(BE_Junc && EB_Junc){

BE_info =“ Short”;

}

//测试BC结短路

if(BC_Junc && CB_Junc){

BC_info =“ Short”;

}

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,1,“ Type:”);

Lcd_Out(1,7,type);

Lcd_Out(2,1,“ BE:”);

Lcd_Out(2,4,BE_info);

Lcd_Out(2,9,“ BC:”);

Lcd_Out(2,12,BC_info);

update_select = 0;

}////如果(detail_select)

}结束,则while(1);

}

下载源代码和十六进制文件

输出

下面是我在测试各种输入条件时为二极管和BJT测试仪拍摄的照片。

测试仪

测试仪

其余图片

测试仪

测试仪

测试仪

测试仪

测试仪

测试仪

测试仪

测试仪

测试仪

测试仪

测试仪责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分