Test coupon: TDR i linie różnicowe, a ground plane

Inspiracją do wykonania płytki i pomiarów była prezentacja Erica Bogatina:

Zdjęcie PCB:

JLC04161H-7628

Render 3D struktury wewnętrznej PCB:

Pomiary:

#1 Impedancja liczona w odniesieniu do ground plane 100R, w połowie przerwany ground plane.

Widać nieciągłość impedancji – wzrost.

#2 120R Impedancja bez odniesienia do ground plane, w połowie przerwany ground plane.

Nie widać przerwy.

#3 Stała impedancja na całej długości, ale zmiana odległości referencji (w pozycji kursora są rezystory SMD)

#4 Linia single przechodzi na różne warstwy

Dziękuję inż. Michałowi Karasiowi za wspólną realizację doświadczenia.

P5.js – symulacja masy na sprężynie z zewnętrzną siłą

Symulacja potrzebna do przygotowania efektu graficznego na pewne urządzenie.

Kółko reprezentuje masę poruszającą się wzdłuż osi X ze sprężyną zamocowaną w środku układu. Wprowadzono tłumienie prędkości symulujące opory otoczenia. Slider pozwala zaaplikować zewnętrzną siłę (można sobie to wyobrazić jak przechylanie kulki na desce przyczepionej sprężyną).

Kod:

let slider;

function setup() {
  createCanvas(400, 400);
  slider = createSlider(-100, 100, 0);
  slider.position(50, 350);
  slider.size(300);

}

let x=0, vel=0, a=0, f=0;
const mass = 50;
const k = .8;
const damping = 0.1;
function draw() {
  background(220);
  translate(width / 2, height / 2);
  point(0,0);

  f = -1*k*x+slider.value();
  a = f/mass; //external force
  vel += a;
  vel = vel - vel * damping;
  x+=vel;

  fill(0, 0, 0);
  text('x = '+x.toFixed(2), -180, -180);
  text('v = '+vel.toFixed(2), -180, -160);
  text('a = '+a.toFixed(2), -180, -140);
  text('f = '+f.toFixed(2), -180, -120);
  text('external force = '+slider.value(), -140, 140);
  fill(200, 200, 255);
  circle(x,0,10);
}

Demo:

Cewka Tesli #2 – obliczenia

http://javatc.teslacoil.co.nz/

J A V A T C version 13.6 - CONSOLIDATED OUTPUT
16.07.2024, 19:51:35

Units = Centimeters
Ambient Temp = 20ºC

----------------------------------------------------
Surrounding Inputs:
----------------------------------------------------
5 = Ground Plane Radius
5 = Wall Radius
10 = Ceiling Height

----------------------------------------------------
Secondary Coil Inputs:
----------------------------------------------------
Current Profile = G.PROFILE_LOADED
5.5 = Radius 1
5.5 = Radius 2
2 = Height 1
37 = Height 2
1400 = Turns
0.025 = Wire Diameter

----------------------------------------------------
Primary Coil Inputs:
----------------------------------------------------
Round Primary Conductor
8 = Radius 1
16 = Radius 2
2 = Height 1
2 = Height 2
6 = Turns
0.6 = Wire Diameter
0 = Ribbon Width 
0 = Ribbon Thickness 
0.1 = Primary Cap (uF)
0 = Total Lead Length
0 = Lead Diameter

----------------------------------------------------
Secondary Coil Outputs:
----------------------------------------------------
157.48 [kHz] = Secondary Resonant Frequency
90 [deg °] = Angle of Secondary
35 [cm] = Length of Winding
40 [cm] = Turns Per Unit
0 [mm] = Space Between Turns (edge to edge)
483.81 [m] = Length of Wire
3.18 [:1] = H/D Aspect Ratio
168.5376 [Ohms] = DC Resistance
43048 [Ohms] = Reactance at Resonance
0.211 [ kg] = Weight of Wire
43.506 [mH] = Les-Effective Series Inductance
59.497 [mH] = Lee-Equivalent Energy Inductance
58.834 [mH] = Ldc-Low Frequency Inductance
23.477 [pF] = Ces-Effective Shunt Capacitance
17.167 [pF] = Cee-Equivalent Energy Capacitance
77.722 [pF] = Cdc-Low Frequency Capacitance
0.1769 [mm] = Skin Depth
13.073 [pF] = Topload Effective Capacitance
265.8284 [Ohms] = Effective AC Resistance
162 [Q] = Quality Factor

