Loyiha · Oʻlchov · ADC
Bitta ADC pindan choʻntak ostsilloskop
$300 lik asbob har doim ham kerak emas. «Signal tirikmi, qanchalik katta, qaysi chastota?» uchun ESP32’ning oʻz 12-bit ADC’si uchchalasiga javob beradi: pinni burst-sampling qiling, uch tsikl matematika — va Vpp, Vrms va chastota jonli dashboardda. Bu Rigol emas — lekin gugurt qutisiga sigʻadigan haqiqiy oʻlchov asbobi.
Avvalo: pinni kuydirmaslik
ADC 0–3.3 V ni, boshqa hech narsani koʻtarmaydi. Real signallar minusga tushadi va pik otadi — shuning uchun kirish obvyazkasi koddan muhimroq: ajratuvchi kondensator ikki rezistorli oʻrta-shina biasga (AC 1.65 V atrofida tebranadi) va kutilmagan hamma narsadan 3V3 va GND’ga clamping diodlar. Va ADC1 pinini (GPIO32–39) oling — Wi-Fi yonishi bilan ADC2 oʻchadi.
Matematika — uch tsikl, FFT kerak emas
«Bu qanday signal» uchun time-domain matematika FFT’dan yaxshi: min/max Vppni, oʻrtachasiz RMS Vrmsni, oʻrtacha ayirilgan signalning koʻtariluvchi nol kesishishlarini sanash esa chastotani beradi — shovqinli trassada ham barqaror:
// --- the scope maths: mean, Vpp, Vrms, zero-cross frequency ---
float mean = 0, mn = 99, mx = -99;
for (int i = 0; i < N; i++) { mean += buf[i]; if (buf[i] < mn) mn = buf[i]; if (buf[i] > mx) mx = buf[i]; }
mean /= N;
float sq = 0; int crossings = 0;
for (int i = 1; i < N; i++) {
float a = buf[i - 1] - mean, b = buf[i] - mean;
sq += b * b;
if (a < 0 && b >= 0) crossings++; // rising zero-crossings
}
vpp = mx - mn;
vrms = sqrtf(sq / (N - 1));
freq = crossings * SPS / N; // crossings per second Sample rate haqida halol: oddiy analogRead() ~10 kSps beradi —
Nyquist boʻyicha bu bir necha kHz gacha toza: tarmoq foni, audio, sensor toʻlqinlari. Koʻproq
kerakmi? ESP32’ning I2S/DMA ADC yoʻli CPU’siz 50 kSps+ oqizadi — matematika oʻsha, bufer kattaroq.
Dashboard
dash.layout("Scope", RICON_SIGNAL);
dash.stat("Frequency", &freq, "Hz");
dash.stat("Vpp", &vpp, "V");
dash.stat("Vrms", &vrms, "V");
dash.chart("Signal level", &level, "V"); // the live "screen"
dash.beginAP("RisalDash-Scope", "12345678");
// acquire a burst — real board:
// for (int i = 0; i < N; i++) buf[i] = analogRead(PIN) * 3.3f / 4095.0f; Kutubxonadagi namuna (examples/04_Templates/Oscilloscope)
sintetik 45–55 Hz sinus + shovqinda ishlaydi — chastota hisoblagichi simlar
ulanmasidan oldin dreyfni kuzatadi; keyin demo-tsiklni analogRead() ga almashtirasiz.
Batareya qoʻllanmasidagi boʻluvchini qoʻshsangiz, oʻsha
pin DC shinalarni ham oʻlchaydi.
Halol qilib nimaga yaraydi
| Vazifa | Xulosa |
|---|---|
| Sensor/generator tirikmi? | ✅ ideal |
| Tarmoq foni, audio diapazon | ✅ toza oʻlchovlar |
| PWM: toʻldirish va ~5 kHz gacha chastota | ✅ ishlaydi |
| MHz shinalar, µs frontlar | ❌ mantiqiy analizator / haqiqiy skop oling |
Simlarni ulashdan oldin matematika dreyflagan signalni qanday tutishini koʻring.