使用 Python + GPIB卡 + 无源扫描器进行电压基准的测试



    1. Python的安装

    本次使用的是Python 2.7.15,可以从这里下载https://www.python.org/downloads/release/python-2715/
    安装好Python 之后,还需要安装一些支持库。
    首先安装xlwt,用以支持excel文件的读写。
    打开CMD,输入cd C:\Python27\Scripts (这是我的安装路径如果不一样请自行修改路径)
    切换路径后,输入pip install xlwt 回车, 开始xlwt 的安装,安装时电脑需要联网,因为需要下载安装包。
    install xlwt.png
    接着安装pyvisa 用以支持GPIB
    install pyvisa.png
    2. 无源扫描器
    扫描器是参考lymex的帖子自己做的,使用VMC信号供电,并且作为通道的触发信号。
    实物图如下:
    20171101_120142.jpg
    面板
    20171101_145100.jpg
    可以 实现 最多16 通道的 电压 扫描, 以及16 通道 的4线 电阻扫描(需要 两张卡)。
    3.代码的实现
    我们知道扫描器输出的电压是周期性的,即每个通道的结果按顺序轮流输出。
    为了查看方便,需要把每个通道的数据分离出来,每通道的数据单独存在一列中。
    如果GPIB,扫描器,万用表都能长时间可靠的工作,那么数据的周期性就不会变化。
    假设通道数设置为8,起始通道为0,测量计数为i,那么我们只需要计算i%8,即对8求余数,结果就是当前正在测量的通道。

    在 开始 测量前, 需要将 万用表设置成单 触发模式,将扫描器切换到最后一个通道,然后打开IDLE(Python GUI),从file 中打开.py文件按F5运行程序。

    以下是实现的代码:

    #!/usr/bin/python
    import sys
    import visa
    import time
    import numpy as np
    
    log_name = "dcv_vref_scan_3458a_2019-0309.csv"
    
    rm = visa.ResourceManager()
    dmm = rm.open_resource("GPIB0::22::INSTR") #reference DMM HP3458A#1
    
    
    dmm.write("RESET")
    dmm.write("END ALWAYS")
    dmm.write("DCV 10")
    dmm.write("NPLC 100")
    dmm.write("NDIG 8")
    dmm.write("TRIG HOLD")
    dmm.write("TARM AUTO")
    dmm.timeout = 30000
    print "DMM configured"
    
    
    with open(log_name, 'a') as dile:
        dile.write ("date,5720,AV,732A#3,732A#1,732A#2,731B#90,731B#30,731B#24,temp\r\n")
    dile.close()
        
        
    vcnt = 0 # temporary counter
    print "Log into %s started" % log_name
    
    run = 0
    CH1 = 0
    CH2 = 0
    CH3 = 0
    CH4 = 0
    CH5 = 0
    CH6 = 0
    CH7 = 0
    CH8 = 0
    CH9 = 0
    CH10 = 0
    CH11 = 0
    CH12 = 0
    CH13 = 0
    CH14 = 0
    CH15 = 0
    CH16 = 0
    
    temp = 0
    
    while run<21600: #测量次数
        
        if run%450 == 0 :       
            dmm.write("TEMP?")        
            temp = float(dmm.read())
            time.sleep(4)
             
        if run%8 == 0 :
            dmm.write("TRIG SGL")
            CH1 = float(dmm.read())
    
        if run%8 == 1 :
            dmm.write("TRIG SGL")
            CH2 = float(dmm.read())
            
        if run%8 == 2 :
            dmm.write("TRIG SGL")
            CH3 = float(dmm.read())
            
        if run%8 == 3 :
            dmm.write("TRIG SGL")
            CH4 = float(dmm.read())
            
        if run%8 == 4 :
            dmm.write("TRIG SGL")
            CH5 = float(dmm.read())
            
        if run%8 == 5 :
            dmm.write("TRIG SGL")
            CH6 = float(dmm.read())
            
        if run%8 == 6 :
            dmm.write("TRIG SGL")
            CH7 = float(dmm.read())
            
        if run%8 == 7 :
            dmm.write("TRIG SGL")
            CH8 = float(dmm.read())        
    
            with open(log_name, 'a') as dile:
                dile.write (time.strftime("%Y-%m-%d %H:%M:%S,") + ("%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.3f,%.1f\r\n" % ((CH1-CH5)*1e6/10, (CH2-CH5)*1e6/10, (CH3-CH5)*1e6/10, (CH4-CH5)*1e6/10, (CH5-10)*1e6/10, (CH6-CH5)*1e6/10, (CH7-CH5)*1e6/10, (CH8-CH5)*1e6/10, temp)))
            dile.close()
            
            print("run:%d, 5720: %0.9f, AV: %0.9f, 732A#3: %0.9f, 732A#1: %0.9f, 732A#2: %0.9f, 731B#90: %0.9f, 731B#30: %0.9f, 731B#24: %0.9f, temp: %0.1f" %(run, CH1, CH2, CH3, CH4, CH5, CH6, CH7, CH8, temp))
        run = run + 1
           
    dmm.write("RESET")
    dmm.write("DCV 1000")
    

    源文件:
    Vref_scanner.zip
    程序比较简单,各位可以根据需要修改,拓展。
    在测量过程中,请勿打开程序中访问的csv文件,可以先复制一份再查看复制的文件。

    一些测量结果:
    仅供参考
    Vref_scan_1.png
    Vref_scan_5700_732A_731B.png

    20171015_181654.jpg



  • Thanks for sharing, very nice, I like it. Should build some as well (another never-starting project)..



  • 技术好帖,非常需要。多谢分享!



  • 很棒,扫描器何时团购?



  • 感谢分享,扫描器也很棒!



  • 非常实用的扫描器。



  • 终于看到采用比较现代的开源工具控制仪器和处理数据的了,支持!



  • 很好的帖子,学习了,扫描器做得很精致。



  • 非常不错,谁来做一批造福坛友!



  • 全自动测试,超级好。



  • @8508A使用 Python + GPIB卡 + 无源扫描器进行电压基准的测试 中说:

    很棒,扫描器何时团购?

    谢谢,
    数量团购数量有20台以上,我可以做,太少了的话成本比较高了。
    如果再做,我会选用大一点点的铝盒,这样网线更容易焊接。



  • 我喜欢来一个呗。



  • @pipelie 核算一下电子成本,外壳按需采购,电子可以多做,尽量上机。



  • 这个扫描器是4线8通道的吧?那很好,我先预订两套。
    现在自己用的一个是2线17通道、一个是4线16通道,缺少8通道的。



  • @lymex
    看您的需求,最多可以装两张卡,每张卡最多装16个继电器。也就是可以最多支持4线16通道。
    有两个插槽的。 :)
    535e561d-b8e8-4397-8457-dd9a3bfd8c26-image.png



  • @redtony
    以前做的是在J/L/C 贴的, 物料成本估计不到xxx元吧, 之前卖过几套给群友。带一张卡的 xxx元,带两张卡的xxx元,价格仅供大家参考,数量少的就适当提高价格。
    都是不带继电器的价格。



  • @pipelie 设计的很好,我也可以帮忙组织!



  • @8508A @lymex @redtony
    既然老大也觉得有需求,那我先按20套做了再说。 :)
    之前铝箔电容以及继电器的驱动用的电容都是用的100uF 1210 的贴片电容,当时1.3元一个,用了一套用16+16+8公32个,现在还这么搞, 成本就很高了。
    趁着改版,换电解吧。



  • @pipelie 现在改成固态电解电容或者钽电容如何



  • 我提前预定两套,最好是成品。