6120 external sample clock

We have been successfully using the 6052e for some time now to acquire our radar�s analog output. This output consists of a data signal synced with a 20 Hz analog trigger that also comes from the radar. This has been a nice easy solution but now we have increased our frame rate from 20Hz to 60Hz. Quantitatively, the old system was taking 20Hz X 9,984 samples = 200 KS/s, while the new system takes 60Hz X 9,984 samples = 600 KS/s. The 6052e no longer could handle the increase so we purchased the 6120.
The problem we have now is that 6120 does not seem to support the same acquisition technique that we used with the 6052e.
Here is what we are doing with the 6052e:
We use the 6052e to generate a pulse train with frequency correspondin
g to our sample rate, which is gated by a signal that turns on when the trigger pulse occurs and stays on for a fixed number of samples. We then route that pulse train back into the board as our external sample clock. The problem seems to be that the 6120 does not support the external sample clock.
The reason we use this technique with the 6052e is to guarantee that we get the same number of samples between triggers.
Ian Starnes
Sr. Software Engineer
NIITEK, Inc.

Ian,
I am going to guess that you are experiencing this problem because our S-Series boards such as your 6120 use a pipelined FIFO ADC process. Specifically, our S-Series boards do not send the last 3 samples of an acquisition when using an external clock. The last three samples remain in the FIFO on the card. Therefore, if you begin your acquisition, receive a trigger pulse, then receive 9,984 clock edges on the sample clock, and then read all the samples in the buffer, you will only receive 9,981 samples. Consequently, if you set the AI Read.vi to read 9,984 samples it may timeout because it is still waiting for three more samples to be acquired. This would create the allusion that the external clock was not working with the 6120.
The good news is that i
t is easy to solve this issue. You simple need to read 3 less samples the first time AI Read is called. Therefore, the first time you call AI Read you need to read 9,981 samples and then the next time you call AI Read you will continue to read 9,984 samples. This will ensure that you will get the same number of samples between triggers except for the first time which will be short three samples. However, with this method, the first three sample of each trigger will be the last three samples from the previous trigger signal.
Please see this KB for additional information on how to ensure that you get the proper amount of data for each trigger signal that you receive:
http://digital.ni.com/public.nsf/websearch/D64CD277A6B739A186256A73007E7BCC?OpenDocument
Please let me know if you are still having difficulty or if the information I provided did not help resolve the issue.
Regards,
Bill B
Applications Engineer
National Instruments

