Calculate Square wave Duty Cycle

Hello everyone,
I'm acquiring (with USB-6212) a square wave, "100Hz" with variable duty cycle - which can be 20%, 50% or 80% - for matters of decodification; the acquisition frequency is set to 4k. Actually, I said the frequency is 100Hz, because I get a rising edge every 10ms, but the length of the high level is defined by the communication protocol and that is what I called duty cycle (even though this does not match the exact definition of this property)
Since I need to decode the information contained by the wave, it's necessary for me to be able to tell what the duty cycle is. I've acomplished this so far by taking the derivative of the signal, then calculating peaks and valleys index in the waveform and finally subtracting them, as shown below.
It works ok almost the whole opeartion, however, the acquisition is not 100% exact. Sometimes I get the signal in the picture A, that is ideal for what I intended.
Other times, the signal is like B and the derivative amplitude does not cross my threshold, even though there is a rising edge there. I could lower my threshold to 2, for instance, but then I'd get vulnerable to the signal in picture C, which would accuse 2 peaks, instead of just one.
Anyone have an idea on how to work around this or any other method more reliable than taking the derivative of the signal?
Solved!
Go to Solution.

Well, we can only answer question based on the information supplied!  The LabVIEW Mind Reading Toolkit is still in development.
Your application is one where parallel loops may be valuable.  In the acquisition loop you read data from the data acquistion device at a rate which optimizes the DAQ perfomance (the >= 2k points you mentioned).  The data is transferred to an analysis loop via a queue. In the anaylsis loop you can put the data into a shift register.  When more data is available from the Acquisition loop, dequeue it and append it to the data in the shift register.  The Duty Cycle section will find two consecutive rising edges and the falling edge between them ( the 10 ms segment).  It calculates the duty cycle for that segment. Then it uses the second of the rising edges as the first rising edge for the next segment.  Repeat until duty cycles have been determined for all segments.
There are a lot of details which can be imprortant in a process like this. Many of them are dependent on other things you have not specified.  What will be done with the duty cycle values? Is the raw data to be displayed? Saved to file? Discarded after the duty cycle is measured?  How long will the process continue?  How much data can accumulate?
Lynn

