Тестер диодов и биполярных транзисторов

Большинство современных тестеров (мультиметров) имеют встроенные функции тестирования диодов и иногда транзисторов. Но если ваш тестер не имеет этих функций, то вы можете собрать тестер диодов и транзисторов своими руками. Ниже представлен проект тестера на микроконтроллере PIC16F688.

Логика тестирования диодов очень проста. Диод — это PN-переход, который как известно, проводит ток лишь в одном направлении. Следовательно, рабочий диод будет проводить ток в одном направлении. Если диод проводит ток в обеих направлениях, то значит диод нерабочий — пробитый. Если диод ни в одном из направлений не проводит, то диод также не рабочий. Схемная реализация данной логики показана ниже.

Данную логику легко можно адаптировать для теста биполярных транзисторов, который содержит два PN-перехода: один между базой и эмиттером (БЭ-переход) и второй между базой и коллектором (БК-переход). Если оба перехода проводят ток лишь в одном направлении, транзистор — рабочий, иначе — не рабочий. Также мы можем идентифицировать тип транзистора PNP или NPN, определив направление проводимости тока. Для тестирования транзисторов, в микроконтроллере используется 3 входа/выхода

Последовательность для тестирования транзистора:
1. Включить выход (установить в единицу) D2 и считать D1 и D3. Если на D1 логическая единица, переход БЭ проводит ток, иначе — нет. Если D3 в 1, то БК проводит ток, иначе — нет.
2. Установить выход D1 в 1 и считать D2. Если D2 в 1, значит ЭБ проводят ток, иначе — нет.
3. Установить выход D3 в 1 и считать D2. Если D2 в 1, значит КБ проводят ток, иначе — нет.

Далее, если БЭ и БК проводят ток, то транзистор NPN-типа и рабочий. Если же, ЭБ и КБ проводят ток, то транзистор PNP типа и также рабочий. Во всех остальных случаях (к примеру ЭБ и БЭ проводят ток или оба перехода БК и КБ не проводят и т.п.) транзистор находится в не рабочем состоянии.

Принципиальаня схема тестера диодов и транзисторов и описание

Схема тестера очень проста. В приборе предусмотрено 2 кнопки управления: Select (выбор) и Detail (подробнее). По нажатию кнопки Select происходит выбор типа теста: тест диода или транзистора. Кнопка Detail работает лишь при режиме теста транзистора, на экране LCD показывается типа транзистора (NPN или PNP) и статусы проводимости переходов транзистора.
Три ножки тестируемого транзистора (эмиттер, коллектор и база) подсоединяются к «земле» через резистор 1 кОм. Для тестирования используются выводы RA0, RA1, и RA2 микроконтроллера PIC16F688. Для тестирования диода используется лишь два вывода: Э и К (на схеме обозначены D1 и D2).

Программа

Программное обеспечения для данного проекта написано с использованием компилятора MikroC. Во время тестирования и программирования будьте внимательны и следите за установками входов/выходов МК (RA0, RA1 и RA2) т.к. они часто меняются во время работы. Перед тем, как установить какой-либо выход в 1, убедитесь, что два других входа/выхода МК определены как входа. В противном случае возможны конфликты входов/выходов МК.

/*
Project: Diode and Transistor Tester
Internal Oscillator @ 4MHz, MCLR Enabled, PWRT Enabled, WDT OFF
Copyright @ Rajendra Bhatt
November 9, 2010
*/
// LCD module connections
sbit LCD_RS at RC4_bit;
sbit LCD_EN at RC5_bit;
sbit LCD_D4 at RC0_bit;
sbit LCD_D5 at RC1_bit;
sbit LCD_D6 at RC2_bit;
sbit LCD_D7 at RC3_bit;
sbit LCD_RS_Direction at TRISC4_bit;
sbit LCD_EN_Direction at TRISC5_bit;
sbit LCD_D4_Direction at TRISC0_bit;
sbit LCD_D5_Direction at TRISC1_bit;
sbit LCD_D6_Direction at TRISC2_bit;
sbit LCD_D7_Direction at TRISC3_bit;
// End LCD module connections
sbit TestPin1 at RA0_bit;
sbit TestPin2 at RA1_bit;
sbit TestPin3 at RA2_bit;
sbit Detail at RA4_bit;
sbit SelectButton at RA5_bit;
// Define Messages
char message1[] = «Diode Tester»;
char message2[] = «BJT Tester»;
char message3[] = «Result:»;
char message4[] = «Short»;
char message5[] = «Open «;
char message6[] = «Good «;
char message7[] = «BJT is»;
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; //All I/O pins are configured as digital
CMCON0 = 0?07 ; // Disbale comparators
PORTC = 0;
PORTA = 0;
TRISC = 0b00000000; // PORTC All Outputs
TRISA = 0b00111000; // PORTA All Outputs, Except RA3 (I/P only)
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // CLEAR display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,2,message1); // Write message1 in 1st row
select = 0;
test1 = 0;
test2 = 0;
update_select = 1;
detail_select = 0;
do {
if(!SelectButton){
debounce_delay();
update_select = 1;
switch (select) {
case 0 : select=1;
break;
case 1 : select=0;
break;
} //case end
}

if(select == 0){ // Diode Tester
if(update_select){
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,2,message1);
Lcd_Out(2,2,message3);
update_select=0;
}
TRISA = 0b00110100; // RA0 O/P, RA2 I/P
TestPin1 = 1;
test1 = TestPin3 ; // Read I/P at RA2
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);
}

} // End if(select == 0)

if(select && !detail_select){ // Transistor Tester
if(update_select){
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,2,message2);
update_select = 0;
}
// Test for BE and BC Junctions of NPN
TRISA = 0b00110101; // RA0, RA2 I/P, RA1 O/P
TestPin2 = 1;
BE_Junc = TestPin1 ; // Read I/P at RA0
BC_Junc = TestPin3; // Read I/P at RA2
TestPin2 = 0;

// Test for EB and CB Junctions of PNP
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 = «Good «;
}
else
if(!BE_Junc && !BC_Junc && EB_Junc && CB_Junc){
Lcd_Out(2,2,message3);
Lcd_Out(2,10,message6);
type = «PNP»;
BE_info = «Good «;
BC_info = «Good «;
}
else {
Lcd_Out(2,2,message3);
Lcd_Out(2,10,»Bad «);
type = «Bad»;
}
}
if(select && !Detail){
debounce_delay();
switch (detail_select) {
case 0 : detail_select=1;
break;
case 1 : detail_select=0;

break;

} //case end
update_select = 1;
}

if(detail_select && update_select){

// Test for BE Junction open
if(!BE_Junc && !EB_Junc){
BE_info = «Open «;
}
// Test for BC Junction open
if(!BC_Junc && !CB_Junc){
BC_info = «Open «;
}
// Test for BE Junction short
if(BE_Junc && EB_Junc){
BE_info = «Short»;
}

// Test for BC Junction short
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;
} // End if (detail_select)

} while(1);
}

Оригинал статьи

Добавить комментарий

Ваш адрес email не будет опубликован.