找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8595|回复: 20
打印 上一主题 下一主题
收起左侧

用M8制作电感、电容、电解电容测量仪表

  [复制链接]
跳转到指定楼层
楼主
ID:85764 发表于 2015-7-18 14:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个电路不同国家和地区很多人制作过,测量精度高,测量范围大,有用不同语言写的程序,我作了一个BASCOM-AVR版本的,并增加了对电解电容器测量。
电感测量范围:0.1μH~2H
电容测量范围:1pF~2.5μF
电解电容测量范围:0.1μF~30000μF
一、电容、电感测量原理:
电路是一个由LM393(U3A)组成的LC振荡器。由单片机测量LC震荡回路的频率F1,然后控制继电器K2将标准电容C2与C1并联,测出振荡器频率F2,再用下列式子计算出电容C1电感L1的值。


这里电容器C2的容量的精确程度,基本上决定了整个测量过程的精度。应该选用稳定性好精度高的电容器,这个制作选用了1800pF的云母电容器。
上述过程可称作为一个校准过程,由M8控制每次开机时自动完成。开机后延时1500ms,测量由U1A、L1、C1组成振荡器频率F1;Portd.3 = 0,K2吸合,C2接入延时1500ms,测量振荡器频率F2,Portd.3 = 1,K2断开。M8计算C1、L1完成后按S1进入电容Cx的测量状态。
电容Cx、电感Lx的值,分别用下列式子计算:


二、电解电容测量原理:
电解电容的测量是基于对RC电路的时间常数的计算,由脉冲电路原理可知,电容的充电速度与R和C的大小有关,R与C的乘积越大,过渡时间就越长。这个RC的乘积就叫做RC电路的时间常数τ,即τ=R?C。若R的单位用欧姆,C的单位用法拉,则τ的单位为秒。


图示曲线可以得到充电过程的一般规律:Uc是按指数规律上升的,Uc开始变化较快,以后逐渐减慢,并缓慢地趋近其最终值,当t=τ时,Uc=0.632E;本测量仪就是利用单片机测量Uc=0到0.632E这段时间,用下列式子计算计算被测电容值:


电路由比较器U3B,放电晶体管Q等组成。设定比较器正输入端为Uc,(Uc=0.632E=0.632?5=3.16V,调节RP1获得),反向输入端接被测电容CEx,当D端为高电平时,Q导通电路处于放电状态,这时CEx被放电,比较器U3B输出高电平。当D为低电平时Q截止电容CEx通过R9(R10)充电,CEx两端电压逐步升高,当CEx两端电压>Uc时,比较器U3B输出低电平,产生INT0中断(INT0中断设置为下降沿触发),中断服务程序读取定时器值,并计算、显示CEx的值。然后置位PD6为高电平,Q导通,CEx放电,延时100mS是为了保证CEx充分放电,中断返回开始下一个测量周期。为了提高测量精度电解电容测量分两档,由继电器K2切换,R9接入时测量0.1μF~500μF电容,R10接入时测量500μF~20000μF电容。R9(R10)的精度和电压Uc的精度基本上决定了测量结果精度。
这个设计原本加入了一个电解电容漏电流测试功能,由于测量时间太长而放弃,图中的R13、R9(R10)与adc0等组成漏电流测量电路。
三、使用方法:
按下S2接通电源,进入校准状态(此时测量端子不能接入器件):


校准完成后:


按动S1进入电容测量状态:


按动S1进入电感测量状态:


按动S1进入电解电容(<500uF)测量状态:


按动S1进入电解电容(>500uF)测量状态:


再按S1返回到电容测量状态。

这是安装完成的样子:






电路板被设计成适合热转印:


加了一个铝合金底座:


这是原理图:


这是热转印图和装配图: zp.rar (526.81 KB, 下载次数: 116)

这是源程序:
'****************************************************
'*               电感电容电解电容测量仪             *
'*  电容:1P-2.5uF                                   *
'*  电感:1uH-2.0H                                   *
'*  电解电容:0.1uF-20000uF                          *
'*                 吕军省   天津大港                *
'****************************************************
$regfile = "m8def.dat"
$crystal = 8000000

Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 2

Config Timer1 = Counter , Edge = Falling       '配置T/C1为计数
Config Timer2 = Timer , Prescale = 64       '配置T/C2定时

Config Int0 = Falling
Config Timer0 = Timer , Prescale = 8
On Ovf0 Tim0_isr
On Int0 T1_isr