Similar Messages

  • Custom square wave duty cycle in signal express

    Hey everyone,
      I am using an USB X Series Multifunctional DAQ Model 6361, with labview signal express 11 on windows7 (version 9.3.5) and I am trying to figure out if i can change the duty cycle of a square wave.  I need to have one period be at 75% duty cycle and another 25% or something along these lines.
    thanks!
    Adam 

    Hi Adam,
    I believe another Applications Engineer has corresponded with you concerning this issue already. If you are looking to generate a truly custom square wave where the duty cycle changes from one period to the next then you will need LabVIEW as this functionality is not supported in SignalExpress. 
    Using the Analog Output along with the Create Analog Signals options will allow you to specify one fixed duty cycle for your square wave, but this will remain constant throughout the generation. 
    Regards,
    James D.
    Applications Engineer
    National Instruments

  • Bad Duty Cycle readings

    Hello!
     I’m building an application in which I want to measure a duty cycle.  I can control the “Duty Cycle In” and the FCM analyzes the info and sends a signal to the Motor. I want to measure the “Duty Cycle Out” of the motor. (I attached diagram) For this measurement I just connected a wire to the negative side of the motor. To calculate this Duty Cycle I am measuring the period and the pulse width. The program works very good when I have a “Duty Cycle Out” from 1% to 99%, but whenever is 0 or 100% it shows wrong info. I would expect that the pulse width at 0% or 100% is cero, but LabVIEW shows a value (1,1E-5 s) and calculates a Duty Cycle of about 23% which is totally wrong.  Also, if I run the program for the first time and I measure this pulse width with a “Duty Cycle In” of 0%, pulse width is cero., but whenever I change the “Duty Cycle In” to 10% or higher, and then I go back to a “Duty Cycle In” of  0% it shows a value, and calculates a bad Duty Cycle. I don’t know why this only happens when I put higher “Duty Cycles In”, and then I go back to 0%. I measured the signal with an oscilloscope and there is nothing, not even noise! I don’t know how the card gets these lectures.   Do you have any suggestions of what can be wrong?
    Appreciated! 
    Solved!
    Go to Solution.
    Attachments:
    Diagram.JPG ‏33 KB

    Hi Elmar
    Thanks for the reply. I attached my Code. I am measuring the period with ctr0 and pulse width with ctr1. I divide Pulse Width / Period to obtain the Duty Cycle. To detect 0% and 100% I compare the value of pulse width to zero. I created an additional Digital Input, with this channel I check if the signal is high or low. So if Pulse Width is zero, I read from the Digital Input the level of the signal, and then I know whether is 100% or 0%. My problem is when I have a Duty Cycle of 0 or 100%, the DAQ keeps sending a value for the pulse width, and I cannot apply the method explained before. I think this value should be zero, I don’t know if I am mistaken.    
    Attachments:
    PWM_Measurement.vi ‏61 KB
    PWM_Measurement.JPG ‏151 KB

  • Duty cycle two AO signals with a square wave

    Hello,
    I am running two devices with sending two AO signals (sine wave) out simultanously in my code. I need to duty cycle my signals. in other words, I want to turn ON and OFF the devices continously.In order to do that, I am using a square wave generator with 50% duty cycle. The devices should be running when the square wave has positive values and should be OFF when it is negative. 
    The code almost does that, but it does not seem to be as fast as it is supposed to, based on the square wave's frequency. I was wondering if anyone can help me with this problem. In addition, I am not sure if this is the best method to do that, please let me know if there is a better way. I also attached the VI .
    Thanks,
    Pooya
    Solved!
    Go to Solution.
    Attachments:
    2AOsignal_dutycycle.vi ‏47 KB

    I am using NI-PCI 6071E with BNC 2120as an interface. I am not sure if the problem is the hardware limits. Attahced please find the subvis which I used in my main VI. 
    one of the which has a for loop (duty_cycle.vi) works just fine and the other one (duty_cycle(new).vi), which is the one I am using in my VI, does not. Any thoughts?
    Attachments:
    duty_cycle (New).vi ‏23 KB
    duty_cycle.vi ‏25 KB

  • Generating square wave with variable duty cycle

    We like to generate a square wave with variable duty cycle using LabView 6.1 and SCB-68 and this duty cycle comes from some PID controller programmed by LabView by reading a voltage and feeding back this square wave

    the story begins with some one called separately excited DC motor
    this thing sometimes changes its speed
    so we are trying to keep a constant speed
    irrespective of the load no matter how it changes
    this comes by reading the voltage out from
    the tackometer which represents the speed as voltage
    then comparing this with a reference set by the labview program
    the labview program will send a control signal to some chopper circuit
    which is connected to the field of the motor which controls the speed
    we are tending to make the labview program as pid controller
    that will generate our beatiful square wave with some duty cycle
    which will vary to increase or decrease the voltage across the field
    we tried "Real-Time PID Control.vi" example and other examples
    and we are discussing different solutions for this duty cycle thing
    but till now no output
    this is our whole story with this DC motor thing

  • I am working with the NI PCI-5411 AWG in arbitrary mode. How change the duty cycle of the square wave output located at the Sync connector by software?

    We use Labview 7.0 and NI fgen 2.1 in order to drive the pci card.Can you send me a VI example?

    Hi LtDel,
    To achieve this you will need to insert an niFgen property node from the niFgen functions palette into your code flow somewhere in amongst the configuration vi steps. Wire up the reference and error inputs and outputs. Left click on the "property" and select >>output attributes>>sync duty cycle high. Right click and set to "write" then wire in a control or constant defining the % duty cycle for the high phase.
    Hope this helps,
    Nick

  • Sine, Square & Sawtooth sweep generation with variable duty cycle/rise time & fall time

    Dear All !
    I request and need some candid advices on the subject issue keeping in view the following notes:
    1) I am a novice in LabView.
    2) I was an average Electronics Engineering graduate who graduated about 9 years ago and since then I have not been involved in Electronics Engineering.
    I have undertaken a task or generation of Sine, Square and Saw Tooth wave forms. All these waveforms are to be frequency swept form 1 Hz to 100 kHz. The amplitude of all these waveforms should be able to be adjusted. The duty cycle of Square Wave should also be adjustable (or better be able to be swept). Likewise the rise time and fall time of sawtooth wave should also be adjustable (or better be able to be swept).
    I am considering  other options as well but wanna try it on LabView.
    I wish to ask that is it possible to execute this task in Labview 7.0? If possible then considering the para 1 & 2 above, is it possible for me to finish this task in 15-20 days if I work on this for about 3 hours a day? If not then what can be reasonable estimate?
    I will be extremely grateful if you people can offer advice on whole project or part(s) of it.
    Thanking you in advance and requesting urgent response(s).
    Solved!
    Go to Solution.

    Check this thread.
    I did some similar coding, it might be usefull to you.
    http://forums.ni.com/ni/board/message?board.id=170​&thread.id=493477&view=by_date_ascending&page=1
    I am using ver 9.0 though.
    If you work 3hr /day for 2 weeks you might as well finish book basics 1& 2 and than can do whan you need in a breeze, couple of hours.
    Good luck

  • How to calculate the phase difference between two square wave (acquired from two channel in one DAQ)

    Hello everyone ,
     I need a quickly help that as below :
    I am trying use PCI-6220 to acquired six signals from one rotation encoder (channel A, channel B,channel Z ,and their non-signals) .The encoder out signals will be square wave and 4000pulses per revolution. I set it rotation at 300rpm speed. I need show every square wave of six out channels in waveform and measure the A-B phase difference to check if the value is correct (designed value should be 90deg) .
    I have no idea how to measure or calculate the phase difference of two square wave base on synchronizate to acquire these two square wave from two channel on the PCI-6620....
    Anyone can give a idea how to calculate the phase difference with two square wave ?
    Thank a lot and Thanks again...
    Tim

    Tim,
    Here is a simple rising edge detector for one channel.
    Lynn
    Attachments:
    Rising edge.vi ‏15 KB

  • Calculate Duty Cycle

    Is there a function or add-on to Diadem to calculate duty cycle from a raw PWM voltage signal?  

    Hello RussellSenior,
    Unfortunately, there is no such function in Diadem. However, you can develop a script which counts the up time and the down time. Base on those information, you can get the duty cycle of your signal.
    Carmen C.

  • NI 5105 - Measure PWM Waveform Duty Cycle

    Will the Positive Duty Cycle scalar measurement in the NI-SCOPE software calculate duty cycle correctly on a PWM (pulse-width modulated) waveform?  I have a 400Hz signal that is pulse-width modulated with a 40Hz signal that I need to measure the duty cycle for.  Since this is not a normal, continuous waveform (like a sine wave or square wave) I don't know if the NI-SCOPE software will correctly calculate the Duty Cycle.  Has anyone tried this with success?  I am looking at using the NI-5105 because it has 8 channels, but am open to using other hardware and just multiplex my signals to the digitizer.

    The positive duty cycle scalar measurement should correctly calculate duty cycle on your pulse.  By default, the measurement finds the base and top of your waveform using a histogram of the Y values (there will be peaks in the histogram at the base and top values).  Duty cycle is calculated from the 50% level crossings between these two values.  You must have at least one complete cycle and only the first cycle is measured.
    If that doesn't work for you, there are a plethora of parameters you can change (except for which pulse you measure - it is always the first).  For example, you can set the upper, lower, and level crossing values to specific % or voltage levels.  See the documentation and examples for details.
    If you need to measure the duty cycle of multiple pulses in the same pulse train, there is a LabVIEW function (Pulse Measurements.vi) which allows you to do this.  It uses the same algorithms as the internal NI-SCOPE routines.
    In either case, the measurement is independent of the hardware.  Any NI-SCOPE device will work.  If you have any other questions, let us know.
    This account is no longer active. Contact ShadesOfGray for current posts and information.

  • FFT on triangular and square waves.

    Hi,
    I have been computing FFTs on a some sinusoidal waves and have been doing fine, gett the right Y axis values in the units Vrms^2.  For example a 10V amplitude (20v peak to peak) wave at 100 htz would give a peak at 100 htz and 49Vrms^2 since the RMS value fo 10 is 7 and 7^2 is 49.  Now when I input a Square wave with the same characteristics I no longer get the same scaling instead getting a peak at a higher y value.  With a triangular wave I get peaks at lower values.  Can anyone explain to me why this is happening?
    Thanks.
    Intern NSWCCD Carderock.

    Actually RMS (Root Mean Square) value of periodic signal f(t) is defined as a square root of squared signal averaged over the period T, mathematically:
    f_rms = sqrt ( aver (f^2) ),
    where aver (f^2) = [integral of f^2 over the period T] / T
    It is easy to show that for pure sine wave f(t) = A*sin(2*pi*t / T), f_rms = A / sqrt(2) ~ 0.707*A – this is well-known result anyone can find in almost every textbook. It is not difficult to calculate exact value of f_rms for square and triangular waves. Results are as follows:
    f_rms (square) = A, where square wave f(t) = A, if 0<t<c*T and f(t) = -A, if c*T<t<T (here 0<c<1 and c=0.5 for 50% duty cycle wave)
    and
    f_rms (triangle) = A / srqt(3) ~ 0.577*A, where I assumed triangle wave that raises from 0 to +A over 0 < t <T/4, goes down to –A over T/4 < t < 3T/4 and returns to ZERO in the last quarter of the period T
    Parseval’s theorem (http://en.wikipedia.org/wiki/Parseval's_theorem) of Fourier analysis states that energy of periodic signal (=integral of f^2 over the period T) must equal to energy of its Fourier transform ( sum of squared amplitude of all harmonics for periodic signal). That’s why Fourier analysis in Labview is capable of producing signal’s RMS value in addition to its spectrum.
    Now, main harmonic of square and triangular waves carries majority of signal energy, but not all of it because of presence of other harmonics. That means that amplitude of main harmonic as reported by Labview will be close to but slightly less than signal’s RMS value. This explains the results you reported in your very first post.

  • How can I output a square wave to control a stepper motor using 7332 controller?

    I have the following system configuration for testing a linear actuator (LA):
    LabView 7.1
    NI FlexMotion 7332 Motion Controller
    NI Flex DMM 4070
    The LA is a stepper motor with Step and Direction of Rotation inputs, as well as some discrete I/O for Power Enable and other functions.
    The LA specification only requires that I send a 50% Duty Cycle square wave signal with frequency less than 300 Hz to it in order to make it step.  The LA has it's own power source.  I only need the 7332 to generate the drive signal and the DOR signal to the LA.  Using some of the example VI's, I can get the LA to work, but I will need to incorporate the functions in to a custom application. 
    How can I weed through the numerous advanced functions the 7332 offers and only generate a DOR signal and a step command at a user-defined frequency.  How do I set up the controller for this?
    Thanks

    Hello,
    All the VIs that you can use to create a pulse train and digital I/O from your motion controller are found in the "Analog & Digital I/O VIs" sub-palette in the "Flex Motion" palette. Use "Load PWM Duty Cycle" and "Configure PWM Output" VIs to create the square wave. Use the "Set I/O Port Direction", "Set I/O Port MOMO", and "Set I/O Port Polarity" VIs to create digital output. I hope you find this information useful. You can learn about the specifics of these VIs and their inputs/outputs in the NI-Motion VI Help.
    Regards,
    Aaron B.
    National Instruments

  • Duty Cycle - Calculations

    Hello,
    I have spent the most of the day trying to figure out why my duty cycle calculations were not going any faster then .1 sec.
    I am aquire data from 13 accelerometers at a frequency of 20000 Hz. When I put this through the Express VI to calculate the duty cycle, the time step always goes to .1 sec.
    My question really is it possible to make this faster? The duty cycle of my accels are around 10ms.
    I tried to dive into the express vi's front panels, but that didn't seem to have any good answer.
    Thanks,
    Royce

    I think that you mis-understood what I was getting at. I get excellent readings in terms of the duty cycle output. The accels duty cycle ranges from around .25 -> .75 in my case. I even setup a nice little config block to get everything to around .5 to adujust easily to gravity readout for all 13. The problem that I am having is that the duty cycle conversion doesn't seem to read out all values of the input. The duty cycle will readout only 1 sample every .1 secs. That readout I believe should really be less then .01 secs depending on the resistor values that I have set up for my accels etc. What is even more interesting is that with the dynamic data readout, if I were to probe the data. Since I am reading at 20000 Hz, it is telling me that my dt should be .00005 secs. Which was fine for sampling of my input duty cycle wave, but afterwards that dt value should be scaled down to the actual frequncy. Now, if the program was written to take an average of duty cycles over .1 secs to fix the output period to a standard amount instead of having all sorts of strange step sizes since each reading (accel) generally has a different output frequncy the program forces that conversion to .1 sec period then fine or that is just takes a sample of 10, I guess I will have to deal. But, I did have the option to have a lot higher sampling rate for my accels, and if the .vi forces everything to .1 sec period for duty cycle output or if it takes an average of 10 readings and then rounds to the nearest sig digits this should be documented in the .vi for the duty cycle so that it is clear. If I am way off base and I shoudln't be getting a reading resulting from the duty cycle every .1 secs then I guess I am really lost. But, I do understand where the duty cycle readout comes from, that part is simple enough.
    Thanks!
    Royce

  • "create analog signal" programmatic control of parameter Duty Cycle

    I need to generate a square wave with a programmable duty cycle in LabView (not SignalExpress).  I can use "Create Analog Signal" for a fixed duty-cycle signal but I cannot figure out how to get at the Duty Cycle parameter to change it programmatically.  I was hoping for something like Property Node access but found that this only works for front panel objects.
    Is there a way to dynamically change the Duty Cycle parameter in the "Create Analog Signal"? 
    Solved!
    Go to Solution.

    The Square Waveform vi found in Signal Processing - Wfm Generation has an input at the top for offset.
    - tbob
    Inventor of the WORM Global

  • TO change the Duty Cycle(DAQmxSetCOPulseDutyCyc)

    I have an application that uses Pulse Width Modulation (PWM) to control the speed of a motor. Thus, it requires that I change the duty cycle of my square wave. My continuous pulse is being generated on the output of my counter. When I use the function "DAQmxSetCOPulseDutyCyc" to update the duty cycle when the task is run, the changes aren't reflected. What is the problem? thanks in advances!
    cinzia

    Masa-
    Kevin is correct. Unfortunately, there is little we can do to change this behavior in DAQmx. There are only two options:
    1) change which property updates the pulse train value, which would leave you with the same issue you are currently having if you have a situation where the frequency needs to change but not the duty cycle, or
    2) add a third property that would be a "switch" command. This option would add more work for users, as a third property would have to be called.
    One other thing you might trying using instead of the properties (assuming you are using DAQmx 7.2 or later) is the DAQmxWriteCtrFreqScalar() method. This write method added in DAQmx 7.2 allows you to update the frequency on-the-fly without having to use the properties.
    I
    hope this helps!
    gus....

Maybe you are looking for

  • Monitor sleep question

    I've just moved to a G5 from my G3. Temporarily I'm using the Sony trini tube from my G3 until I get an LCD. With the G3, the trini passed thru and was powered by the G3. Sleep ran fine. With the G5 (dualie 2G) it sleeps OK, but it is very slow to wa

  • Date Format in Excel reports

    Hi Experts, Is there anyway I could print the current date in the YYYY/MM/DD format in the excel report. The format works in a pdf format but in excel the date gets auto converted into MM/DD/YY format. The format-date doesnt work. Please help. Thanks

  • My ITUNES CARD NOT ACTIVATED how to solve

    my itunes card is not activated plz help

  • Account determination for entry 1000 GBB 0001 VKA 7920 not possible

    Hi, We are getting this error while using the Movement Type 411 E. We know that by maintaing the respective G/L Accounts (OBYC) we can correct error. My doubts are: 1.     why this error is coming, mean why the Sysyem is passing the FI Entry while po

  • Drive Proc

    Is there Drive Proc concept in Crystal XI which can drive 6 to 7 stored procedures by passsing parameters which are pulled by Drive Proc in SQL?