----------------------------------------------------
Primary Coil Outputs:
----------------------------------------------------
152.62 [kHz] = Primary Resonant Frequency
3.09 [% high] = Percent Detuned
0 [deg °] = Angle of Primary
452.39 [cm] = Length of Wire
2.76 [mOhms] = DC Resistance
0.733 [cm] = Average spacing between turns (edge to edge)
2.188 [ cm] = Proximity between coils
0 [cm] = Recommended minimum proximity between coils
10.874 [µH] = Ldc-Low Frequency Inductance
0.09393 [µF] = Cap size needed with Primary L (reference)
0 [µH] = Lead Length Inductance
135.502 [µH] = Lm-Mutual Inductance
0.169 [k] = Coupling Coefficient
0.13 [k] = Recommended Coupling Coefficient
5.92 [half cycles] = Number of half cycles for energy transfer at K
19.04 [µs] = Time for total energy transfer

----------------------------------------------------
Top Load Inputs:
----------------------------------------------------
Toroid #1: minor=8, major=35, height=40, topload

 

Cewka Tesli #1 – notatki

Kalkulator

http://tesla.nu/programs/javatc/javatc.html

function loadDemo(form) {
Clear(form);
z = 1; if(z==0){form.units.selectedIndex=0; inches=true;}
if(z==1){form.units.selectedIndex=1; cm=true;}
z = 1; if(z==0){form.ambient.selectedIndex=0; fahrenheit=true;}
if(z==1){form.ambient.selectedIndex=1; centigrade=true;}
GetUnits(form);
z = 1; if(z==1){form.s_ws.checked=true;form.s_awg.checked=false;}
if(z==0){form.s_ws.checked=false;form.s_awg.checked=true;}
z = 0; if(z==1){form.s_Al.checked=true;form.s_Cu.checked=false;}
if(z==0){form.s_Al.checked=false;form.s_Cu.checked=true;}
z = 1; if(z==1){form.p_ws.checked=true;form.p_awg.checked=false;}
if(z==0){form.p_ws.checked=false;form.p_awg.checked=true;}
z = 0; if(z==1){form.p_Al.checked=true;form.p_Cu.checked=false;}
if(z==0){form.p_Al.checked=false;form.p_Cu.checked=true;}
z = 20; {eval(z); temp = z; form.temp.value = temp;}// ambient temperature
z = 6000; {eval(z); g_radius = z; form.g_radius.value = g_radius;}
z = 6000; {eval(z); w_radius = z; form.w_radius.value = w_radius;}
z = 2800; {eval(z); r_height = z; form.r_height.value = r_height;}
z = 5.5; {eval(z); s_radius1 = z; form.s_radius1.value = s_radius1;}
z = 5.5; {eval(z); s_radius2 = z; form.s_radius2.value = s_radius2;}
z = 2.2; {eval(z); s_height1 = z; form.s_height1.value = s_height1;}
z = 57.2; {eval(z); s_height2 = z; form.s_height2.value = s_height2;}
z = 1870.7; {eval(z); s_turn = z; form.s_turn.value = s_turn;}
z = 0.025; {eval(z); s_wd = z; form.s_wd.value = s_wd;}
z = 7; {eval(z); p_radius1 = z; form.p_radius1.value = p_radius1;}
z = 15; {eval(z); p_radius2 = z; form.p_radius2.value = p_radius2;}
z = 1.3; {eval(z); p_height1 = z; form.p_height1.value = p_height1;}
z = 1.3; {eval(z); p_height2 = z; form.p_height2.value = p_height2;}
z = 7.6; {eval(z); p_turn = z; form.p_turn.value = p_turn;}
z = 0.6; {eval(z); p_wd = z; form.p_wd.value = p_wd;}
z = 0.2; {eval(z); Cp_uF = z; form.Cp_uF.value = Cp_uF;}
z = 0; {eval(z); Lead_Length = z; form.Lead_Length.value = Lead_Length;}
z = 0; {eval(z); Lead_Diameter = z; form.Lead_Diameter.value = Lead_Diameter;}
z = 0; {eval(z); desired_k = z; form.desired_k.value = desired_k;}
z = 13; {eval(z); t_inner = z; form.t_inner.value = t_inner;}
z = 45; {eval(z); t_outer = z; form.t_outer.value = t_outer;}
z = 63.2; {eval(z); t_height = z; form.t_height.value = t_height;}
form.TT.checked = true; form.TG.checked = false;
add_toroid();
z = 120; {eval(z); x_Vin = z; form.x_Vin.value = x_Vin;}
z = 12000; {eval(z); x_Vout = z; form.x_Vout.value = x_Vout;}
z = 60; {eval(z); x_Iout = z; form.x_Iout.value = x_Iout;}
z = 60; {eval(z); x_Hz = z; form.x_Hz.value = x_Hz;}
z = 140; {eval(z); x_Vadjust = z; form.x_Vadjust.value = x_Vadjust;}
z = 0; {eval(z); x_ballast = z; form.x_ballast.value = x_ballast;}
z = 1; {eval(z); rsg_ELS = z; form.rsg_ELS.value = rsg_ELS;}
z = 4; {eval(z); rsg_ELR = z; form.rsg_ELR.value = rsg_ELR;}
z = 1800; {eval(z); rsg_rpm = z; form.rsg_rpm.value = rsg_rpm;}
z = 26.924; {eval(z); rsg_disc_D = z; form.rsg_disc_D.value = rsg_disc_D;}
z = 0.9525; {eval(z); rsg_ELR_D = z; form.rsg_ELR_D.value = rsg_ELR_D;}
z = 0.9525; {eval(z); rsg_ELS_D = z; form.rsg_ELS_D.value = rsg_ELS_D;}
z = 6; {eval(z); stat_EL = z; form.stat_EL.value = stat_EL;}
z = 3.175; {eval(z); stat_EL_D = z; form.stat_EL_D.value = stat_EL_D;}
z = 0.635; {eval(z); stat_gap = z; form.stat_gap.value = stat_gap;}
if(form.SPE.checked==true){form.SPE.checked=true;form.RGE.checked=false;}
if(form.RGE.checked==true){form.SPE.checked=false;form.RGE.checked=true;}
}

