Pomiarowa lampa "solid-state"

Układy półprzewodnikowe pełniące ważne funkcje pomocnicze w układach lampowych.

Moderatorzy: gsmok, Romekd, tszczesn, OTLamp, Einherjer

Awatar użytkownika
Tomasz Gumny
2500...3124 posty
2500...3124 posty
Posty: 2526
Rejestracja: pn, 1 stycznia 2007, 23:18
Lokalizacja: Trzcianka/Poznań

Re: Pomiarowa lampa "solid-state"

Post autor: Tomasz Gumny »

Jeśli uda się uzyskać sensowne wyniki na tym co jest, to może spróbuje przepiąć PWMy na Timer1, który może być taktowany z 64MHz i mógłby pracować z 10-bitową rozdzielczoscia (a nawet więcej kosztem zmniejszenia częstotliwości). ADC też mogłyby pracować wolniej na pełnych 10 bitach, a nawet z nadpróbkowaniem. Wtedy możemy pobawić się w rozbudowaną matematykę godząc się, że to będzie model niemal statyczny.
Tomek
atom1477
625...1249 postów
625...1249 postów
Posty: 883
Rejestracja: śr, 28 listopada 2007, 17:31

Re: Pomiarowa lampa "solid-state"

Post autor: atom1477 »

Tomasz Gumny pisze: pn, 4 maja 2026, 20:59 Ja mam funkcję 3 argumentów IA=f(UA,US2,US1), to już 16 megabajtów.
Ale jeśli wezmę starsze 4 bity każdego argumentu, to tablica będzie miała akceptowalny rozmiar 16x16x16=4096 bajtów.
Na przykład dla IA[16,32,0] będę miał wartość IA wprost z tablicy.
Dla wartości pośrednich np. IA[10,20,30] wstępnie umyśliłem coś takiego: pobieram i sumuję z tablicy wartości IA dla najbliższych argumentów mniejszych (0,16,16) i większych (16,32,32) z odpowiednimi wagami:
Ok, już wiem o co chodzi.
No to Twoja metoda co do zasady wygląda na poprawną. Tylko nie sprawdzałem dokładnie czy prawidłowo wyliczasz i używasz wagi.
Tu jest dobry materiał o dwuwymiarowej interpolacji:
https://pages.hmc.edu/ruye/MachineLearn ... node7.html
Jak Twoja metoda w przypadku 2D da zgodne wyniki z tym materiałem, to będzie można uznać że i Twoja metoda 3D jest prawidłowa.
Odbiornik TV na 2 tranzystorach/lampach: Prima II/Prima III:
viewtopic.php?f=16&t=29213
atom1477
625...1249 postów
625...1249 postów
Posty: 883
Rejestracja: śr, 28 listopada 2007, 17:31

Re: Pomiarowa lampa "solid-state"

Post autor: atom1477 »

Jeszcze znalazłem dla 3D:
https://en.wikipedia.org/wiki/Trilinear_interpolation
W sumie nie wiem czy mi by się chciało bawić przy tak skomplikowanym wzorze, i bym w tym przypadku dał zewnętrzną pamięć FLASH.
No chyba że chcesz na bieżąco modyfikować charakterystyki (jeżeli to ma symulować wiele rodzajów lamp), no to wtedy trzeba by pamięć RAM, albo jechać na wzorach (wyliczać na bieżąco ze wzoru, bez interpolowania z tablicy).
Odbiornik TV na 2 tranzystorach/lampach: Prima II/Prima III:
viewtopic.php?f=16&t=29213
Awatar użytkownika
Tomasz Gumny
2500...3124 posty
2500...3124 posty
Posty: 2526
Rejestracja: pn, 1 stycznia 2007, 23:18
Lokalizacja: Trzcianka/Poznań

Re: Pomiarowa lampa "solid-state"

Post autor: Tomasz Gumny »

Podoba mi się ta metoda sprowadzania trzech wymiarów do dwóch, potem do jednego i do punktu.
Też bym teraz się zastanowił nad zewnętrzną pamięcią. 128Mbit (256x256x256x8bit) kosztuje ~30,- i jest dostępna w „normalnych” obudowach.
Dobra rozmarzyłem się. Na razie moim hobby będzie interpolowanie.
Tomek
atom1477
625...1249 postów
625...1249 postów
Posty: 883
Rejestracja: śr, 28 listopada 2007, 17:31

