PCGU1000 limits

I’m looking for a source of two paraphase signals and PCGU1000 is one of the best candidates I found, but there are some questions about it’s real limits.

Required characteristics:

  1. 2 paraphase signals
  2. only rectangular pulses
  3. signal chart - http://img-fotki.yandex.ru/get/3813/juleo2008.1/0_2fe9f_6135c80_orig
    3.1. t1, pulse duration - from 1 microsecond to 100 milliseconds,
    3.2. t2, pause duration (between pulses) - from 0.1 microsecond to 100 milliseconds,
    3.3 N, number of pulses in series - from 1 to 1000,
    3.4. 1/T, frequency of series - from 1 Hz to 10 kHz.
    3.5. t3, relative delay of paraphase signals - less than 50 nanoseconds

Question for techsupport and those who have acquired PCGU1000: are these characteristics achievable or some of them not? If some of them are unachievable, please, point them out.

Any help with oscilloscopic checking/measuring of real values is do appreciated!

The PCGU1000 by itself cannot do this, however as the two provided outputs are in parallel you can just use an inverting op-amp buffer, of appropriate performance characteristics, to invert one of the outputs and it will be Miller Time. The other specs you listed are well within the PCGU1000’ capabilities–with exception of the controlled number of output pulses…

The sample rate is 50MHz. (Minimum sample time is 20ns.)
Waveform memory depth is 8192 samples.
All the samples are available up to repetition frequency 50MHz / 8192 = 6100Hz
On higher frequencies the address counter takes larger “jumps” and all the memory locations are not output.
The typical DDS (Direct Dicital Synthesis) principle is used. The phase accumulator is 44 bits.

As cliffyk wrote, the first problem is that there are not two separate signal outputs. The two output BNC connectors are parallel connected.
You may use the TTL sync output as a second output. Normally the sync signal has same polarity as the output waveform.
There was anyhow easy FPGA modification possible to invert this output.
If you decide to purchase this generator, I’ll give you a link to download this modified file.

Here an image of 1us pulses with 0.1us pause.
The upper trace is the output and the lower trace is the sync output:

Here “All About Direct Digital Synthesis”: analog.com/library/analogdia … 8/dds.html

Thank you very much, Cliffyk and Vel255 for your explanations!

I do appreciate it! And I’ve never seen so quick/useful support&community. I’m impressed. Really.

Did I understand it right - to get series from three 1us pulses with 0.1us pause with series repetition frequency 10kHz I need to use .lib-file with 50MHz/10kHz=5000 samples and write in .lib-file the following data (in Wave Editor or in real time in C+±program):
0,0000
5,0000
… (48 samples; 1us/20ns=50)
5,0000
0,0000
… (3 samples; 0,1us/20ns=5)
0,0000
5,0000
… (48 samples; 1us/20ns=50)
5,0000
0,0000
… (3 samples; 0,1us/20ns=5)
0,0000
5,0000
… (48 samples; 1us/20ns=50)
5,0000
0,0000
… (5000-1-3
50-2
5-2=4837 samples)
0,0000
?

Yes, I do want to acquire it (from one of your distributors in Russia - platan.ru/cgi-bin/qwery.pl/i … roup=52202), but I didn’t get three things:

  1. How did you get simultaneously two paraphase signals? It was just remembering function on oscilloscope or you used mentioned FPGA decision?
    1.1 On your plot shift between paraphase signals is about 0.2us/10=20ns, i.e. good for me, 'cause I need it less than 50ns. Will FPGA modification be able to get this shift not more, than on your plot?
  2. I thought FPGA is scheme with Atmel or something like that, but you mentioned “modified file”. What did you mean: some modified file for PCLab 2000, scheme with Atmel or something else?

Thank you in advance!

Here is the block diagram of the DDS block of the PCGU1000:

To the RAM of 8192 bytes is stored the look-up table for one cycle of the waveform.
A constant value, the phase increment, is added to the address counter with each 50MHz clock cycle. If the phase increment is large, the address counter will step quickly through the look-up table and thus generate a high frequency wave. If the phase increment is small, the address counter will take many more steps, accordingly generating a slower waveform.
The 13 highest bits of the address counter are connected to the address lines of the RAM.
If the phase increment is very low then several clock pulses are needed to increment the RAM address.
To get high frequency out the phase increment value will be high and the RAM address is incremented in big steps. For instance if 2MHz frequency is to output, there are needed only 25 pulses from the 50MHz clock to go through the whole RAM address space. The RAM address will increment 8192/25 = 327.68 address locations on each 50MHz clock cycle.

Here is the formula to calculate the RAM address (13 MSB of the address counter) increment:
RAM ADDRESS INCREMENT = 8192 * (output frequency) / 50MHz

Example:
We want 10kHz output

RAM ADDRESS INCREMENT = 8192 * 10kHz / 50MHz = 1.6384

