2118-2128: revise noise/jitter note

This commit is contained in:
architeuthis 2025-01-29 14:53:26 +01:00
parent ca0d2bc33b
commit 1a11e3035a
2 changed files with 102 additions and 1 deletions

View File

@ -36,7 +36,7 @@
Each channel supports 50\textOmega~terminations, individually controllable using DIP switches. Outputs tolerate short circuits indefinitely. Both cards are capable of a minimum pulse width of 3ns.
Note that isolated TTL cards are less suited to low-noise applications as the isolator itself injects noise between primary and secondary sides. Cable shields may also radiate EMI from the isolated grounds. For low-noise applications, use non-isolated cards such as 2238 MCX-TTL or 2245 LVDS-TTL.
Isolated TTL cards are not well suited to low-noise or low-jitter applications due to interference from isolation components. For low-noise applications, use non-isolated cards such as 2238 MCX-TTL or 2245 LVDS-TTL.
% Switch to next column
\vfill\break
@ -359,6 +359,8 @@
\end{threeparttable}
\end{table}
Low-jitter applications should note carefully the jitter introduced by the signal isolator. Noise is also introduced between the primary and secondary domains by the DC/DC converter. Where noise or jtter are crucial, it is instead recommended to use non-isolated cards such as 2238 MCX-TTL or 2245 LVDS-TTL.
Minimum pulse width was measured by generating pulses of progressively longer duration through a DDS generator and using them as input for a BNC-TTL card. The input BNC-TTL card was connected to another BNC-TTL card as output. The output signal is measured and shown in Figure \ref{fig:pulsewidth}.
\begin{figure}[ht]

99
examples/unsorted Normal file
View File

@ -0,0 +1,99 @@
from artiq.experiment import *
class SineWave(EnvExperiment):
def build(self):
self.setattr_device("core")
self.leds = dict()
self.ttl_outs = dict()
self.dacs_config = dict()
self.dac_volt = dict()
self.dac_dds = dict()
self.dac_trigger = dict()
ddb = self.get_device_db()
for name, desc in ddb.items():
if isinstance(desc, dict) and desc["type"] == "local":
module, cls = desc["module"], desc["class"]
if (module, cls) == ("artiq.coredevice.ttl", "TTLOut"):
dev = self.get_device(name)
if "led" in name:
self.leds[name] = dev
else:
self.ttl_outs[name] = dev
if (module, cls) == ("artiq.coredevice.shuttler", "Config"):
dev = self.get_device(name)
self.dacs_config[name] = dev
if (module, cls) == ("artiq.coredevice.shuttler", "Volt"):
dev = self.get_device(name)
self.dac_volt[name] = dev
if (module, cls) == ("artiq.coredevice.shuttler", "Dds"):
dev = self.get_device(name)
self.dac_dds[name] = dev
if (module, cls) == ("artiq.coredevice.shuttler", "Trigger"):
dev = self.get_device(name)
self.dac_trigger[name] = dev
self.leds = sorted(self.leds.items(), key=lambda x: x[1].channel)
self.ttl_outs = sorted(self.ttl_outs.items(), key=lambda x: x[1].channel)
self.dacs_config = sorted(self.dacs_config.items(), key=lambda x: x[1].channel)
self.dac_volt = sorted(self.dac_volt.items(), key=lambda x: x[1].channel)
self.dac_dds = sorted(self.dac_dds.items(), key=lambda x: x[1].channel)
self.dac_trigger = sorted(self.dac_trigger.items(), key=lambda x: x[1].channel)
@kernel
def set_dac_config(self, config):
config.set_config(0xFFFF)
@kernel
def set_test_dac_volt(self, volt):
a0 = 0
a1 = 0
a2 = 0
a3 = 0
volt.set_waveform(a0, a1, a2, a3)
@kernel
def set_test_dac_dds(self, dds):
b0 = 0x0FFF
b1 = 0
b2 = 0
b3 = 0
c0 = 0
c1 = 0x147AE148 # Frequency = 10MHz
c2 = 0
dds.set_waveform(b0, b1, b2, b3, c0, c1, c2)
@kernel
def set_dac_trigger(self, trigger):
trigger.trigger(0xFFFF)
@kernel
def run(self):
self.core.reset()
self.core.break_realtime()
t = now_mu() - self.core.seconds_to_mu(0.2)
while self.core.get_rtio_counter_mu() < t:
pass
for dac_config_name, dac_config_dev in self.dacs_config:
self.set_dac_config(dac_config_dev)
for dac_volt_name, dac_volt_dev in self.dac_volt:
self.set_test_dac_volt(dac_volt_dev)
for dac_dds_name, dac_dds_dev in self.dac_dds:
self.set_test_dac_dds(dac_dds_dev)
for dac_trigger_name, dac_trigger_dev in self.dac_trigger:
self.set_dac_trigger(dac_trigger_dev)