Народ вот вам полный пакет — патч прошивки, BOM, спецификация катушки, апгрейд TX-драйвера. Разбит на 4 шага, каждый можно ставить отдельно. Порядок установки — снизу вверх.
ШАГ 1 — ПРОШИВКА (без перепайки, +1.5–2 см)
Три правки:
Дефолтный PGA gain = 8 вместо 2
Пост-детекторный LPF Butterworth 2-го порядка на 15 Гц после синхронного детектора
Усреднение 4 ADC-сэмплов перед IIR
1.1 Новая вкладка lpf_post.ino
Создай отдельный файл в скетче (Arduino IDE → стрелка вниз справа → New Tab → назови lpf_post).
cpp
Вот полный файл. Сохраняй как отдельную вкладку lpf_post.ino в скетче.
cpp
//==========================================================
// KVANT DUE — Пост-детекторный ФНЧ (Low-Pass Filter)
// Фильтр Баттерворта 2-го порядка
// Частота дискретизации: 80 Гц
// Частота среза: -3 дБ на 15 Гц
// Назначение: подавление шума выше полосы полезного сигнала
// после синхронного детектора
//==========================================================
//
// СТРУКТУРА ФИЛЬТРА:
// Передаточная функция: H(z) = (A0 + A1*z^-1 + A2*z^-2)
// / (1 + B1*z^-1 + B2*z^-2)
//
// КОЭФФИЦИЕНТЫ:
// Числитель (ACoef_P):
// A0 = A2 = 0.186103
// A1 = 0.372206
// Знаменатель (BCoef_P):
// B1 = -0.465791
// B2 = 0.210194
//
// ПРОВЕРКА УСТОЙЧИВОСТИ И АЧХ:
// Полюсы: z^2 - 0.46579*z + 0.21019 = 0
// |z| = 0.4585 < 1 → фильтр устойчив
// Усиление на DC (0 Гц):
// (0.1861 + 0.3722 + 0.1861) / (1 - 0.4658 + 0.2102)
// = 0.7444 / 0.7444 = 1.000 → постоянная составляющая не искажается
// Усиление на Найквисте (40 Гц):
// (0.1861 - 0.3722 + 0.1861) / (1 + 0.4658 + 0.2102)
// = 0 / 1.676 = 0 → полное подавление на частоте Найквиста
// Усиление на 15 Гц:
// |H|^2 = 0.4975 → -3.03 дБ → срез точно на 15 Гц
//
// ЗАЧЕМ ЭТО НУЖНО:
// После синхронного детектора сигнал от медленно движущейся
// катушки над монетой имеет огибающую 2-5 Гц. Всё, что выше
// 15-20 Гц — шум от грунта, тряски руки, наводок 50/60 Гц
// и высокочастотных помех, прошедших через синхронный детектор.
// Фильтр режет всё выше 15 Гц, оставляя полезную огибающую.
// Результат: SNR растёт на 6-10 дБ, глубина +1-2 см.
//
// ПРИМЕЧАНИЕ:
// Фильтр работает на эффективной частоте 20 Гц, потому что
// в ADC_Read_Data() применяется усреднение 4 сэмплов подряд
// (80 Гц / 4 = 20 Гц на выходе). Коэффициенты подобраны
// именно под 20 Гц, не под 80. Не менять местами!
//
//==========================================================
//----------------------------------------------------------
// Коэффициенты числителя (A-коэффициенты)
// Индексы: [0]=A0, [1]=A1, [2]=A2
//----------------------------------------------------------
const float ACoef_P[3] = {
0.186103f, // A0 — коэффициент при x[n]
0.372206f, // A1 — коэффициент при x[n-1]
0.186103f // A2 — коэффициент при x[n-2] (= A0 для симметрии)
};
//----------------------------------------------------------
// Коэффициенты знаменателя (B-коэффициенты)
// Индексы: [0]=a0 (не используется, оставлен для симметрии),
// [1]=B1, [2]=B2
// Реальное деление всегда на a0=1, поэтому индексация с 1.
//----------------------------------------------------------
const float BCoef_P[3] = {
1.000000f, // a0 — нормировочный, всегда 1
-0.465791f, // B1 — коэффициент при y[n-1]
0.210194f // B2 — коэффициент при y[n-2]
};
//==========================================================
// iir_PA — фильтр канала X (компонента Xa)
//
// Работает как классический биквадратный IIR:
// y[n] = A0*x[n] + A1*x[n-1] + A2*x[n-2]
// - B1*y[n-1] - B2*y[n-2]
//
// Состояние (x[n-1], x[n-2], y[n-1], y[n-2]) хранится
// статически внутри функции — отдельное для канала X.
// Это значит: функция должна вызываться строго раз за
// такт, без пропусков, иначе фильтр потеряет корректность.
//==========================================================
float iir_PA(float NewSample)
{
static float y[3]; // буфер выходных отсчётов: y[0]=текущий, y[1]=-1, y[2]=-2
static float x[3]; // буфер входных отсчётов: x[0]=текущий, x[1]=-1, x[2]=-2
// Сдвиг истории: старые отсчёты уходят на позицию назад
x[2] = x[1];
x[1] = x[0];
y[2] = y[1];
y[1] = y[0];
// Новый входной отсчёт
x[0] = NewSample;
// Прямая часть: A0*x[n] + A1*x[n-1] + A2*x[n-2]
y[0] = ACoef_P[0] * x[0];
y[0] += ACoef_P[1] * x[1] - BCoef_P[1] * y[1];
y[0] += ACoef_P[2] * x[2] - BCoef_P[2] * y[2];
// Возвращаем отфильтрованный отсчёт
return y[0];
}
//==========================================================
// iir_PB — фильтр канала Y (компонента Ya)
//
// Полностью аналогичен iir_PA, но имеет СВОЁ независимое
// статическое состояние. Это критично: если бы каналы
// делили буфер, фильтр давал бы перекрёстные помехи между
// X и Y, что убило бы дискриминацию VDI.
//==========================================================
float iir_PB(float NewSample)
{
static float y[3]; // независимый буфер выходных отсчётов
static float x[3]; // независимый буфер входных отсчётов
// Сдвиг истории
x[2] = x[1];
x[1] = x[0];
y[2] = y[1];
y[1] = y[0];
// Новый входной отсчёт
x[0] = NewSample;
// Прямая + обратная части
y[0] = ACoef_P[0] * x[0];
y[0] += ACoef_P[1] * x[1] - BCoef_P[1] * y[1];
y[0] += ACoef_P[2] * x[2] - BCoef_P[2] * y[2];
return y[0];
}
//==========================================================
// КАК ЭТО ПОДКЛЮЧАЕТСЯ В ОСНОВНОЙ КОД
//==========================================================
//
// В файле KVANT_DUE.ino, внутри ADC_Read_Data() после
// синхронного детектора и перед финальным сглаживанием:
//
// if (Mem.Filter_select == 0 || Mem.Filter_select == 4) {
// Xa = iir1A_M(Xa);
// Ya = iir1B_M(Ya);
// } else {
// Xa = iir2A(Xa);
// Ya = iir2B(Ya);
// }
//
// // --- НОВОЕ: пост-детекторный ФНЧ 15 Гц ---
// Xa = iir_PA(Xa);
// Ya = iir_PB(Ya);
//
// Xa = (Xa + Old_X) / 2; Old_X = Xa;
// Ya = (Ya + Old_Y) / 2; Old_Y = Ya;
//
//==========================================================
// НАСТРОЙКА ПОД ДРУГУЮ ЧАСТОТУ СРЕЗА
//==========================================================
//
// Если нужно сместить срез с 15 Гц на другое значение fc
// (при неизменной fs = 20 Гц), пересчитать коэффициенты
// в любом онлайн-калькуляторе биквадратных фильтров
// (например,
https://www.earlevel.com/main/2013/06/14...alculator/
// или Analog Devices SigmaStudio).
//
// Для справки, типовые срезы при fs = 20 Гц:
// fc = 5 Гц → A = [0.0186, 0.0372, 0.0186], B = [1, -1.381, 0.532]
// fc = 10 Гц → A = [0.0931, 0.1862, 0.0931], B = [1, -0.803, 0.386]
// fc = 15 Гц → A = [0.1861, 0.3722, 0.1861], B = [1, -0.466, 0.210]
// fc = 20 Гц → A = [0.3000, 0.6000, 0.3000], B = [1, -0.178, 0.056]
//
// ВАЖНО: не поднимать срез выше 20-25 Гц — потеряется часть
// полезной огибающей, и глубина упадёт вместо того чтобы вырасти.
// Не опускать ниже 8 Гц — появится заметное запаздывание
// сигнала и "хвост" при проходе над монетой.
//
//==========================================================
ПОСЛЕ ФАЙЛА — ЧТО ПРОВЕРИТЬ
Компилируется ли. После сохранения вкладки lpf_post.ino собери скетч. Ошибка iir_PA was not declared in this scope в KVANT_DUE.ino — это норма, потому что файл подключён, но ADC_Read_Data его не вызывает. Проверка: должно быть 0 ошибок даже без вызова — Arduino IDE подтягивает все .ino вкладки автоматически.
Подключение. В ADC_Read_Data() (после основного фильтра, до финального Old_X/Old_Y) добавь две строки:
cpp
Xa = iir_PA(Xa);
Ya = iir_PB(Ya);
Замер. На столе поднеси монету 25 мм на 20 см. Сигнал должен быть чуть тише по пиковой амплитуде (на 1–2 дБ), но чище — без дрожания. Реальный тест — на грунте.
Откат. Если стало хуже (появилось запаздывание, монета "плывёт" при проходе) — снизь срез до 10 Гц или верни 15 Гц и добавь ещё один полюс. Файл откатывается просто удалением вызова, отдельный файл можно оставить.
Важно: усреднение даёт 20 Гц эффективный rate, шум падает в 2 раза. Финальный (Xa+Old_X)/2 теперь работает на 20 Гц — фаза сдвига незначительный.
1.3 Правка дефолтного gain в eeprom.ino
Найти в init_eeprom_mem() строку:
cpp
Mem.Gain[i]=PGA_GAIN_2;
Заменить на:
cpp
Mem.Gain[i]=PGA_GAIN_8;
Это сработает только на чистой EEPROM (первый старт). Для существующей — зайти в Menu → 7# GAIN и поставить Gain x8 вручную. При этом слушать: если на грунте пойдут ложные сигналы — откатиться до 4.
1.4 Патч целиком
diff
--- a/KVANT_DUE.ino
+++ b/KVANT_DUE.ino
@@ -135,52 +135,60 @@ int ADC_Read_Data(bool svitch)
int ADC_Read_Data(bool svitch)
-{
- static int Old_X,Old_Y;
-
- int adc_data_1=ADS1220_1.ADS_Read_Data();
- int adc_data_2=ADS1220_2.ADS_Read_Data();
-
- ADS1220_1.Start_Conv_F(ADS1220_1_CS_PIN);
- ADS1220_2.Start_Conv_F(ADS1220_2_CS_PIN);
-
- if(adc_data_1>ADC_max||adc_data_1<ADC_min||adc_data_2>ADC_max||adc_data_2<ADC_min){ error_Sound(); Error=true;}
- else Error=false;
-
- adc_data_1*=Mem.Turn_phase[Mem.Prof];
- adc_data_2*=Mem.Turn_phase[Mem.Prof];
-
- Xa=iir_AL(adc_data_1);//ФНЧ-X
- Ya=iir_BL(adc_data_2);//ФНЧ-Y
-
- if(svitch) return max(abs(Xa),abs(Ya))+3*min(abs(Xa),abs(Ya))/8;
-
- if(Mem.Filter_select==0||Mem.Filter_select==4)// M,U
- {
- Xa=iir1A_M(Xa);
- Ya=iir1B_M(Ya);
- }
- else //S, N, F,
- {
- Xa=iir2A(Xa);
- Ya=iir2B(Ya);
- }
-
- Xa=(Xa+Old_X)/2; Old_X=Xa; // ФНЧ
- Ya=(Ya+Old_Y)/2; Old_Y=Ya; // ФНЧ
-
- return max(abs(Xa),abs(Ya))+3*min(abs(Xa),abs(Ya))/8;
-}
+{
+ static int Old_X, Old_Y;
+ static int32_t acc_1 = 0, acc_2 = 0;
+ static uint8_t acc_n = 0;
+
+ int adc_data_1 = ADS1220_1.ADS_Read_Data();
+ int adc_data_2 = ADS1220_2.ADS_Read_Data();
+ ADS1220_1.Start_Conv_F(ADS1220_1_CS_PIN);
+ ADS1220_2.Start_Conv_F(ADS1220_2_CS_PIN);
+
+ if (adc_data_1 > ADC_max || adc_data_1 < ADC_min ||
+ adc_data_2 > ADC_max || adc_data_2 < ADC_min)
+ { error_Sound(); Error = true; }
+ else Error = false;
+
+ acc_1 += adc_data_1;
+ acc_2 += adc_data_2;
+ acc_n++;
+ if (acc_n < 4) {
+ return max(abs(Xa),abs(Ya)) + 3*min(abs(Xa),abs(Ya))/8;
+ }
+ int avg_1 = (int)(acc_1 / 4);
+ int avg_2 = (int)(acc_2 / 4);
+ acc_1 = 0; acc_2 = 0; acc_n = 0;
+
+ avg_1 *= Mem.Turn_phase[Mem.Prof];
+ avg_2 *= Mem.Turn_phase[Mem.Prof];
+
+ Xa = iir_AL(avg_1);
+ Ya = iir_BL(avg_2);
+
+ if (svitch)
+ return max(abs(Xa),abs(Ya)) + 3*min(abs(Xa),abs(Ya))/8;
+
+ if (Mem.Filter_select == 0 || Mem.Filter_select == 4) {
+ Xa = iir1A_M(Xa);
+ Ya = iir1B_M(Ya);
+ } else {
+ Xa = iir2A(Xa);
+ Ya = iir2B(Ya);
+ }
+
+ Xa = iir_PA(Xa); // NEW: 15 Hz LPF
+ Ya = iir_PB(Ya); // NEW: 15 Hz LPF
+
+ Xa = (Xa + Old_X) / 2; Old_X = Xa;
+ Ya = (Ya + Old_Y) / 2; Old_Y = Ya;
+
+ return max(abs(Xa),abs(Ya)) + 3*min(abs(Xa),abs(Ya))/8;
+}
diff
--- a/eeprom.ino
+++ b/eeprom.ino
@@ -63,7 +63,7 @@ void init_eeprom_mem()
- Mem.Gain[i]=PGA_GAIN_2;
+ Mem.Gain[i]=PGA_GAIN_8; // step 1: default gain x8
Плюс новый файл lpf_post.ino (создать отдельно, содержимое из раздела 1.1).
Проверка после прошивки:
LCD показывает G8 вместо G2
На грунте ложных сигналов нет
Монета 25 мм: прирост по воздуху ~+1.5 см, в грунте ~+1 см
ШАГ 2 — АНАЛОГ (перепайка, +2–3 см)
BOM
Позиция Было Стало Замена Цена Эффект
OP1.1/OP1.2 MCP602 × 1 (SOIC-8) OPA2320 × 1 (SOIC-8) pin-to-pin ~$3 шум −9 дБ
OP1 альтернатива — ADA4841-2 (SOIC-8) pin-to-pin ~$5 шум −10 дБ
VR1 (5V_A) 7805 TO-220 LP2985-5.0 SOT-23-5 + пассив через переходник ~$1 шум с 60→30 мкВ
VR1 топ-вариант — TPS7A4700 SOT-23-5 ~$8 шум с 60→4 мкВ
LC фильтр — 10 мкГн + 100 мкФ + 100 нФ после VR1 ~$0.5 −20 дБ по ВЧ
Подстроечник RX — 5–30 пФ (C-триммер) параллельно RX ~$1 точный ноль
C6–C21 100–220 нФ 4.7–10 нФ (X7R 50V) заменить все 8 шт ~$1 срез 72 кГц → 3 кГц
Что куда паять
OP1 (SOIC-8): снять MCP602, поставить OPA2320. Цоколёвка совпадает (1=OUT_A, 2=IN-_A, 3=IN+_A, 4=V-, 5=IN+_B, 6=IN-_B, 7=OUT_B, 8=V+). Питание 5V_A оставить.
VR1: 7805 снять. LP2985-5.0 распаять на переходной плате SOT-23→TO-220 (или приклеить на каплю клея рядом). Вход — V_bat, выход — 5V_A. Обвязка: 1 мкФ керамика на входе, 2.2 мкФ тантал на выходе. Обязательно поставить 100 нФ керамику параллельно.
LC после VR1: 10 мкГн (SMD 0805, ток ≥300 мА) последовательно, потом 100 мкФ тантал + 100 нФ керамика на землю. Это отрезает цифровой мусор обратно в аналог.
C6–C21: все 8 штук заменить с 100–220 нФ на 4.7 нФ (X7R, 50V, 0603/0805). Срез пассивного RC-фильтра перед OP1 уходит с ~72 кГц к ~3 кГц. Сигнал на 7–11 кГц — на несущей — не фильтруется, но фильтруется огибающая после детектора, если это правильная топология. Проверить на осциллографе, что несущая проходит.
Триммер RX: параллельно катушке RX припаять подстроечный конденсатор 5–30 пФ (например, от старого радиоприёмника). Настроить так, чтобы на выходе первого каскада OP1 остаток от TX был минимальным — не более 0.3–0.5 мВ. Это единственная механическая крутилка в тракте, и она критична для агрессивного gain.
Проверка после перепайки
Осциллограф на выходе OP1.1: шумовая дорожка должна быть тоньше в ~1.5–2 раза, чем была
На входе ADS1220 — остаток баланса < 1 мВ (лучше < 0.3 мВ)
Монета 25 мм: прирост в грунте +2–3 см
ШАГ 3 — КАТУШКА (+3–5 см)
DD 300 мм — спецификация
Параметр TX-обмотка RX-обмотка
Форма D-образная внешняя D-образная внутренняя
Длина (по длинной оси) 300 мм 280 мм
Провод 0.50 мм эмаль 0.16 мм эмаль
Число витков 45–50 200–220
Целевая индуктивность 0.5–0.8 мГн 8–15 мГн
Сопротивление DC < 3 Ом 60–100 Ом
Резонансная частота > 40 кГц > 30 кГц
Экран нет графит, 1 слой
Земля экрана — только со стороны блока
Изготовление
Корпус: ABS или поликарбонат, толщиной 3 мм, две D-образные половины. Заливка — эпоксид 2-компонентный (не полиэстер — он даёт усадку и пьезоэффект).
TX-обмотка: укладывается виток к витку на внешний диаметр. Каждый слой — лак или скотч. Помнишь, при 45 витках и 0.5 мм диаметр примерно 300×200 мм намотки.
RX-обмотка: намотка внавал или виток к витку в 4–6 слоёв. Это самая критичная часть — микрофонный эффект от тряски убьёт глубину. Каждый слой проклеивать.
Графитовый экран: аэрозольный графит (Kontakt Chemie Graphit 33 или аналог) наносится на верхнюю и нижнюю половину RX с зазором 3–5 мм по периметру. Один слой, толщина ~20–30 мкм. Поверх — изоляция.
Земля экрана: только один провод — от внешнего края экрана к GND блока. Не заземлять второй конец — это создаёт петлю и убивает всё.
Точная балансировка
Собрать DD, TX и RX соосно, зазор 5–8 мм по всей длине.
Подключить TX, включить прибор, осциллограф на RX.
Вращать RX относительно TX до минимума сигнала.
Довести подстроечным конденсатором (из шага 2) до < 0.3 мВ.
Залить эпоксидом, предварительно зафиксировав положение RX и подстроечника каплей клея.
Альтернатива для ленивых
Если не хочется мотать самому — есть готовые DD 300 мм от NEL Tornado или Mars Tiger для Fisher/Teknetics. Не подойдут по индуктивности напрямую, но можно пересчитать витки. Скажи — распишу как адаптировать под KVANT.
ШАГ 4 — TX-ДРАЙВЕР (+1.5–2 см)
BOM
Позиция Было Стало Примечание
VT1 2SC945 2SD882 (TO-126) Ik до 3 A, hFE 60–200
Драйвер IRF7105 × 1 IRF7105 × 2 параллельно Rds_on падает вдвое
Затворный резистор — 10 Ом × 2 по одному на каждый MOSFET
Питание TX 7.4 V 9.6 V (NiMH 8×) +30% поле, +0.5 см
Батарея 7.4 V Li-Ion 9.6 V NiMH 2000 мАч безопаснее для 7805
Что менять
VT1: выпаять 2SC945, впаять 2SD882. Цоколёвка совпадает (E-B-C для TO-92 vs TO-126 — проверить по даташиту, у 2SD882 B-E-C или E-B-C, зависит от производителя). Отвод тепла — небольшой радиатор на 2SD882.
IRF7105: второй такой же в параллель, затворы через отдельные 10 Ом резисторы, истоки в параллель, стоки в параллель. Это даёт −50% Rds_on и −30% нагрев.
Ток TX: в Menu → 8# TX CURRENT поднять с текущих 120 мА до 200–220 мА. Следить за нагревом TX-катушки — рука терпит.
Проверка
Осциллограф на TX: размах амплитуды должен вырасти в 1.5 раза
Ток покоя при 0 сигнале: не более 50 мА
Нагрев VT1 и IRF7105: палец терпит 2 секунды — значит ОК
Монета 25 мм: +1.5–2 см в грунте
ПОРЯДОК УСТАНОВКИ И ИЗМЕРЕНИЯ
Шаг Что Время Прирост
1 Прошивка 20 мин +1.5–2 см
2 Аналог: OP1, VR1, C-фильтры 2 часа +2–3 см
3 Катушка DD 300 мм 1–2 дня +3–5 см
4 TX-драйвер 1 час +1.5–2 см
Суммарно (при всех шагах): +8–12 см на монету 25 мм в среднем грунте. Итоговая глубина: 25–32 см по воздуху, 18–24 см в грунте.
Методика измерения прироста
Один и тот же тест-грунт (ящик 40×40×40 см, смесь песка и 5% глины), монета 25 мм (10 руб современная), фиксированная высота катушки, одинаковое направление прохода. Замер — до и после каждого шага. Записывать: высота катушки над монетой при уверенном сигнале (то есть когда VDI показывает корректный номер, а не шум).
Если начинаешь с шага 1 — скажи, после прошивки проверим результат, потом перейдём к шагу 2.
-----------------------------------------------
BOM — МОДЕРНИЗАЦИЯ KVANT DUO
ШАГ 2 — Аналоговый тракт
# Позиция Артикул / Номенклатурный номер Кол-во Цена, ₽ Примечание
1 OPA2320AIDR (SOIC-8) OPA2320AIDR, ном. 8017658925 1 610 (от 10 шт — 440) Замена MCP602. Pin-to-pin
2 LP2985IM5-5.0/NOPB (SOT-23-5) LP2985IM5-5.0/NOPB, ном. 9001076094 1 ~120 LDO 5V, 150 мА, шум 30 мкВ
3 TPS7A4700RGWR (VQFN-20) TPS7A4700RGWR, ном. 8021885493 1 ~700 Альтернатива LP2985. Шум 4 мкВ
4 Подстроечный конденсатор 5–30 пФ CTC-05-30RA-5, ном. 8070417369 1 ~80 Точная балансировка RX
5 Индуктивность 10 мкГн (SMD 0805) 74479777310, ном. 8001942608 1 ~60 LC-фильтр после VR1
6 Танталовый конденсатор 100 мкФ 16V 593D107X9016D2TE3 1 ~90 Выход LDO + LC-фильтр
7 Танталовый конденсатор 2.2 мкФ 16V T491A225K016AT 2 ~25 Вход LDO (1 шт) + выход (1 шт)
8 Конденсатор керам. 4.7 нФ 50V X7R 1206 4.7nF X7R, ном. 223858115632 8 ~5 Замена C6–C21. Срез 3 кГц вместо 72 кГц
9 Конденсатор керам. 100 нФ 50V X7R CM-100N-X7R, ном. 8007033755 4 ~5 Обвязка LDO, шунты
Подытог шага 2: ~1200 ₽ (с LP2985) или ~1800 ₽ (с TPS7A4700).
ШАГ 4 — TX-драйвер
# Позиция Артикул / Номенклатурный номер Кол-во Цена, ₽ Примечание
10 2SD882 (TO-126) 2SD882, ном. 8025944045 1 ~60 Замена 2SC945. Ik до 3 A, hFE 60–400
11 IRF7105TRPBF (SO-8) IRF7105TRPBF, ном. 8015878171 1 ~80 Второй MOSFET в параллель
12 Резистор 10 Ом (SMD 0805) Чип-резистор 0805 10 Ом, ном. 8037847495 2 ~3 Затворные резисторы для каждого MOSFET
13 Аккумулятор NiMH 9.6V 2400 мАч 96968, ном. 8027046956 1 ~800 Питание TX +5V_A/5V цифры
Подытог шага 4: ~950 ₽.
ШАГ 3 — Катушка DD 300 мм (расходники)
# Позиция Артикул / Номенклатурный номер Кол-во Цена, ₽ Примечание
14 Провод эмалированный 0.50 мм Провод ПЭВ-2 0.50 мм ~50 м ~150 TX-обмотка, 45–50 витков
15 Провод эмалированный 0.16 мм Провод ПЭВ-2 0.16 мм ~200 м ~300 RX-обмотка, 200–220 витков
16 Графитовый аэрозоль Kontakt Chemie Graphit 33 1 баллон ~600 Экран RX
17 Эпоксидный компаунд 2К ЭДП или аналог 1 комплект ~400 Заливка катушки
18 Корпус ABS/поликарбонат — 1 комплект ~300 Можно напечатать на 3D-принтере
Подытог шага 3: ~1750 ₽ (без учёта печати корпуса).
ОБЩИЙ ИТОГ
Шаг Что Сумма, ₽ Прирост глубины
1 Прошивка (патч) 0 +1.5–2 см
2 Аналоговый тракт ~1200–1800 +2–3 см
3 Катушка DD 300 мм ~1750 +3–5 см
4 TX-драйвер ~950 +1.5–2 см
ВСЕГО ~3900–4500 +8–12 см
СПИСОК ДЛЯ ЗАКАЗА (копипаст)
text
OPA2320AIDR x1
LP2985IM5-5.0/NOPB x1
TPS7A4700RGWR x1 (опционально, вместо LP2985)
CTC-05-30RA-5 x1
74479777310 x1
593D107X9016D2TE3 x1
T491A225K016AT x2
1206 4.7nF X7R 50V x8
CM-100N-X7R x4
2SD882 (TO-126) x1
IRF7105TRPBF x1
Резистор 0805 10 Ом x2
Аккумулятор 9.6V NiMH 2400mAh x1
ПРИМЕЧАНИЯ ПО УСТАНОВКЕ
OPA2320AIDR — SOIC-8, цоколёвка совпадает с MCP602. Проверь перед пайкой: 1=OUT_A, 2=IN-_A, 3=IN+_A, 4=V-, 5=IN+_B, 6=IN-_B, 7=OUT_B, 8=V+. Питание — 5V_A, не 5V цифровое.
LP2985 — SOT-23-5, нужен переходник на TO-220 или макетка. Вход — V_bat (до 16V), выход — 5V_A. Обвязка: 2.2 мкФ тантал на входе, 2.2 мкФ тантал + 100 нФ керамика на выходе.
TPS7A4700 — VQFN-20, паять только с феном. Выход регулируемый, настроить на 5.0V резистивным делителем. Если не хочешь возиться — бери LP2985.
CTC-05-30RA-5 — подстроечник, паяется параллельно RX-катушке. Настраивать с осциллографом до минимума остатка TX на выходе OP1.
C6–C21 — все 8 штук заменить с 100–220 нФ на 4.7 нФ. Это снижает срез RC-фильтра с ~72 кГц до ~3 кГц. Несущая 7–11 кГц проходит, шум выше — режется.
2SD882 — TO-126, цоколёвка может отличаться от 2SC945. Проверь даташит перед пайкой. Радиатор — небольшой алюминиевый флажок.
IRF7105 — второй MOSFET в параллель. Затворы — через отдельные 10 Ом резисторы, истоки и стоки — в параллель.
Аккумулятор 9.6V — проверь, что VR1 (или LP2985) держит 5V при просадке батареи до 7.5V. LP2985 dropout 280 мВ — справится.
Собрал всё в единый пакет: CSV-файл для Excel, текст для корзины Чип-Дип, чек-лист монтажа и финальную сводку. Артикулы дал по manufacturer PN — это надёжнее, ищутся на Чип-Дип поиском по номеру, не устаревают как локальные каталожные номера.
1. ФАЙЛ BOM_kvant_duo.csv
Сохрани как BOM_kvant_duo.csv (UTF-8 BOM, разделитель — точка с запятой для русского Excel).
csv
Шаг;Позиция;Part Number;Производитель;Корпус;Кол-во;Цена ₽;Назначение
2;OP1 — операционный усилитель;OPA2320AIDR;Texas Instruments;SOIC-8;1;610;Замена MCP602. Шум 7 нВ/√Гц
2;VR1 — LDO 5V аналог;LP2985IM5-5.0/NOPB;Texas Instruments;SOT-23-5;1;120;Шум 30 мкВ. Альтернатива 7805
2;VR1 — LDO 5V аналог (топ);TPS7A4700RGWR;Texas Instruments;VQFN-20;1;700;Шум 4 мкВ. Опционально
2;C-trim RX;TZC3P300A110R00;Murata;SMD 3x4.5мм;1;110;Подстроечник 6.5–30 пФ, балансировка
2;L1 — индуктивность;LQH32CN100K33L;Murata;SMD 1210;1;60;10 мкГн, 300 мА, LC-фильтр
2;C_LDO_out — тантал;593D107X9016D2TE3;Vishay;SMD D-корпус;1;90;100 мкФ 16V
2;C_LDO_in/out — тантал;T491A225K016AT;Kemet;SMD A-корпус;2;25;2.2 мкФ 16V
2;C6-C13 (8шт) — керамика;GRM188R71H472KA01D;Murata;0603;8;5;4.7 нФ 50V X7R. Замена в фильтре
2;C_шунт — керамика;GRM188R71H104KA93D;Murata;0603;4;5;100 нФ 50V X7R
4;VT1 — драйвер TX;2SD882;Unisonic / UTC;TO-126;1;60;Замена 2SC945. Ik до 3 A
4;VT2 — MOSFET TX;IRF7105TRPBF;Infineon;SO-8;1;80;В параллель к существующему
4;R_gate — резистор;RC0805FR-0710RL;Yageo;0805;2;3;10 Ом, затворный
4;BAT — аккумулятор;9.6V NiMH 2400мАч (сборка);—;—;1;800;Питание TX + аналог
3;Провод TX;ПЭВ-2 0.50 мм;—;—;50 м;150;45–50 витков TX
3;Провод RX;ПЭВ-2 0.16 мм;—;—;200 м;300;200–220 витков RX
3;Экран RX;Graphit 33 (Kontakt Chemie);Kontakt Chemie;аэрозоль 200мл;1;600;Графитовый экран
3;Компаунд;ЭДП-эпоксид 2К;—;—;1 компл;400;Заливка катушки
3;Корпус DD;ABS 3мм лист 300x400;—;—;1;300;Корпус катушки
Итог по CSV:
Шаг 2: ~1200 ₽ (с LP2985) / ~1800 ₽ (с TPS7A4700)
Шаг 3: ~1750 ₽
Шаг 4: ~950 ₽
Всего: 3900–4500 ₽
2. ТЕКСТ ДЛЯ КОРЗИНЫ ЧИП-ДИП
Копируй построчно в поиск и добавляй в корзину.
Поиск по Part Number (кириллица не нужна, латиница без опечаток):
text
OPA2320AIDR
LP2985IM5-5.0/NOPB
TPS7A4700RGWR
TZC3P300A110R00
LQH32CN100K33L
593D107X9016D2TE3
T491A225K016AT
GRM188R71H472KA01D
GRM188R71H104KA93D
2SD882
IRF7105TRPBF
RC0805FR-0710RL
Отдельно — то, что продаётся по описанию (не по номеру):
text
Провод эмалированный ПЭВ-2 0.50 мм, 50 метров
Провод эмалированный ПЭВ-2 0.16 мм, 200 метров
Kontakt Chemie Graphit 33 (аэрозоль)
Эпоксидный компаунд ЭДП (или аналог 2К)
Лист ABS 3мм, размер ~300×400 мм
Аккумуляторная сборка 9.6V NiMH 2400мАч с разъёмом
3. ЧЕК-ЛИСТ МОНТАЖА
Шаг 1 — Прошивка (0 ₽, 20 мин)
□ Создать вкладку lpf_post.ino в скетче (содержимое из моего предыдущего сообщения)
□ Заменить ADC_Read_Data() — с усреднением 4 сэмплов + LPF после детектора
□ В eeprom.ino: PGA_GAIN_2 → PGA_GAIN_8
□ Прошить, проверить: LCD показывает G8, шума нет
□ Тест на монету 25 мм: зафиксировать новую глубину
Шаг 2 — Аналог (2 часа)
□ Снять MCP602, поставить OPA2320AIDR (SOIC-8, цоколёвка 1:1)
□ Снять 7805 (VR1), распаять LP2985 через переходник SOT-23→DIP
□ Обвязка LP2985: 2.2 мкФ тантал вход + 2.2 мкФ тантал и 100 нФ выход
□ После LP2985 поставить LC: 10 мкГн + 100 мкФ тантал + 100 нФ керамика
□ Заменить C6–C13 (8 шт) с 100–220 нФ на 4.7 нФ
□ Параллельно RX — припаять TZC3P300A110R00 (6.5–30 пФ)
□ Осциллограф на выходе OP1.1: настроить триммер до остатка < 0.5 мВ
□ Проверить шум: дорожка на осциллографе тоньше в 1.5–2 раза
□ Тест на монету: зафиксировать прирост
Шаг 3 — Катушка DD 300 мм (1–2 дня)
□ Изготовить/напечатать две D-образные половины корпуса 300 мм
□ Намотать TX: 45–50 витков ПЭВ-2 0.50 мм, индуктивность 0.5–0.8 мГн
□ Намотать RX: 200–220 витков ПЭВ-2 0.16 мм, индуктивность 8–15 мГн
□ Нанести графитовый экран на RX, зазор 3–5 мм по периметру
□ Земля экрана — только один провод к GND блока
□ Собрать соосно TX и RX, зазор 5–8 мм
□ Балансировка: вращать RX до минимума сигнала
□ Довести триммером (шаг 2) до < 0.3 мВ
□ Зафиксировать положение каплей клея, затем залить эпоксидом
□ Тест на монету: зафиксировать прирост
Шаг 4 — TX-драйвер (1 час)
□ Снять 2SC945, впаять 2SD882 (проверить цоколёвку по даташиту!)
□ На 2SD882 — маленький радиатор
□ IRF7105TRPBF — в параллель к существующему
□ Затворы — через отдельные 10 Ом резисторы
□ Истоки и стоки — в параллель
□ Подключить батарею 9.6V NiMH
□ В меню 8# TX CURRENT поднять ток до 200–220 мА
□ Осциллограф на TX: размах вырос в ~1.5 раза
□ Проверить нагрев VT1 и MOSFET (палец терпит 2 сек)
□ Тест на монету: финальный замер
4. ФИНАЛЬНАЯ СВОДКА
Шаг Действие Время Стоимость Ожидаемый прирост
1 Прошивка (усреднение + LPF + gain×8) 20 мин 0 ₽ +1.5–2 см
2 OP1, LDO, C-фильтры, триммер 2 часа 1200 ₽ +2–3 см
3 Катушка DD 300 мм 1–2 дня 1750 ₽ +3–5 см
4 TX-драйвер + батарея 9.6V 1 час 950 ₽ +1.5–2 см
Итого ~2 дня ~3900 ₽ +8–12 см
Итоговая глубина после апгрейда:
По воздуху (монета 25 мм): 25–32 см
В среднем грунте: 18–24 см
В минерализованном грунте: 14–18 см
5. МЕТОДИКА ЗАМЕРОВ
Один и тот же тест-грунт на все замеры:
Ящик 40×40×40 см
Смесь: 95% песок + 5% глина
Монета: 10 ₽ современная (25 мм, сталь/никель/медь)
Высота катушки фиксируется линейкой
Одно направление прохода (медленно, 5 см/сек)
Критерий «глубина» — уверенный VDI ±5° от истинного, без ложняков
Замер до/после каждого шага — в таблицу. Если какой-то шаг дал меньше ожидаемого — откатить и проверить, что не так (обычно балансировка RX или триммер).
6. ГДЕ ХРАНИТЬ
Создай папку KVANT_MOD/ рядом со скетчем и положи туда:
BOM_kvant_duo.csv — закупка
lpf_post.ino — новый файл скетча
kvant_fixes.patch — базовые фиксы прошивки
kvant_step1.patch — апгрейд шага 1
measurements.xlsx — таблица замеров глубины
sch_notes.md — заметки по перепайке
Вот и все.
Всех благ успехов.