Added selftest

pull/94/head
erikkaashoek 2 years ago
parent 3c20a9ce1d
commit fdc7a0b58a

@ -1150,15 +1150,15 @@ const int to_calibrate[5] = {8,9,10,11,12};
//properties_t *active_props = &current_props;
#ifdef TINYSA4
const freq_t v5_2_correction_frequency[CORRECTION_SIZE][CORRECTION_POINTS]=
{ // * * * *
/* low */ { 10000, 100000, 300000, 600000, 2000000, 3000000, 30000000, 60000000, 80000000, 120000000, 230000000, 360000000, 520000000, 560000000, 640000000, 750000000, 800000000, 810000000, 820000000, 830000000},
/* low lna */ { 10000, 30000, 100000, 300000, 1000000, 5000000, 40000000, 70000000, 210000000, 240000000, 270000000, 300000000, 330000000, 480000000, 650000000, 740000000, 790000000, 810000000, 820000000, 830000000},
{
/* low */ { 100000, 300000, 600000, 2000000, 3000000, 30000000, 60000000, 80000000, 120000000, 150000000, 230000000, 360000000, 520000000, 560000000, 640000000, 750000000, 800000000, 810000000, 820000000, 830000000},
/* low lna */ { 100000, 300000, 1000000, 5000000, 40000000, 70000000, 180000000, 210000000, 240000000, 250000000, 270000000, 300000000, 330000000, 540000000, 650000000, 740000000, 790000000, 810000000, 820000000, 830000000},
/* ultra */ { 30000000, 700000000, 980000000, 1910000000, 2550000000, 2800000000, 2810000000, 3020000000, 3120000000, 3430000000, 3750000000, 4230000000, 4480000000, 4810000000, 5430000000, 5640000000, 6390000000, 6660000000, 6980000000, 7250000000},
/* ultra lna */ { 30000000, 700000000, 1130000000, 1840000000, 2490000000, 2800000000, 2810000000, 3110000000, 3500000000, 3940000000, 4480000000, 4610000000, 4940000000, 5450000000, 6030000000, 6200000000, 6580000000, 6650000000, 7150000000, 7250000000},
/* direct */ { 140000000, 150000000, 160000000, 180000000, 280000000, 290000000, 300000000, 330000000, 340000000, 350000000, 410000000, 480000000, 560000000, 823000000, 830000000, 850000000, 890000000, 950000000, 1090000000, 1120000000},
/* direct lna */ { 140000000, 150000000, 170000000, 180000000, 280000000, 290000000, 310000000, 370000000, 440000000, 470000000, 480000000, 560000000, 823000000, 830000000, 850000000, 890000000, 950000000, 1040000000, 1090000000, 1120000000, },
/* harm */ { 30000000, 6000000000, 6400890869, 6596881960, 7104677060, 7398663697, 7603563474, 8004454343, 8200445434, 8396436526, 8503340757, 8601336303, 8904231626, 9100222717, 9296213808, 9403118040, 9599109131, 9804008909, 9902004454, 10000000000, },
/* harm lna */ { 30000000, 6000000000, 6195991091, 6596881960, 6997772829, 7300668151, 7603563474, 7897550111, 8200445434, 8396436526, 8601336303, 8797327394, 8904231626, 9100222717, 9198218263, 9305122494, 9501113586, 9599109131, 9697104677, 10000000000, },
/* harm */ { 30000000, 6000000000, 6195991091, 6302895323, 6400890869, 6899777283, 7104677060, 7398663697, 7701559020, 7799554566, 8200445434, 8298440980, 8503340757, 8904231626, 9002227171, 9100222717, 9198218263, 9296213808, 9501113586, 9804008909, },
/* harm lna */ { 30000000, 6000000000, 6097995546, 6204899777, 6498886414, 6596881960, 6801781737, 7496659243, 7701559020, 7995545657, 8102449889, 8298440980, 8396436526, 8699331849, 8904231626, 9100222717, 9198218263, 9403118040, 9697104677, 10000000000, },
/* out */ { 10000, 30000, 100000, 200000, 600000, 5000000, 170000000, 250000000, 300000000, 390000000, 490000000, 650000000, 690000000, 740000000, 780000000, 800000000, 810000000, 820000000, 823000000, 830000000, },
/* direct */ { 500000000, 823000000, 830000000, 850000000, 860000000, 870000000, 880000000, 890000000, 900000000, 910000000, 920000000, 930000000, 970000000, 1030000000, 1040000000, 1050000000, 1060000000, 1070000000, 1080000000, 1100000000, },
/* adf */ { 500000000, 700000000, 1340000000, 1500000000, 2000000000, 2350000000, 2800000000, 2810000000, 3000000000, 3410000000, 3600000000, 3990000000, 4330000000, 4570000000, 4760000000, 5310000000, 5320000000, 5720000000, 6100000000, 6440000000, },
@ -1167,14 +1167,14 @@ const freq_t v5_2_correction_frequency[CORRECTION_SIZE][CORRECTION_POINTS]=
const float v5_2_correction_value[CORRECTION_SIZE][CORRECTION_POINTS]=
{
/* low */ { 4.24, 2.39, 1.18, 1.2, 0.33, 0.87, 0.4, 1.24, 0.64, 0.99, 0.04, 0.88, -0.64, -0.2, -0.36, 0.4, 3.45, 4.8, 8.04, 13.94, },
/* low lna */ { 17.53, 11.92, 5.48, 0.9, -1.57, -3.5, 1.8, 2.47, 2.75, 4.08, 9.22, 6.07, 5.23, 3.5, 3.77, 4.9, 7.06, 9.11, 12.48, 19.18, },
/* low */ { 2.39, 1.18, 1.2, 0.33, 0.87, 0.4, 1.24, 0.64, 0.99, 0.35, 0.04, 0.88, -0.64, -0.2, -0.36, 0.4, 3.45, 4.8, 8.04, 13.94, },
/* low lna */ { 5.48, 0.9, -1.57, -3.5, 1.8, 2.47, 2.75, 4.08, 8.47, 9.22, 6.07, 4.54, 4.56, 3.73, 3.77, 4.9, 7.06, 9.11, 12.48, 19.18, },
/* ultra */ { -0.01, -0.42, -0.53, 0.38, 1.65, 1.35, 2.24, 2.96, 2.88, 4.4, 4.85, 5.43, 7.64, 8.82, 8.2, 11.3, 12.94, 15.53, 22.44, 29.28, },
/* ultra lna */ { 0.65, 4.24, 4.91, 5.15, 7.38, 6.29, 7.14, 7.09, 10.38, 10.66, 12.3, 11.71, 14.07, 13.1, 19, 19.03, 16.03, 16.88, 32.09, 34.59, },
/* direct */ { 34.02, 31.94, 30.89, 28.88, 20.1, 20.23, 19.04, 18.06, 16.75, 16.94, 13.39, 10.63, 7.2, -1.19, -1.19, -1.29, -1, -0.0399999999999991, 3.04, 4.03, },
/* direct lna */ { 29.65, 28.51, 26.73, 25.82, 19.67, 18.67, 16.64, 13.81, 9.73, 7.62, 7.57, 4.58, -3.66, -3.66, -3.67, -3.68, -2.48, -0.379999999999999, 0.859999999999999, 1.53, },
/* harm */ { 18.6, 17.38, 18.68, 19.78, 20.88, 22.41, 24.41, 29.91, 33.41, 36.41, 36.91, 35.91, 33.91, 35.41, 39.91, 41.91, 45, 47.91, 48.91, 50.41, },
/* harm lna */ { 13.6, 26.38, 26.38, 21.88, 26.88, 28.65, 31.88, 39.88, 45.88, 45.88, 42.88, 42.3, 42.98, 46.88, 51.38, 56.38, 63.38, 63.88, 62.88, 65.34, },
/* harm */ { 18.7, 18.91, 19.91, 19.41, 19.91, 21.91, 22.41, 23.91, 26.91, 28.41, 34.41, 36.41, 37.91, 35.94, 35.94, 36.9, 38.44, 40.94, 44.94, 48.94, },
/* harm lna */ { 13.6, 24.41, 23.41, 23.41, 19.91, 19.41, 21.91, 27.41, 31.91, 39.91, 41.91, 43.41, 42.91, 38.91, 40.91, 44.41, 47.91, 57.91, 61.41, 61.46, },
/* out */ { 3.84, 2.31, 1.04, 0.1, -0.82, -1.51, -2.33, -2.25, -2.04, -1.43, -2.2, -2.36, -1.84, -1.23, 0.51, 1.8, 3.17, 6.28, 7.85, 12.37, },
/* direct */ { -7.76, -3.85, -3.71, -3.54, -3.45, -3.34, -3.23, -3.11, -2.98, -2.86, -2.74, -2.64, -2.14, -1.29, -1.14, -1.05, -0.89, -0.79, -0.62, -0.31, },
/* adf */ { 5.58, 3.91, -4.52, -6, -3.36, -2.14, -2.3, -3.11, -3.11, -2.05, -1.5, -1.36, 1.28, 4.63, 5.89, 5.55, 5.47, 6.49, 3.86, 5.8, },
@ -2993,7 +2993,7 @@ int main(void)
memcpy(config.correction_value, v5_2_correction_value, sizeof(config.correction_value));
config.harmonic_level_offset = v5_2_harmonic_level_offset;
config.harmonic_lna_level_offset = v5_2_harmonic_lna_level_offset;
ULTRA_MAX_FREQ = 7000000000ULL;
ULTRA_MAX_FREQ = 7300000000ULL;
} else {
ULTRA_MAX_FREQ = 5340000000ULL;
}

@ -18,7 +18,7 @@
*/
#include "ch.h"
#ifdef TINYSA_F303
//#ifdef TINYSA_F303
#ifdef TINYSA_F072
#error "Remove comment for #ifdef TINYSA_F303"
#endif
@ -26,7 +26,7 @@
#define TINYSA4
#endif
#define TINYSA4_PROTO
#endif
//#endif
#ifdef TINYSA_F072
#ifdef TINYSA_F303

@ -1613,8 +1613,8 @@ void set_actual_correction_value(int current_curve,int current_curve_index, floa
float get_level_offset(void)
{
if (setting.disable_correction)
return 0;
// if (setting.disable_correction)
// return 0;
if (setting.mode == M_HIGH) {
if (config.high_level_offset == 100) // Offset of 100 means not calibrated
return 0;
@ -6208,7 +6208,7 @@ enum {
enum {
TP_SILENT, TPH_SILENT, TP_10MHZ, TP_10MHZEXTRA, TP_30MHZ_SWITCH, TP_30MHZ, TPH_30MHZ, TPH_30MHZ_SWITCH,
#ifdef TINYSA4
TP_30MHZ_ULTRA, TP_30MHZ_DIRECT, TP_30MHZ_LNA,TP_SILENT_LNA
TP_30MHZ_ULTRA, TP_30MHZ_DIRECT, TP_30MHZ_LNA,TP_SILENT_LNA, TP_15MHZ_LNA
#endif
};
@ -6256,33 +6256,34 @@ const test_case_t test_case [] =
TEST_CASE_STRUCT(TC_DISPLAY, TP_30MHZ, 30, 0, CAL_LEVEL, 50, -60), // 11 test display
TEST_CASE_STRUCT(TC_ATTEN, TP_30MHZ, 30, 0, CAL_LEVEL, 50, -60), // 12 Measure atten step accuracy
TEST_CASE_STRUCT(TC_SIGNAL, TP_30MHZ_LNA, 30, 5, CAL_LEVEL, 10, -75), // 13 Measure LNA
#define TEST_END 13
TEST_CASE_STRUCT(TC_SIGNAL, TP_15MHZ_LNA, 30, 5, CAL_LEVEL, 10, -90), // 14 LPF flatness
#define TEST_END 14
TEST_CASE_STRUCT(TC_END, 0, 0, 0, 0, 0, 0),
#define TEST_POWER 14
#define TEST_POWER 15
TEST_CASE_STRUCT(TC_MEASURE, TP_30MHZ, 30, 50, CAL_LEVEL, 10, -55), // 12 Measure power level and noise
TEST_CASE_STRUCT(TC_MEASURE, TP_30MHZ, 270, 4, -50, 10, -75), // 13 Measure powerlevel and noise
TEST_CASE_STRUCT(TC_MEASURE, TPH_30MHZ, 270, 4, -40, 10, -65), // 14 Calibrate power high mode
TEST_CASE_STRUCT(TC_END, 0, 0, 0, 0, 0, 0),
#define TEST_RBW 18
#define TEST_RBW 19
TEST_CASE_STRUCT(TC_MEASURE, TP_30MHZ, 30, 1, CAL_LEVEL, 10, -60), // 16 Measure RBW step time
TEST_CASE_STRUCT(TC_END, 0, 0, 0, 0, 0, 0),
TEST_CASE_STRUCT(TC_MEASURE, TPH_30MHZ, 300, 4, -48, 10, -65), // 14 Calibrate power high mode
TEST_CASE_STRUCT(TC_MEASURE, TPH_30MHZ_SWITCH,300, 4, -40, 10, -65), // 14 Calibrate power high mode
#define TEST_ATTEN 22
#define TEST_ATTEN 23
TEST_CASE_STRUCT(TC_ATTEN, TP_30MHZ, 30, 0, CAL_LEVEL, 50, -60), // 20 Measure atten step accuracy
#define TEST_SPUR 23
#define TEST_SPUR 24
TEST_CASE_STRUCT(TC_BELOW, TP_SILENT, 144, 8, -95, 0, 0), // 22 Measure 48MHz spur
#define TEST_LEVEL 24
#define TEST_LEVEL 25
TEST_CASE_STRUCT(TC_LEVEL, TP_30MHZ, 30.000, 0, CAL_LEVEL, 50, -55), // 23 Measure level
TEST_CASE_STRUCT(TC_LEVEL, TP_30MHZ_LNA, 30.000, 0, CAL_LEVEL, 50, -55), // 23 Measure level
TEST_CASE_STRUCT(TC_LEVEL, TPH_30MHZ, 150, 0, CAL_LEVEL-30, 50, -55), // 23 Measure level
#define TEST_NOISE 27
#define TEST_NOISE 28
TEST_CASE_STRUCT(TC_LEVEL, TP_SILENT, 201.000, 0, -166, 50, -166), // 23 Measure level
#define TEST_NOISE_RBW 28
#define TEST_NOISE_RBW 29
TEST_CASE_STRUCT(TC_MEASURE, TP_SILENT, 201, 1, -166, 10, -166), // 16 Measure RBW step time
#define TEST_JUMP 29
#define TEST_JUMP 30
TEST_CASE_STRUCT(TC_JUMP, TP_30MHZ_LNA, 30, 0.001, -40, 0, CAL_LEVEL), // 16 Measure jumps
#define TEST_JUMP_HARMONIC 30
#define TEST_JUMP_HARMONIC 31
TEST_CASE_STRUCT(TC_JUMP, TP_30MHZ, 30, 0.001, -40, 0, CAL_LEVEL), // 16 Measure jumps
};
#else
@ -6353,6 +6354,25 @@ void determine_direct_test_freq(void) {
}
config.ultra = old_ultra;
}
static float lpf_test_level = 0;
#define LPF_TEST_FREQ 795000000
void determine_lpf_test_level(void) {
int old_ultra = config.ultra;
config.ultra = true;
int old_lna = setting.extra_lna;
setting.extra_lna = true;
force_signal_path = true;
test_path = 3;
set_refer_output(1);
dirty = true;
lpf_test_level = PURE_TO_float(perform(false, 0, (freq_t)LPF_TEST_FREQ, false));
dirty = true;
force_signal_path = false;
config.ultra = old_ultra;
setting.extra_lna = old_lna;
}
#endif
static void test_acquire(int i)
@ -6420,10 +6440,18 @@ void cell_draw_test_info(int x0, int y0)
int validate_signal_within(int i, float margin)
{
test_fail_cause[i] = "Signal level ";
if (fabsf(peakLevel-test_case[i].pass) > 2*margin) {
float test_level = test_case[i].pass;
#ifdef TINYSA4
if (test_case[i].setup == TP_15MHZ_LNA) {
test_level = lpf_test_level;
margin = 5;
}
#endif
if (fabsf(peakLevel-test_level) > 2*margin) {
return TS_FAIL;
}
if (fabsf(peakLevel-test_case[i].pass) > margin) {
if (fabsf(peakLevel-test_level) > margin) {
return TS_CRITICAL;
}
if (setting.measurement == M_PASS_BAND) {
@ -6444,6 +6472,8 @@ int validate_signal_within(int i, float margin)
#ifdef TINYSA4
if (test_case[i].setup == TP_30MHZ_DIRECT)
c_freq = direct_test_freq;
if (test_case[i].setup == TP_15MHZ_LNA)
c_freq = LPF_TEST_FREQ;
#endif
test_fail_cause[i] = "Frequency ";
if (peakFreq < c_freq - 500000 || c_freq + 500000 < peakFreq )
@ -6741,15 +6771,25 @@ common_silent:
#else
stored_t[j] = test_case[i].stop - (i == 6?3:0);
#endif
for (int j = setting._sweep_points/2 - W2P(test_case[i].width); j < setting._sweep_points/2 + W2P(test_case[i].width); j++)
for (int j = setting._sweep_points/2 - W2P(test_case[i].width); j < setting._sweep_points/2 + W2P(test_case[i].width); j++) {
#ifdef TINYSA4
if (test_case[i].setup == TP_15MHZ_LNA)
stored_t[j] = lpf_test_level;
else
#endif
stored_t[j] = test_case[i].pass;
}
break;
#ifdef TINYSA4
case TP_15MHZ_LNA:
determine_lpf_test_level();
goto simple;
case TP_30MHZ_DIRECT:
case TP_30MHZ_ULTRA:
case TP_30MHZ_LNA:
#endif
case TP_30MHZ:
simple:
set_mode(M_LOW);
#ifdef TINYSA4
maxFreq = 9900000000ULL; // needed to measure the LPF rejection
@ -6785,6 +6825,10 @@ common_silent:
case TP_30MHZ_LNA:
setting.extra_lna = true;
break;
case TP_15MHZ_LNA:
set_refer_output(1);
setting.extra_lna = true;
break;
#endif
case TP_30MHZ_SWITCH:
set_attenuation(32); // This forces the switch to transmit so isolation can be tested
@ -6811,6 +6855,8 @@ common_silent:
#ifdef TINYSA4
if (test_case[i].setup == TP_30MHZ_DIRECT)
c_freq = direct_test_freq;
if (test_case[i].setup == TP_15MHZ_LNA)
c_freq = LPF_TEST_FREQ;
#endif
set_sweep_frequency(ST_CENTER, c_freq);
}

Loading…
Cancel
Save

Powered by TurnKey Linux.