Here we see that to get 10kHz out the RAM address is increment this amount 1.6384 on every 50MHz clock. This kind of decimal number as an address increment is possible using the 44 bits long phase increment register.

(The value to the phase increment register can be calculated following way:
PHASE INCREMENT = 2^44* 10kHz / 50MHz = 3518437209 )

At 10kHz the time for each RAM address location is 20ns/1.6384 = 12.20703ns

Now we like to generate the custom waveform file for five 1us pulses with 0.1us pause between each pulse.

To get 1us pulse, the number of samples is 1us/12.20703ns = 81.92 samples
To get 0.1us pause the number of samples is 0.1us/12.20703ns = 8.192 samples

To get five such pulses, we have to write the following LIB file:
-1.0(7742)
1.0(82)
(0)
-1.0 (8)
(0)
1.0(82)
(0)
-1.0 (8)
(0)
1.0(82)
(0)
-1.0 (8)
(0)
1.0(82)
(0)
-1.0 (8)
(0)
1.0(82)
(0)
-1.0 (8)

The actual values are:
Pulse width = 82 * 12.20703ns = 1.00097us
Pause width = 8 * 12.20703ns = 0.976us

Here is the resulting waveform:

[quote]1. How did you get simultaneously two paraphase signals? It was just remembering function on oscilloscope or you used mentioned FPGA decision?[/quote]I made a minor FPGA modification to invert the sync signal.

[quote]1.1 On your plot shift between paraphase signals is about 0.2us/10=20ns, i.e. good for me, 'cause I need it less than 50ns. Will FPGA modification be able to get this shift not more, than on your plot?[/quote]Yes, the sync signal can be delayed in the FPGA.

[quote]2. I thought FPGA is scheme with Atmel or something like that, but you mentioned “modified file”. What did you mean: some modified file for PCLab 2000, scheme with Atmel or something else?[/quote]The file to be modified is the pcgu1000.bit in the PCLab2000SE folder. You just replace the existing file with the new one.

Thank you very-very much for excellent explanation! It’s wonderfull that my required characteristics are achievable with PCGU1000!

I do hope your explanations will help as well to a lot of Velleman’s current and future users!

  1. About lib-file. I didn’t quite understand what for there are strings with “(0)”. Shoud it be like this (without “(0)”)
    -1.0 <- 7742 times
    1.0 <- 82 times
    -1.0 <- 8 times
    1.0 <- 82 times

    or “-1.0(7742)” is some kind of meta-language for simple description of repetition?

1.1. Can I use
0.0 <- 7742 times
2.0 <- 82 times
0.0 <- 8 times
2.0 <- 82 times

instead or it’s worse for generator?

  1. Did I understand you right: all I need to get the same but inverted signal from sync-out simultaneously with normal signal from one of parallel outs is to copy pcgu1000.bit in the PCLab2000SE folder? I.e. it’s like mod-firmware for routers/players?
    2.1. If you don’t mind send me, please, this magic file to e-mail I activated through.

Thank you in advance! You and your company with such support are unbelievable!

[quote]I do hope your explanations will help as well to a lot of Velleman’s current and future users![/quote]I hope too this helps to understand the quite “tricky” operation of the Direct Digital Synthesis principle…

[quote]-1.0 <- 7742 times
1.0 <- 82 times
-1.0 <- 8 times
1.0 <- 82 times

or “-1.0(7742)” is some kind of meta-language for simple description of repetition?[/quote]Yes, it is a sort of a language.

Here is a link to download the function generator help file in PDF format: box.net/shared/eyck4rsuva
See p. 6 for more info of the Wave Editor.

Here a sippet from the document:

