walter_wang 发表于 2010-5-7 22:15:18

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

最近好几个网站都在DIY晶体管测试仪。我前不久也用洞洞板做了一个,精度还可以
10K AE金属箔电阻
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_552248.jpg
10K AE金属箔电阻 (原文件名:nEO_IMG_100_6739.jpg)
误差0.01%
5K AE金属箔电阻
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_552245.JPG
5K AE金属箔电阻测试 (原文件名:100_6743.JPG)
误差0.24%
2.5KAE金属箔电阻
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_552246.jpg
2.5K AE金属箔电阻测试 (原文件名:nEO_IMG_100_6741.jpg)
误差1.4%
250RAE金属箔电阻
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_552247.jpg
250R AE金属箔电阻 (原文件名:nEO_IMG_100_6740.jpg)
误差0.4%
除了电容,其它类型元件的测试和电阻一样,但是我没有精度可靠的元件,加上晚上拍效果不好就不拍了。
另外安装的时候因为螺丝滑丝了,直接用万能胶粘上了./emotion/em039.gif./emotion/em039.gif就不放裸照了
这个晶体管测试仪也是根据一个德国人的开源项目做的,原始资料地址是 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 (测试时间更长,其中几次还误报为小电阻,呵呵充电电流太小了)

下面说说我的制作过程中的几个小经验
原电路图:
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_552250.png
电路图 (原文件名:Schaltplan_transistortester.png)
其原来的设计是使用9V电池,但是我不用考虑外出携带,不在乎功耗,所以那几个3级管构成的开机电路我就取消了,直接使用内置小变压器供电。整个设计使用元件极少,所以用洞洞板做也很方便。
不过我保留了检测供电电压的那两个电阻R11,R12用来校准M8内部ADC。根据实际测量值计算转换因子。
程序中查找“diodes.Voltage = (adcv*54/11);”将其中的54和11换成根据实际测量值得出的转换因子。例如我的是 diodes.Voltage = (adcv*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所以懒得改了
---------------------------------------------------------------------------------------

sadf123 发表于 2010-5-7 22:45:33

能不能测晶体管的特性曲线?

walter_wang 发表于 2010-5-7 23:02:19

回复【1楼】sadf123
能不能测晶体管的特性曲线?
-----------------------------------------------------------------------

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

wandy2010 发表于 2010-5-7 23:11:08

好像不能测达林顿管

baof 发表于 2010-7-26 01:56:19

make

yangtao0618 发表于 2010-11-17 21:00:43

diodes.Voltage = (adcv*54/11);”将其中的54和11换成根据实际测量值得出的转换因子......这个怎么理解????

hbcjs 发表于 2011-2-20 18:27:27

佩服,学习。

sunnywind 发表于 2011-3-2 22:50:30

你好,请教一下,我也仿做了一个但写程序进M8的时候提示EEprom verify error at:0h
请问这是什么问题呢?
接上后液晶屏显示乱码····
求教!!~~~~

guhenggao 发表于 2011-4-29 15:43:34

mark

hackerboygn 发表于 2011-6-2 01:23:00

记号

zxfzxmcxczxq 发表于 2011-7-28 16:46:55

mark

ddcchh 发表于 2011-12-13 21:40:53

做出了几个,有以下问题,如何解决?
1. 测量小电阻时不行,有的在1000欧时,才可靠!
2. M8 有时复位不好;

godlike438 发表于 2011-12-13 21:56:31

mark

xaftp 发表于 2012-2-11 13:01:35

我做的不显示字符,正在排查问题。

armandusb 发表于 2012-2-17 13:04:38

我测试了下这个开关机的电路,直接上电电路就是通的,需要更改R10的电阻

jyzhiyu 发表于 2012-2-17 18:16:08

mark

ayumi8 发表于 2012-5-12 16:07:48

我画了PCB 做出来能测试.........但是感觉 电容太不靠谱了   1000 测试出来 1600UF

pxm 发表于 2012-5-12 20:15:51

也打算做一个 学习先!{:smile:}

hellowangjun 发表于 2013-4-1 22:45:04

{:smile:}{:smile:}{:smile:}   太厉害了,我也要加油学习了。

冠亚 发表于 2013-6-12 11:38:36

楼主发个程序看看{:smile:}

lh5566 发表于 2013-10-17 13:28:27

学习一下

kuanglf 发表于 2013-10-20 03:21:40

谢谢分享记号备用

lf8013 发表于 2013-11-26 21:16:04

做一个玩玩,谢谢提供的资料,感谢分享

0123456789 发表于 2014-11-12 22:26:03

mark               

涵潇舒雅 发表于 2015-10-8 14:31:52

楼主,能否请教一下,该仪器的工作原理~

wiisir 发表于 2020-1-12 10:17:31

walter_wang 发表于 2010-5-7 23:02
回复【1楼】sadf123
能不能测晶体管的特性曲线?
----------------------------------------------------- ...

请教ATmega8A单片机用并口烧录器烧录程序时,有关熔丝位的设置LB1、LB2、BLB01、BLB02、BLB11、BLB12应该设置怎样的值才可以,我试了10种组合的都不行。对AVR单片机是小白
页: [1]
查看完整版本: 我的DIY M8晶体管测试仪的经验