Zero crossing, "Triggering" and XY-Graphs

I'm trying to measure the electrical hysteresis of a sample.  The way in which I do this is by measuring two voltages within a circuit, sending them to my DAQ, and then plotting them in an XY-Graph to view the shape of the curve.  I can somewhat see the hysteresis, but II need to measure the "zero-crossings"; that is to say, the value of one function, when the other is 0, and vice versa.  So when V1 = 0, I want to know what V2 is, and when V2 = 0, I want to know what V1 is.  Seems simple enough, and I have included my VI.
First I tried the ZeroCrossingPtbyPt, along witha Relay, which never seemed to trigger properly.
Second, I tried using Trigger and Gate, but that seems to give inflated values.
This VI can be tested by removing the DAQ assitant and replacing it with two "Generate Signal"(s),  with the same frequency, different amplitudes, and a small phase difference, and this will produce a similar effect without the real signals.
Next, I am sending the raw voltage signals into a Waveform Graph.  However, it is impossible to get the traces to stay "still" on the graph.  In other words, if this were a real oscilloscope, there would be a "triggering" problem, and if the trigger were set to the proper value, the oscilloscope would be able to track the waveform without it jittering left to right in time.  Any ideas on this?  I've tried to change just about everything in the Waveform Graph with no difference.  Do I need to send in some other signal to get the graph to follow the waveform properly?  This is really important because it will tell me if my sample rate is good enough to capture the signal (a sine wave at 1 kHz).
 Finally, the hysteresis curve on the XY Graph seems to cover many cycles (periods) of the waveform, but I want it to cover only 1 cycle at a time, so it isn't so sketchy-looking.  It's very boxy as well.  So in short, the number of points it is plotting is fine, but it is not plotting them quickly enough, since I'd like all of the points it plots to be over a single period of the waveform.
Please help!  Thanks in advance.
Attachments:
hysteresis.vi ‏176 KB

As it turns out, the issue was that I was not collecting enough samples at a high enough sample rate from the DAQ.  This is why it worked with "Generate Signals" and did not work with the DAQ Assistant.  Because there were not enough samples, the apparent zero crossing was occuring either too early or too late, leading to an incorrect value.  Therefore, the best solution when it comes to finding zero crossings is make sure your # of samples, and sample rate are high enough to get an accurate measurement.
As a result, this is why my XY Graph was showing blocky hysteresis loops, rather than nice smooth curve hysteresis loops.  The data being sent to it was not quick enough, and therefore the XY- Graph connected the dots between the points that it was sent, yielding a truncated loop, which appeared blocky or sketchy.
On the issue of triggering, this can apparently be set within the DAQ Assistant in the "Triggering" tab; the key is chosing the correct channel to trigger from, and a reasonable trigger level.  This was my problem, and this is why my Graph appeared to jitter.  It was not the graph itself, but the DAQ Assistant that did not tell it the proper triggering timing.
So, in short, I solved my own problems, but I leave this as a record for those who encounter similar problems in the future.
Thanks.

