コード例 #1
0
ファイル: cgr_gen.py プロジェクト: johnpeck/cgrlib
def main():
    logger.debug("Utility module number is " + str(utils.utilnum))
    config = load_config(args.rcfile)
    global ch, fh  # Need to modify console and file logger handlers
    # with the config file, from inside main().  They
    # thus must be made global.
    (ch, fh) = init_logger(config, ch, fh)
    cgr = utils.get_cgr(config)
    actfreq = utils.set_sine_frequency(cgr, float(args.frequency))  # Return the actual frequency
    logger.debug(
        "Requested " + "{:0.2f}".format(float(args.frequency)) + " Hz, set " + "{:0.2f}".format(actfreq) + " Hz"
    )
    if args.waveform == "sine":
        logger.debug("Configuring sine wave output")
        if not (config["Waveform"]["shape"] == "sine"):
            for samplenum in range(256):
                sampleval = int(round(127 + 127 * sin(samplenum * 2 * pi / 255)))
                utils.set_arb_value(cgr, samplenum, sampleval)
            cgr.open()
            utils.sendcmd(cgr, "W P")
            cgr.close()
            config["Waveform"]["shape"] = "sine"
            config.write()
    if args.waveform == "square":
        logger.debug("Configuring square wave output")
        if not (config["Waveform"]["shape"] == "square"):
            # Set the output to 0 while we load and activate the waveform
            utils.set_output_amplitude(cgr, 0)
            for samplenum in range(256):
                if samplenum < 128:
                    sampleval = 0
                else:
                    sampleval = 255
                utils.set_arb_value(cgr, samplenum, sampleval)
            cgr.open()
            utils.sendcmd(cgr, "W P")
            cgr.close()
            config["Waveform"]["shape"] = "square"
            config.write()
    actamp = utils.set_output_amplitude(cgr, float(args.amplitude))
    logger.debug(
        "Requested " + "{:0.2f}".format(float(args.amplitude)) + " Vp, set " + "{:0.2f}".format(actamp) + " Vp"
    )
コード例 #2
0
ファイル: cgr_imp.py プロジェクト: johnpeck/cgrlib
def main():
    logger.debug('Utility module number is ' + str(utils.utilnum))
    config = load_config(args.rcfile)
    global ch,fh # Need to modify console and file logger handlers
                 # with the config file, from inside main().  They
                 # thus must be made global.
    (ch,fh) = init_logger(config,ch,fh)
    cgr = utils.get_cgr(config)
    caldict = utils.load_cal(cgr, config['Calibration']['calfile'])
    eeprom_list = utils.get_eeprom_offlist(cgr)
    # Configure the inputs for 10x gain
    if (int(config['Inputs']['gain']) == 10):
        gainlist = utils.set_hw_gain(cgr,[1,1])
    else:
        gainlist = utils.set_hw_gain(cgr,[0,0])
    meanvolts = get_input_means(cgr, gainlist, caldict)
    logger.debug('Channel A mean is ' + '{:0.3f}'.format(meanvolts[0]) + ' V')
    logger.debug('Channel B mean is ' + '{:0.3f}'.format(meanvolts[1]) + ' V')
    # Configure the trigger:
    #   Trigger on channel A
    #   Trigger at channel A's mean voltage
    #   Trigger on the rising edge
    #   Capture 512 points after trigger
    trigdict = utils.get_trig_dict(0,
                                   meanvolts[0],
                                   0,
                                   512
    )
    utils.set_trig_level(cgr, caldict, gainlist, trigdict)
    utils.set_trig_samples(cgr,trigdict)
    waveplot = wave_plot_init()
    magplot = magnitude_plot_init()
    realplot = real_plot_init()
    capplot = capacitance_plot_init()
    freqlist = get_sweep_list(config)
    drive_frequency_list = []
    impedance_list = []
    for progfreq in freqlist:
        # The actual frequency will be determined by the hardware
        actfreq = utils.set_sine_frequency(cgr, float(progfreq))
        drive_frequency_list.append(actfreq)
        logger.debug('Requested ' + '{:0.2f}'.format(float(progfreq)) +
                     ' Hz, set ' + '{:0.2f}'.format(actfreq) + ' Hz')
        if (progfreq == freqlist[0]):
            # Only set amplitude once
            actamp = utils.set_output_amplitude(cgr, float(config['Sweep']['amplitude']))
            logger.debug('Requested ' + '{:0.2f}'.format(float(config['Sweep']['amplitude'])) +
                         ' Vp, set ' + '{:0.2f}'.format(actamp) + ' Vp')
        actrate = set_sample_rate(cgr, config, actfreq, trigdict)
        logger.debug('Sample rate set to ' + '{:0.2f}'.format(actrate) +
                     ' Hz, for an acquisition time of ' + '{:0.2f}'.format(1024/actrate * 1000) +
                     ' milliseconds'
                     )
        for capturenum in range(int(config['Sweep']['averages'])):
            if trigdict['trigsrc'] == 3:
                # Internal trigger
                tracedata = utils.get_uncal_forced_data(cgr,ctrl_reg)
            elif trigdict['trigsrc'] < 3:
                # Trigger on a voltage present at some input
                tracedata = utils.get_uncal_triggered_data(cgr,trigdict)
            logger.info('Acquiring trace ' + str(capturenum + 1) + ' of ' +
                        str(int(config['Sweep']['averages']))     
            )
            if capturenum == 0:
                sumdata = tracedata
            else:
                sumdata = add(sumdata,tracedata)
            avgdata = divide(sumdata,float(capturenum +1))
            # Apply calibration
            voltdata = utils.get_cal_data(caldict,gainlist,avgdata)
            if (int(config['Inputs']['gain']) == 10):
                # Divide by 10 for 10x hardware gain with no probe
                voltdata = divide(voltdata,10)
            timedata = utils.get_timelist(actrate)
        sine_vectors = get_sine_vectors(actfreq, timedata, voltdata)
        logger.debug('Channel A amplitude is ' +
                     '{:0.3f}'.format(2*vector_length(sine_vectors[0])) +
                     ' Vp'
        )
        logger.debug('Channel B amplitude is ' +
                     '{:0.3f}'.format(2*vector_length(sine_vectors[1])) +
                     ' Vp'
        )     
        logger.debug('Channel A phase shift is ' +
                     '{:0.3f}'.format(vector_angle(sine_vectors[0]) * 180/pi) +
                     ' degrees'
        )
        logger.debug('Channel B phase shift is ' +
                     '{:0.3f}'.format(vector_angle(sine_vectors[1]) * 180/pi) +
                     ' degrees'
        )
        plot_wave_data(waveplot, timedata, voltdata, trigdict, actfreq, sine_vectors)        
        impedance = get_z_vector(config, actfreq, timedata, voltdata)
        logger.debug('Impedance magnitude is ' +
                     '{:0.3f}'.format(vector_length(impedance)) +
                     ' Ohms'
        )
        logger.debug('Impedance angle is ' +
                     '{:0.3f}'.format(vector_angle(impedance) * 180/pi) +
                     ' degrees'
        )
        impedance_list.append(impedance)
        if (len(drive_frequency_list) > 1):
            plot_magnitude_data(magplot, drive_frequency_list, impedance_list)
            plot_real_data(realplot, drive_frequency_list, impedance_list)
            plot_capacitance_data(capplot, drive_frequency_list, impedance_list)
    # Set amplitude to zero to end the sweep
    utils.set_output_amplitude(cgr, 0.01)
    raw_input('Press any key to close plot and exit...')