WCH CH32V003 – RISC-V MCU – pierwsze kroki

Kupiłem:

1. Procek w obudowie so8 CH32V003J4M6 https://www.aliexpress.com/item/1005005143221495.html

2. Procek w obudowie so16 CH32V003A4M6

3. Programator WCH LinkE https://www.aliexpress.com/item/1005006295056343.html

Narzędzia:

1. https://www.wch.cn/downloads/WCH-LinkUtility_ZIP.html

2. https://www.wch.cn/products/WCH-Link.html

Pomocny opis: https://oshwlab.com/wagiminator/ch32v003j4m6-game-console


WCH-LinkUtility zagadał:

Trzeba było przestawić najpierw tryb z „ARM” na „RISC-V” wybierając z listy na dole „WCH-LinkRV”.


IDE

Trzeba zainstalować wersję „MounRiver_Studio_Setup”, nie „Community”.

Po instalacji ustawić generowanie plików hex oraz bin:


Jeżeli procesor zachowuje się jakby „zdechł”, „uceglił się”, należy wybrać:

Przykładowy „blink” na pinie PA2:

Pobór prądu: 1,8 mA @ 3,3V @ 8 MHz HSI. Brak obciążonych GPIO, pracujący TIM1 w trybie PWM na prescalerze=0. + prosty kod w pętli main.

Test NanoVNA za 100zł

NanoVNA-H 3.4 kupiony powystawowy za 100zł.

Wersja 50 kHz – 1.5 GHz.

Wgrany najnowszy firmware NanoVNA-H-SI_20240220. https://github.com/hugen79/NanoVNA-H/releases/

Trzeba zainstalować ze strony ST.COM DfuSe_Demo_V3.0.6_Setup.exe, wybrać sterownik DFU w Managerze urządzeń (zamiast domyślnego STM BOOTLOADER), i można wgrywać. Wybrałę wersję „SI” bo zakładałem, że mój NanoVNA jest oparty o oscylator SiliconLabs. Można to potem zmienić w menu. Ważne, żeby wgrać wersję pod wyświetlacz 2,4″.

