forked from M-Labs/artiq
1
0
Fork 0

tester: tweak suservo

* p gain 1 to get reasonable power
* refine testing instructions and comments
This commit is contained in:
Robert Jördens 2021-08-19 09:17:14 +02:00
parent 4d21a72407
commit a53162d01d
1 changed files with 25 additions and 20 deletions

View File

@ -96,7 +96,8 @@ class SinaraTester(EnvExperiment):
self.suschannels[name] = self.get_device(name) self.suschannels[name] = self.get_device(name)
# Remove Urukul, Sampler, Zotino and Mirny control signals # Remove Urukul, Sampler, Zotino and Mirny control signals
# from TTL outs (tested separately) and remove SUServo Urukuls # from TTL outs (tested separately) and remove Urukuls covered by
# SUServo
ddb = self.get_device_db() ddb = self.get_device_db()
for name, desc in ddb.items(): for name, desc in ddb.items():
if isinstance(desc, dict) and desc["type"] == "local": if isinstance(desc, dict) and desc["type"] == "local":
@ -116,7 +117,6 @@ class SinaraTester(EnvExperiment):
del self.urukul_cplds[desc["arguments"]["cpld0_device"]] del self.urukul_cplds[desc["arguments"]["cpld0_device"]]
if "dds1_device" in desc["arguments"]: if "dds1_device" in desc["arguments"]:
del self.urukuls[desc["arguments"]["dds1_device"]] del self.urukuls[desc["arguments"]["dds1_device"]]
if "cpld1_device" in desc["arguments"]:
del self.urukul_cplds[desc["arguments"]["cpld1_device"]] del self.urukul_cplds[desc["arguments"]["cpld1_device"]]
elif (module, cls) == ("artiq.coredevice.sampler", "Sampler"): elif (module, cls) == ("artiq.coredevice.sampler", "Sampler"):
cnv_device = desc["arguments"]["cnv_device"] cnv_device = desc["arguments"]["cnv_device"]
@ -600,20 +600,19 @@ class SinaraTester(EnvExperiment):
channel.set_iir( channel.set_iir(
profile=loop_nr, profile=loop_nr,
adc=loop_nr, # take data from Sampler channel adc=loop_nr, # take data from Sampler channel
kp=-.1, # -0.1 P gain kp=-1., # -1 P gain
ki=0./s, # low integrator gain ki=0./s, # no integrator gain
g=0., # no integrator gain limit g=0., # no integrator gain limit
delay=0. # no IIR update delay after enabling delay=0. # no IIR update delay after enabling
) )
# setpoint 0.5 (5 V with above PGIA gain setting) # setpoint 0.5 (5 V with above PGIA gain setting)
# 0 phase
delay(100*us) delay(100*us)
channel.set_dds( channel.set_dds(
profile=loop_nr, profile=loop_nr,
offset=-.3, # 3 V with above PGIA settings offset=-.3, # 3 V with above PGIA settings
frequency=10*MHz, frequency=10*MHz,
phase=0.) phase=0.)
# enable RF, IIR updates and profile 0 # enable RF, IIR updates and set profile
delay(10*us) delay(10*us)
channel.set(en_out=1, en_iir=1, profile=loop_nr) channel.set(en_out=1, en_iir=1, profile=loop_nr)
@ -622,27 +621,33 @@ class SinaraTester(EnvExperiment):
self.core.break_realtime() self.core.break_realtime()
channel.set_config(enable=1) channel.set_config(enable=1)
delay(10*us) delay(10*us)
# check servo enabled # check servo enabled
assert channel.get_status() & 0x01 == 1 assert channel.get_status() & 0x01 == 1
delay(10*us) delay(10*us)
def test_suservos(self): def test_suservos(self):
print("*** Testing SUServos.") print("*** Testing SUServos.")
print("Initializing...") print("Initializing modules...")
for card_n, (card_name, card_dev) in enumerate(self.suservos): for card_name, card_dev in self.suservos:
print(card_name + "...") print(card_name)
self.setup_suservo(card_dev) self.setup_suservo(card_dev)
print("Setup SUServo loops.") print("...done")
print("Urukul0 channels corresponds to Sampler channels 0-3 and Urukul1 channels correspont to Sampler channels 4-7.") print("Setting up SUServo channels...")
print("Only proportional gain and offset such that 1.5V on the input gives 6dB less output power than at 0V input. (open loop)") for channels in chunker(self.suschannels, 8):
print("Frequency: 10MHz. Output power at 0V input: ~-29dBm") for i, (channel_name, channel_dev) in enumerate(channels):
for card_n, channels in enumerate(chunker(self.suschannels, 8)): print(channel_name)
for channel_n, (channel_name, channel_dev) in enumerate(channels): self.setup_suservo_loop(channel_dev, i)
self.setup_suservo_loop(channel_dev, channel_n) print("...done")
print("Enabling...") print("Enabling...")
for card_n, (card_name, card_dev) in enumerate(self.suservos): for card_name, card_dev in enumerate(self.suservos):
print(card_name)
self.setup_start_suservo(card_dev) self.setup_start_suservo(card_dev)
print("...done")
print("Each Sampler channel applies proportional amplitude control")
print("on the respective Urukul0 (ADC 0-3) and Urukul1 (ADC 4-7, if")
print("present) channels.")
print("Frequency: 10 MHz, output power: about -9 dBm at 0 V and about -15 dBm at 1.5 V")
print("Verify frequency and power behavior.")
print("Press ENTER when done.") print("Press ENTER when done.")
input() input()