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" )
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...')