Digital Multimeter Examples
Initial Setup
Import the digital multimeter class from inspy.instrument.digitalmultimeter. The device connection can be managed by using the connect() and disconnect() methods. However, the use of context managers (see trace example) is recommended.
[1]:
import matplotlib.pyplot as plt
from inspy.instrument.digitalmultimeter import DmmKeysight34465A
ADDRESS = "USB0::10893::257::MY57500323::0::INSTR"
dmm: DmmKeysight34465A = DmmKeysight34465A(ADDRESS)
dmm.connect()
dmm_id = dmm.get_id()
print(dmm_id)
Keysight Technologies,34465A,MY57500323,A.02.14-02.40-02.14-00.49-03-01
Simple Measurements
Single measurements can be made using the measure methods.
[2]:
voltage = dmm.measure_voltage()
current = dmm.measure_current()
voltage_ac = dmm.measure_voltage_ac()
current_ac = dmm.measure_current_ac()
resistance = dmm.measure_resistance()
resistance_four_wire = dmm.measure_resistance_four_wire()
continuity = dmm.measure_continuity()
frequency = dmm.measure_frequency()
period = dmm.measure_period()
print(f"Voltage: {voltage} V")
print(f"Current: {current} A")
print(f"AC Voltage: {voltage_ac} V")
print(f"AC Current: {current_ac} A")
print(f"Resistance: {resistance} Ohms")
print(f"4-Wire Resistance: {resistance_four_wire} Ohms")
print(f"Continuity: {continuity}")
print(f"Frequency: {frequency}")
print(f"Period: {period}")
dmm.disconnect()
Voltage: 1.17625601e-05 V
Current: 3.16225072e-12 A
AC Voltage: 0.00119330846 V
AC Current: 0.0 A
Resistance: 9.9e+37 Ohms
4-Wire Resistance: 789.106695 Ohms
Continuity: True
Frequency: 99.9656529
Period: 0.0100052345
Trace Example
Trace functions include: 'VOLT', 'VOLT:AC', 'CURR', 'CURR:AC','RES', 'FRES', 'TEMP', 'FREQ', 'PER', 'DIOD', 'CONT', 'CAP'. Note averaging time can only be set for 'VOLT', 'CURR', 'RES', 'FRES', 'TEMP'.
[3]:
with DmmKeysight34465A(ADDRESS) as dmm:
# Set the trace function you want to measure
dmm.set_sampling_measurement_mode(function="VOLT")
# Optional: Configure averaging time and measurement range and trigger delay.
# See measurement section below.
dmm.set_measurement_range(measurement_range=1)
dmm.set_averaging_time(averaging_time=0.01)
# Configure sampling
dmm.set_sample_points(sample_points=100)
dmm.set_measurement_range(measurement_range=1)
dmm.set_sample_interval(
sample_interval=0.03
) # Must be at least 2.1x bigger than averaging time?
# Configure trigger
dmm.set_trigger_immediate()
dmm.set_trigger_delay(trigger_delay=0.01)
dmm.set_wait_for_trigger() # Set state to wait-for-trigger
# Read samples
samples = dmm.get_samples(
polling_cycle=1
) # Blocks code, waits for trigger event and measurements to complete.
# Sets polling cycle to 1 second.
print(f"Sampled Values:{samples}")
# Reset Instrument to factory default.
dmm.reset()
Sampled Values:[-0.000174865096, 0.000189855769, -0.000160194402, 0.000166605493, -0.000140659566, 0.000146773698, -0.000122314868, 0.000126154617, -9.79458165e-05, 0.000105457267, -7.23774188e-05, 8.40969392e-05, -5.56556361e-05, 6.23982162e-05, -2.82502364e-05, 4.05728828e-05, -9.15508396e-06, 1.91112665e-05, 5.81026701e-06, -4.8273098e-06, 2.87520741e-05, -2.25205397e-05, 4.86828553e-05, -5.37564799e-05, 6.85837104e-05, -6.82361073e-05, 9.37124246e-05, -9.03100575e-05, 0.000118610938, -0.000119216366, 0.000143131922, -0.000129066656, 0.00016075379, -0.000154674188, 0.000179429977, -0.000172809403, 0.000196957462, -0.000199558731, 0.000220764824, -0.000220559946, 0.000240382533, -0.000235513787, 0.00025604309, -0.000261367633, 0.000277799363, -0.000278130852, 0.000299311623, -0.000301735637, 0.000322071572, -0.000318112119, 0.000339944358, -0.000338959099, 0.000362170241, -0.000360940969, 0.000383054053, -0.000381058213, 0.000402139998, -0.000396196214, 0.000426852049, -0.000419453396, 0.000447397466, -0.00043510935, 0.000468997203, -0.000462332891, 0.000480302362, -0.000483014126, 0.000503002458, -0.00050177779, 0.000522000926, -0.000518973786, 0.000550329431, -0.000538020596, 0.000565672311, -0.000555202781, 0.000587522967, -0.000582819965, 0.000607508996, -0.000601829943, 0.00062633021, -0.000620791579, 0.000640192899, -0.000643516997, 0.000669023241, -0.000659511346, 0.000683482151, -0.000684909395, 0.000706555172, -0.000703974621, 0.000725671043, -0.000723813322, 0.000745178255, -0.000735284226, 0.00076344008, -0.000754895028, 0.000783221231, -0.000774567984, 0.000805444812, -0.000799187955, 0.000820251324, -0.000816770688]
[4]:
# Plot Function
plt.plot(samples)
plt.title("Voltage Trace")
plt.xlabel("Time(s)")
plt.ylabel("Voltage(V)")
plt.show()
Trigger sources explained
[5]:
dmm.connect()
Immediate
Triggers immediately after the instrument is put into wait-for-trigger state.
[6]:
dmm.set_trigger_immediate()
dmm.set_wait_for_trigger() # Triggers straight away.
External
Triggers when a TTL pulse is received on the Ext-Trig input.
[7]:
dmm.set_trigger_external(pos_edge=False) # Negative slope triggering
dmm.set_wait_for_trigger()
Bus
Triggers when a *TRG command is received.
[8]:
dmm.set_trigger_bus()
dmm.set_wait_for_trigger()
dmm.trigger_now()
Level
Triggers on a level on the input signal.
[9]:
dmm.set_trigger_internal_level(trigger_level=3, pos_edge=True)
dmm.set_wait_for_trigger()
[10]:
dmm.disconnect()
Measurement time explained
The first sample starts one trigger-delay time after the trigger. However, the second sample starts one sample interval after the start of the first sample, and so on:
[5]:
from IPython.display import Image
Image("images/sampling.png")
[5]:
The minimum sample time is measurement dependent. It depends on such things as the integration time (set_averaging_time()), autozero on or off, autorange on or off, and the measurement range. Basically, MIN is automatically determined so that the sample interval is always greater than the sampling time (see above illustration). Use dmm.get_sample_interval_min()/dmm.set_sample_interval_min() to determine the recommended interval for the current measurement configuration.