On Ovf2 Tim2_isr
Enable Ovf2
On Ovf1 Tim1_isr
Enable Ovf1
Enable Interrupts
Tcnt2 = &H83
Start Timer2
Counter1 = 0
Start Counter1

Dim F1 As Long
Dim F2 As Long

Dim C1 As Single
Dim Ca1 As Single
Dim Ca2 As Single
Dim Cx As Single
Dim L1 As Single
Dim Lx As Single
Dim F11 As Single

Dim V1 As String * 11
Dim V2 As String * 11

Dim Vf As String * 6
Dim Vs As String * 8
Dim Z1 As String * 2

Dim J As Bit
Dim I As Byte
Dim K As Bit
Dim M As Bit
Dim Vl As Byte
Dim Tc As Byte
Dim Tc1 As Long
Dim Te As Long

Ddrd.7 = 0       '键初始
Portd.7 = 1
Ddrd.4 = 1       '继电器初始化
Ddrd.3 = 1
Portd.4 = 1
Portd.3 = 1

Ddrd.6 = 1
Portd.6 = 1
J = 1
K = 1
M = 1
I = 1
Tc1 = 0
Cls
Cursor Off

'/////主程序/////
Do

   '/////按键处理/////

   If Pind.7 = 0 Then       'S1
      Waitms 40
         If Pind.7 = 0 Then
            Incr I
            Bitwait Pind.7 , Set
         End If
   End If

   '/////电感L1,电容C1计算/////

   If I = 1 Then
      If J = 1 Then

         Lcd "  L_C_CE meter"
         Lowerline
         Lcd "    20081217"

         Waitms 1500       '等待F1计数
         Portd.3 = 0       '接入标准电容C2
         Waitms 1500       '等待f2计数

         Ca1 = F1 * F1
         Ca2 = F2 * F2
         C1 = Ca1 - Ca2
         C1 = Ca2 / C1
         C1 = C1 * 1800       '1800是标准电容C2 ;单位pF

         L1 = 3.1416 * 3.1416
         L1 = L1 * 4
         L1 = L1 * Ca1
         L1 = L1 * C1
         L1 = 1 / L1
         L1 = L1 * 1000000000000000000       '单位uH

         Portd.3 = 1       '断开标准电容C2
      End If

      J = 0

      Vf = Str(f1)       '显示f1
      Vf = Format(vf , "      ")
      Locate 1 , 7
      Lcd "F=" ; Vf ; "Hz"
      Locate 1 , 1
      Lcd "SetOK "

      V1 = Fusing(c1 , "#.#")
      V2 = Fusing(l1 , "#.#")
      Locate 2 , 1
      Lcd V1 ; "pF " ; V2 ; "uH"

   End If

   '/////电容Cx计算/////

   If I = 2 Then

      Vf = Str(f1)
      Vf = Format(vf , "      ")
      Locate 1 , 7
      Lcd "F=" ; Vf ; "Hz"

      F11 = F1 * F1
      Cx = Ca1 / F11
      Cx = Cx - 1
      Cx = Cx * C1

      V1 = Fusing(cx , "#.#")

      Vl = Len(v1)
      Z1 = "pF"

      If Vl = 6 Then
         V1 = Mid(v1 , 1 , 4)
         Z1 = "pF"
      End If

      If Vl = 7 Then
         V1 = Mid(v1 , 1 , 4)
         V1 = Format(v1 , "00.00")
         Z1 = "nF"
      End If

      If Vl = 8 Then
         V1 = Mid(v1 , 1 , 4)
         V1 = Format(v1 , "000.0")
         Z1 = "nF"
      End If

      If Vl = 9 Then
         V1 = Mid(v1 , 1 , 4)
         V1 = Format(v1 , "0.000")
         Z1 = "uF"
      End If

      Vs = Space(8)
      Locate 2 , 1
      Lcd "   Cx=" ; V1 ; Z1 ; Vs

      Locate 1 , 1
      Lcd "TestC "

   End If

   '/////电感Lx计算/////

   If I = 3 Then

      Vf = Str(f1)
      Vf = Format(vf , "      ")
      If F1 < 50 Then
         Vf = "     0"
      End If
      Locate 1 , 7
      Lcd "F=" ; Vf ; "Hz"

      Portd.4 = 0       '输入端切换到测电感

      If F1 > 1000 Then
         F11 = F1 * F1
         Lx = Ca1 / F11
         Lx = Lx - 1
         Lx = Lx * L1
      Else
         Lx = 0
      End If
      V1 = Fusing(lx , "#.##")
      Vl = Len(v1)
      Z1 = "uH"

      If Vl = 6 Then
         V1 = Mid(v1 , 1 , 5)
         Z1 = "uH"
      End If

      If Vl = 7 Then
         V1 = Mid(v1 , 1 , 4)
         V1 = Format(v1 , "0.000")
         Z1 = "mH"
      End If

      If Vl = 8 Then
         V1 = Mid(v1 , 1 , 4)
         V1 = Format(v1 , "00.00")
         Z1 = "mH"
      End If

      If Vl = 9 Then
         V1 = Mid(v1 , 1 , 4)
         V1 = Format(v1 , "000.0")
         Z1 = "mH"
      End If

      If Vl = 10 Then
         V1 = Mid(v1 , 1 , 4)
         V1 = Format(v1 , "0.000")
         Z1 = "H "
      End If

      Vs = Space(8)
      Locate 2 , 1
      Lcd "   Lx=" ; V1 ; Z1 ; Vs

      Locate 1 , 1
      Lcd "TestL "

   End If

   '/////电解电容器测量(<500uF) /////

   If I = 4 Then
      Portd.4 = 1
      If K = 1 Then

         Disable Ovf1
         Disable Ovf2

         Enable Int0
         Enable Ovf0

         Locate 1 , 1
         Lcd "TestCE  [<500uF]"
         Locate 2 , 1
         Lcd "   CEx=       "

      End If
      K = 0

   Portd.6 = 0       '开始充电
   Start Timer0       '开始计时
   End If

   '/////电解电容测量(2) /////

   If I = 5 Then

      If M = 1 Then
         Portd.3 = 0
         Locate 1 , 1
         Lcd "TestCE  [>500uF]"
         Locate 2 , 1
         Lcd "   CEx=       "
      End If
      M = 0
      Portd.6 = 0       '开始充电
      Start Timer0       '开始计时
   End If


