Недавно робив підсилювач для свого похідного трансівера ізюминка 1.2 і зіштовхнувся з проблемо обробки сигналу на Arduino nano від датчика КСВ.
1. Проблема. Не стабільність напруги на датчику в залежності від частоти та потужності.
2. Проблема. Не можливість компенсувати напругу падаючої хвилі при навантаженні 50 ом до нуля або близько до нуля. У мене виходило мінімум 2.2 вольта. Напруга прямої хвилі складала 3.7в.
Ось програмне рішення яке дозволяє обробляти дані враховуючи вище наведені умови.
void drawKSVmeter() {
const float K50 = 0.752; // коефіцієнт відношення Upad/Uotr при навантаженні 50 Ом
getPortVolte(A1);
float Upad = Volt;
getPortVolte(A2);
float Uotr = Volt;
if (Upad <= 0.001) {
ksv = 1.0;
return;
}
// Відношення двох виміряних напруг
float K = Uotr / Upad;
// Відносно калібрувального значення 50 Ом
float gamma = (K50 - K) / (K50 + K);
if (gamma < 0.0)
gamma = 0.0;
if (gamma > 0.999)
gamma = 0.999;
// Обмеження коефіцієнта відбиття
gamma = constrain(gamma, 0.0, 0.95);
// КСХ
ksv = (1.0 + gamma) / (1.0 - gamma);
}
Функція дуже чутлива до зміни КСВ. Я перевірив її результат на опорі 50, 100, та 75 ом. Значення КСВ показувало коректно відповідно до навантаження.