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.
|
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
|
% Switch to next column
|
||||||
\vfill\break
|
\vfill\break
|
||||||
@ -359,6 +359,8 @@
|
|||||||
\end{threeparttable}
|
\end{threeparttable}
|
||||||
\end{table}
|
\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}.
|
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]
|
\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