Re: Pomiarowa lampa "solid-state"

Post autor: atom1477 »

Jak podeślesz jakąś przykładową zawartość tablicy to sprawdzę jakie wyniki dają te wzory.
Odbiornik TV na 2 tranzystorach/lampach: Prima II/Prima III:
viewtopic.php?f=16&t=29213
Awatar użytkownika
Tomasz Gumny
2500...3124 posty
2500...3124 posty
Posty: 2526
Rejestracja: pn, 1 stycznia 2007, 23:18
Lokalizacja: Trzcianka/Poznań

Re: Pomiarowa lampa "solid-state"

Post autor: Tomasz Gumny »

Nie ma jeszcze tablic. Dopiero dzisiaj pojawiła się koncepcja jak mają wyglądać. Ja sprawdzałem na funkcjach y=x.
Tomek
Awatar użytkownika
TooL46_2
1875...2499 postów
1875...2499 postów
Posty: 2221
Rejestracja: ndz, 20 lipca 2008, 12:06
Lokalizacja: Seattle, WA

Re: Pomiarowa lampa "solid-state"

Post autor: TooL46_2 »

Troche ‘pomarudze’: interpolacja liniowa dla Ua to jeszcze tak… Ale napiecie na siatce drugiej jest nieliniowe jesli chodzi o wplyw na wartosc pradu Ia… Juz predzej funkcja sklejana (cubic spline) ale to juz serio chyba prosciej z panem Koren…
Pozdr,
-Tomek Drabas
________
‎"One should not pursue goals that are easily achieved. One must develop an instinct for what one can just barely achieve through one's greatest efforts."
—Albert Einstein

tomdrabas.com
Awatar użytkownika
TooL46_2
1875...2499 postów
1875...2499 postów
Posty: 2221
Rejestracja: ndz, 20 lipca 2008, 12:06
Lokalizacja: Seattle, WA

Re: Pomiarowa lampa "solid-state"

Post autor: TooL46_2 »

Posiedzialem i wykoncypowalem taki kod...

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <cmath>

#define UA_DIV  16.0
#define UG_DIV  10.24
#define GRID    16
#define UG_STEP (UG_DIV / (GRID - 1))

double table[256] = {
    0.3053,0.7320,0.7913,1.1387,1.3456,1.5596,1.9422,2.0080,2.4147,2.6607,2.9138,3.3615,3.4379,3.9060,4.1864,4.4728, // ug = 0
    0.0622,0.2444,0.2809,0.5284,0.6907,0.8663,1.1905,1.2473,1.6039,1.8227,2.0503,2.4566,2.5263,2.9563,3.2154,3.4814, // ug = 0.68
    0.0000,0.0039,0.0087,0.0987,0.1944,0.3163,0.5631,0.6085,0.9022,1.0879,1.2848,1.6423,1.7043,2.0903,2.3252,2.5680, // ug = 1.37...
    0.0000,0.0000,0.0000,0.0011,0.0074,0.0334,0.1395,0.1652,0.3589,0.4962,0.6508,0.9440,0.9962,1.3274,1.5329,1.7481,
    0.0000,0.0000,0.0000,0.0000,0.0001,0.0007,0.0101,0.0144,0.0704,0.1315,0.2185,0.4133,0.4510,0.7043,0.8698,1.0487,
    0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0004,0.0006,0.0062,0.0166,0.0397,0.1160,0.1342,0.2784,0.3869,0.5147,
    0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0004,0.0014,0.0045,0.0203,0.0252,0.0750,0.1229,0.1899,
    0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0001,0.0004,0.0028,0.0036,0.0148,0.0284,0.0519,
    0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0003,0.0005,0.0025,0.0055,0.0116,
    0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0001,0.0004,0.0010,0.0024,
    0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0001,0.0002,0.0005,
    0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,
    0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,
    0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,
    0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,
    0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000
};

inline double lookup(int ua_i, int ug_i) {
    return table[ug_i * GRID + ua_i];
}