'/////返回到电容测量//////

   If I = 6 Then

      I = 2       '返回到电容测量

      Enable Ovf1
      Enable Ovf2

      Disable Int0
      Disable Ovf0

      Portd.3 = 1
      K = 1
      M = 1
   End If

Loop
End

'/////计数中断/////

Tim1_isr:

   Incr Tc1       '这么作可使计数分辩率最高到1Hz

Return

'/////定时中断/////

Tim2_isr:

   Tcnt2 = &H83       '定时器T2初值
   Incr Tc
   If Tc = 250 Then       '定时250mS
      Stop Counter1
      Tc1 = Tc1 * 65535
      If Portd.3 = 1 Then
         F1 = Counter1
         F1 = F1 + Tc1
         F1 = F1 * 4
      End If
      If Portd.3 = 0 Then
         F2 = Counter1
         F2 = F2 + Tc1
         F2 = F2 * 4
      End If
      Counter1 = 0
      Start Counter1
      Tc = 0
      Tc1 = 0
   End If

Return

'/////定时中断,测电解电容/////

Tim0_isr:

   Incr Te       '定时器0中断次数

Return

'/////外部中断,测电解电容/////

T1_isr:

   Stop Timer0

   Te = Te * 256
   Te = Te + Tcnt0
   Te = Te / 2       '时间/充电电阻=被测电容

   V1 = Str(te)
   Vl = Len(v1)

   If Portd.3 = 1 Then       '充电电阻R9接入,<500uF

       If Vl = 2 Then
          V1 = "NO"
       End If

       If Vl = 3 Then
          V1 = Mid(v1 , 1 , 3)
          V1 = Format(v1 , "0.000")
       End If

       If Vl = 4 Then
          V1 = Mid(v1 , 1 , 3)
          V1 = Format(v1 , "0.00")
       End If

       If Vl = 5 Then
          V1 = Mid(v1 , 1 , 3)
          V1 = Format(v1 , "0.0")
       End If

       If Vl = 6 Then
          V1 = Mid(v1 , 1 , 3)
       End If

       If Vl = 7 Then
          V1 = "  OL  "
       End If

   End If

   If Portd.3 = 0 Then

      If Vl = 2 Then
         V1 = Mid(v1 , 1 , 2)
         V1 = Format(v1 , "0.00")
      End If

      If Vl = 3 Then
         V1 = Mid(v1 , 1 , 3)
         V1 = Format(v1 , "0.00")
      End If

      If Vl = 4 Then
         V1 = Mid(v1 , 1 , 2)
      End If

      If Vl = 5 Then
         V1 = Mid(v1 , 1 , 3)
      End If

      If Vl = 6 Then
         V1 = Mid(v1 , 1 , 4)
      End If

      If Vl = 7 Then
         V1 = Mid(v1 , 1 , 5)
      End If
   End If

   Vs = Space(7)

   If Te > 1 And Te < 10 Then

      Locate 2 , 1
      Lcd "   CEx=" ; "0" ; "uF" ; Vs

   End If

   If Te > 10 Then

      Locate 2 , 1
      Lcd "   CEx=" ; V1 ; "uF" ; Vs

   End If

   Portd.6 = 1       '开始放电

   If Portd.3 = 1 And Te > 10 Then
      Waitms 100
   End If
   If Portd.3 = 0 And Te > 10 Then
      Waitms 500
   End If

   Tcnt0 = 0       '定时计数器清零
   Te = 0       '定时中断次数清零

