2118-2128: revise noise/jitter note
This commit is contained in:
parent
ca0d2bc33b
commit
1a11e3035a
@ -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
99
examples/unsorted
Normal 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)
|
Loading…
Reference in New Issue
Block a user