搜索
bottom↓
回复: 25

我的DIY M8晶体管测试仪的经验

[复制链接]

出0入0汤圆

发表于 2010-5-7 22:15:18 | 显示全部楼层 |阅读模式
最近好几个网站都在DIY晶体管测试仪。我前不久也用洞洞板做了一个,精度还可以
10K AE金属箔电阻

10K AE金属箔电阻 (原文件名:nEO_IMG_100_6739.jpg)
误差0.01%
5K AE金属箔电阻

5K AE金属箔电阻测试 (原文件名:100_6743.JPG)
误差0.24%
2.5KAE金属箔电阻

2.5K AE金属箔电阻测试 (原文件名:nEO_IMG_100_6741.jpg)
误差1.4%
250RAE金属箔电阻

250R AE金属箔电阻 (原文件名:nEO_IMG_100_6740.jpg)
误差0.4%
除了电容,其它类型元件的测试和电阻一样,但是我没有精度可靠的元件,加上晚上拍效果不好就不拍了。
另外安装的时候因为螺丝滑丝了,直接用万能胶粘上了就不放裸照了
这个晶体管测试仪也是根据一个德国人的开源项目做的,原始资料地址是 http://www.mikrocontroller.net/articles/AVR-Transistortester
这个网页有原理说明,原理图和源代码。
下面是我的其他元件的测试结果
红色发光LED: Diode: A=2;K=1
              Uf=1967mV
绿色发光LED: Diode: A=2;K=1
              Uf=2926mV
整流桥1-交流;2-交流;3-负电压端:Double Diode CA
                                  A=3;K1=2;K2=1
SR360:Diode: A=2;K=1
      Uf=209mV
8050: NPN 1=E;2=B;3=C
      hFE=22 Uf=754mV
TIP35C: NPN 1=B;2=C;3=E
        hFE=46 Uf=603mV
BC557: PNP 1=C;2=B;3=E
       hFE=43 Uf=793mV
2N7000: N-E-MOS C=0.12n
         GDS=231 Vt=1550m(V超出显示不出来了)

电容没有电容表,所以无法确定测量精度,不过经过多个测试,感觉还可以
104CBB: 100.23nF
105CBB: 1.00uF
104绿色WIMA:101.45nF
0.47uF红色WIMA:507.15nF
1uF红色WIMA:1.08uF
225CBB:2.20uF
47uF无极性电解电容:48.87uF
22uF电解:21.53uF
1000uF电解:1263.67uF (测试时间需10秒左右)
6800uF电解:7099.87uF (测试时间需30秒左右)
10000uF电解:9225.12uF (测试时间更长,其中几次还误报为小电阻,呵呵充电电流太小了)

下面说说我的制作过程中的几个小经验
原电路图:

电路图 (原文件名:Schaltplan_transistortester.png)
其原来的设计是使用9V电池,但是我不用考虑外出携带,不在乎功耗,所以那几个3级管构成的开机电路我就取消了,直接使用内置小变压器供电。整个设计使用元件极少,所以用洞洞板做也很方便。
不过我保留了检测供电电压的那两个电阻R11,R12用来校准M8内部ADC。根据实际测量值计算转换因子。
程序中查找“diodes[NumOfDiodes].Voltage = (adcv[1]*54/11);”将其中的54和11换成根据实际测量值得出的转换因子。例如我的是 diodes[NumOfDiodes].Voltage = (adcv[1]*1115UL/229UL);

测试使用AVCC作为基准电压,大家在制作时可以使用LM317供电,加上可调电阻调整供电电压为4.096V这样AD转换线性度较好。我恰好手上没有,用的7805。

采样电阻R1~R7对结果影响很大,我花4块钱买了1%精度的金属膜电阻各100个,从中挑选出3对阻值最接近的。没有1%的普通5%的也行,只要每种3个电阻的阻值尽量接近就行不用非要恰好是680和470K,可以通过程序中的
#define R_L_VAL 680
#define R_H_VAL 470000UL
这两个地方更改。最重要是的每种3个阻值要尽量一致,不然引脚和测试线的连接不同测试结果也会不同。
---------------------------------------------------------------------------