Similar Messages

  • External sample clock encoder

    hello,
    my problem is very urgent, I have to sample 3 analog input synchronised to an encoder. How can use the channel from the encoder and use them to generate a external sample clock for acuiring the analog signals?how can I phisically attache the wire from the encoder to the digital line?and how the vi should be??my encoder has A, Anot,B,Bnot channel, but eventually with a circuit I can get just A and B. I have a PCI6221.
    Please is very urgent!!

    Hi orsogna,
    see the example Cont Acq&Graph Volt-Ext clock in the Labview Example Finder.
    About wirings, you have to connect our encoder signal (A signal is good) to a PFI input in order to correctly read the TTL signal.
    Ciao!
    Simone S.
    Academic Field Engineer - Med Region

  • NI6602 pulse width measurement: Do I have to use an external sample clock?

    Hi
    In the .NET 4 example 'MeasPulseWidthBuf_SmplClk_Cont' it is stated in the comments that:
    An external sample clock must be used. 
    Counters do not have an internal sample clock available.  You can use
    the Gen Dig Pulse Train-Continuous example to generate a pulse train on
    another counter and connect it to the Sample Clock Source you are using
    in this example.
    I have an application running without specifying an external clock. The applications is running, but I'm not sure I can trust the recorded data. Here is the channel creation code:
                    task.CIChannels.CreatePulseWidthChannel(readTaskCounter,
                                                            "ReadPulswidthTask", 25e-9, 20e-6,
                                                            CIPulseWidthStartingEdge.Rising,
    CIPulseWidthUnits.Seconds);
    task.CIChannels.All.DataTransferMechanism = CIDataTransferMechanism.Dma;
                    task.Stream.Timeout = callbackTimeoutInMilliSeconds;
    task.Stream.Buffer.InputBufferSize = 50000;
                    task.SynchronizeCallbacks = true;
                    task.Timing.ConfigureImplicit(SampleQuantityMode.ContinuousSamples);
                    task.Control(TaskAction.Verify);
    Note that I'm not specifying any external clock.
    1) Which clock is the daq using? -It is obviously using some clock since I can collect data via this task.
    2) Do I need to change the configuration to use an external clock to achieve reliable readings - as mentioned in the 'MeasPulseWidthBuf_SmplClk_Cont' example?
    /mola
    Solved!
    Go to Solution.

    Hi mola,
    That specific example is for sample-clocked pulse width measurements.  This type of measurement is only supported on newer hardware such as X Series boards and will not run on the 6602.
    Your application that you linked uses Implicit timing, meaning that the signal itself serves as the sample clock.  That is, at the end of each pulse width that you measure, the sample is deterministically latched in.  So, you end up with a buffered array of every pulse width that is seen by the counter.
    Best Regards,
    John Passiak

  • NI 5772 acceptible external sample clock

    Hello support forum,
    Is it possible to use the NI 5772 adapter module with an external sample clock that does not have a constant frequency (it is still within the 400-800MHz range though), and is not always on?
    An illustration of the clock signal may be more useful. Here is a link to a PDF containing a description of the instrument that is generating the clock signal. The plot of the clock signal is shown on page 7, it is the purple waveform (refered to as '(3) DAQ k-clock signals' in the text below the figures).
    http://www.thorlabs.com/thorcat/22700/SL1310V1-10048-Manual.pdf
    I've attached a screenshot of page 7 to this post in case the PDF is inconvienent.
    Page 7 contains two figures. The top figure illustrates what I mean when I say the clock is not 'always on'.
    The clock signal is supposed to be close to 500MHz, but it is not necessarily always that frequency. The frequency is dependent on the device. The device is a swept source laser. Each 'sweep' may result in a slightly different clock frequency, even within one sweep.
    I can provide a lot more detail on my application if required.
    Thank you for your help.
    Solved!
    Go to Solution.

    The CLIP that we ship with the 5772 requires a persistent clock that maintains relatively stable frequency. If you need to use a 5772 with a variable frequency clock that is not persistent then you will need a custom CLIP. Depending on your application requirements this may or may not be possible. You will need to open a service request for more information.
    National Instruments
    FlexRIO Product Support Engineer

  • PXI-5122 External Sample Clock

    PXI-1031 Chassis
    PXI-8106 PC
    PXI-5122 14bit 100MS/s Digitizer
    Labview 8.5
    I am driving X-Y mirrors steering a laser.
    I am measuring the reflected light
    to develop a raster image of a sample.
    I have a pixel clock running at 60MHz that
    I want to clock the acquistion and external
    trigger that defines the 'line valid' or sampling
    across the mirrors during their constant velocity
    range.
    I am using [PFI0 with 'READY for START EVENT'] as
    a start pulse to run my x-y mirror scan.
    CH0: Analog signal
    SMA TRIG: line valid
    AUX: PFI0 with 'READY for START EVENT'
    In the property node 'niScope'
    when I add the following elements:
    Sample Clock Timebase Source = VAL_NO_SOURCE
    Sample Clock Timebase Rate = 60000000
    Sample Clock Timebase Divisor = 1
    I get the following message:
    Error -1074118614 occurred at Error occurred at:  niScope Fetch Binary 16.vi:2
    Possible reason(s):
    Driver Status:  (Hex 0xBFFA402A)
    An acquisition has not been initiated.
    Error -1074134971 occurred at Property Node (arg 4) in CSKB-4X_VID.vi
    Possible reason(s):
    The channel or repeated capability name is not allowed.
    Attribute: NISCOPE_ATTR_SAMP_CLK_TIMEBASE_SRC, Channel: 0
    Attached are the VIs with the elements added to the niScope property node
    and without.
    I get the above errors even when I set the 'Sample Clock Timebase Source'
    to 'VAL_NO_SOURCE'
    It appears, by just adding the elements, it gives me the error(s).
    How can I get the external sampling clock to work along with external trigger?
    Solved!
    Go to Solution.
    Attachments:
    CSKB-4_VID.vi ‏148 KB
    CSKB-4X_VID.vi ‏146 KB

    Hi csk,
    I was wondering if you could clarify how many
    samples you wish to take. Am I correct that you wish to take 30,000
    sets of 150 samples each, or do you mean you want to take 150 sets of
    30,000 samples each (since 30,000 periods of the 60 MHz clock fits
    within 90% of a 1.8kHz signal)? In either case, the current method you
    are using is only going to acquire a single record each time through
    the loop, and so you will be limited by how fast you can retrigger in
    software.
    For your application, it sounds like you will
    need to perform a multi-record acquisition, as this will allow you to
    specify what condition to trigger off of and how many samples to
    acquire each time the trigger occurs. In this way, each "transition" of the sawtooth wave is considered a single record, and you are acquiring multiple different records corresponding to each time a rising edge trigger occurs. I believe that you can accomplish
    exactly what you need with only a slight modification to the niScope
    shipping example "niScope EX Multi Record Fetch More Than Available
    Memory.vi" (found at Start » Programs » National Instruments » NI-SCOPE
    » Examples). With this VI, you can specify that you wish each record to
    have a min record length of 30,000 samples (or 150 samples if this is
    the case) and that you wish to acquire 150 records (or 30,000 if this
    is the case). The only major change that you would need to make is to
    change the Configure Trigger VI to be a Digital Edge trigger rather
    than an analog trigger. With this and a few other modifications (ie -
    configuring the external clock) you should be able to accomplish what
    you need. Please let me know if I explained this alright and if my
    assumptions are correct. Thanks, and best of luck!
    Daniel S.
    National Instruments

  • Err. -200303: External sample clock source...

    Dear Readers
    I'm using Ni-DAQmx 8 and have a PCIe-6259 card.
    I wrote the following code (in VC++ 6).
    int main(int argc, char* argv[])
        int32       error=0;
        TaskHandle  taskHandle=0;
        uInt8      data[10]={1,2,4,8,16,32,64,128,256,0xFFFFFFFF};
        char        errBuff[2048]={'\0'};
        (error = DAQmxCreateTask("",&taskHandle));
        (error = DAQmxCreateDOChan(taskHandle,"Dev1/port0","",DAQmx_Val_ChanForAllLines));
        (error = DAQmxCfgSampClkTiming(taskHandle,NULL,1000.0,DAQmx_Val_Rising,DAQmx_Val_ContSamps,1000));
        error = DAQmxWriteRaw(taskHandle, 10, true, 10.0, data, NULL, NULL);
            if( DAQmxFailed(error) )
            DAQmxGetExtendedErrorInfo(errBuff,2048);
        ERROR: -200303: External sample clock source must be specified for this application
        error = DAQmxStartTask(taskHandle);
    I See no output on the oscilloscope.
    I tried to put in several values for ClockSource in DAQmxCfgSampClkTiming like Dev1/PFI0, .... - but it never worked.
    Could anyone please help me?
    Thanks...
    Pascal

    Hi Robert
    Do yo mean something like this:
    int main(int argc, char* argv[])
        int32       error=0;
        TaskHandle digiTaskHandle = 0;
        TaskHandle aiTaskHandle = 0;
        uInt32      data[10]={0xFFFFFFFF,2,4,8,16,32,64,128,256,0xFFFFFFFF};
        float64        dummyBuffer[10];
        char        errBuff[4096]={'\0'};
        error = DAQmxCreateTask("",&digiTaskHandle);
        error = DAQmxCreateTask("",&aiTaskHandle);
        error = DAQmxCreateDOChan(digiTaskHandle,"Dev1/port0","",DAQmx_Val_ChanForAllLines);
        error = DAQmxCreateAIVoltageChan(aiTaskHandle, "Dev1/ai0", "", DAQmx_Val_RSE, -5.0, 5.0, DAQmx_Val_Volts, "");
        error = DAQmxCfgSampClkTiming(aiTaskHandle, "/Dev1/ai/SampleClock", 1000.0, DAQmx_Val_Rising, DAQmx_Val_ContSamps, 1000);
        error = DAQmxCfgSampClkTiming(digiTaskHandle,"/Dev1/ai/SampleClock" ,1000.0,DAQmx_Val_Rising,DAQmx_Val_ContSamps,1000);
        error = DAQmxStartTask(aiTaskHandle);
    ERROR:
    "An attempt has been made to perform a route when the source and the destination are the same terminal.
    In many cases, such as when configuring an external clock or a counter source, you must select a PFI, PXI Trigger, or RTSI line as the sou"
    //    error = DAQmxReadAnalogF64(aiTaskHandle, 10, 20.0, DAQmx_Val_GroupByChannel, dummyBuffer, 10, NULL, NULL);
        if( DAQmxFailed(error) )
          DAQmxGetExtendedErrorInfo(errBuff,4096);
        error = DAQmxWriteRaw(digiTaskHandle, 10, true, 10.0, data, NULL, NULL);
        //error = DAQmxStartTask(aiTaskHandle);
        if( DAQmxFailed(error) )
          DAQmxGetExtendedErrorInfo(errBuff,2048);
        return 0;
    Could you please explain me how to do it right?
    Pascal

  • Can buffered digital edge detection only be performed using an external sample clock?

    I am working on an application where I need to measure the speed (rpm) of a motor as it starts up using the output of its built in hall effect sensor.  The sensor should output 2 pulses per revolution of the motor.  My plan is to count the pulses from when the counter (counter 1) is armed to when it is up to speed. Looking at the M series manual, the CVI (v8.5.1) help, and the examples it appears that this can only be done using an external sample clock.  Is there a way to route an internal sample clock to the appropriate terminal on the counter so that I do not need to add additional hardware?
    I am currently using a PCI-6289, but the final application will use a CDaq-9188 chassis (using one of the the built in 32-bit counters).
    Thank you for your assistance.

    Thank you for your input.
    However, I did forget to mention one detail of the application.  I need to buffer the edge counts so that I can graph the speed of the motor as it starts up.  I need to be able to acquire the edge counts at reqular intervals so that I can determine how fast the motor was rotating at each point.  So far I have not been able to find an example of doing this without and external sample clock.  As I mentioned, in the final application I will be using the 32-bit counters on a CDAQ-9188 chassis.  The only thing I can think of at this point is to generate a pulse out of the second counter and use that as the sample clock.  Will this work?

  • External Sample Clock timeout

    Hi,
    I'm attempting to program up a Met One 010c cup anemometer which sends out 11V pulses whose frequency correlates to wind speed. I've written the following program Met One 010c-3b.vi which works when there's no sample clock and outputs data to the graph and to the write measurement to file VI. 
    However the timestamp on the file only occurs intermittently (every 130 recorded samples if i recall correctly)  and i've been advised to put a sample clock in between the create virtual channel and start VI to make the timestamp occur every sample. However doing this i get errors that first tell me I have to use an external clock, making the clock external then gives the timeout error 200284 after the read function. I expect this is because the wrong source has been selected for the external clock on the timing function.
    I don't fully understand how the external clock works and i assume i need to set up which ever port i select as an external clock?
    I have read through the following
    http://digital.ni.com/public.nsf/allkb/FEF778AD990D5BD886256DD700770103
               -> how do i  verify that the start trigger is configured correctly? (i know my program doesn't have one)
               -> how do i verify the external timing is configured correctly?
    http://zone.ni.com/devzone/cda/tut/p/id/2835
    http://zone.ni.com/devzone/cda/tut/p/id/4322
    I tried to implement some of the diagrams indicated in the last link (eg Figure 2 & 3) but when i went to select the source for the analogue output I was given no available options. I have the NI 9205,9213,9403,9423,9215 sitting on a cDAQ 9178, so none of these do analogue output. Does this mean i can't use an external clock? 
    Thanks for the help, i know this is a simple question but i'm getting nowhere fast.
    Kind Regards
    Orfeo
    Attachments:
    Met One 010c-3b.vi ‏90 KB

    Thanks for your help Courtney,
    I had a look at the Write to Text File.Vi you suggested and i tried to implement it in my program. It appears to be almost working. The formatting of the strings is stuffed up so that i'm getting an ever increasing number of columns in my data (see attached text file). Can you advise me where i've gone wrong?
    An example of the file is below
    24/11/2011 11:21:54 AM     2.32     2.14
     2.62     2.11
     1.81     1.49
    24/11/2011 11:21:54 AM     2.36     2.32     2.14
     2.62     2.62     2.11
     1.82     1.81     1.49
    24/11/2011 11:21:54 AM     2.40     2.36     2.32     2.14
     2.59     2.62     2.62     2.11
     1.76     1.82     1.81     1.49
    24/11/2011 11:21:54 AM     2.43     2.40     2.36     2.32     2.14
     2.55     2.59     2.62     2.62     2.11
     1.73     1.76     1.82     1.81     1.49
    24/11/2011 11:21:54 AM     2.53     2.43     2.40     2.36     2.32     2.14
     2.48     2.55     2.59     2.62     2.62     2.11
     1.69     1.73     1.76     1.82     1.81     1.49
    I assume i've just not got my tab delimintors in the right place? or perhaps i need end of line qualifiers?
    I would also like to have the timestamp more accurate, down to the milisecond. I see the format time string VI has an option to format the string %<digit>u which should do this but it appears to just paste the <digit>u in the string. We are wanting to sample data at 10-20 Hz and record the time of the samples. For one instrument these samples will be done simultaneously.
    Thanks again
    orfeo
    Attachments:
    Met One 010c-3c.vi ‏42 KB
    TextFile.txt ‏550 KB

  • "External sample clock" and "Rate" for digital input acquisition

    Dear all,
    I want to acquire digital input (21 bits with external clock = 50 kHz) with a PCIe-6343 NI board. Using the  DAQ assistant under Labview, I selected the advanced timing with the sample clock time parametrized as External. However, it is also possible to select the Rate of the acquisition. In my case, i want to get the data at the rising edge of the external clock signal, so at a frequency of 50 kHz.  How can I do that ? I just need to put a Rate of 50 kHz ?
    thanks for your help.
    Cedric 

    Cedric,
    dddsdsds wrote: 
    [...]In my case, i want to get the data at the rising edge of the external clock signal, so at a frequency of 50 kHz.  How can I do that ?[...]
    You answered your question already. If you want to use an external clock, you have to configure the timing source of your task to be external. In order of proper buffer configuration, you should enter 50kHz as rate in addition to the external configuration, but this will not influence the speed of the acquisition (since it is "clocked" externally!)
    hope this helps,
    Norbert
    CEO: What exactly is stopping us from doing this?
    Expert: Geometry
    Marketing Manager: Just ignore it.

  • NI6554 Dinamic generation with external sample clock

    I am using the PXI-NI6554 to generate a digital signal, as
    clock I want to use an external source that I drive in the board via de CLK IN SMB
    connector. Always I got the same error (cod: 1074115898) from the “Write” VI
    block, the reason is that there is not clock signal or is not detected.
    I tried the example “Dynamic Generation with External Sample
    CLK” and I have the same error.
    The clock signal is in 3,3V logic. The same clock signal
    works to acquire via the STROBE pin. I have scoped the CLK and the shape is
    quite ok. I have tried the two possible impedances for the CLK input also.
    I found one respond (http://digital.ni.com/public.nsf/allkb/884C5A76BA1A474E8625717A0068AA09)
    about strange behavior of CLK IN but the proposed solution does not help in my
    situation.
    Does somebody have an idea about the problem?
    Thanks,
    Abe

    Hi Uli,
    I posted to your thread here.
    Best Regards,
    John Passiak

  • Sharing an external sample clock between PCI-6722 and PCI-6602

        I need PCI-6602 work with PCI-6722。6602 shares 6722’s ao/SampleClock as external clock and triggered by 6722’s ao/StartTrigger。The master device is 6722, which refered as Dev1, and the slave device is 6602, which refered as Dev2. A RTSI line is used to connect the two devices correctly.
        I use C API to finish my program and my code is as follows:
    //config 6722 analog out task
    1、DAQmxCreateTask("NI6672", &hAOTask);
    2、DAQmxCreateAOVoltageChan(hAOTask, "Dev1/ao0", "", -10.0, 10.0, DAQmx_Val_Volts, "" );
    3、DAQmxCfgSampClkTiming(hAOTask, "", 1000.0, DAQmx_Val_Rising, DAQmx_Val_ContSamps, 1000);
    4、DAQmxWriteAnalogF64(hAOTask, 1000, 0, 10.0, DAQmx_Val_GroupByChannel, data, NULL, NULL);
    //config 6602 counter task
    5、DAQmxCreateTask("NI6602", &hCounterTask);
    6、DAQmxCreateCICountEdgesChan(hCounterTask, "Dev2/ctr0", "", DAQmx_Val_Rising, 0, DAQmx_Val_CountUp);
    //use /Dev1/ao/SampleClock for external clock
    7、DAQmxCfgSampClkTiming(hCounterTask, "/Dev1/ao/SampleClock", 1000.0, DAQmx_Val_Rising, DAQmx_Val_ContSamps, 1000);
    //use /Dev1/ao/StartTrigger
    8、DAQmxSetTrigAttribute (hCounterTask, DAQmx_ArmStartTrig_Type, DAQmx_Val_DigEdge);
    9、DAQmxSetTrigAttribute (hCounterTask, DAQmx_DigEdge_ArmStartTrig_Src, "/Dev1/ao/StartTrigger");
    10、DAQmxSetTrigAttribute (hCounterTask, DAQmx_DigEdge_ArmStartTrig_Edge, DAQmx_Val_Rising);
    //start counter task first
    11、DAQmxStartTask(hCounterTask);
    //start 6722 task
    12、DAQmxStartTask(hAOTask);
    I run it on the MAX virtual Device, and the Step 11always returned -89120。
    I try to slove this problem, so I change the Step 7, use /Dev2/PFI9 to instead of /Dev1/ao/SampleClock.
    7、DAQmxCfgSampClkTiming(hCounterTask, "/Dev2/PFI9", 1000.0, DAQmx_Val_Rising, DAQmx_Val_ContSamps, 1000);
    The code runs well, but I don’t know which terminal is connected by /Dev2/PFI9. Does it connect to /Dev1/ao/SampleClock?
    I use another API DAQmxConnectTerms to ensure that, I add a Step before Step 11.
    DAQmxConnectTerms( "/Dev1/ao/SampleClock", "/Dev2/PFI9", DAQmx_Val_DoNotInvertPolarity );
    The program also run well. But I am still not sure that 6602 is sharing /Dev1/ao/SampleClock。If not, which terminal of Dev1 is connected by /Dev2/PFI9?
    Is my code right? If not, hwo to fix my code or supply some example for me? Thanks.

    Hello Shokey,
    From looking over your post, it looks like you want to program in C, using simulated instruments, a master/slave design with a PCI-6602 and PCI-6722. The PCI-6722 is the master device and the PCI-6602 is the slave device. In order to implement this with the real cards, you would need a RTSI cable between the 2 cards in order to pass the triggers and the sample clock. Unfortunately with simulated devices you can't implement this so parts of your code won't be able to work exactly like if you had the instrument.
    If you did have the instrument, you can implement this by performing the following steps:
    Master Device:
    1.) Export the ao/SampleClock and ao/StartTrigger to a RTSI Line. (See DAQmx C Reference help for DAQmxExportSignal to export these)
    Slave Device:
    1.) Set the Sample clock and the trigger to the RTSI.
    There is another forum that I think will help you out to implement this correctly. In this forum, the customer was trying to export a trigger through a RTSI and the problem he was experiencing was a broken RTSI cable. His code, he states, works. I hope this helps you with this and if you have any more questions, feel free to post.
    Jim St
    National Instruments
    RF Product Support Engineer

  • Using a Counter to error-check External Sample Clock

    Hi all,
    I am newish to labview and am working on a data acquisition project. I've managed to get the basics under control, but here's my situation and question...
    -- I am using the S-6123 card to capture and record data on two or more AI channels.  I am using a rotary encoder to generate a pulsetrain that I am using via PFI0 as the sample clock for recording the AI data.
    -- This rotary encoder gives 720 pulses per revolution and an index pulse once per revolution.
    -- In my data acquisition, I am pulling 1440 samples at a time with the DAQmx "read" function.
    I have been experimenting with counters and can get the RPM out of the pulse trains well enough, however I was wondering...
    Is there some way to use the 2 counters on the card (and signal routing of the two pulse trains) to double-check that the 1440 samples I take correspond to two exact revolutions, and that I'm not getting ahead of or behind the rotation of the encoder due to missing clock pulses or reading false pulses. I have a couple of ideas on how to attempt to do it, but to me they don't seem very reliable or efficient, so I thought I'd put it to the experts to point out of there is a more obvious way of doing it.
    I have attached a pdf of the specifications of the encoder family, the pulses that will be output are on the right hand side of page 2.
    With many thanks in advance,
    Peter
    Message Edited by mumech on 07-22-2008 01:05 AM
    Attachments:
    REncoder Specs.pdf ‏312 KB

    Thanks very much for your reply. I had come across the use of counters with angular encoders but hadn't quite thought of the concept in this way.
    I will have to experiment a bit over the next day or to see what this is capable of, the examples seem quite comprehensive, however I'm not sure if I will run into issues due to the fact that I am using the rotary encoder as the sample clock for my analogue data.
    Would I indeed be able to compare these values (ideally check the position of the encoder after each set of data acquisition) without a "third party" sample clock common to both? (which isn't appropriate for this application)
    If I was only running at low speeds, I might be able to implement this by simply checking the position of the encoder after each read of the data. However, at higher speeds there might be synchronization issues due to the buffering of the analogue data. So when getting the measurement from the encoder counter chances are the analogue data was acquired at an earlier time.
    I know I haven't worded this very well, but how might I synchronise this error checking method?

  • Digital external sample clock (C#)

    I am using the PCI-6225 card and trying to generate a pair of pulses using the digital lines and internal clock, but I am getting some odd/unexpected results.  Can someone explain?
    Basically what I want to do is generate a regular pulse over a (configured) set of lines.  The pulse will, typically, be 10ms wide at intervals between 900ms and 1,100ms.  The interval will only change occasionally and is usually 1 second (1,000).
    After looking at the various C# examples I created something like the following
            private DigitalWaveform[] m_digitalWaveform = null;
            private DigitalWaveform m_positiveDigitalWaveform = null;
            m_digitalTask = new Task;
            m_digitalTask.DOChannels.CreateChannel(
                "Dev1/port0/line0", "", ChannelLineGrouping.OneChannelForEachLine);
            m_digitalTask.DOChannels.CreateChannel(
                "Dev1/port0/line1", "", ChannelLineGrouping.OneChannelForEachLine);
            m_digitalTask.DOChannels.CreateChannel(
                "Dev1/port0/line2", "", ChannelLineGrouping.OneChannelForEachLine);
            // etc. ...
            // Repeat for each configured line
            double pulseSampleRate = 1000;
            int numberPulseOfSamples = 1000; // This varies between 900 and 1,100.
            int pulseWidth = numberPulseOfSamples / 100;
            int numberOfChannels = m_digitalTask.DOChannels.Count;
            m_digitalTask.Timing.ConfigureSampleClock(
                "/Dev1/Ctr1Source",
                pulseSampleRate, // 1,000 or anything!
                SampleClockActiveEdge.Rising,
                SampleQuantityMode.ContinuousSamples,
                numberPulseOfSamples);
            m_digitalTask.Control(TaskAction.Verify);
            // m_digitalTask.Done += new TaskDoneEventHandler(OnDigitalTaskDone);
            // m_digitalTask.SampleClock += new SampleClockEventHandler(OnClockSamplePulse);
            m_digitalWriter = new DigitalMultiChannelWriter(m_digitalTask.Stream);
            // Create an array of waveforms (1 per channel/line).  Each waveform being the same with the 1st 1%
            // being up and the other 99% being down.  Set the Timing interval at 1ms.
            m_digitalWaveform = new DigitalWaveform[numberOfChannels];
            m_positiveDigitalWaveform = new DigitalWaveform(numberOfSamples, 1, DigitalState.ForceDown);
            for (int sample=0; sample < pulseWidth; sample++)
                m_positiveDigitalWaveform.Signals[0].States[sampl​e] = DigitalState.ForceUp;
            m_positiveDigitalWaveform.Timing = WaveformTiming.CreateWithRegularInterval(
                                                    new TimeSpan(0, 0, 0, 0, 1));
            for (int channel=0; channel < numberOfChannels; channel++)
                m_digitalWaveform[channel] = m_positiveDigitalWaveform;
            m_digitalWriter.WriteWaveform(false,m_digitalWave​form);
            m_digitalTask.Start();
    1. First of all this only did something if the selected clock source was /Dev1/Ctr1Source.  No other clock would do, even though there are 2 clocks on the board (e.g. /Dev1/Ctr0Source did nothing).
    2. Secondly the waveform timing seemed to be ignored, e.g. leave it out or setting to something other than 1ms made no difference.
    3. Thirdly the pulse sample rate also seemed to be ignored, e.g. set it to 1 or 1,000 made no difference.
    4. Fourthly the pulse seemed to be spread over odd intervals.  Set the integer numberPulseOfSamples as follows
    NumberPulseOfSamples    Interval
    ========================================
    1,000                                9 (ish) seconds
    2,000                                18 (ish) seconds
    4,000                                36 (ish) seconds
    1,500                                6½ (ish) seconds
    3,000                                8½ (ish) seconds
    800                                   7 (ish) seconds
    Setting the number of pulse samples to a low value (500) threw an error (-200016, "device memory underflow") when stopping the task.
    Can someone shed some light on what is going on and how I can get what I want?

    I only seem able to select Ctr1Source, but this may be because (?) I have some clocked analogue input going on at the same time, so perhaps Ctr0Source is busy with this.  Unfortunately, the 2 examples of clocked digital wave forms doing a write use PipelinedSampleClock or BurstHandshake, although there are reads using a "SampleClock".  If you try to run the 2 examples you get an error
    Property: NationalInstruments.DAQmx.Timing.SampleTimingType
    You Have Requested: NationalInstruments.DAQmx.SampleTimingType.Pipelin​edSampleClock (or SampleTimingType.BurstHandshake)
    You Can Select: NationalInstruments.DAQmx.SampleTimingType.SampleC​lock, NationalInstruments.DAQmx.SampleTimingType.OnDeman​d, NationalInstruments.DAQmx.SampleTimingType.ChangeD​etection
    Task Name: _unnamedTask<0>
    Status Code: -200077
    So I guess the PCI-6225 board doesn't support them.

  • Why do I have to specify a rate when using an external Sample Clock?

    Set the approximate Rate of the external clock. This allows the internal characteristics of the acquisition to be as efficient as possible.
    How to understand?
    帖子被sillyball在02-25-2007 01:48 AM时编辑过了

    I think it is for optimization of the buffer.
    Ton
    Free Code Capture Tool! Version 2.1.3 with comments, web-upload, back-save and snippets!
    Nederlandse LabVIEW user groep www.lvug.nl
    My LabVIEW Ideas
    LabVIEW, programming like it should be!

  • External sample clock with pulse width measurement

    Dear all,
    I am using a NI 6220 board (programming with ANSI C) and would like to perform a "single pulse-width measurement" using an external gate signal and an external signal as source.
    Using the  "DAQmxCreateCIPulseWidthChan" command the program and card works only partly as intended. Namely, the external gate did work, but the card uses the internal 80 MHz time base signal instead of the external source connected to the default source pin (PFI 8).
    I tried to route another PFI pin to the default source pin using the "DAQmxConnectTerms" command but this did not help either.
    Obviously, I am missing something...
    Best, Uli
    Solved!
    Go to Solution.

    Hi Uli,
    I posted to your thread here.
    Best Regards,
    John Passiak

Maybe you are looking for