double ia_triode(double ua, double ug) {
    // Normalize into grid space
    double u = ua / UA_DIV;
    double g = ug / UG_STEP;

    int ua_i = (int)u;
    int ug_i = (int)g;

    // Clamp to valid range (important near edges)
    if (ua_i >= GRID - 1) ua_i = GRID - 2;
    if (ug_i >= GRID - 1) ug_i = GRID - 2;
    if (ua_i < 0) ua_i = 0;
    if (ug_i < 0) ug_i = 0;

    // Fractional parts
    double fu = u - ua_i;
    double fg = g - ug_i;

    // Fetch 4 corners
    double v00 = lookup(ua_i,     ug_i);
    double v01 = lookup(ua_i,     ug_i + 1);
    double v10 = lookup(ua_i + 1, ug_i);
    double v11 = lookup(ua_i + 1, ug_i + 1);

    // Bilinear interpolation (compact form)
    return (1 - fu) * (1 - fg) * v00 +
           (1 - fu) * fg       * v01 +
           fu       * (1 - fg) * v10 +
           fu       * fg       * v11;
}


int main() {
    double ua = 220.0;
    double ug = UG_STEP * 2.1;
    double ia_plate = ia_triode(ua, ug);
    printf("Plate current for point(%fV, -%fV) is: %f", ua, ug, ia_plate);
    return 0;
}
Mam dwa ale...

1. Czy naprawde nie prosciej byloby z funkcjami parametrycznymi?
2. Sciaganie charakterystyk dla roznych Ug2 to bedzie niemaly problem bo w notach katalogowych rzadko mozna spotkac nawet Ug2 dla dwoch wartosci...
Pozdr,
-Tomek Drabas
________
‎"One should not pursue goals that are easily achieved. One must develop an instinct for what one can just barely achieve through one's greatest efforts."
—Albert Einstein

tomdrabas.com
Awatar użytkownika
Tomasz Gumny
2500...3124 posty
2500...3124 posty
Posty: 2526
Rejestracja: pn, 1 stycznia 2007, 23:18
Lokalizacja: Trzcianka/Poznań

Re: Pomiarowa lampa "solid-state"

Post autor: Tomasz Gumny »

TooL46_2 pisze: wt, 5 maja 2026, 03:57 Troche ‘pomarudze’: interpolacja liniowa dla Ua to jeszcze tak… Ale napiecie na siatce drugiej jest nieliniowe jesli chodzi o wplyw na wartosc pradu Ia…
Będziemy interpolować liniowo prądy IA i IS2 tylko pomiędzy węzłami tablicy. Zakładam, że w punktach wartości będą poprawne, wzięte z modelu Korena albo charakterystyk. Nie wiem jak wygląda rzeczywisty wpływ US2 na IA, ale dla pentod podawany jest parametr μg2g1, który wskazuje ile razy US2 słabiej wpływa na IA niż US1. I to podobno jest wartość stała, związana z konstrukcją danej lampy.
TooL46_2 pisze: wt, 5 maja 2026, 03:57Juz predzej funkcja sklejana (cubic spline) ale to juz serio chyba prosciej z panem Koren…
Z tego odnośnika: "The term spline comes from the flexible spline devices used by shipbuilders and draftsmen to draw smooth shapes." Aż mi się przypomniało pierwsze praktyczne doświadczenie z interpolacją. Za młodu kupiliśmy z kumplami dokumentację deski z żaglem. Przekroje kadłuba były co pół metra, a najdłuższe krzywiki miały 30cm. Więc zmierzyłem przekroje, napisałem w Fortranie program do interpolacji Newtona, odebrałem wydruki (to były czasy Odry, Georga3, kart perforowanych i drukarek wierszowych). Po przeniesieniu wyników na papier wyszły pięknie pofalowane zarysy kadłuba. :D
TooL46_2 pisze: wt, 5 maja 2026, 03:57Posiedzialem i wykoncypowalem taki kod...
Fajnie, tylko ja nadal nie mam matematyki zmiennoprzecinkowej.
TooL46_2 pisze: wt, 5 maja 2026, 03:57Mam dwa ale...
1. Czy naprawde nie prosciej byloby z funkcjami parametrycznymi?
2. Sciaganie charakterystyk dla roznych Ug2 to bedzie niemaly problem bo w notach katalogowych rzadko mozna spotkac nawet Ug2 dla dwoch wartosci...
W zasadzie ze wszystkim się zgadzam, tylko pamiętaj, że zaczynaliśmy od triody na 2 wzmacniaczach operacyjnych. Myślałem, że pentoda to taka przerośnięta trioda...
Tomek