Krzysztof naprawil

This commit is contained in:
2026-04-13 11:14:26 +02:00
parent f11223744e
commit c677116b1f
+71 -27
View File
@@ -1,3 +1,4 @@
from matplotlib.pylab import sca
from PIL.ImageChops import offset from PIL.ImageChops import offset
from siglent_sdg.siglent import SiglentGen from siglent_sdg.siglent import SiglentGen
from asyncio import sleep from asyncio import sleep
@@ -16,7 +17,7 @@ import matplotlib.pyplot as plt
# R =3.4 ohm # R =3.4 ohm
SINE_FREQ = 100e3 SINE_FREQ = 100e3
CYCLE_COUNT = 10 CYCLE_COUNT = 1000
DIV_COUNT = 10 DIV_COUNT = 10
@@ -25,18 +26,18 @@ OSC_CHANNEL_A = 1 # GEN signal
OSC_CHANNEL_B = 2 # OUT OSC_CHANNEL_B = 2 # OUT
GEN_CHANNEL = siglent.ChannelID.CH1 GEN_CHANNEL = siglent.ChannelID.CH1
UPPER_BOUND_DIV = 7 UPPER_BOUND_DIV = 3.5
LOWER_BOUND_DIV = 3 LOWER_BOUND_DIV = 1
TARGET_DIV = (UPPER_BOUND_DIV + LOWER_BOUND_DIV) / 2 TARGET_DIV = (UPPER_BOUND_DIV + LOWER_BOUND_DIV) / 2
PATH = "/home/zychlix/Desktop/pomiary/out" PATH = "/home/zychlix/Desktop/pomiary/out"
PATH_BH = "/home/zychlix/Desktop/pomiary/out_BH" PATH_BH = "/home/zychlix/Desktop/pomiary/out_BH"
PATH_BH_RAW = "/home/zychlix/Desktop/pomiary/out_BH_raw" PATH_BH_RAW = "/home/zychlix/Desktop/pomiary/out_BH_raw"
R0 = 99.5 R0 = 19.82
AMPLITUDE = 10 AMPLITUDE = 10
COUNT = 50 COUNT = 100
class ImpedanceAnalyzer: class ImpedanceAnalyzer:
@@ -55,7 +56,10 @@ class ImpedanceAnalyzer:
self.dc = 0 self.dc = 0
self.scales = [10] * (CHANNEL_COUNT + 1) self.scales = [1] * (CHANNEL_COUNT + 1)
# for i in self.osc.channels
# se
return return
@@ -75,6 +79,11 @@ class ImpedanceAnalyzer:
channel_A_data = self.getScaledWaveform(OSC_CHANNEL_A) channel_A_data = self.getScaledWaveform(OSC_CHANNEL_A)
channel_B_data = self.getScaledWaveform(OSC_CHANNEL_B) channel_B_data = self.getScaledWaveform(OSC_CHANNEL_B)
self.osc.single()
time.sleep(2)
channel_A_data = self.osc.getChannel(OSC_CHANNEL_A).getWaveform()
channel_B_data = self.osc.getChannel(OSC_CHANNEL_B).getWaveform()
time_array = self.osc.getChannel(OSC_CHANNEL_A).genTimeArray(channel_A_data) time_array = self.osc.getChannel(OSC_CHANNEL_A).genTimeArray(channel_A_data)
v_a = dft(channel_A_data, time_array, freq) v_a = dft(channel_A_data, time_array, freq)
@@ -92,15 +101,41 @@ class ImpedanceAnalyzer:
return z return z
def getScaledWaveform(self, ch): def getScaledWaveform(self, ch):
data = self.osc.getChannel(ch).getWaveform() while True:
vpp = self.calculateVRMS(data) * 2 * np.sqrt(2)
print(f"VPP measured from rms: {vpp} on channel {ch}: SCALE {self.scales[ch]}")
if not (LOWER_BOUND_DIV < vpp / self.scales[ch] < UPPER_BOUND_DIV):
self.autoscale(ch)
time.sleep(2) # change back to 1
self.osc.single() self.osc.single()
time.sleep(1)
data = self.osc.getChannel(ch).getWaveform() data = self.osc.getChannel(ch).getWaveform()
minimum = np.min(data)
maximum = np.max(data)
scale_range = self.osc.getChannel(ch).getScaleRange()
if (
maximum / self.scales[ch] > UPPER_BOUND_DIV
or minimum / self.scales[ch] < -UPPER_BOUND_DIV
):
self.scales[ch] = self.scales[ch] * 2
if self.scales[ch] > scale_range[1]:
self.scales[ch] = scale_range[1]
self.osc.getChannel(ch).setVScale(self.scales[ch])
break
elif (
minimum / self.scales[ch] < LOWER_BOUND_DIV
and minimum / self.scales[ch] > -LOWER_BOUND_DIV
):
self.scales[ch] = self.scales[ch] / 2
if self.scales[ch] < scale_range[0]:
self.scales[ch] = scale_range[0]
self.osc.getChannel(ch).setVScale(self.scales[ch])
break
else:
break
self.osc.getChannel(ch).setVScale(self.scales[ch])
print(
f"Channel {ch} settings: min: {minimum}, max: {maximum} scale:{self.scales[ch]}"
)
return data return data
def getSweep(self, start: float, stop: float, samples): def getSweep(self, start: float, stop: float, samples):
@@ -126,22 +161,31 @@ class ImpedanceAnalyzer:
data = self.osc.getChannel(channel).getWaveform() data = self.osc.getChannel(channel).getWaveform()
time.sleep(1) time.sleep(1)
# rms = self.calculateVRMS(data) # rms = self.calculateVRMS(data)
min = numpy.dat minimum = np.min(data)
vpp = rms * 2 * np.sqrt(2) maximum = np.max(data)
if LOWER_BOUND_DIV < vpp / self.scales[channel] < UPPER_BOUND_DIV: scale_range = self.osc.getChannel(channel).getScaleRange()
break
elif ( if (
vpp / self.scales[channel] > UPPER_BOUND_DIV maximum / self.scales[channel] > UPPER_BOUND_DIV
or self.osc.getChannel(channel).getVrms()[0] > 1000 or minimum / self.scales[channel] < -UPPER_BOUND_DIV
): ):
self.scales[channel] = self.osc.getChannel(channel).clampVscale( self.scales[channel] = self.scales[channel] * 2
self.scales[channel] * 2 if self.scales[channel] > scale_range[1]:
) self.scales[channel] = scale_range[1]
self.osc.getChannel(channel).setVScale(self.scales[channel])
break
elif (
minimum / self.scales[channel] < LOWER_BOUND_DIV
and minimum / self.scales[channel] > -LOWER_BOUND_DIV
):
self.scales[channel] = self.scales[channel] / 2
if self.scales[channel] < scale_range[0]:
self.scales[channel] = scale_range[0]
self.osc.getChannel(channel).setVScale(self.scales[channel])
break
else: else:
self.scales[channel] = self.osc.getChannel(channel).clampVscale( break
vpp / TARGET_DIV
)
self.osc.getChannel(channel).setVScale(self.scales[channel]) self.osc.getChannel(channel).setVScale(self.scales[channel])
print( print(
@@ -229,7 +273,7 @@ def main():
# imp.PlotBH(10e3, AMPLITUDE) # imp.PlotBH(10e3, AMPLITUDE)
# return 0 # return 0
z, f = imp.getSweep(2, 7, COUNT) z, f = imp.getSweep(5, 5, 1)
z_real = np.real(z) z_real = np.real(z)
z_imag = np.imag(z) z_imag = np.imag(z)