We've achieved an era where the limiting factor in the speed of digital communications is no longer the speed of processing the received or transmitted signals, but the fall and rise times of electronic signals. Minimizing the rise/fall times is a particularly difficult problem to optimize as it is often dependent on the cumulative resistances and impedances in the circuit, which can also vary from circuit to circuit depending on the manufacturing defects of the components.
A common method for performing these rise/fall time measurements is to look at a signal on an Oscilloscope, zoom in to the transition edges, put the cursors over the transition edges, and write down the time delta in a spreadsheet. This method takes about 30 minutes per signal.
GradientOne can automate every step in this process - from the data acquisition, to identifying transition edges, calculating steps, and then filtering the results based on performance criteria.
GradientOne's analysis suites provides a way to set up and perform batch rise/fall times, and then filter on the stored traces where the rise/fall times were outside of desired operating parameters. This blog post will cover how GradientOne calculates rise and fall times, as well as how to set up and perform a fall/rise time filtering.
Determining high and low levels
In order to find transition times, we first have to identify the high and low signals. This is a task that we humans can do with ease, but that is difficult for machines. For example, a signal that is not properly grounded can lead to wandering low signals:
Or, signals can have a Poissonian-distributed event (Shot noise) outside of the range seen by the thermal noise (Johnson-Nyquist) that throws off the range of voltages:
Because of Shot noise, we can't simply take the lowest and highest points in the signal to be the minimum and maximum values of the voltage trace, because of this wandering bottom signal, we can't simply take the two peaks of a histogram. To solve this problem, GradientOne instead uses Kernal Density Estimation. This means we turn each point into a Gaussian distribution centered around the voltage, and then sum these Gaussians, so that instead of a histogram we get a smoothed probability distribution:
We then take the derivative of our probability density function, and then take the maximum two locations as our upper and lower signals. For example, in the example of the wandering lower signal, our distribution looks like:
Which leads to the detected low and high signals of:
In the shot noise example, we have two evenly-distributed humps in the histogram:
And a calculated low/high voltage range that ignores the Shot noise:
The rest of this blog post will cover how to set up a rise/fall measurement suite with a pass/fail criteria. First, go to the analysis tab and click "Create New Measurement Suite". Select step 1 as a Rise/Fall time measurement. The channel we will be looking at is channel 1 of oscilloscope data, and we will set the transition range as 0.1. Standard values for rise/fall time measurements are 30/70% (0.3) and 10/90% (0.1). The range is calculated as the difference between the low and high lines on the graph above. The start of a rise is identified when the voltage crosses from low to above 10% of this range. The end of a rise is identified when the Voltage crosses above 90% of this range.
The second step is a Pass/Fail Criteria. We name this variable "Pass/Fail Criteria" out of a lack of creativity. It could be anything you need, such as "Rise Time Test". The average rise time measurement generated in the first step will be found under GradientOne Measurements->Channel 1 (ch1)->average rise time.
We can then run this measurement suite against some data captured using a quick capture on our scope. We can find this data by searching for the result id. After a clicking run, the results of each step will be enumerated in the run modal.
"View Results" will take us to the results view, where there are two things to note. First, markers will be placed where transition edges were discovered. These markers can be cleared using either the "Clear Generated Analysis Results" or "Clear Markers from Trace" analysis suites.
Second, calculated results will appear below the plot in the "GradientOne Measurements" section:
Now that these calculations have been associated with the result id, they can be used when searching for results. When searching for results, special characters are removed, spaces are replaced with underscores, the channel name is appended to the front, and if the value is a boolean value instead of a number, it is appended with '_bool'. You can also use the structured query to build the query with the correct formatting.
After clicking on the check mark, this will get reformated as: ch1_average_rise<1e-6 , and running this query results in only one search, the result we just ran our analysis suite against.
Similarly, we can also search for where our pass/fail criteria passed:
Using the GradientOne analysis suite, it is easy to run a rise/fall times compliance test against batches of data and then filtering out the instances where it failed.
Reading in and generating Device Configuration Files (DCFs) is now available in GradientOne's CANOpen Editor. This post will demonstrate how to generate and read the file.
In the CAN editor, enter some frames, for example:
WRITE [0x00, 0x21, 0x46, 0x00, 0x00, 0x00, 0x59, 0x00, 0xB2, 0x00, 0x59, 0x00, 0xFE, 0xC5, 0xFD, 0x7F, 0xB2, 0x1C] to velocity_loop_output_filter on node 1
Note that you can also provide raw hex, but it must be provided as frames, one line at a time. Since the above write has more than 4 bytes, it must be expressed as a multi-frame SDO download. Entering the lines:
0x601, 0x21, 0x06, 0x21, 0x00, 0x12, 0x00, 0x00, 0x00
0x601, 0x00, 0x00, 0x21, 0x46, 0x00, 0x00, 0x00, 0x59
0x601, 0x10, 0x00, 0xB2, 0x00, 0x59, 0x00, 0xFE, 0xC5
0x601, 0x07, 0xFD, 0x7F, 0xB2, 0x1C
has the same affect as the one WRITE command above.
Press Add (1), then DCF (2), and then Download as DCF (3). Your browser will load a .Bin file (4).
Looking at this binary file in a hex editor (This is Bless for linux), we can see the number of SDOs to write (red), the address (blue), the number of bytes in this SDO (green) and the SDO data (orange).
We can now take this DCF and upload it in a new session. To do this, we need to press DCF (1), then Upload DCF (2), then add the file we just downloaded using Choose File (3). Specify which node this DCF will be written to (4), by default the DCF is written to node 1. Finally, upload the file (5).
After pressing upload, the frames will be added to the frame Queue: