Страница 2 из 3

Re: LCR на STM32G431

Добавлено: Пн апр 28, 2025 16:57:44
Yuriy_King
[uquote="linkov1959",url="/forum/viewtopic.php?p=4709427#p4709427"]Единожды совравшему кто поверит?, а мы верим... Не можешь - пиши прочерк или текст. Все LCR врут. Пока это не обсуждаем.
Обсуждать будет методы калибровки на одной частоте 1кГц.[/uquote]
Ну такой глупости я не ожидал, как и что можно обсуждать при такой измерительной безграмотности?
Вот измерения подобной индуктивности (с сердечником из распыленного железа) на разных приборах, да погрешность существует и о ней написано в руководстве пользователя...
СпойлерИзображение

Изображение

Re: LCR на STM32G431

Добавлено: Вт апр 29, 2025 12:21:34
linkov1959
Будем разделять потери в проводе от потерь в сердечнике. Но это не всё.

Re: LCR на STM32G431

Добавлено: Ср апр 30, 2025 18:57:37
linkov1959
Вернемся к нашим баранам, контрольным точкам. По запуску таймера ТИМ3 запускается АЦП ДМА и ЦАП ДМА. В прерывании АЦП ДМА получаем массивы тока и напряжения через измеряемый RLC. Исходный массив 1080 точек на 3 канала adcbuf[1080] разбираем на 3 отдельных массива по 360 точек с аккумуляцией 8 циклов. Потом получаем массивы тока и напряжения.
/* USER CODE BEGIN DMA1_Channel3_IRQn 0 */
// Очищаем флаги прерывания (HAL автоматически очищает их)
HAL_DMA_IRQHandler(&hdma_adc1);



// Определяем, какая половина буфера была заполнена
if (transferCounter % 2 == 0) {
// Четное прерывание: вторая половина буфера
for (int i = BUFFER_SIZE / 2; i < BUFFER_SIZE; i++) {
accumulatedData1 += adcbuf[3 * i];
accumulatedData2 += adcbuf[3 * i + 1];
accumulatedData3 += adcbuf[3 * i + 2];
}
} else {
// Нечетное прерывание: первая половина буфера
for (int i = 0; i < BUFFER_SIZE / 2; i++) {
accumulatedData1 += adcbuf[3 * i];
accumulatedData2 += adcbuf[3 * i + 1];
accumulatedData3 += adcbuf[3 * i + 2];
}
}

// Увеличиваем счетчик передач
transferCounter++;

// Если завершился полный цикл (HT + TC)
if (transferCounter % 2 == 0) {
cycleCounter++;
}

// Проверяем, завершены ли все циклы
if (cycleCounter >= NUM_CYCLES) {
// Останавливаем таймер TIM3
HAL_TIM_Base_Stop(&htim3);
transferCounter=0;
cycleCounter=0;
for (int i = 0; i < BUFFER_SIZE; i++) {
// Расчет напряжения U
U = ((float)(accumulatedData2 - accumulatedData3) / 8.0f) * voltageCoefficient;

// Расчет тока I
I = ((float)(accumulatedData1[i] - accumulatedData2[i]) / 8.0f) * currentCoefficient;
accumulatedData1[i]=0;
accumulatedData2[i]=0;
accumulatedData3[i]=0;
}

dataReady = 1; // флаг готовности данных

}


HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_6);
/* USER CODE END DMA1_Channel3_IRQn 0 */

Re: LCR на STM32G431

