Measure the time between the ridges of the periodic input signal

We have built a circuit which is supposed to mimic an Exercycle.  We have an IR switch and a spinning wheel, the rccb meets a comparator circuit and the output of the element of comparison, we have running in LabView.  We successfully were able to measure the number of rotations of the wheel and the total distance travelled by the wheel, but are struggling to measure speed.  We cannot find a way to measure the time between picks in real time, which we could then divide the wheel circumference and calculate the speed in real time.  The VI I posted has a square wave simulated rather than the signal we receive on our circuit.  Thanks in advance for the help.

Jon and David

I think you're overloading the things trying to get the time between two pulses.  Instead, you can use the VI Express your measures and select frequency for her custom. Then, you can multiply the circumference of the wheel of the frequency to get the speed.

I hope this helps.

-Christina

Tags: NI Software

Similar Questions

  • Measure the period and the peak value at crest of a sine wave

    Hello

    I am new to Veristand and Labview and I was wondering if there is the possibility to do the following:

    I would like to measure the period of a sine wave that I capture from analog input of my data acquisition (SMU-6363). Apart from that, I also want to measure the value of crete to crete (Vpp) of the sine wave.

    I hope you can help out me.

    Thank you.

    If the sine wave is of significantly higher frequency than the primary control loop can run... The best way to do it would be to put the DAQ hardware in waveform input mode and use a custom device to read the waveform and perform analyses.

    an example is here: requires some labview skills

    \examples\NI VeriStand\Custom analysis Devices\waveform

  • How do I get the analog input signal and send it to output analog (real time)

    Hello world

    I do a simple task in Visual C++ and I use PCI-6221(37 pin).

    Basically, I want to send the same signal of "analog input" to the "analog output".

    at the same time (or almost), to make real-time application.

    Can someone provide me with sample program please.

    I would be grateful if you could provide me with the great tutorial that explains

    step by step everything about NOR-DAQmx for C/C++ programming.

    Best regards

    Khassan

    This is my code in C++, you can optimize it if that seems too messy. This code reads the analog input signals and exports it through the analog outputs.

    To make this code additional work of the directories include and library directories must be added to OR.

    I hope it helps someone.

    #include
    #include
    #include "NIDAQmx.h".
    #include

    #define DAQmxErrChk (functionCall) {if (DAQmxFailed (error = (functionCall))) {goto error ;}}

    int main (int argc, char * argv [])
    {
    Int32 error = 0;
    TaskHandle taskHandleRead = 0, taskHandleWrite = 0;
    Read Int32 = 0;
    float64 context [1000];
    char errBuffRead [2048] = {'\0'};
    char errBuffWrite [2048] = {'\0'};
    bool32 done = 0;
    Int32 wrote;

    DAQmxErrChk (DAQmxCreateTask("",&taskHandleRead));
    DAQmxErrChk (DAQmxCreateAIVoltageChan(taskHandleRead,"Dev1/ai0","",DAQmx_Val_Cfg_Default,-10.0,10.0,DAQmx_Val_Volts,NULL));
    DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandleRead,"",100.0,DAQmx_Val_Rising,DAQmx_Val_ContSamps,0));
    DAQmxErrChk (DAQmxCreateTask("",&taskHandleWrite));
    DAQmxErrChk (DAQmxCreateAOVoltageChan(taskHandleWrite,"Dev1/ao0","",-10.0,10.0,DAQmx_Val_Volts,NULL));
    DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandleWrite,"ai/SampleClock",100.0,DAQmx_Val_Rising,DAQmx_Val_ContSamps,1000));

    DAQmxErrChk (DAQmxStartTask (taskHandleRead));
    DAQmxErrChk (DAQmxStartTask (taskHandleWrite));

    While (! fact &! _kbhit())

    {

    DAQmxErrChk (DAQmxReadAnalogF64(taskHandleRead,1,10,DAQmx_Val_GroupByScanNumber,dataRead,1000,&read,));

    DAQmxErrChk (DAQmxWriteAnalogF64(taskHandleWrite,read,0,10.0,DAQmx_Val_GroupByChannel,dataRead,&written,));

    }
    _getch();

    Error:
    If (DAQmxFailed (error))

    {
    DAQmxGetExtendedErrorInfo (errBuffRead, 2048);
    DAQmxGetExtendedErrorInfo (errBuffWrite, 2048);
    }
    If (taskHandleRead! = 0)

    {

    DAQmxStopTask (taskHandleRead);
    DAQmxClearTask (taskHandleRead);
    }
    If (taskHandleWrite! = 0)

    {

    DAQmxStopTask (taskHandleWrite);
    DAQmxClearTask (taskHandleWrite);
    }
    If {(DAQmxFailed (error))
    printf ("error DAQmx: %s\n",errBuffRead); ")
    printf ("error DAQmx: %s\n",errBuffWrite); ")
    }
    printf ("end of the program, press the Enter key to quit\n");
    GetChar ();
    return 0;
    }

  • create 4 pulse digital output at the base of the ttl input signal

    Hello

    I am a beginner in Labview and would welcome advice on how to solve the following problem.

    I'm setting up a train of pulses TTL and would like to send in Labview as input.  Each falling edge detected on the input signal, I would like to as Labview to generate 4 pulse digital output.  For each output pulse, I would like to be able to specify the period and duration.       The image should illustrate more clearly, with the figures showing the expected scale.

    System: NI PCI-6733 data acquisition card, Labview 8.5

    My daq card has 2 timers 24-bit and 8 e / s digital, but I don't know what the best approach is to create between the pulse output of 4 to 8 of this precision... should it be handled at the hardware or software level?  And how would I go about it

    Thank you

    -Sidney

    Hi noli.

    I found the problem, in fact PCI-6733 support only avoiding the digital output. The timing of software is limited to 1 kHz in case better.

    I'm sorry, but this function is not possible with a PCI-6733.

    Concerning

  • Movement, measurement and time between them

    Hello friends,

    I have a doubt with my program. I made a statemachine (using the 9.0 lab, which is not possible to use a new) to move two motors and a measure of the (curved). Move engines measurement is performed, and this measurement is done in the same time Motors move, why?

    What should I do? I want the engines move, and then do the measure, when this is done, then move the engines again and so on.

    Any idea? Any help is appreciated.

    Attached you will find the program (sorry because of the drivers, they are Thorlabs for engines and Keithley 2400 for the measure)


  • Input signal of the meter

    Hello everyone.

    I'm very new to the hearing, I have a question please. I watch a tutorial that explains the counter input Signal. When I right click inside the box to level it is low-Out.

    Thank you very much.

    missing-icon.jpg

    UPDATE: I HAD TO HAVE THE MICROPHONE ATTACHED TO MY COMPUETR. I DON'T HAVE THE MICROPHONE CONNECTED TO MY COMPUTER.

    Yes, you need a front entrance you can it meters.

  • Measure the time difference between a digital output and an analog input that responded to the questionnaire

    Hallo,

    I use the following system:

    • OR PXI-1044 with controller NI PXI-8109

    • OR PXI-2564 switch module to turn on the monitor of my test device

    • Data acquisition multifunction NI PXI-6259 to measure the signal that responded to the questionnaire jump

    The two cards are the same - PXI trigger bus. For both, PXI-2564 and PXI-6259 I use DAQmx to set the reading and writing of the channels.

    Now, I want to measure the time between the digital output, my unit turns and the analog input, which measures the response of my system.

    I can't do work by myself, please help me!

    I thank Ludwig.

    Hi Ludwig,.

    If you can't give us any VI we have difficulties with to help you.

    Because I Donat knowledge how your program is mounted it is not easy to know where you should enter signals.

    Here's a question similar to yours:

    http://forums.NI.com/T5/LabVIEW/best-way-to-measure-time/TD-p/178704

    and 2 external links:

    http://www.ehow.com/how_8698983_measure-time-LabVIEW.html

    http://objectmix.com/LabVIEW/385152-how-can-i-use-LabVIEW-measure-time-between-analog-pulses.html

  • How can I measure the time between the two edges of successive increase, using digital input...

    Hello

    I'm trying to measure the time in seconds between each two successive rising edges on a digital input.

    So far I managed to detect the rising edge, increment a counter at each rising edge and take the time during which the increase is edge

    all I need now is subtract edge currently rising from the previous era of edge rising to calculate (T), which can be 1/frequency and display in real time for the user.

    but I do not know how to do this

    Can someone help me please!

    Note: while I am in a position varies between 200 ms - 2 seconds


  • How can I measure the time between each two successive increase edges, using digital input?

    Hello

    I have tried two measure the time in seconds between each two successive rising edges on a digital input.

    So far I managed to detect the rising edge, increment a counter at each rising edge and take the time during which the increase is edge

    all I need now is subtract edge currently rising from the previous era of edge rising to calculate (T), which can be 1/frequency and display in real time for the user.

    but I do not know how to do this

    Can someone help me please!

    Woah!

    Sorry Apok, but your code becomes much too complicated and salty. I don't think that all records to offset or Boolean conversion/operators are necessary at all.

    If you want to measure the time between two keys so it's another (much less complicated) way. It simply records the time when press button in a registry change, then compares the two.

  • Measure the time between two digital pulse

    Hello

    For a non-critical calendar application, I need to measure the time interval between consecutive TTL pulses, ranging from the order of 0.5 s for a few seconds, with a low accuracy of +/-10-50ms. The interval being measured varies between the rising edge of the first pulse and the front of the next and so on.

    I have several input lines I need to deal with. Because it's a critical machination low cost, I don't want to use digital counters for each line, so I work with an acquisition of data USB6008 and have connected the input rows TTL on the digital inputs of the device. Avoiding will be sufficient.

    I found a good example of VI on discussion forums that does almost the same thing, only it uses instead of the DAQ Assistant user input. The VI works including the time the program going on in a while loop. I replaced with the DAQ Assistant output (a channel) user input in the hope that it is still work.

    When I run the program in "run once" mode, it seems to work perfectly. However, in "continuous run" it measures only a very small interval, probably just the time between two samples.  I think it has something to do with the help of a while loop in combination with the DAQ Assistant. Anyone who has any suggestions how to solve this problem?

    Thank you!

    OK... first of all, you should never use the button "run continuously.  I wish that NEITHER would be to eliminate it, but told me that it is sometimes useful for debugging.  If you want your program to run over and over again, use a while loop with a stop"" button.

    If I'm reading your code correctly, you make your initial moment, and then collect data from data acquisition.  When one of the channels is "T", you stop your loop and the end time of capture.  (By the way, why you convert your table to a cluster?  Why not just index the appropriate channel in the table directly?)

    Since you want to capture the time between two consecutive pulses, you need to know when a transition has occurred... i. e when your digital line went from F (no pulse) to T (pulse start).  This will give you your forehead.  Right now, all you're doing is looking for a value T - so you have no way of knowing if you are looking for to the previous impulse again, or a new impetus.  You also burn 100% of your processor with the way you have your programme in place.

    You need a small loop delay so that your VI is not 100% of your hogs CPU time.  Given that you can live with an accuracy of 50msec, what I suggest that you use.

    See attached picture for you give an idea of how to implement.  He will probably need some refining operations, but it should point you in the right direction.

    I hope this helps.

  • How to measure the difference in time between the passage by zero of a sine wave and the rise time of a pulse on a same graphic?

    I have a sine wave of 50 Hz and a pulse of the signal on the same chart. The difference in phase between the two is between 0-90 degrees.

    Now I need to calculate the time difference between (when the sinusoidal wave passes through zero volts) and (when the pulse increases). The frequency will remain about even for the two signals.

    The request is for a three-phase generator. In simple terms, when the difference in time between the passage to zero of the sine wave and pulse increases increases, it means that the load on the generator has increased.

    I am a novice user of LabView (version 9, 2009), maybe it's a very simple problem but I was pulling on my hair for the past few days and couldn't understand anything. Any help would be greatly appreciated. I use DAQ USB-6008 to measure these tensions and the impulse of the generator and a sensor

    I have attached a jpg file (a graphic that I just did with excel to explain). The time 't' is what I'm trying to measure

    See you soon

    Zdzislaw

    Awais.h,

    For problems of this kind I recommend start writing the granular steps you would take to manually fix this problem.  You can't say LabVIEW (or any programming language) If you can't succinctly describe the solution to your problem.

    The I want to address this problem is to:

    1. find all the zero crossing points and edges on the rise
    2. for every rising edge find the difference between the timestamp and previous passage by zero

    Here is an implementation of this algorithm LabVIEW:

  • How to measure the time elapsed between two steps?

    Hello

    In my script, I ask the subsequences. How can I measure the time it takes each subsequence?

    Something like:

    Statement: StationGlobals.TimeElapsed = 0

    -> SOMETHING HERE TO START A COUNTER<>

    call sous-suite

    Popup: Str (TimeElapsed)

    Thanks for help

    StationGlobals.Time = Seconds()

    ... / / stuff in time

    StationGlobals.Time = Seconds() - StationGlobals.Time

    You can also view the sample report of basic step in 2012 TestStand time (you can now download an eval).

  • measure the distance between 2 impulses (PCI-6221)

    Hello

    I have a digital signal that sends a pair of impulses (100ns width each) roughly every 100ms and I measure the time between two pulses of a pair (with a resolution of 100 ns).
    For the moment, I got a card PCI-6221 to accomplish this task. Unfortunately, I have no solution until now only measures of counter, I found measure time between constant frequency signals, i.e. they cannot measure the distance between 2 single pulses.

    Any help / ideas / or even telling me that it is impossible to solve this task are appreciated

    Are the two pulses on the same line?

    If so, you need to just configure a task of the measurement period.  If they are on separate lines, you would use a task of "separation of two-edge.

    You might be to throw off by the timing of it:

    If you do not configure implicit synchronization in your task, will start on the first edge after DAQmx Read is called.  Thus, in order to intercept the signal, that you must configure your task, call DAQmx Read and then start your two squares.

    If you want the task to control the signal continuously, you must configure name timing.  In this case, you will receive a sample on each rising edge of the external signal (assuming that the two impulses on the same line) - If you start the task of counter before starting the production of pulses (which you probably should), then the same samples correspond to the time between pulses, the odd samples would be the time between each series of pulses.

    More information on modes of counting on the 6221 lie in the M series user manual.

    Best regards

  • How to find the time between two channels of entry in the data acquisition card or pci 6036

    Hello

    I read a lot-related posts on the simultaneous measurement of two input voltage of similar channels in map data acquisition. I know that the best material is "simultaneous measurments of the Series DAQ cards" but I only pci data acquisition card 6036 and I try to understand what is the time between the reading of the two channels . This period is always constant? (must it rely on a voltage (amplitude, frequency, waveform..). I send the sine wave (s) to the two channels and read the values of V, if they read the same value, the difference should always be zero but I get-0,002 to 0.002 Volt difference (I must find a way to convert it in time). A screenshot of my VI is attached. I wonder how I can accurately measure the time delay between the channel.

    I am open to any suggestion, my final goal to read exactly two channels at the same time ((ou connaître le délai exact donc je peux correspondre les données correspondantes étant donné le temps de retard))

    Hi spinup,

    better you should post your question in the forum of LabVIEW, LabWindows/CVI is used

    Good luck.

  • Measure the time of the rising edges of a digital stream using a USB-6341

    I have a DAQ USB-6341 map.

    I use Measurement Studio (writing code in c#) on a Windows 7 computer.

    I'm relatively new to the DAQ cards, programming, so I could ask something that is obvious (sorry if this is the case).

    I went out a stream of digital pulses to an analog output channel.  I wired this channel to one input of the meter channel.  I am able to measure the number of edges upward to the inlet of the meter channel (since the digial flow is continuous, the number of rising edges increases with time).

    I would like a time stamp of each rising transition and I like to keep these timestamps in a table without ever growing (or maybe bin these timestamps in a histogram).

    Set up the meter channel to provide the timestamp data? (rather than just count)

    Thank you for your help.

    WRB,

    The meter must be able to measure the relative time between the different edges of your signal.  To do this, you will take care to set the meter to measure time.  It will measure how long a full period of your signal takes.  You can configure edge that you want to start with.  You'll want to set up your timed 'implied' measure.  This sets up the meter to automatically take action whenever a period is over.  While it's not exactly a timestamp, you can find the distance between two edges by adding the time periods between the banks in question.

    I see another technique that you can use.  This would put the counter to edges of County one of the basics of time of your device (it has 100 KHz, 20 MHz and 100 MHz bases long).  Then configure the task to use your signal as a sample (configuration to use rising edge) clock.  Whenever the song occurs, you will get the number of ticks ticks selected timebase that took place at that time.  One thing to note here, however, is that the counters are 32-bit wide, so your code will have to manage the overthrow of this charge if you are using a fast time and base running for long periods of time.

    Hope that helps,

    Dan

Maybe you are looking for