Products > Test Equipment
LCR Impedance Viewer for Picoscope+Keysight+R&S Bode Plot Data (open source)
_Wim_:
I was thinking of something is the line of measuring a "known" resistor with using the known reference resistor. This way both gain and phase can be predicted, and actual measured gain and phase can be used somehow as a correction. Similarly, I could measure with an open jig and a shorted jig like is typically done with an LCR meter.
But I am not sure this will be very useful, as the inaccuracy of using a scope in the first place or probably much worse that not performing a calibration on the test jig/cables.
_Wim_:
Updated version again in first post, now you can define the reference resistor when taking a measurement with the picoscope directly (forgot to remove the test code were is was default at 1K :) )
HalFET:
That should be doable if you measure it in a range where the phase difference is high enough. You could probably also go for a Q-meter approach, though that would require additional components which might not be very attractive.
_Wim_:
Finally fixed the problem with the message log. Updated version in first post. Also added some more options and small functionality.
HalFET:
Quick try at the error calculation, haven't yet investigated your code so not sure how applicable this is.
So operating on the assumption that we can see the circuit as follows:
V2 o------+
|
| |
| | Z_REF
| |
|
V1 o------+
|
| |
| | Z_DUT
| |
|
___
GND -
Then we can assume: Z_DUT = Z_REF * V1 / (V2 - V1)
If we split each bit up as imaginary number: Z_DUT = R_DUT + j * X_DUT, Z_REF = R_REF + 1i * X_REF, V1 = V1_Re + 1i * V1_Im and V2 = V2_Re + 1i * V2_Im
At that point:
--- Code: ---R_DUT = - ((V1_Im - V2_Im)*(R_REF*V1_Im + V1_Re*X_REF))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - ((V1_Re - V2_Re)*(R_REF*V1_Re - V1_Im*X_REF))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)
--- End code ---
--- Code: ---X_DUT = ((V1_Im - V2_Im)*(R_REF*V1_Re - V1_Im*X_REF))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - ((V1_Re - V2_Re)*(R_REF*V1_Im + V1_Re*X_REF))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)
--- End code ---
If we then set the error of each input variable: R_REF_Error X_REF_Error V1_Re_Error V1_Im_Error V2_Re_Error V2_Im_Error
Then the errors become:
--- Code: ---R_DUT_Error = (V1_Im_Error^2*((X_REF*(V1_Re - V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - (R_REF*(V1_Im - V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - (R_REF*V1_Im + V1_Re*X_REF)/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + ((V1_Im - V2_Im)*(R_REF*V1_Im + V1_Re*X_REF)*(2*V1_Im - 2*V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2 + ((V1_Re - V2_Re)*(R_REF*V1_Re - V1_Im*X_REF)*(2*V1_Im - 2*V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2)^2 + V1_Re_Error^2*((R_REF*V1_Re - V1_Im*X_REF)/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + (R_REF*(V1_Re - V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + (X_REF*(V1_Im - V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - ((V1_Im - V2_Im)*(R_REF*V1_Im + V1_Re*X_REF)*(2*V1_Re - 2*V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2 - ((V1_Re - V2_Re)*(R_REF*V1_Re - V1_Im*X_REF)*(2*V1_Re - 2*V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2)^2 + V2_Im_Error^2*(((V1_Im - V2_Im)*(R_REF*V1_Im + V1_Re*X_REF)*(2*V1_Im - 2*V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2 - (R_REF*V1_Im + V1_Re*X_REF)/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + ((V1_Re - V2_Re)*(R_REF*V1_Re - V1_Im*X_REF)*(2*V1_Im - 2*V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2)^2 + V2_Re_Error^2*(((V1_Im - V2_Im)*(R_REF*V1_Im + V1_Re*X_REF)*(2*V1_Re - 2*V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2 - (R_REF*V1_Re - V1_Im*X_REF)/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + ((V1_Re - V2_Re)*(R_REF*V1_Re - V1_Im*X_REF)*(2*V1_Re - 2*V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2)^2 + R_REF_Error^2*((V1_Im*(V1_Im - V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + (V1_Re*(V1_Re - V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2))^2 + X_REF_Error^2*((V1_Re*(V1_Im - V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - (V1_Im*(V1_Re - V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2))^2)^(1/2)
--- End code ---
--- Code: ---X_DUT_Error = (V1_Im_Error^2*((R_REF*(V1_Re - V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - (R_REF*V1_Re - V1_Im*X_REF)/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + (X_REF*(V1_Im - V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + ((V1_Im - V2_Im)*(R_REF*V1_Re - V1_Im*X_REF)*(2*V1_Im - 2*V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2 - ((V1_Re - V2_Re)*(R_REF*V1_Im + V1_Re*X_REF)*(2*V1_Im - 2*V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2)^2 + V1_Re_Error^2*((R_REF*V1_Im + V1_Re*X_REF)/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - (R_REF*(V1_Im - V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + (X_REF*(V1_Re - V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + ((V1_Im - V2_Im)*(R_REF*V1_Re - V1_Im*X_REF)*(2*V1_Re - 2*V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2 - ((V1_Re - V2_Re)*(R_REF*V1_Im + V1_Re*X_REF)*(2*V1_Re - 2*V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2)^2 + V2_Im_Error^2*((R_REF*V1_Re - V1_Im*X_REF)/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - ((V1_Im - V2_Im)*(R_REF*V1_Re - V1_Im*X_REF)*(2*V1_Im - 2*V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2 + ((V1_Re - V2_Re)*(R_REF*V1_Im + V1_Re*X_REF)*(2*V1_Im - 2*V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2)^2 + V2_Re_Error^2*((R_REF*V1_Im + V1_Re*X_REF)/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + ((V1_Im - V2_Im)*(R_REF*V1_Re - V1_Im*X_REF)*(2*V1_Re - 2*V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2 - ((V1_Re - V2_Re)*(R_REF*V1_Im + V1_Re*X_REF)*(2*V1_Re - 2*V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2)^2)^2 + R_REF_Error^2*((V1_Re*(V1_Im - V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) - (V1_Im*(V1_Re - V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2))^2 + X_REF_Error^2*((V1_Im*(V1_Im - V2_Im))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2) + (V1_Re*(V1_Re - V2_Re))/((V1_Im - V2_Im)^2 + (V1_Re - V2_Re)^2))^2)^(1/2)
--- End code ---
It ain't pretty, but doable I would say.
Navigation
[0] Message Index
[#] Next page
[*] Previous page
Go to full version