ReadADC我稍微更改了一下,不过其实对结果和精度影响应该不大或者说几乎没有。
unsigned int ReadADC(uint8_t mux) {
        //ADC通道初始化
        ADMUX = mux | (1<<REFS0); //采用内部基准,参考电压REFS0始终为1
                                  //采用AVCC或内部基准由参数mux引入

        //第一次测量值抛弃
        ADCSRA |= (1 << ADSC);
        while((ADCSRA & (1<<ADSC)) != 0);

        //对ADC采样22次去除最大值和最小值后返回20次有效采样的平均值
        unsigned int adcx = 0;
        unsigned int adcx_max = 0;
        unsigned int adcx_min = 0;
        unsigned int adcx_t = 0;
       
        for(unsigned char ti = 0; ti< 22; ti++)
                {
                        ADCSRA |= (1 << ADSC);
                        while((ADCSRA & (1<<ADSC)) != 0);
                        adcx_t = ADCW;
                        if( ti == 0)
                                {
                                        adcx_max = adcx_t;
                                        adcx_min = adcx_t;
                                }
                        if(adcx_t > adcx_max)
                                {
                                        adcx_max = adcx_t;
                                }
                        if(adcx_t < adcx_min)
                                {
                                        adcx_min = adcx_t;
                                }
                        adcx = adcx + adcx_t;
                }
        adcx = (adcx - adcx_max - adcx_min) / 20;
        return adcx;
}
---------------------------------------------------------------------------------------

源程序的显示是德文的,我改成了英文,注意我加了几个我用到的字符串
unsigned char TestRunning[] EEMEM = "Testing...";
unsigned char Bat[] EEMEM = "Battery ";
unsigned char BatWeak[] EEMEM = "Weak";
unsigned char BatEmpty[] EEMEM = "Empty!";
unsigned char TestFailed1[] EEMEM = "No Component or ";
unsigned char TestFailed2[] EEMEM = "Damaged         ";
unsigned char Bauteil[] EEMEM = "Component";
unsigned char Unknown[] EEMEM = " Unknown";
unsigned char Diode[] EEMEM = "Diode: ";
unsigned char DualDiode[] EEMEM = "Double Diode ";
unsigned char TwoDiodes[] EEMEM = "2 Diodes";
unsigned char Antiparallel[] EEMEM = "Antiparallel";
unsigned char InSeries[] EEMEM = "in Serie A=";
unsigned char mosfet[] EEMEM = "-MOS";
unsigned char emode[] EEMEM = "-E";
unsigned char dmode[] EEMEM = "-D";
unsigned char jfet[] EEMEM = "-JFET";
unsigned char Thyristor[] EEMEM = "Thyristor";
unsigned char Triac[] EEMEM = "Triac";
unsigned char A1[] EEMEM = ";A1=";
unsigned char A2[] EEMEM = ";A2=";
unsigned char K1[] EEMEM = ";K1=";
unsigned char K2[] EEMEM = ";K2=";
unsigned char hfestr[] EEMEM ="hFE=";
unsigned char NPN[] EEMEM = "NPN";
unsigned char PNP[] EEMEM = "PNP";
unsigned char t1str[] EEMEM = " 1=";
unsigned char t2str[] EEMEM = ";2=";
unsigned char t3str[] EEMEM = ";3=";
unsigned char gds[] EEMEM = "GDS=";
unsigned char Uf[] EEMEM = "Uf=";
unsigned char vt[] EEMEM = "Vt=";
unsigned char mV[] EEMEM = "mV";
unsigned char Anode[] EEMEM = "A=";
unsigned char Gate[] EEMEM = "G=";
unsigned char TestTimedOut[] EEMEM = "Timeout!";
unsigned char DiodeIcon[] EEMEM = {4,31,31,14,14,4,31,4,0};        //Dioden-Icon
unsigned char OrBroken[] EEMEM = "or Damaged ";
unsigned char Resistor[] EEMEM = "Resistance: ";
unsigned char NullDot[] EEMEM = "0,";
unsigned char GateCap[] EEMEM = " C=";
unsigned char Capacitor[] EEMEM = "Capacitor: ";
---------------------------------------------------------------------------------------------

源程序对3级管的显示是 B=?;C=?;E=?,我感觉不习惯改成了按测试引脚顺序显示
1=?;2=?;3=?
个人习惯而已,改不改无所谓
源程序是:
        lcd_eep_string(bstr);        //B=
        lcd_data(b + 49);
        lcd_eep_string(cstr);        //;C=
        lcd_data(c + 49);
        lcd_eep_string(estr);        //;E=
        lcd_data(e + 49);
