Exemplo n.º 1
0
        public int Initialize(string SigGenLOaddr, string SigGenRFaddr, Instr10MHzReference SigGenRef, bool enhArb_avail)
        {
            int status = -1;
            int isActive = 0;
            const uint bufferLength = 24;
            string serialNoRF = ""; // Signal Generator RF serial number
            string serialNoLO = ""; // Signal Generator LO serial number

            Console.WriteLine("Signal generator is booting...");

            status = SigGen.ClearErrors();
            status = SigGen.EepromCacheEnable_Set(1); // Must set before instrument is booted
            status = SigGen.BootInstrument(SigGenLOaddr, SigGenRFaddr, 0);
            CheckSigGenStatus(status);

            status = SigGen.IsActive_Get(ref isActive);

            if (isActive == -1 && status == 0) // Signal Generator booted, no warning or error
            {
                // Get serial numbers, verifiy resource is created
                status = SigGen.RF.Resource.SerialNumber_Get(ref serialNoRF, bufferLength);
                status = SigGen.LO.Resource.SerialNumber_Get(ref serialNoLO, bufferLength);

                Console.WriteLine("Signal generator booted successfully");
                Console.WriteLine("Signal generator RF serial number: {0}", serialNoRF);
                Console.WriteLine("Signal generator LO serial number: {0}", serialNoLO);
            }
            else if (isActive == 0 || status < 0) // Signal Generator did not boot, fatal error
            {
                Console.WriteLine("Signal generator did not boot\n");
                return -1;
            }

            status = SigGen.VCO.ExternalReference_Set(1); // 1 = enable use of external 10MHz reference
            CheckSigGenStatus(status);

            // Setup 301x reference for Signal Generator
            if (SigGenRef == Instr10MHzReference.OCXO) // Use internal OCXO reference (3011 only)
            {
                status = SigGen.LO.Reference_Set(afSigGenDll_lormReferenceMode_t.afSigGenDll_lormOCXO);
                CheckSigGenStatus(status);

                Console.WriteLine("Signal generator 10 MHz reference is set to internal OCXO\n");
            }
            else if (SigGenRef == Instr10MHzReference.intern) // Use internal reference
            {
                status = SigGen.LO.Reference_Set(afSigGenDll_lormReferenceMode_t.afSigGenDll_lormInternal);
                CheckSigGenStatus(status);

                Console.WriteLine("Signal generator 10 MHz reference is set to internal\n");
            }
            else if (SigGenRef == Instr10MHzReference.externTerm) // Use external reference and terminate it
            {
                status = SigGen.LO.Reference_Set(afSigGenDll_lormReferenceMode_t.afSigGenDll_lormExternalTerminated);
                CheckSigGenStatus(status);

                Console.WriteLine("Signal generator 10 MHz reference is set to external terminated\n");
            }
            else if (SigGenRef == Instr10MHzReference.externDaisy) // Use external reference and daisy chain it
            {
                status = SigGen.LO.Reference_Set(afSigGenDll_lormReferenceMode_t.afSigGenDll_lormExternalDaisy);
                CheckSigGenStatus(status);

                Console.WriteLine("Signal generator 10 MHz reference is set to external daisy chain\n");
            }

            status = SigGen.LO.Trigger.Mode_Set(afSigGenDll_lotmTriggerMode_t.afSigGenDll_lotmNone);
            CheckSigGenStatus(status);

            status = SigGen.Mode_Set(afSigGenDll_mMode_t.afSigGenDll_mFull);
            CheckSigGenStatus(status);

            status = SigGen.RF.CurrentLevel_Set(-136);
            //status = SigGen.RF.CurrentFrequency_Set(100e6);
            status = SigGen.RF.ModulationSource_Set(afSigGenDll_msModulationSource_t.afSigGenDll_msCW); //afSigGenDll_msARB

            if (enhArb_avail) // Enhanced ARB control is not supported for the AF3020, AF3020A and AF3025 models
            {
                status = SigGen.ARBControlMode_Set(afSigGenDll_amArbControlMode_t.afSigGenDll_amEnhanced); // Enhanced ARB functionality
                status = SigGen.EnhARB.PlayMode_Set(afSigGenDll_eaEnhArbPlayMode_t.afSigGenDll_eaContinuous); //afSigGenDll_eaSingle
                status = SigGen.EnhARB.TerminationMode_Set(afSigGenDll_eaEnhArbPlayTermination_t.afSigGenDll_eaptImmediate);
                status = SigGen.EnhARB.ExternalTrigger.Enable_Set(0);
                status = SigGen.EnhARB.StopPlaying();
            }
            else // Standard ARB control
            {
                status = SigGen.ARBControlMode_Set(afSigGenDll_amArbControlMode_t.afSigGenDll_amStandard); // Standard ARB functionality
                status = SigGen.ARB.SingleShotMode_Set(1);
                status = SigGen.ARB.ExternalTrigger.Enable_Set(0);
                status = SigGen.ARB.StopPlaying();
            }

            // Trigger routing: ARB marker at beginning of waveform is sent out SMB
            status = SigGen.RF.Routing.Reset();
            status = SigGen.RF.Routing.SetConnect(afSigGenDll_rmRoutingMatrix_t.afSigGenDll_rmPXI_TRIG_0, afSigGenDll_rmRoutingMatrix_t.afSigGenDll_rmARB_MARKER_1);
            status = SigGen.RF.Routing.SetOutputEnable(afSigGenDll_rmRoutingMatrix_t.afSigGenDll_rmPXI_TRIG_0, 1);
            //status = SigGen.RF.Routing.SetConnect(afSigGenDll_rmRoutingMatrix_t.afSigGenDll_rmFRONT_SMB, afSigGenDll_rmRoutingMatrix_t.afSigGenDll_rmARB_MARKER_1);
            //status = SigGen.RF.Routing.SetOutputEnable(afSigGenDll_rmRoutingMatrix_t.afSigGenDll_rmFRONT_SMB, 1);

            status = SigGen.RF.CurrentOutputEnable_Set(1); // RF on

            return status;
        }
