DDS24 capability

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
IaCa_4674211
Level 3
Level 3
25 replies posted 10 replies posted 10 questions asked

Hello, is it possible for the DDS24 component for PSoc5LP to produce a frequency sweep sine wave between 1Hz and 80Khz at a rate of 8Khz? perhaps by using external components such as the ADS1256? would it be possible to change the frequency sweep from an Arduino/Teensy input?

0 Likes
1 Solution
odissey1
Level 9
Level 9
First comment on KBA 1000 replies posted 750 replies posted

IaCa,

General answer is yes. DDS24 and DDS32 components can produce such sweeps w/o need for external commercial DDS parts. The catch is in the quality of the output, and commercial DDS parts can produce much cleaner output waves with greater resolution. Unlike DDS24 / DDS32 though, the sweep speed is unlikely to reach 8000 times/sec, as they are typically controlled through the serial I2C interface.

As an example, you caaan take a look on this Chirp generator, using DDS24 and DDS32 components

Chirp burst generator for ultrasonic range finder using DDS24 and DDS32

and this YouTube demo

DDS tunable frequency / phase generator using Cypress PSoC5 - YouTube

On the other side, using starting frequency of 1Hz is pointless at 8000 scans/sec rate, at it is essentially a DC. So minimum frequency should be in the range of 10-th kHz at least. So, I believe there is some inconsistency between Fmin, Fmax, and scan rate. I can help drafting some demo if details specs are available.

/odissey1

View solution in original post

18 Replies
odissey1
Level 9
Level 9
First comment on KBA 1000 replies posted 750 replies posted

IaCa,

General answer is yes. DDS24 and DDS32 components can produce such sweeps w/o need for external commercial DDS parts. The catch is in the quality of the output, and commercial DDS parts can produce much cleaner output waves with greater resolution. Unlike DDS24 / DDS32 though, the sweep speed is unlikely to reach 8000 times/sec, as they are typically controlled through the serial I2C interface.

As an example, you caaan take a look on this Chirp generator, using DDS24 and DDS32 components

Chirp burst generator for ultrasonic range finder using DDS24 and DDS32

and this YouTube demo

DDS tunable frequency / phase generator using Cypress PSoC5 - YouTube

On the other side, using starting frequency of 1Hz is pointless at 8000 scans/sec rate, at it is essentially a DC. So minimum frequency should be in the range of 10-th kHz at least. So, I believe there is some inconsistency between Fmin, Fmax, and scan rate. I can help drafting some demo if details specs are available.

/odissey1

Hello, the rate is only 8 times per second, I feel your solution (DDS32) would work perfectly, what are your concerns in regards to signal quality?

Kind regards

0 Likes

IaCa,

PSoC5 VDAC8 update rate is limited to about 1MHz, which gives only about 12 sine points per period - not very fancy sine wave. If update rate is only 8 scans/sec, the commercial DDS part could work as well.

/odissey1

0 Likes

I could output to an external 24 bit dac, to give a higher resolution ? I currently get 600 points using an Arduino due, the due is just too huge for my project.

I made a mistake in my last comment, I believe the number of points to be between 30 to 60, the resolution of my pulses using the due is 12 bits, would the 32 bit resolution from the PSoC device be equivalent?, also I require a square wave output, the DAC is not required,however I do need a duplicate 'complimentary' output.

0 Likes

IaCa,

DDS24 and DDS32 generate digital output only, it is a square wave. By using VDAC8 and memory tables with some headache it can be converted to the sine wave. From the previous conversation it is not clear what type of output you need. Please take your time to describe full specs first.

/odissey1

0 Likes

The output I require are square waves, frequency parameters are: Min Freq. 1Hz, Max Freq.80Khz, duty cycle 5%, rate: 8 times per second, there are 2 outputs of the same wave sweep, main sample has a delay of 22uS, the secondary sample has a delay of 100uS, pulse width is approx. 58uS, I have looked at a couple of examples in regards to the DDS32, appears as though this spec. is possible, would the pulse width, duty cycle and frequency be able to be accessed by an Arduino?

Kind regards

Ian 

0 Likes

Ian,

