Hi everyone,
After about a week of playing around with the phaser board, I've managed to get it to generate carrier signals between 300MHz and 3GHZ and multiple signals up to 5 using the oscillator class within +-10MHz of the carrier signal, so that for example we can generate simultaneously 110,112,114,116,118MHz but not 110,120,130,140,150MHz.
For the purposes of our experiment we would like to be able to do the latter case, specifically we would like to be able to generate simultaneously within +-40MHz of the carrier signal, (example: output 300MHz, 320MHz, 340MHz simultaneously).
One way I've attempted to get around this was to loop the set_duc_frequency function to two different carrier signals in order to expand the oscillator range, but after some playing around with it turns out I can only get a minimum of 6 milliseconds delay between each duc frequency setting, which is way too high for our needs.
Here is the code to implement the above solution incase it was of interest:
from artiq.experiment import *
class Phaser(EnvExperiment):
"""Phaser Test 1"""
def build(self):
self.setattr_device("core")
self.setattr_device("phaser0")
@kernel
def run(self):
#Parameters
duc=10*MHz
duc2=duc+20e6
preosc = [0., 1., 2., 3., 4.]
osc = [0.*MHz, 1.*MHz, 2.*MHz, 3.*MHz, 4.*MHz]
amp=.2
atten=0
#Initialising
self.core.reset()
self.phaser0.init()
self.core.break_realtime()
delay(1*ms)
for j in range(500):
self.phaser0.channel[0].set_duc_frequency(17e6)
self.phaser0.channel[0].set_duc_cfg()
self.phaser0.channel[0].set_att(atten*dB)
self.phaser0.duc_stb()
delay(1*ms)
for i in range(5):
self.phaser0.channel[0].oscillator[i].set_frequency(osc[i])
self.phaser0.channel[0].oscillator[i].set_amplitude_phase(amp)
delay(1 *ms)
delay(10*us)
self.phaser0.channel[0].set_duc_frequency(33e6)
self.phaser0.channel[0].set_duc_cfg()
self.phaser0.channel[0].set_att(atten*dB)
self.phaser0.duc_stb()
delay(1*ms)
for i in range(5):
self.phaser0.channel[0].oscillator[i].set_frequency(osc[i])
self.phaser0.channel[0].oscillator[i].set_amplitude_phase(amp)
delay(1 *ms)
delay(10*us)
Could this functionality be realisable with some of the other modules of the card? (NCO, Miqro). Is this even possible to do on this card? Any ideas are much appreciated!