我替换成:
        lcd_eep_string(t1str);
        if(b==0)
        {
            lcd_data('B');
        }
        if(c==0)
        {
            lcd_data('C');
        }
        if(e==0)
        {
            lcd_data('E');
        }
        
        lcd_eep_string(t2str);
        if(b==1)
        {
            lcd_data('B');
        }
        if(c==1)
        {
            lcd_data('C');
        }
        if(e==1)
        {
            lcd_data('E');
        }
        
        lcd_eep_string(t3str);
        if(b==2)
        {
            lcd_data('B');
        }
        if(c==2)
        {
            lcd_data('C');
        }
        if(e==2)
        {
            lcd_data('E');
        }
MOS管的显示原设计也是按固定顺序而不是引脚顺序,但是我很少用MOS所以懒得改了
---------------------------------------------------------------------------------------

出0入0汤圆

发表于 2010-5-7 22:45:33 | 显示全部楼层
能不能测晶体管的特性曲线?

出0入0汤圆

 楼主| 发表于 2010-5-7 23:02:19 | 显示全部楼层
回复【1楼】sadf123
能不能测晶体管的特性曲线?
-----------------------------------------------------------------------

不能这个只是利用M8内部AD精度有限,没有使用电流源,测试电压也只是5V。只是简单判断三极管的类型和引脚

出0入0汤圆

发表于 2010-5-7 23:11:08 | 显示全部楼层
好像不能测达林顿管

出0入0汤圆

发表于 2010-7-26 01:56:19 | 显示全部楼层
make

出0入0汤圆

发表于 2010-11-17 21:00:43 | 显示全部楼层
diodes[NumOfDiodes].Voltage = (adcv[1]*54/11);”将其中的54和11换成根据实际测量值得出的转换因子......这个怎么理解????

出0入0汤圆

发表于 2011-2-20 18:27:27 | 显示全部楼层
佩服,学习。

出0入0汤圆

发表于 2011-3-2 22:50:30 | 显示全部楼层
你好,请教一下,我也仿做了一个但写程序进M8的时候提示EEprom verify error at:0h
请问这是什么问题呢?
接上后液晶屏显示乱码····
求教!!~~~~

出0入0汤圆

发表于 2011-4-29 15:43:34 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-2 01:23:00 | 显示全部楼层
记号

出0入0汤圆

发表于 2011-7-28 16:46:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-13 21:40:53 | 显示全部楼层
做出了几个,有以下问题,如何解决?
1. 测量小电阻时不行,有的在1000欧时,才可靠!
2. M8 有时复位不好;

出0入0汤圆

发表于 2011-12-13 21:56:31 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-11 13:01:35 | 显示全部楼层
我做的不显示字符,正在排查问题。

出0入0汤圆

发表于 2012-2-17 13:04:38 | 显示全部楼层
我测试了下这个开关机的电路,直接上电电路就是通的,需要更改R10的电阻

出0入0汤圆

发表于 2012-2-17 18:16:08 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-5-12 16:07:48 | 显示全部楼层
我画了PCB 做出来  能测试.........但是  感觉 电容太不靠谱了   1000 测试出来 1600UF

出0入0汤圆

发表于 2012-5-12 20:15:51 | 显示全部楼层
也打算做一个 学习先!

出0入0汤圆

发表于 2013-4-1 22:45:04 | 显示全部楼层
   太厉害了,我也要加油学习了。

出0入0汤圆

发表于 2013-6-12 11:38:36 | 显示全部楼层
楼主发个程序看看

出0入0汤圆

发表于 2013-10-17 13:28:27 | 显示全部楼层
学习一下

出0入12汤圆

发表于 2013-10-20 03:21:40 | 显示全部楼层
谢谢分享记号备用

出0入0汤圆

发表于 2013-11-26 21:16:04 | 显示全部楼层
做一个玩玩,谢谢提供的资料,感谢分享

出0入0汤圆

发表于 2014-11-12 22:26:03 | 显示全部楼层
mark               

出5入10汤圆

发表于 2015-10-8 14:31:52 | 显示全部楼层
楼主,能否请教一下,该仪器的工作原理~

出0入0汤圆

发表于 2020-1-12 10:17:31 | 显示全部楼层
walter_wang 发表于 2010-5-7 23:02
回复【1楼】sadf123
能不能测晶体管的特性曲线?
----------------------------------------------------- ...

请教ATmega8A单片机用并口烧录器烧录程序时,有关熔丝位的设置LB1、LB2、BLB01、BLB02、BLB11、BLB12应该设置怎样的值才可以,我试了10种组合的都不行。对AVR单片机是小白
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 21:31

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表