Добавлено: Чт май 01, 2025 08:56:57
linkov1959
Теперь нам нужна функция, которая из массивов U,I вычисляет активную и реактивную составляющие импеданса.
/* USER CODE BEGIN 4 */
void calculateComplexZ(float *Z_real, float *Z_imag) {
float U_real = 0.0f, U_imag = 0.0f;
float I_real = 0.0f, I_imag = 0.0f;

// Вычисляем скалярные произведения для U и I
for (int i = 0; i < BUFFER_SIZE; i++) {
U_real += U * cos_ref;
U_imag += U * sin_ref;
I_real += I * cos_ref;
I_imag += I * sin_ref;
}

// Расчет модулей для нормировки
float I_magnitude_squared = I_real * I_real + I_imag * I_imag;

// Расчет действительной и мнимой частей Z
if (I_magnitude_squared > 1e-6) { // Защита от деления на ноль
*Z_real = (U_real * I_real + U_imag * I_imag) / I_magnitude_squared;
*Z_imag = (U_imag * I_real - U_real * I_imag) / I_magnitude_squared;
} else {
*Z_real = 0.0f;
*Z_imag = 0.0f;
}
}

Re: LCR на STM32G431

Добавлено: Пт май 02, 2025 11:24:47
ass20
linkov1959,
Если будут проблемы с математикой можете сделать следующее
подключить флешку 25q64 или 25q128 25q32 или подобную по spi и в нее писать csv файл потом через usb его считывать... а далее скармоивать его в matlab или sci-lab или gnu-octave .. В этих пакетах быстро и эффективно делается мат обработка результатов за счет готовых функций (FFT и др)

Re: LCR на STM32G431