At 80kHz period is only 12.5us, and 5% duty cycle corresponds to 0.625us. How this related to a delay (from what?) of 22us for the first wave, 100us for second wave and fixed pulse width 58us? Why DDS output has to be 5% duty cycle (variable width), when this wave not being output?

Technically, DDS produces square wave with 50% duty cycle irrespective of frequency. The DDS24 has dual output with fixed phase relationship, which can be used to make 5% duty cycle by XOR-ing two outputs. But, again, l am not fully understand the goal.  I recommend making some drawing explaining desired wave shapes.

DDS parameters can be updated by Arduino using UART communication. Like Fmin, Fmax, scan speed, etc.

/odissey1

0 Likes

I cannot give any further information due to disclosure of proprietary information, you have given me enough to go on for now,

Thank you for your input,

Kind regards

Ian

0 Likes
lock attach
Attachments are accessible only for community members.

Ian,

I drafted a project, generating a sweep of from 400Hz to 80kHz in 200 steps at scan rate 1-8/sec. It produces two quadrature outputs. Project utilizes DDS24 in hardware load control mode. Such approach is very simple and guarantees hardware timing for frequency update.

All control parameters (Fstart, Fstep, Npoints, scan rate) can be updated at run-time using e.g. UART communication.

Let me know if further assistance needed.

/odissey1

Project utilizes custom components:

PSoC Annotation Library v1.0 (optional)

Tutorial adding custom components to the project:

https://www.cypress.com/video-library/PSoC-Software/psoc-creator-tutorial-adding-library-dependency/...

DDS24_sweep_hw_01a_A.png

0 Likes

Hello, What I really need is a DDS32 with 3 outputs, outputting the frequency sweep, with the reset function and *Ideally* with the phase sync, the same as the DDS24,

Can you help?

Kind Regards

Ian

0 Likes

Ian,

DDS32 is very much different from DDS24 in it's capabilities. DDS32 built using UDB Datapath, and DDS24 by using PLD logic. Modifying DDS32 will likely take me a month, and result s not guaranteed, DDS24 -  a week.

DDS24 and DDS32 capabilities are also different. For example, with DDS24 hardware timing of frequency update is possible, while for  DDS32 is not. DMA transfer to DDS24 is possible, DDS32 - only 16-bit. Adding second channel (phase) to DDS32 is not straightforward.

Both DDS components already have a hardware reset input. DDS24 has 2 outs: main and phase-shifted. I don't get what the 3-rd output you need?

What is relatively easy is to increase DDS24 resolution to 28 bits. But, since you are going to perform fast scans, resolution is not much important, as DDS won't sit on single frequency for long and resolution will be defined by update rate, not DDS bit depth. For example, scanning 200 frequency points 8 times per second yields 1.6kHz resolution, while DDS24 native resolution is much higher: 48MHz/2^24 = 2.8 Hz!

I recommend to test project using DDS24 first, and then see which improvements are really needed.

/odissey1

0 Likes

Hello, OK,  DDS24 is the way forward, would you be willing to create a module as described in my previous post?

Kind regards

Ian

0 Likes

Ian,

You can send me a private message with full specs. I will look into it.

/odissey1

0 Likes

Hello, can you give me an email address? I can get the specs. to you,

Kind regards

Ian

0 Likes

Ian,

I sent you a private message, which you can respond or goto my profile and click Message (lower-right).

/odissey1

0 Likes

Hello, the frequency sweep signal requirements are, 1Hz to 80Khz, at a rate of 1/8 second, duty cycle, period, pulse width to be controlled by a Teensy 3.6.

0 Likes

Ian,

I noticed your question on other forum, which I rarely check:

>Does anyone know what the bit length of the phase accumulator is?, this is required to calculate the tuning word apparently!

>Where do you insert the Tune word in order to change the frequency sweep?

-The length of the DDS24 accumulator is 24-bits. Component API provide all necessary functionality, so the user have no need to access low-level parameters.

The DDS24 component has default API function to set the output frequency

DDS_1_SetFrequency(value),

where value - is desired frequency in Hertz (double).

When executed, this function automatically calculates and sets the DDS tuning word.

If the above example is too complicated, I recommend to read the DDS24 AppNote provided and start with basic example.

/odissey1

0 Likes