簡介
如今,大多數(shù)數(shù)字萬用表都具有用于測試二極管(有時是晶體管)的內(nèi)置功能。該項目的目的是演示一種使用微控制器為二極管和雙極結(jié)傳輸器(BJT)構(gòu)建測試設(shè)備的簡單方法。該測試算法基于一個簡單的事實,即工作中的 PN結(jié)僅在一個方向上傳導(dǎo)電流。此項目中使用了PIC16F688微控制器,該開關(guān)可切換二極管和晶體管PN結(jié)之間的偏置電壓,并確定特定結(jié)是正常,開路還是短路。
理論
測試二極管的邏輯很簡單。二極管是PN結(jié),僅允許一個方向的電流傳導(dǎo)。因此,好的二極管將僅在一個方向上傳導(dǎo)電流。如果在兩個方向上都工作,則表示二極管短路,而在兩個方向上都工作時,則表示開路。該邏輯的電路實現(xiàn)如下所示。
通過意識到這一點,可以很容易地將此概念擴(kuò)展為測試晶體管。晶體管由兩個PN結(jié)組成:一個在基極和發(fā)射極之間(BE結(jié)),另一個在基極和集電極之間(BC結(jié))。如果兩個結(jié)僅在一個方向上傳導(dǎo),則晶體管正常,否則出現(xiàn)故障。我們還可以通過考慮電流傳導(dǎo)的方向來確定晶體管的類型(PNP或NPN)。需要一個微控制器的三個I/O引腳來實現(xiàn)晶體管的測試算法。
晶體管的測試順序如下。
將D2設(shè)置為高電平并讀取D1和D3。如果D1為高電平,則BE結(jié)導(dǎo)通,否則不導(dǎo)通。如果D3為高電平,則BC結(jié)導(dǎo)通,否則不導(dǎo)通。
將D1設(shè)置為高電平并讀取D2。如果D2為高電平,則EB結(jié)導(dǎo)通,否則為非。
將D3設(shè)置為高電平并讀取D2。如果D2為高電平,則CB結(jié)導(dǎo)通,否則不導(dǎo)通。
現(xiàn)在,如果僅BE和BC結(jié)導(dǎo)通,則該晶體管為NPN型且工作正常。而且,如果僅EB和CB結(jié)導(dǎo)通,則該晶體管仍然正常,但晶體管類型為PNP。其他所有情況(例如EB和BE均導(dǎo)通,或BC和CB均不導(dǎo)通等)表明晶體管不佳。
電路圖和說明
該項目的電路圖非常簡單。它具有兩個用于輸入的按鈕開關(guān),分別為選擇和詳細(xì)信息。按下“選擇”按鈕可以在二極管測試和晶體管測試之間進(jìn)行選擇,“詳細(xì)信息”按鈕僅在進(jìn)行晶體管測試時才可用,并顯示測試結(jié)果的詳細(xì)信息,例如晶體管類型和結(jié)狀態(tài)。測試晶體管的三個支路(E,B和C)通過1 K電阻接地,并且兩個PN結(jié)將通過PIC16F688微控制器的RA0,RA1和RA2端口引腳進(jìn)行測試。二極管的測試僅需要兩個引腳,并且將使用E和C引腳。這就是為什么它們在電路圖中具有備用標(biāo)簽D1和D2的原因。
電路在面包板上設(shè)置
軟件
此項目的固件是使用MikroC編譯器開發(fā)的。編程時,您必須非常小心三個測試引腳(RA0,RA1和RA2)的方向設(shè)置,因為它們在運(yùn)行測試算法時會經(jīng)常變化。在將任何測試引腳設(shè)置為高電平之前,必須確保將其他兩個引腳定義為輸入引腳,以免端口引腳之間出現(xiàn)任何電壓沖突或短路。
/*
項目:二極管和晶體管測試儀
內(nèi)部振蕩器@ 4MHz,啟用了MCLR,啟用PWRT,關(guān)閉WDT
版權(quán)@ 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;
//結(jié)束LCD模塊連接
sbit TestPin1 at RA0_bit;
sbit TestPin2 at RA1_bit;
sbit TestPin3 at RA2_bit;
sbit RA4_bit的詳細(xì)信息;
sbit SelectButton在RA5_bit;
//定義消息
char message1 [] =“二極管測試儀”;
char message2 [] =“ BJT Tes ter”;
char message3 [] =“結(jié)果:”;
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引腳都配置為數(shù)字
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);//光標(biāo)關(guān)閉
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;
開關(guān)(選擇){
case 0:select = 1;
break;
case 1:select = 0;
break;
}//案例結(jié)束
}
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);
}
}//結(jié)束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結(jié)點
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();
開關(guān)(detail_select){
情況0:detail_select = 1;
break;
情況1:detail_select = 0;
break;
}//案例結(jié)束
update_select = 1;
}
if(detail_select && update_select){
//測試BE結(jié)是否打開
if(!BE_Junc &&!EB_Junc){
BE_info =“打開”;
}
//測試BC結(jié)是否打開
if(!BC_Junc &&!CB_Junc ){
BC_info =“打開“;
}
//測試BE Junction short
if(BE_Junc && EB_Junc){
BE_info =“ Short”;
}
//測試BC結(jié)短路
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)
}結(jié)束,則while(1);
}
下載源代碼和十六進(jìn)制文件
輸出
下面是我在測試各種輸入條件時為二極管和BJT測試儀拍攝的照片。
其余圖片
責(zé)任編輯:wv
-
微控制器
+關(guān)注
關(guān)注
48文章
7646瀏覽量
151937 -
二極管
+關(guān)注
關(guān)注
147文章
9700瀏覽量
167325 -
測試儀
+關(guān)注
關(guān)注
6文章
3785瀏覽量
55056
發(fā)布評論請先 登錄
相關(guān)推薦
評論