Добавлено: Пт май 02, 2025 14:36:06
linkov1959
Мы уже можем писать основной код. Мы несколько раз измеряем импеданс и по среднему считаем RLCQ и т.д. Обратите внимание на Rx, это сопротивление катушки на постоянном токе. Оно нам очень пригодится в дальнейшем.
while (1)
{
if (dataReady) {
// Сбрасываем флаг готовности данных
dataReady = 0;

// Вычисляем комплексный импеданс Z

calculateComplexZ(&Z_real, &Z_imag);

// Суммируем значения для усреднения
Z_real_sum += Z_real;
Z_imag_sum += Z_imag;

// Увеличиваем счетчик итераций
iterationCounter++;

// Если завершены все итерации
if (iterationCounter >= NUM_ITERATIONS) {
// Усредняем значения Z
average_Z_real = Z_real_sum / NUM_ITERATIONS;
average_Z_imag = Z_imag_sum / NUM_ITERATIONS;
// рассчитать емкость, индуктивность и другие параметры
float R = average_Z_real;
float X = average_Z_imag;
Z_abs = sqrtf(R * R + X * X);
phi_rad = atan2f(X, R); // atan2f(X, R) = arctan(X/R)
Q = X / R; // Q = X_L / R
if (X > 0) {
L = X / (2.0f * M_PI * FREQ);
// Вывод L
} else if (X < 0) {
ESR = R; // ESR = R для конденсатора
C = 1.0f / (2.0f * M_PI * FREQ * (-X));
tan_delta = R / (-X); // tan δ = R / |X|
// Вывод C
} else {
// X == 0: чисто резистивная нагрузка
}
HAL_ADC_Start(&hadc2);
adc_value2 = HAL_ADC_GetValue(&hadc2);
HAL_ADC_Stop(&hadc2);
Rx = 150.0f * ((2.159f / ((((float)adc_value2 / 4095.0f) * 3.3f) - 0.544f)) - 2.0f);
// Сбрасываем счетчики для новых измерений
Z_real_sum = 0.0f;
Z_imag_sum = 0.0f;
average_Z_real =0;
average_Z_imag=0;
iterationCounter = 0;

}
// Запускаем новую итерацию
HAL_TIM_Base_Start(&htim3);

}
/* USER CODE END WHILE */

Re: LCR на STM32G431

Добавлено: Пн май 05, 2025 19:23:50
linkov1959
Разделили потери в проводе и сердечнике, осталось самая малость - отделить емкость от индуктивности. Если это LCR, то и выдавай LCR, а выдавать будем L,C и два R.

Re: LCR на STM32G431

Добавлено: Пн май 05, 2025 20:05:09
Andrey_B
[uquote="linkov1959",url="/forum/viewtopic.php?p=4712108#p4712108"]Разделили потери в проводе и сердечнике, осталось самая малость - отделить емкость от индуктивности.[/uquote]
Это одна и та же сущность, только по разному представленная. Как, и главное зачем её разделять?

[uquote="linkov1959",url="/forum/viewtopic.php?p=4712108#p4712108"]Если это LCR, то и выдавай LCR, а выдавать будем L,C и два R.[/uquote]
Если под двумя R вы подразумеваете вычисления его для разных схем замещения, то это конечно можно сделать, но практического смысла в этом нет.

Re: LCR на STM32G431

Добавлено: Вт май 06, 2025 11:43:19
bob1
[uquote="linkov1959",url="/forum/viewtopic.php?p=4712108#p4712108"]Разделили потери в проводе и сердечнике, осталось самая малость - отделить емкость от индуктивности.[/uquote] Это все интересно, но для стабильных катушек, для которой можно составить математическую модель в виде стабильных элементов, не зависящих от частоты, прикладываемого напряжения (тока), от формы сигнала. Реальную катушка проще измерить на условиях, на которых она работает в схеме.
[uquote="linkov1959",url="/forum/viewtopic.php?p=4712108#p4712108"]два R[/uquote] Постоянный ток конечно интересно, но если катушка работает только при переменном, то он не нужен. LCR метр показывает (L+Rs) как ваша катушка ведет себя при прикладывании тестового напряжения. И от пользователя зависит как он воспримет это инфо...
Лучше иметь прибор с различными тестовыми токами, частотами на которых работает катушка.
Сравнивать приборы по току, частоте т.к. тестовое напряжение прикладывается к элементу через разные резисторы.
Если приложено постоянное напряжение, то иметь возможность подать его в процессе измерения

Re: LCR на STM32G431

Добавлено: Вт май 06, 2025 13:14:10
u37
"Если это LCR, то и выдавай LCR"
Было ужо, раздавалось в теме Neekeetos, только что-то активность была 0.
Изображение
Вопрос на обдумывание - и какая строчка оказывается действительно самой востребованной?

Re: LCR на STM32G431

Добавлено: Вт май 06, 2025 21:43:56
linkov1959
Меня больше интересуют катушки индуктивности на разных сердечниках. L и С легко разделяются по импедансу на двух частотах, близких к резонансу, который может уходить в мегагерцы. Чем дальше от резонанса, тем меньше точность. Я уже думал сначала зондировать катушку коротким импульсом на ударное возбуждение и по резонансу получать паразитную емкость, но это хорошо, если добротность хорошая. Можно накачивать катушку меандром без ограничений по частоте. Даже разделение потерь в проводе и сердечнике очень помогает отсортировать магнитные материалы неизвестного происхождения.

Re: LCR на STM32G431

Добавлено: Ср май 07, 2025 14:31:27
ass20
[uquote="linkov1959",url="/forum/viewtopic.php?p=4712522#p4712522"]Меня больше интересуют катушки индуктивности на разных сердечниках.[/uquote]

В таком случае надо делать много частот измерения... Чтобы можно было построить зависимость характиристик катушки от частоты... Своего рода построение АЧХ

Re: LCR на STM32G431

Добавлено: Ср май 07, 2025 17:33:44
linkov1959
ass20, А как мы построим АЧХ, если не можем определить эти самые характеристики на одной частоте? В простейшем случае мы измеряем сопротивление провода на постоянном токе и комплексный импеданс на двух частотах, желательно ближе к резонансу, затем решаем систему комплексных уравнений и вычисляем эти самые характеристики типа емкости и индуктивности в интервале этих двух частот.

Re: LCR на STM32G431

Добавлено: Ср май 07, 2025 22:10:42
ass20
linkov1959,
Для определения комплексного сопротивления одного значения частоты достаточно... вот и постороим график Z(F) .. для расчета нужно 2 частоты тогда делаем график X(Fn,Fn-1)

Re: LCR на STM32G431

Добавлено: Чт май 08, 2025 20:28:51
linkov1959
ass20, на одной частоте L и C неразделимы.

Re: LCR на STM32G431

Добавлено: Вс май 11, 2025 12:11:14
u37
На самом деле, ТС поднял интереный вопрос.
Стандартная технология обязывает получить кучу параметров, которые базируются лишь на активной и реакривной составляющей. И на основе этого стандартный LCR показывает какую-то реактивность (индуктивность, емкость) и "вторичный параметр" (ESR/tg/X и др.). В результате, чем больше "реактивность" (дроссель/конденсатор) отходит от идельности, тем большее вранье показывает стандартный LCR. Подчеркиваю, любой LCR, использующий общепринятую методику представления результатов. Т.е. В-С-Е. Перевожу на русский - все LCR врут и делают это очень красочно, на 5-6-7 разрядов, при ошибке в единицы-десятки процентов. IMHO, особенно этому подвержены индуктивности, т.к. у них есть сильно-частотозависимая компонента = сердечник.
Как-то изучал сей вопрос, внес коррекцию в свой RLC ... и уменьшил количество разрядов в индикаторе (недостатки наличия образования - я все-таки изучал теорию погрешностей и представления результатов )).