Return

433770.rar

6.52 KB, 下载次数: 86, 下载积分: 黑币 -5

评分

参与人数 2黑币 +20 收起 理由
qjzyx + 5 很给力!
GUOXUAN + 15 感谢老师发贴共享,老师辛苦了

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏15 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:87991 发表于 2015-8-14 08:12 | 只看该作者
用51就好了
回复

使用道具 举报

板凳
ID:88643 发表于 2015-8-21 09:21 | 只看该作者
这东西好啊!
回复

使用道具 举报

地板
ID:74370 发表于 2015-9-1 21:18 | 只看该作者
看着爽!可惜是m8,。
回复

使用道具 举报

5#
ID:92556 发表于 2015-10-15 22:11 | 只看该作者
diy必需品啊
回复

使用道具 举报

6#
ID:92580 发表于 2015-10-15 22:29 | 只看该作者
好东西
回复

使用道具 举报

7#
ID:92580 发表于 2015-10-15 22:36 | 只看该作者
有pcb源文件吗
回复

使用道具 举报

8#
ID:92580 发表于 2015-10-15 22:38 | 只看该作者
有pcb源文件吗
回复

使用道具 举报

9#
ID:101285 发表于 2015-12-30 22:20 | 只看该作者
想整个来用,学习一下
回复

使用道具 举报

10#
ID:119000 发表于 2016-5-7 08:43 | 只看该作者
有使用器件列表吗
回复

使用道具 举报

11#
ID:18822 发表于 2016-11-24 00:20 | 只看该作者
diy必需品啊
回复

使用道具 举报

12#
ID:71549 发表于 2017-12-8 06:55 | 只看该作者
好东西.学习一下............
回复

使用道具 举报

13#
ID:249545 发表于 2017-12-8 21:20 | 只看该作者
记得在2006年的<无线电>杂志也有M8制做USB电容电感表的文章,当时我还设计好线路制做了30片PCB,还向无线电报社申请了M8样片,打算制做LCR表.......一晃10多年过去了,那些还是零件,躺在纸箱中.心中难过呀iing.
回复

使用道具 举报

14#
ID:259031 发表于 2017-12-8 21:36 | 只看该作者
可以,学习学习
回复

使用道具 举报

15#
ID:64913 发表于 2017-12-8 23:33 | 只看该作者
制作好精量。。。。。。。
回复

使用道具 举报

16#
ID:102702 发表于 2017-12-12 13:13 | 只看该作者
你好,请问能发一下电感、电容、电解电容测量仪表清晰一点的原理图吗?谢谢!
回复

使用道具 举报

17#
ID:261391 发表于 2017-12-14 09:16 | 只看该作者
收藏了,正需要
回复

使用道具 举报

18#
ID:261391 发表于 2017-12-14 09:19 | 只看该作者
标记下,方便接下来的学习
回复

使用道具 举报

19#
ID:266116 发表于 2017-12-25 21:35 | 只看该作者
下一个来做做看,也好好的学习M8.
回复

使用道具 举报

20#
ID:517951 发表于 2020-11-15 10:01 | 只看该作者
好好看看,也好好的学习M8
回复

使用道具 举报

21#
ID:342822 发表于 2020-11-15 10:26 | 只看该作者
这是bascom版的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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