Exemplo n.º 2
0
        public int Initialize(string DigitizerLOaddr, string DigitizerRFaddr, Instr10MHzReference DigitizerRef)
        {
            int       status       = -1;
            int       isActive     = 0;
            const int bufferLength = 24;
            string    serialNoRF   = ""; // Digitizer RF serial number
            string    serialNoLO   = ""; // Digitizer LO serial number

            Console.WriteLine("Digitizer is booting...");

            status = Digitizer.ClearErrors();
            status = Digitizer.EepromCacheEnable_Set(1); // Must set before instrument is booted
            status = Digitizer.BootInstrument(DigitizerLOaddr, DigitizerRFaddr, 0);
            CheckDigitizerStatus(status);

            status = Digitizer.IsActive_Get(ref isActive);

            if (isActive == -1 && status == 0) // Digitizer booted, no warning or error
            {
                // Get serial numbers, verifiy resource is created
                status = Digitizer.RF.Resource.SerialNumber_Get(ref serialNoRF, bufferLength);
                status = Digitizer.LO.Resource.SerialNumber_Get(ref serialNoLO, bufferLength);
                Console.WriteLine("Digitizer booted successfully");
                Console.WriteLine("Digitizer RF serial number: {0}", serialNoRF);
                Console.WriteLine("Digitizer LO serial number: {0}", serialNoLO);
            }
            else if (isActive == 0 || status < 0) // Digitizer did not boot, fatal error
            {
                Console.WriteLine("Digitizer did not boot\n");
                return(-1);
            }

            status = Digitizer.RF.Reference_Set(afDigitizerDll_rfrmReferenceMode_t.afDigitizerDll_rfrmExternalDaisy);
            CheckDigitizerStatus(status);

            status = Digitizer.RF.ExternalReference_Set(afDigitizerDll_erExternalReference_t.afDigitizerDll_erLockTo10MHz);
            CheckDigitizerStatus(status);

            // Setup 301x reference for Digitizer
            if (DigitizerRef == Instr10MHzReference.OCXO) // Use internal OCXO reference (3011 only)
            {
                status = Digitizer.LO.Reference_Set(afDigitizerDll_lormReferenceMode_t.afDigitizerDll_lormOCXO);
                CheckDigitizerStatus(status);

                Console.WriteLine("Digitizer 10 MHz reference is set to internal OCXO\n");
            }
            else if (DigitizerRef == Instr10MHzReference.intern) // Use internal reference
            {
                status = Digitizer.LO.Reference_Set(afDigitizerDll_lormReferenceMode_t.afDigitizerDll_lormInternal);
                CheckDigitizerStatus(status);

                Console.WriteLine("Digitizer 10 MHz reference is set to internal\n");
            }
            else if (DigitizerRef == Instr10MHzReference.externTerm) // Use external reference and terminate it
            {
                status = Digitizer.LO.Reference_Set(afDigitizerDll_lormReferenceMode_t.afDigitizerDll_lormExternalTerminated);
                CheckDigitizerStatus(status);

                Console.WriteLine("Digitizer 10 MHz reference is set to external terminated\n");
            }
            else if (DigitizerRef == Instr10MHzReference.externDaisy) // Use external reference and daisy chain it
            {
                status = Digitizer.LO.Reference_Set(afDigitizerDll_lormReferenceMode_t.afDigitizerDll_lormExternalDaisy);
                CheckDigitizerStatus(status);

                Console.WriteLine("Digitizer 10 MHz reference is set to external daisy chain\n");
            }

            status = Digitizer.RF.RFInputLevel_Set(30);
            //status = Digitizer.RF.CentreFrequency_Set(centerFrequency);
            status = Digitizer.RF.InputSource_Set(afDigitizerDll_isInputSource_t.afDigitizerDll_isRFInput);
            status = Digitizer.RF.FrontEndMode_Set(afDigitizerDll_femFrontEndMode_t.afDigitizerDll_femAuto);

            // Trigger setup
            status = Digitizer.Trigger.Source_Set(afDigitizerDll_tsTrigSource_t.afDigitizerDll_tsPXI_TRIG_0);
            //status = Digitizer.Trigger.Source_Set(afDigitizerDll_tsTrigSource_t.afDigitizerDll_tsFRONT_SMB);
            status = Digitizer.Trigger.TType_Set(afDigitizerDll_ttTrigType_t.afDigitizerDll_ttEdge);
            status = Digitizer.Trigger.EdgeGatePolarity_Set(afDigitizerDll_egpPolarity_t.afDigitizerDll_egpPositive);
            //status = Digitizer.Trigger.PreEdgeTriggerSamples_Set(preTrigSamples);
            //status = Digitizer.Trigger.PostGateTriggerSamples_Set(0);
            //status = Digitizer.Trigger.OffsetDelay_Set(trigDelaySamples);
            status = Digitizer.Trigger.SwTriggerMode_Set(afDigitizerDll_swtSwTrigMode_t.afDigitizerDll_swtArmed);

            // Sampling setup
            status = Digitizer.Modulation.Mode_Set(afDigitizerDll_mmModulationMode_t.afDigitizerDll_mmGeneric);
            status = Digitizer.Modulation.GenericDecimationRatio_Set(1);
            //status = Digitizer.Modulation.GenericSamplingFrequency_Set(31e6);
            //status = Digitizer.Modulation.DecimatedSamplingFrequency_Get(ref decimatedSampleFreq);

            status = Digitizer.RF.RemoveDCOffset_Set(1);
            status = Digitizer.Capture.SampleDataType_Set(afDigitizerDll_sdtSampleDataType_t.afDigitizerDll_sdtIQData);
            status = Digitizer.Capture.IQ.Resolution_Set(afDigitizerDll_iqrIQResolution_t.afDigitizerDll_iqrAuto);
            //status = Digitizer.RF.GetBandwidth(centerFreq, span, afDigitizerDll_frFlatnessRequired_t.afDigitizerDll_frLessThanOnedB, ref bandwidth);

            // Correction
            status = Digitizer.RF.OptimizeTemperatureCorrection();
            status = Digitizer.RF.AutoTemperatureOptimization_Set(afDigitizerDll_atoAutoTemperatureOptimization_t.afDigitizerDll_atoEnable);
            //status = Digitizer.RF.LevelCorrection_Get(ref correction);

            status = Digitizer.Capture.PipeliningEnable_Set(0);

            return(status);
        }