Re: LCR на STM32G431

Добавлено: Вс май 11, 2025 13:37:16
КРАМ
[uquote="u37",url="/forum/viewtopic.php?p=4713943#p4713943"]На самом деле[/uquote]
На самом деле, измеритель иммитанса определяет комплЕксное значение импеданса двухполюсника на частоте измерения и приводит его к одной из двух эквивалентных схем замещения.
Ничего другого он показать не в состоянии ПО ОПРЕДЕЛЕНИЮ.
Ежику понятно, что на другой частоте параметры эквивалентной схемы будут другими.
Так же ежику понятно, что реальная эквивалентная схема двухполюсника гораздо сложнее применяемых двух схем замещения. Поэтому тот, кто не ежик, используют для особых случаев панорамный векторный анализатор цепей, а не измеритель иммитанса. Так же тот, кто не ежик, не воспринимает всерьез 100500 цифр игрушечных самопальных измерителей. Ежикам не приходит в голову, что расхождение эквивалентных схем приводит к существенным ограничениям точности. И верить можно только 2...3, максимум 4 для приборов охулиардной цены, знакам мантиссы...

Re: LCR на STM32G431

Добавлено: Ср май 14, 2025 00:17:23
ass20
[uquote="u37",url="/forum/viewtopic.php?p=4713943#p4713943"]На самом деле, ТС поднял интереный вопрос.[/uquote]

Можно разделить задачи
1. Идентификация компонента, т.е определение Емкости кондера и его добротности, Определение индуктивности катушки и т.д.
Т.е хотим узнать соответствует ли РЭА заявленным характеристикам.. Для этого читаем ГОСТ с методикой измерения и производим измерения в соответствии с ним

2. Исследование компонента...
Хотим узнать как поведет себя РЭА в соотвествующей схеме ...Для это требуется испытать этот РЭА на тех частотах , которые будут в схеме...Фактически нужно строить АЧХ компонента в некотором диапазоне частот..

Такие у меня мысли ....
PS недавно измеряя дроссель на частотах 100Гц 1кГц 10кГц 100кГц выявил в нем короткозамкнутые витки...

Re: LCR на STM32G431

Добавлено: Ср май 14, 2025 09:27:31
Yuriy_King
[uquote="ass20",url="/forum/viewtopic.php?p=4714912#p4714912"]PS недавно измеряя дроссель на частотах 100Гц 1кГц 10кГц 100кГц выявил в нем короткозамкнутые витки...[/uquote]
С такой проблемой справляются простейшие Ттестеры:
СпойлерИзображение

Re: LCR на STM32G431

Добавлено: Чт май 15, 2025 11:49:41
Yuriy_King
А вот MS5308 нужно как минимум измерения на разных частотах. Измерения на 1 кГц с короткозамкнутыми витками имеют очень малое отличие.
СпойлерИзображение