Edit - ввод-вывод с формы. Цикл был чтобы на экране слишком часто данные не обновлялись. Дальше уже некуда, я вам уже разжевал и в рот положил. Если не поможет, тогда ваш путь только заказ разработки по ТЗ. Сделал более понятно:
Код
MagnitudeGF := sqrt((RealDR_cal * RealDR_cal) + (ImaginaryDR_cal * ImaginaryDR_cal));
Vsystem := ArcTan2(ImaginaryDR_cal, RealDR_cal); //Важно арктангенс с индексом 2
if (MagnitudeGF <> 0) then GainFactor := (R_cal / MagnitudeGF);
if ((RealDR <> 0) and (ImaginaryDR <> 0)) then
begin
Magnitude := sqrt((RealDR * RealDR) + (ImaginaryDR * ImaginaryDR));
Impedance := (GainFactor * Magnitude);
Phase := ArcTan2(ImaginaryDR, RealDR); //Важно арктангенс с индексом 2
Z0 := Phase - Vsystem;
Zreal := abs(Impedance) * cos(Z0);
Zimag := abs(Impedance) * sin(Z0);
Resistance := Zreal; //Активное сопротивление в Омах
Reactance := Zimag; //Реактивное сопротивление в Омах
if ((Freq <> 0) and (Zimag <> 0)) then Capacitance := 1000000 / (2 * Pi * Freq * Zimag); //Вычисление емкости в нанофарадах. Freq - частота в кГц
end;
Если вы при калибровке учитываете потом шунт который измеряет ток, то это не верно, нужно в качестве R_cal ставить только подключенное калибровочное сопротивление. По идее вам значение шунта нигде не надо использовать в расчетах. Но я правда делал по другой схеме, на выходе с генератора источник тока, а на вход измерял ИУ падение напряжения на нагрузке. Но по моему разницы быть не должно. Все паразитные сопротивления в том числе ваш шунт должны учесться сами собой в результате калибровки.
Сообщение отредактировал Elsystems - Dec 3 2014, 17:37