Similar Messages

  • How to measure time difference between zero crossing of a sine wave and rise time of a pulse on a same graph?

    I have a 50Hz sine wave and a pulse signal on a same graph. The phase difference between two is between 0-90 degrees.
    Now I need to calculate the time difference between (when the sine wave crosses zero volts) and (when the pulse rises). The frequency will stay approximately same for both signals.
    The application is for a three phase generator. In simple words, when the time difference between the zero-crossing of sine wave and the pulse rises increases, that means that the load on the generator has increases.
    I am a beginner user of LabView (version 9, 2009), maybe it is a very simple problem but I've been pulling my hair out for the last few days and coudln't figure anything out. Any help would be greatly appreciated. I am using DAQ USB-6008 to measure these voltages and pulse from the generator and a sensor
    I have attached a jpg (a graph that i just made with excel to explain). The time 't' is what I am trying to measure
    Cheers
    Awais 
    Message Edited by awais.h on 03-30-2010 11:20 PM
    Message Edited by awais.h on 03-30-2010 11:21 PM
    Solved!
    Go to Solution.

    Hi
    Thanks for the code but I'm afraid it won't work. Like you said the probability of choosing a value that is on both graphs may not happen. This is something that I would like the code to do automatically.
    But I did use the previous code posted and made some modifications to it and it seems to work perfectly. Now the next thing is to be able to get just that one value that tells you the first time difference.
    Here is what I get using that code.
    As you can see from the t Values. I only need the one that is highlighted. If there is a way to filter out the rest it would be great.
    I was thinking of a while loop and as soon as the value is higher than 3E-5 it would store the number and stop the loop, but I'm not too familiar with arrays in labview.
    Here is the the code modified.
    As you can see, it wasn't that big of a modification and it still is your code.
    I will keep trying.
    Thanks for the help
    Attachments:
    FinalShockSpeed.vi ‏55 KB

  • Zero crossing and syncronizing

    I use 2 programs.I have atachetted them below.
     In "Line zero cross sync" I detect the crossings through zero of a sine and then for every crossing I try to write on a analog output an impulse.
     The second program "sincronizare cu reteaua subvi" measures the frequency of the signal and calculates a delay time.
     How can I delay the moment between detecting a zero crossing and writing the impuls, with the value calculated with the second program.
     The second problem: If I use a loop to delay the time how can I make sure that the two operations will be syncronized (if I modify the frequncy of the signal during the measurement I want the second program to modify the delay time simultaneously,not with a delay).
    I am using LabVIEW 8.0. 
    Thank you
    Attachments:
    Line zero cross sync.vi ‏85 KB
    sincronizare cu reteaua subvi.vi ‏32 KB

    I solved the problem.Thank you anyway

  • How to use analog Triggering and External clock scan

    Hi, there. I want to measure the engine cylinder pressure with an PXI6070-E card and BEI encoder. I have tried using Cont Acq&Graph ExtScanClk D-Trig.vi and Cont Acq&Graph ExtScanClk Soft A-Trig.vi , but they don't work. What I did was to connect a 50HZ pulse to PFI0 (analog triggering, I changed the code from digital triggering to analog triggering), and a 100K pulse to PFI7 (startscan), and an 50 HZ analog signal to ACH0. But the code always says: timeout. If I use internal clock, it works fine. Could you please give me some help? THANKS A LOT!

    Hey Wyuan,
    I tested the Cont Acq&Graph ExtScanClk Soft A-Trig.vi and it worked fine. However, the Cont Acq&Graph ExtScanClk D-Trig.vi has a small error in its logic that will prevent the data from ever being displayed to the graph. In order to run the examples you need to connect a trigger to pin 11 and a scan clock to pin 38. A 10kHz square wave would be fine for the clock signal and just a single pulse would work for the digital trigger.
    One additional think to keep in mind is the grounding. You might need to connect you ground from your signals to a DGND pin. I am including the two programs that I used for the test.
    I hope this helps,
    Joshua
    Attachments:
    Cont_Acq&Graph_ExtScanClk_D-Trig.vi ‏121 KB
    Cont_Acq&Graph_ExtScanClk_Soft_A-Trig.vi ‏153 KB

  • Record time of zero crossing

    I am trying to record the time for zero crossing in order to get the phase angle and inevitably get the power facto . soi was trying out a few ideas to  see if this is achievable and i came up with this . can someone tell me where i am wrong . or what to do  get the right values .. 
    Solved!
    Go to Solution.
    Attachments:
    zero crossing in waveform.vi ‏17 KB
    Zero Crossing.PNG ‏21 KB

    1. You need to pass the waveform into the Get Waveform Time Array.
    2. No need to wire up the N on the FOR loop since you are using Autoindexing tunnels.
    3. The Conditional Indexing tunnel is your friend here.
    There are only two ways to tell somebody thanks: Kudos and Marked Solutions
    Unofficial Forum Rules and Guidelines
    Attachments:
    zero crossing in waveform_BD.png ‏20 KB

  • Trigger, triggers and more triggers

    I've been given theenviable task of reviewing the triggers on a legacy application, as an example a typical table will have between 1 and 10 before insert triggers and I've been asked to validate the logic in the triggers.
    Does anyone know if there are any tools available to help with this, so far having looked at the first table (I was asked to loko at this specifically because someone wants to add yet another trigger) I'm starting to lose the will to live, 4 of the triggers currently in place alter similar fields makeing the results indeterminate. I have a nasty feeling the only way to be certain is to cross check every trigger and compile some kind of cross reference I'd really like some kind of toolset to make this easier.
    So far my analysis is the logic is horribly broken and really the whole shambles should be ripped out an re-wrtten properly this time, preferably fixing the problems in the front end rather than trying to bandage the data using triggers..

    You may have to look into dba_triggers and dba_dependenices too see how may triggers and if all depned on same object,
    This is why Tom kyte recommands using inline code instead of triggers.
    Good luck,

  • Looking for zero crossing point

    Hello,
    I have Amplitude vs. time data (wave).    
    I need to find the zero crossing time. Now I am using "For loop"  to search the Amplitude array for the index of the neighbor to zero through point by point, and then by linear inerpolating to get the zero crossing time.  When the point number is large, say 60kpts, it gets slow because the for loop "point by point" searching method, I think.
    I am wondering if there is any quick way to do that.
    Thanks,
    Wei Tong

    Try something like this, maybe? See if it makes sense.
    (It currently fails if a value is exactly zero and the function does not switch sign afterward. It just needs a bit more code to fix that. Modify as needed.)
    Message Edited by altenbach on 04-13-2008 12:52 PM
    LabVIEW Champion . Do more with less code and in less time .
    Attachments:
    ZeroCrossings.png ‏33 KB
    ZeroCrossings.vi ‏57 KB

  • I wanted a zero crossing detector for a a acquired wave form.

    it shoul detect the zero crossing of a wave

    The technique for finding a zero crossing is basically to detect a change in sign between two consecutive numbers. You need to evaluate the previous number sign with the current number.
    A common way to do so is by multiplying the previous number and the current number. If the product is positive, both has the same sign and thus there was no zero crossing. If the product is negative, there was a zero crossing.
    Make sure you are sampling you signal fast enough to accurately detect when the zero crossing occur. If you know your signal, you may easily calculate the exact moment based on your aqcuired information.
    Best regards;
    Enrique Vargas
    www.vartortech.com

  • Duration of a zero crossing

    Hi all,
    I m a newbie to LabVIEW and I really need some help with some zero
    crossing issues.
    I have a wave generated from the values output by a pressure sensor. I
    differentiated this wave to obtain a wave with peaks, valleys and zero-
    crossings. Then I used the sign generating vi to generate another
    square wave depending on if the value is positive negative or zero.
    What I need to do now is to find the time duration between each zero
    crossing.i.e. How much time elapses before the next zero crossing
    occurs. Any ideas how to do this ?
    Thanks and regards.

    Here's a small VI which does part of that
    Have a nice day!!!
    LabVIEW | LabWindows/CVI | TestStand
    Certified LabVIEW Architect
    Attachments:
    Duration between peaks.vi ‏18 KB

  • Phase angle measurement using zero crossing

    I am using  zero crossing to measure the phase angle between (voltage and current) which is represented as  two input in my vi  to  eventually get the power factor. But however the reading i got for the power factor remain at 1 all through no changes. I am using an SCT- 013 -000 current transformer for the current and a power transformer for the voltage 240 - 6V . below is my vi . Can anyone help me troubleshoot why my result is showing 1 for different loads  including resistive , capacitive and inductive loads . 
    Attachments:
    Phase Angle Measurement.vi ‏39 KB

    Are you working with Nigel91 who posted a similar question in the Electrical Power Suite board?
    You have the same problem that he has. For dt = 0.02 (equivalent to a 50 Hz sampling rate) you cannot measure anything about a signal with a frequency higher than 25 Hz. And you could not get meaningful phase information at frequencies above a few hertz.
    To get good phase information at typical power line frequencies sampling rates of 1000-1200 Hz or higher should be used.
    Lynn

  • Zero-cross​ing function

    Hi,
    I found this zero-crossing function in one of the old forums and I'm trying to understand how it works. In my case I have two sine waves, instead of one square pulse but I can't really figure out how this function works. I know that first, the waves are generated then you get their attributes, the data values go into the zero-crossing detector that controls the case statement but I don't know how the trigger time and time interaval are used to build the array, I think the timestamp outside the 'for' loop is for storing the previous itteration of the zero-crossings but I'm not really sure.I have no clue what happens in the final step before the zero-crossing times are subtarcted, as in the threshold array and so on. I've read how each function individually but I can't add the blocks together.
    So I was wondering if someone could please explain how this works?
    Thanks
    Solved!
    Go to Solution.
    Attachments:
    Zerocros.png ‏131 KB

    Adding to what crossrulz said, it helps to understand what the code you're looking at is.
    It would appear you don't quite understand what t0 and dt are.  t0 is the time at the initial point in the waveform.  This can be a wide variety of times rather than simply 0.  dt is the amount of time between samples.  If we multiply the iteration by dt, we know how much time has passed since the first sample.  After 0, 0dt is the same as 0s.  From there, 1dt, 2dt, 3dt, etc can all be calculated to a value measuring time.  But, it's only measuring "time since the first sample."  If it's only measuring that, the timestamp could be meaningless.  If you want to convert the time since first sample to an actual time, you need to add the initial time to it.  As an example, if dt is 1s and t0 is 4:00:00pm, after 3 samples we are at 2dt so 2 seconds.  Do we care about 2 seconds or 4:00:02?
    The "big timestamp array" is being fed into what is called a shift-register.  You can use this register to pass values between iterations of a loop.  Before the loop, we feed an uninitialized array into the shift register.  The first time the build array is used, it's fed an empty array and the first timestamp to save.  This is then output to the shift register on the right side of the loop.  This value is passed to the next iteration.  It will persist until we reach the build array for the second time.  Now, the 1 element array is fed into the top input of the build array and a new timestamp is added to the end of the array.  This will continue with the n-sized array being fed to the top input and the newest timestamp being added to the end to make an array of size n+1.  If we want to maintain all of the timestamps, we need logic similar to this.  You could plug it into the bottom and the new timestamp to the top.  This would put the newest timestamps in the first element of the array.  You just want to include the old array so you keep all of the timestamps instead of just the most recent.

  • How to create bar and pie graph from a backing bean in ADF

    HI,
    my requirement is to populate a line and pie graph based on a collection in a backing bean.
    I got the solution for the bar graph with setTabularData(list data) method in one of the thread.
    For bar graph,
    i constructed the list for the setTabularData(list) method but it is not working with the line and pie graph.Coul'd you explain why?..
    Is it different for the line and pie graph.I don't want to use adf bindings.
    thanks in advance.
    Anil.G

    HI,
    my requirement is to populate a line and pie graph based on a collection in a backing bean.
    I got the solution for the bar graph with setTabularData(list data) method in one of the thread.
    For bar graph,
    i constructed the list for the setTabularData(list) method but it is not working with the line and pie graph.Coul'd you explain why?..
    Is it different for the line and pie graph.I don't want to use adf bindings.
    thanks in advance.
    Anil.G

  • Problem in Server Admin: cpu and network graphs not updated or empty after lion server update

    Hi!
    Just for archive purpouses because i've already solved that!
    After upgrading from OSX Server 10.7 to 10.7.1 my CPU and Network graphs in Server Admin stop being updated.
    In 24h the graphs where blank (disk usage graph seem to keep working).
    First i read about "what is the application responsible for this"; it's called ServerPerfLog, and you can see if it's running that way:
         # ps ax | grep ServerPerf
    If you don't see anything else than your own "grep", that means that no application is running, no data is being collected.
         41324 s000  R+     0:00.00 grep ServerPerf
    A positive response for this (meaning that the service is running) should be something like that (2 lines: your grep and the service app itself):
         94   ??  Ss     0:04.71 /usr/libexec/ServerPerfLog
         41344 s000  R+     0:00.00 grep ServerPerf
    Later i read about "where is the config file for this service app", and you can find it here:
         /System/Library/LaunchDaemons/com.apple.ServerPerfLog.plist
    If you edit this config file, check that the "Key > Disabled" is set to "False"
         # vi /System/Library/LaunchDaemons/com.apple.ServerPerfLog.plist
            <key>Disabled</key>
            <false/>
    After that, i try to launch the service that updates this graphs again, by hand, performing the following command:
         # sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ServerPerfLog.plist
    And the service got launch!!! yeeeepa!! i see a first update in graph data.
    Also the "ps" query reply that the service was running!!
    The bad things came a day after, when i saw that the graphs stop again....
    I check if the service was running executing again the "ps" command, and that show me that the service was stopped again; no ServerPerfLog process was running.
    But r e l a x, because the process hang because of a permissions problem.
    You should know, I run "Repair permissions" within "Disk Utilities" over the running system disk, eeee... voila!
    I hope that helps someone to get his fancy graphs back!
    Regards,
    t

    You are God like!!! Wooo hooo! Thanks bud!

  • Function and triggers and procedures

    sorry to asking this question,
    In oracle. we use the function and triggers and procedure.
    for eg:
    if we wrote an trigger for a table. it fires at a time manipulating table. (database contains table contains datas and database also contains triggers likewise function,procedure).
    but my questions?: is
    In my database I kept only tables. no triggers,no function,no procedures. and
    i dont want to kept this triggers, function, procedures in database  Instead of i want to kept this triggers, function, procedures in business logic layers(middle tier)
    is it possible? .
    if yes means, how to write or where to write? please help me, or else send the guidance documents or blog releated to it.

    Subu123,
    the +1 related to Would be great if you can take step back and see the implementation from another angle. First see why do you need DB trigger/function etc.Then check whether it is possible to implement the functionality using ADF BC + feasibility study between 2 approaches(I didn't mean to invoke DB objects from business components, instead checking the feasibility of implement the same functionality in your EntityObj/ViewObj/Service calls )Before making a decision for or against holding fuctions, triggers and procedures in the DB, you have to get the whole picture.
    Think about a trigger outside the DB. What could this be and why or for what is it used?
    All the answers are pointing to 'lets keep them in the DB'. Now there are situation where you don't have a DB or are not allows to use it. Still there can be triggers, only they are implemented in a different way.
    The same can be said for procedures and functions.
    So you have to think about the whole problem and how each sub problem you have to solve work together to resolve the whole problem.
    I'm personally tend to keep the business logic the the DB if the business logic is already there (e.g. I have to migrate an old forms app).
    If I design a new app I tend to keep the logic in java. Only sequences (for generating ids) and some other stuff which is purely db related like cleaning up tables I keep in the DB.
    Timo

  • Getting the default zero-rated sales and purchase tax codes

    Hi,
    Does anyone know how to obtain the default zero-rated sales and purchase tax codes? ie the tax exempt sale and purchase tax codes.  The OADM holds the default sales and purchase tax codes but not the default zero-rated sales and purchase tax codes. Is this set by region?
    Lita

    Hi Lita,
    I don't know much about the zero rated tax codes or where it is set up, but what I can suggest is if you know where the system retrieves it (say on an Invoice) that you use SQL Profiler to possibly investigate where the queries are pulled from.
    Where in SBO is the zero-rated tax codes used?
    Hope it helps,
    Adele

Maybe you are looking for

  • Negaive asset value in AS91

    Hi , Could any one expalin me how to make subsequent postings if we maintain negative asset values in AS91? How to do write up postings? What should be the transaction type for write up? Please share your valuable knowledge. Thanks in advance. Smruti

  • Billing Qty in Third party sales

    Hi , I am MM person , executing a Cycle for third party Sales. I have query regarding Item category , in std SAP Billing relevance field value for Item category TAS is set as F ... what does it mean ? What if i set it to B , what would be difference

  • Error while trying to do the synchronization

    Hi Friends, I am new to NWDS-Java, we got a requirement in our project to work on.. I will breif you the steps i hv follwed: 1) installed a NWDS 2) created a client and did settings in the preference->JDI->DevelopmentConfigurationPool set the URL and

  • Can I automate price alterations within indesign cs4 by percentage

    I am in the middle of creating a menu for a client and the prices need to be raised 20% throughout the document. im not sure if there is or isn't a way of making indesign calculate the 20% increase in prices and adjusting them accordingly if there is

  • Mountain Lion Missing Report Safari Bugs Menu Item?

    I recall a Bug reporting menu option in Safari which seems to have disappeared in the latest version in Mountain Lion. Or am I missing it? Perhaps the Apple folks think Safari is now perfect. ;-) I was trying to view photos of this Hilton http://www.