From aa6f1ac081aa924a4437e4cc6061c0404db5cf6c Mon Sep 17 00:00:00 2001 From: Pavel Pisa Date: Tue, 9 Jun 2015 19:38:09 +0200 Subject: [PATCH] Sript currents and PWM data visualization computes alpha and beta current components now. Signed-off-by: Pavel Pisa --- tools/datavis/pxmc-spimc-currents-show.py | 44 +++++++++++++++++++---- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/tools/datavis/pxmc-spimc-currents-show.py b/tools/datavis/pxmc-spimc-currents-show.py index 24189f0..2a1ce7a 100755 --- a/tools/datavis/pxmc-spimc-currents-show.py +++ b/tools/datavis/pxmc-spimc-currents-show.py @@ -11,7 +11,7 @@ import argparse class spimc_state(object): def __init__(self, data_fname = None, adc_channels = 3, pwm_channels = 3, dmem_words = 0, skip_words = 0, period = 2500, adc_oversample = 1, - filtspan = 1, isr_divider = 1, samples = None): + filtspan = 1, isr_divider = 1, samples = None, do_curcal = False): self.adc_channels = adc_channels self.pwm_channels = pwm_channels self.period = period @@ -34,6 +34,7 @@ class spimc_state(object): self.adc_sqn = np.ndarray(shape=(self.rawsamples), dtype=np.uint32) self.adc_offset = np.ndarray(shape=(self.adc_channels), dtype=np.float) self.current = np.ndarray(shape=(self.adc_channels, self.samples), dtype=np.float) + self.cur_alpbet = np.ndarray(shape=(2, self.samples), dtype=np.float) self.pwm_d = np.ndarray(shape=(1, self.samples), dtype=np.float) self.pwm_q = np.ndarray(shape=(1, self.samples), dtype=np.float) @@ -42,9 +43,16 @@ class spimc_state(object): self.ptindx = np.ndarray(shape=(1, self.samples), dtype=np.uint32) self.ptphs = np.ndarray(shape=(1, self.samples), dtype=np.int32) - self.adc_offset[0] = 2071.0 - self.adc_offset[1] = 2074.0 - self.adc_offset[2] = 2050.0 + self.adc_offset[0] = 2070.881306 + self.adc_offset[1] = 2073.552682 + self.adc_offset[2] = 2050.669577 + + self.curcal = np.array( + [[ 0.0063098, -0.00182591, 0.00580102], + [ 0.00245373, 0.00224583, -0.00493571], + [-0.00876353, -0.00041991, -0.00086531]] + ) * 1000 + sample_pos = 0; for i in range(0, self.rawsamples): pos = sample_pos + self.skip_words @@ -72,12 +80,22 @@ class spimc_state(object): fac = 1.0 sampsum = 0.0 for j in range(0, self.filtspan): - sampsum += float(self.adc_raw[ch, i + j]) / float(self.adc_sqn[i]) + sqn_inc = float(self.adc_sqn[i]); + if sqn_inc <= 1: + sampsum += 0 + else: + sampsum += float(self.adc_raw[ch, i + j]) / sqn_inc self.adc_data[ch, i] = sampsum * fac for ch in range(0, self.adc_channels): for i in range(0, self.samples): self.current[ch, i] = self.adc_data[ch, i] - self.adc_offset[ch] + if do_curcal: + self.current = np.dot(self.curcal, self.current) + + clarke_t = np.array([[1.0, -0.5, -0.5], [0, math.sqrt(3)/2.0, -math.sqrt(3)/2.0]]) + self.cur_alpbet = np.dot(clarke_t, self.current) + if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('-f', '--filtspan', dest='filtspan', type=int, @@ -92,6 +110,8 @@ if __name__ == '__main__': default=3, help='number of measured current ADC channels') parser.add_argument('-s', '--samples', dest='samples', type=int, default=None, help='limit number of processed samples') + parser.add_argument('-C', '--curcal', dest='do_curcal', action='store_true', + default=False, help='Use current callibration') parser.add_argument('files', nargs=argparse.REMAINDER) args = parser.parse_args() @@ -102,7 +122,8 @@ if __name__ == '__main__': adc_data = spimc_state(args.files[0], filtspan = args.filtspan, period = args.period, adc_oversample = args.adc_oversample, isr_divider = args.isr_divider, adc_channels = args.channels, - samples = args.samples, pwm_channels = args.channels) + samples = args.samples, pwm_channels = args.channels, + do_curcal = args.do_curcal) x = range(0, adc_data.samples) xr = range(0, adc_data.rawsamples) @@ -120,6 +141,12 @@ if __name__ == '__main__': y7 = adc_data.adc_sqn y8 = y4 + y5 + y6 + cur_alp = adc_data.cur_alpbet[0] + cur_bet = adc_data.cur_alpbet[1] + + cur_mag = np.sqrt(cur_alp**2 + cur_bet**2) + cur_ph = np.arctan2(cur_alp, cur_bet) + #pwm_ph = np.arctan2(adc_data.pwm_q, adc_data.pwm_d) #cur_ph = np.arctan2(adc_data.cur_q_filt, adc_data.cur_d_filt) #cur_ph = np.arctan2(adc_data.cur_q, adc_data.cur_d) @@ -134,3 +161,8 @@ if __name__ == '__main__': x, y8, 'c') show() + + plot(x, y, 'k', x, cur_alp, 'm', x, cur_bet, 'c', + x, cur_mag, 'r', x, cur_ph*3600/2/math.pi, 'g') + + show() -- 2.39.2