Dla testów użyłem aplikacji NanoVNA.App.exe – by OneOfEleven: https://nanovna.com/?page_id=141

Zmierzony włączony szeregowo filtr kwarcowy 10.3 MHz:

Działa to zacnie, za taką kwotę.

N-path filter by Bram Nauta – prosty układ – pomiary

Serdeczne podziękowania dla Mgr Inż. Piotra Kwiatkowskiego za udostępnienie aparatury i pomoc w wykonaniu pomiarów.

Sygnał zegarowy z układu NE555 o częstotliwości ok. 120 kHz

Transmitancja filtra. Zaznaczone 2 szczyty pasm przepustowych, dla częstotliwości ok. 30 kHz (1/4 częstotliwości zegarowej)  oraz ok. 60 kHz.

Zawężenie prezentacji transmitancji do jednego prążka o częstotliwości środkowej 30 kHz.

Widać dużą dobroć filtra. Pasmo przepustowe -3dB ma szerokość ok. 300 Hz, co daje dobroć ok. 100.

Jeszcze prezentacja czasowa sygnału na wejściu i na wyjściu filtra. Pomiar zrobiono podając na wejście sygnał sinusoidalny o częstotliwości zbliżonej jak to tylko było możliwe do częstotliwości środkowej filtra

Źródła:

Risetime oscyloskopów

Użyte źródło impulsów: Generator PSG-1 zaproponowany przez Jima Williamsa (Linera Technology): https://www.elektroda.pl/rtvforum/viewtopic.php?p=15023133#15023133

an47fa.pdf

Rigol MSO5074:

Rigol DHO914S (za pomiary i zgodę na publikację serdeczne podziękowania dla Pana Inż. Michała Karasia):

Dla porównania wyniki z oscyloskopu R&S RTP164B o paśmie 16GHz i 40GSa/s:

Wyniki w Postaci tabelarycznej:

Oscyloskop
Wynik
R&S RTP164B pasmo 16 GHz
207 ps
Rigol MSO5074 pasmo 350 MHz
700 ps
Rigol DHO914S pasmo 250 MHz
1180 ps

arduino uno r4 wifi spi

#include "SPI.h"
#define CS_PIN 10
#define SPI_CLOCK 1000000

void setup() {
Serial.begin(115200);

//define LED_BUILTIN as an outpu
Serial.println("2024-03-07 Aleksander Kaweczynski");
Serial.println("PD SPI TEST");
Serial.println("SCK - D13");
Serial.println("MISO - D12");
Serial.println("MOSI - D11");
Serial.println("CS - D10 (low during transfer)");

pinMode(CS_PIN, OUTPUT);
digitalWrite(CS_PIN, HIGH);
// pinMode(12, OUTPUT);
SPI.begin();
}

void loop() {

SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0));

SPI.transfer(0xAA);
SPI.transfer(0x55);
delayMicroseconds(1);
digitalWrite(CS_PIN, LOW);
delayMicroseconds(1);
digitalWrite(CS_PIN, HIGH);
SPI.endTransaction();
Serial.println("DATA: 0xAA 0x55");
delay(1000);

SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0));
SPI.transfer(0x00);
SPI.transfer(0x00);
delayMicroseconds(1);
digitalWrite(CS_PIN, LOW);
delayMicroseconds(1);
digitalWrite(CS_PIN, HIGH);
SPI.endTransaction();
Serial.println("DATA: 0x00 0x00");
delay(1000);
}

Charakterystyki Bodego transformatorków sygnałowych

Setup: Rigol MSO5074 -> Funkcja „Bode plot”. Sondy x1

Parametry przemiatania:

Murata 78601/9C

https://eu.mouser.com/ProductDetail/Murata-Power-Solutions/78601-9C?qs=8XAKVzB54egqCasQNhWrCw%3D%3D

78601.9C0

DA102C

https://eu.mouser.com/ProductDetail/Murata-Power-Solutions/DA102C?qs=h7KbnC2lZSYWJXuqlteIuw%3D%3D

DA102C0

Ten sam pomiar z podłączonym na wyjściu jako obciążenie rezystorem 47R:

DA102C0_47r0