簡介
如今,大多數數字萬用表都具有用于測試二極管(有時是晶體管)的內置功能。該項目的目的是演示一種使用微控制器為二極管和雙極結傳輸器(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
-
微控制器
+關注
關注
48文章
7933瀏覽量
154109 -
二極管
+關注
關注
148文章
10070瀏覽量
171037 -
測試儀
+關注
關注
6文章
3984瀏覽量
57284
發布評論請先 登錄
二極管與晶體管的比較分析
如何測試整流二極管性能
整流二極管與穩壓二極管的區別
如何測試肖特基二極管性能 肖特基二極管功率損耗分析
晶體管和二極管的區別是什么
硅二極管和鍺二極管的區別
晶體二極管和超快恢復二極管的區別
單結晶體管的引腳判斷方法
單結晶體管和三極管有什么區別
單結晶體管的主要應用場景
單結晶體管的工作原理和伏安特性

評論