Post Go back to editing

AD9910 sinusoidal tone distortion (glitch in phase accumulator?) with RAM profile and matched latency

Hi all,

I need to generate short single tone pulses (150MHz) with a fixed pulse repetition interval (1KHz). I'm using RAM profiles on the official eval board. I did this way:

- FTW set to 150 MHz

- Matched latency, auto clear phase accumulator enabled

- RAM enabled with:

  - Profile 0 Direct Switch full amplitude

  - Profile 1 Direct Switch null amplitude

I have a PWM (1KHz period, very short duty cycle) connected to P1 profile pin. In PWM active phase profile 0 is selected, the 150MHz pulse is generated. In PWM non active phase profile 1 is selected and no signal is generated. Something is wrong with the transition between profile 0 and 1 though. A sort of glitch in the phase is visible in the final part of the 150MHz pulse:

Apparently this is due to the "matched latency" setting. If I disable that, final part of the pulse is perfect, but the glitch on the phase appears now in the initial part:

Is there any way to completely get rid of the glitch?

Note that I'm using the two profiles toggling because I want to generate a tone with phase starting at 0. Auto-clear of phase accumulator does the job when profile is changed. Maybe the same result is achievable in a  different way?



updated title
[edited by: Carlo at 2:37 PM (GMT 0) on 3 Aug 2020]
  • The distortion is most likely the clearing of the phase accumulator (which occurs as a result of switching profiles). Try disabling the autoclear.

  • but I need the auto-clear to start the tone with phase at zero. Is there any other way to generate a single tone with phase starting/ending at zero?

  • The only means that jumps to mind is to use RAM Ramp-Up mode instead of Direct Switch mode.

    Specifically, partition RAM into 2 segments. Let Profile 0 (associated with RAM segment 0) represent the desired single-tone burst. That is, program RAM with a sequence of amplitude values corresponding to the single-tone burst. Note the RAM playback rate (programmable) establishes the sample rate of the synthesized tone. Let Profile 1 (associated with RAM segment 1) be two samples of zero amplitude (you can probably get away with a single sample, but I'd use 2 to play it safe).

    Hence, RAM contains two sequences: one associated with Segment 0 and the other with Segment 1. Segment 0 generates the burst. Segment 1 generates 0 amplitude (quiet tone). Segment 0 triggers when you select Profile 0 and Segment 1 triggers when you select Profile 1.

    Note that since you will be using RAM to drive amplitude, program the POW and FTW registers to 0, as the frequency and phase of the output signal is now completely built into the amplitude of the RAM samples and the RAM playback rate.

  • Yes, it worked! I did it this way:

    - auto-clear of phase accumulator still enabled

    - ram profile0 RampUp, 2 steps - first step maximum amplitude, second step null amplitude.  Step duration equal to the tone duration I wanted to obtain

    - ram profile1 Direct Switch null amplitude, step duration is irrelevant.

    PWM controlling P1 input pin

    Thanks a lot!