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

简介
如今,大多数数字万用表都具有用于测试二极管(有时是晶体管)的内置功能。该项目的目的是演示一种使用微控制器为二极管和双极结传输器(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测试仪拍摄的照片。
其余图片


美国想借台积电扩大堵截华为,后者积极应对
手机蓝牙只能传文件?这5个用处很强大
众执芯NTN端到端传输系统可实现卫星通信半实物仿真
LED照明技术不断进步 健康照明将成为行业的下一个风口
聚合物电芯常见测试项目
基于微控制器的二极管和双极结晶体管测试仪的说明
KC-201 FM立体声收音模块产品说明
26亿红板5G高阶HDI和IC载板项目签约江西
21世纪机场安全物联网预测分析
矩形脉冲发生器
黑鲨4S怎么样:新增屏幕压感,拉满游戏竞技体验
5G和AI驾临,我们的世界将会如何?
什么是量子通信
泰利特与中国联通携手共同推进工业物联网的发展
扬尘污染自动监控系统实现实时显示、实时报警
什么是GPIO? STM32中关于GPIO口的介绍
Chrome将全面推出“节省内存”和“节省电量”模式
圆筒单相动圈式直线震荡电机设计
中高压变频器主电路拓扑结构的分析比较
工作频率72MHZ的海速芯32位MCU TM32F103K7​用于信号隔离采集器设计,​可P2P替换STM32F103CBT6