[color=#000080]There are two methods to construct the waveform file:

  1. All data values, point by point, are written to the file.
    This method is usable for complicated waveforms and for the waveforms extracted from the oscilloscope data files.

  2. Only the corner values of the waveform data are written to the file. The software generates automatically the values between the corners.
    This method is fast and easy way to generate waveform consisting of horizontal, vertical or diagonal straight lines. Below there are some example files and the corresponding waveform images.

In both cases the values are written on separate lines in the text file.

Data formats
In both cases the voltage values can be written in decimal or integer format. In the decimal format -1.0 represents the negative peak voltage and +1.0 represents the positive peak voltage. In integer format 0 represents the negative peak voltage and 255 represents the positive peak output voltage.

The software detects the data format as ‘decimal’ if there is at least one decimal separator in the data file. Both comma ‘,’ and dot ‘.’ are interpreted as decimal separators.[/color]

[quote]About lib-file. I didn’t quite understand what for there are strings with “(0)”. Shoud it be like this (without “(0)”)[/quote][color=#000080]The (0) is used to remove diagonal line between the data points
To get fast edges to the wave you can prevent the software from connecting the consecutive data points with a diagonal line. To do this, write (0) on separate line between the data values. The data points are connected with rectangular line going immediately to the level of the next data value.[/color]

[quote]1.1. Can I use
0.0 <- 7742 times
2.0 <- 82 times
0.0 <- 8 times
2.0 <- 82 times

instead or it’s worse for generator?[/quote]Only the values between -1.0 and 1.0 are usable.
Other alternative is to use integer values 0 to 255.

[quote]2. Did I understand you right: all I need to get the same but inverted signal from sync-out simultaneously with normal signal from one of parallel outs is to copy pcgu1000.bit in the PCLab2000SE folder? I.e. it’s like mod-firmware for routers/players?[/quote]Yes, this file defines the FPGA.

[quote]2.1. If you don’t mind send me, please, this magic file to e-mail I activated through.[/quote]When complete, I’ll put here a link to download this file.
Other visitors to this forum can download it too if want to…

Sorry for stupidness… :smiley:

[quote]Here is a link to download the function generator help file in PDF format: box.net/shared/eyck4rsuva
See p. 6 for more info of the Wave Editor.[/quote]
Thank you very much!

Did I understand it right: in lib-file we mention not actual voltage, but multiplier for amplitude? I.e. if I need positive pulses with amplitude of 5V, I should write in lib-file:
0.0(7742)
(0)
1.0(82)
(0)
0.0(8)

and set amplitude to 5V?

[quote]When complete, I’ll put here a link to download this file.
Other visitors to this forum can download it too if want to…[/quote]
Thank you in advance!

[quote]Did I understand it right: in lib-file we mention not actual voltage, but multiplier for amplitude? I.e. if I need positive pulses with amplitude of 5V, I should write in lib-file:
0.0(7742)
(0)
1.0(82)
(0)
0.0(8)

and set amplitude to 5V?[/quote]
With this setting you get pulses 0V to +2.5V.
The amplitude setting is displaying Vpp value of the wave.
If you in the file specify only the positive half of the wave to be output (values 0.0 to 1.0), then you get out the positive half of the wave.

Increasing the setting to 10Vpp you get 0V to +5V pulses.

In the generator is option to fix the negative peak to zero.
This you find from the Options menu.
This way you can output 0V to +10V pulses using the full amplitude range in the lib-file (-1.0 to +1.0).

Now the timing alignment between the output signal and the sync signal is improved.
I added to the sync signal a delay of one 50MHz clock period time.
There is now only about 7.6ns timing difference.

Here is the link to download the updated FPGA file: box.net/shared/2ufp6h3d8q

You have to select the “Sync Mode MSB” from the Options menu of the function generator.

[b]There are no words… just letters!

Velleman’s support is #1!

Thank you![/b]

All the good ideas gathered in this forum will be put to the new releases of the PCLab2000SE software.
I think there will be in the next software version a menu option “Invert Sync”.
This way user can generate two waves having opposite phases.

I have some questions concerning the load on the OUT-ports.

How much current can draw from the ‘OUT’?
Is this dependent of the Amplitude Vpp?
Is this dependent of the offset?

How much current can draw from the ‘SYNC OUT TTL’?
Is this dependent of the Amplitude Vpp?
Is this dependent of the offset V?

Can I continiously short circuit the ‘OUT’ and the ‘SYNC OUT TTL’ respectively?

The output current from the signal output at 10Vpp is 70mA AC when short circuited.
The DC output current at 5V DC offset is 87mA when short circuited.
The short circuit current from the sync output is 15mA DC.
You can short circuit the outputs.

Hello, Vel255!

  1. I bought PCGU1000 several months ago, but tried it just yesterday. And thanks to your quite clear instruction, I wrote several dozens of lib-files for signals I needed.

  2. Pulse rise time and pulse decay time are appr. 30ns and that’s good for me.

  3. With your instructions I generated signal with U=10V (with “negative peak to zero”), f=25kHz (T=40us) by lib-file with this content:
    -1.0 (6144)
    (0)
    1.0 (1024)
    (0)
    -1.0 (1024)
    http://img-fotki.yandex.ru/get/5103/juleo2008.1/0_444ce_4c7b9d08_L.jpg (green plot).

  4. I tried your bit-file with FPGA modification (inverse Sync TTL output) - it works just fine!

  5. 5V limit on Sync TTL output - is it hardware or software limit? I.e. can it be programmed to be 10V?

  6. Right now I encountered another task (I don’t like word “problem”, 'cause problems have tendency to get worser and worser, while tasks have tendency to be solved) - to get simultaneously second signal (red plot), but with usual form (square, 10V, the same frequency as main signal). It would be very kind of you to suggest the way to solve this task by use of PCGU1000’s potential. Probably with some additional FPGA modifications if they are not very complex. Actually I’m a programmer, so if Velleman can trust me some uncompiled code, I can change and compile it myself.

  7. I wrote a lot of lib-files for different signals by hands and right now I have hard intention to automate process of creating lib-file, so I could manage the signal from C+±programm. I saw there is a dll-file to include in program. Will your modifications in bin-file stay working if I try to manage PCGU1000 not from PClab, but from C+±program?

Thanks a lot in advance for your help!

Juleo.