EIS mode DC bias not working.

CV mode calibration and function okay.
This commit is contained in:
Benny Liu
2022-06-09 10:35:42 +08:00
parent 240c869347
commit fe37d6a6eb
5 changed files with 160 additions and 31 deletions
@@ -70,8 +70,10 @@ static void setEIS_EIS (void)
HSTIAGainCtrl(instru.ADCGainLv);
}
static int32_t LPVolt = 0;
if (!cali_flag) {
DAC_outputV(instru.dcbias);
LPVolt = (instru.dcbias - 25000) * 4 * 4000;
DAC_outputV(LPVolt);
SetWGAmp(instru.acamp);
} else {
cali_DAC_outputV(instru.dcbias);
@@ -14,9 +14,6 @@ static bool DACReset;
/* user code: 0 ~ 35000; LPDAC bias value: -1.5V ~ +1.5V */
static int32_t DAC_outputV(int32_t voltLVraw) { // LPDAC output, voltLV = Vbias-Vzero
// static int32_t vztemp, vscan, voltLV;
// static uint32_t vb, vz, vbcode, vzcode, DACOutCode = 0;
/* new code*/
int32_t ret;
int32_t vscan;
@@ -26,7 +23,6 @@ static int32_t DAC_outputV(int32_t voltLVraw) { // LPDAC output, voltLV = Vbia
uint8_t n_zero;//6btit
uint16_t n_bias;//12bit
uint32_t DACOutCode;
vscan = voltLVraw;
v_z = (V_5nV(2200) - (int64_t)vscan) * 200000 / 431579 + V_5nV(200); // v_z = (V_5nV(2200) - vscan)/2.157895 + V_5nV(200);
@@ -45,11 +41,11 @@ static int32_t DAC_outputV(int32_t voltLVraw) { // LPDAC output, voltLV = Vbia
v_zero = (int64_t)n_zero * V_5nV(3438) / 100;
if (vscan < 0) {
v_zero -= V_5nV(5372) / 10000;
v_zero -= V_5nV(5372) / 10000;
}
v_bias = vscan + v_zero;
n_bias = v_bias * 10000 / V_5nV(5372);
v_bias = vscan + v_zero;
n_bias = v_bias * 10000 / V_5nV(5372);
if ((n_bias <= 4095) || ( n_bias > 4095 && n_zero > 63))
break;
@@ -59,32 +55,38 @@ static int32_t DAC_outputV(int32_t voltLVraw) { // LPDAC output, voltLV = Vbia
if(n_zero > 63) n_zero = 63;
DACOutCode = (0x0003FFFF & ((n_zero << 12) + n_bias));
/* past code
voltLV = voltLVraw;//[mv] // calibration conversion
vztemp = (-0.45 * voltLV) + 249000000;
if (voltLV < 0) {
vztemp -= DAC12BIT_LSB;
}
vzcode = (vztemp - 40000000 + VZERO_LSB / 2) / VZERO_LSB;
vz = vzcode * VZERO_LSB + 40000000;
vb = voltLV + vz;
vbcode = ((vb - 40000000 + VBIAS_LSB / 2) / VBIAS_LSB);
DACOutCode = (0x0003FFFF & ((vzcode << 12) + vbcode));
*/
select_REG(LPDACDAT0);
w32_REG(DACOutCode);
ret = (int32_t)(v_bias - v_zero); //vscan
InputNotify(NOTIFY_VOLT, ret/200);
return ret;
}
//static int32_t DAC_outputV(int32_t voltLVraw) { // LPDAC output, voltLV = Vbias-Vzero
// static int32_t vztemp, vscan, voltLV;
// static uint32_t vb, vz, vbcode, vzcode, DACOutCode = 0;
//
// voltLV = (Cali_LPDAC(voltLVraw) - 25000) * 4 * 4000; // calibration conversion
// vztemp = (-0.45 * voltLV) + 249000000;
// if (voltLV < 0) {
// vztemp -= DAC12BIT_LSB;
// }
// vzcode = (vztemp - 40000000 + VZERO_LSB / 2) / VZERO_LSB;
// vz = vzcode * VZERO_LSB + 40000000;
//
// vb = voltLV + vz;
// vbcode = ((vb - 40000000 + VBIAS_LSB / 2) / VBIAS_LSB);
// DACOutCode = (0x0003FFFF & ((vzcode << 12) + vbcode));
//
// select_REG(LPDACDAT0);
// w32_REG(DACOutCode);
//
// vscan = (int32_t)(vb - vz) / 200;
// return vscan;
//}
static uint32_t DAC_outputF(uint32_t freq) {
select_REG(WGFCW);
w32_REG(freq);
@@ -19,10 +19,10 @@ static void reset() {
// PIN_setOutputValue(pin_handle, HIGH_Z_MODE, 0); // HIGH Z MODE // 1: close; 0: open;
HSTIAGainCtrl(HSRTIA_200R);
LPTIAGainCtrl(LPRTIA_200R);
HSDAC_GainControl(0x00);
HSDAC_output(0x0800);
// HSTIAGainCtrl(HSRTIA_200R);
// LPTIAGainCtrl(LPRTIA_200R);
// HSDAC_GainControl(0x00);
// HSDAC_output(0x0800);
for (int i = 0; i < SPI_LED_SIZE; i++) {
spi_LEDtxbuf[i] = 0;
@@ -46,6 +46,7 @@ static void vscan_volt_out(void)
/* in [5nV] ver */
MEAS_VOUT(wm) = DAC_outputV(Vset);
InputNotify(NOTIFY_VOLT, MEAS_VOUT(wm)/200);
if (Vset == cv->_Vinit && cv->bFirst){
Elite_led_color(COLOR_ORANGE);
@@ -1,7 +1,7 @@
#ifndef EIS_CALI_TABLE
#define EIS_CALI_TABLE
#define BOARD_FIRST_STEP_CALI
#define BOARD_2
typedef struct _SingleFilterCali{
uint32_t PhaseParaA;
@@ -433,6 +433,130 @@ struct _CaliTable{
.LP[3].LPTIA_coeff_c = 53149447309,
};
#elif defined(BOARD_A4_DA_32_D4_E6_F5)
{
.DeviceName = "BOARD_A4_DA_32_D4_E6_F5",
.CutoffFreq = 271200,
.OffsetZero = 0x6504,
// hsrtia160k
.Lv[0][0].HSRTIA_a = 0, // 1e8
.Lv[0][0].HSRTIA_b = 5665868, // 1e8
.Lv[0][0].HSRTIA_c = 1612, // 1e4
.Lv[1][0].HSRTIA_a = 0, // 1e8
.Lv[1][0].HSRTIA_b = 0, // 1e8
.Lv[1][0].HSRTIA_c = 0, // 1e4
.Lv[2][0].HSRTIA_a = 0, // 1e8
.Lv[2][0].HSRTIA_b = 0, // 1e8
.Lv[2][0].HSRTIA_c = 0, // 1e4
.Lv[3][0].HSRTIA_a = 0, // 1e8
.Lv[3][0].HSRTIA_b = 0, // 1e8
.Lv[3][0].HSRTIA_c = 0, // 1e4
// hsrtia20k
.Lv[0][1].HSRTIA_a = 3, // 1e8
.Lv[0][1].HSRTIA_b = 44242940, // 1e8
.Lv[0][1].HSRTIA_c = 148206, // 1e4
.Lv[1][1].HSRTIA_a = 0, // 1e8
.Lv[1][1].HSRTIA_b = 0, // 1e8
.Lv[1][1].HSRTIA_c = 0, // 1e4
.Lv[2][1].HSRTIA_a = 0, // 1e8
.Lv[2][1].HSRTIA_b = 0, // 1e8
.Lv[2][1].HSRTIA_c = 0, // 1e4
.Lv[3][1].HSRTIA_a = 0, // 1e8
.Lv[3][1].HSRTIA_b = 0, // 1e8
.Lv[3][1].HSRTIA_c = 0, // 1e4
// hsrtia5k
.Lv[0][2].HSRTIA_a = 2, // 1e8
.Lv[0][2].HSRTIA_b = 178641591, // 1e8
.Lv[0][2].HSRTIA_c = 386005, // 1e4
.Lv[1][2].HSRTIA_a = 0, // 1e8
.Lv[1][2].HSRTIA_b = 0, // 1e8
.Lv[1][2].HSRTIA_c = 0, // 1e4
.Lv[2][2].HSRTIA_a = 0, // 1e8
.Lv[2][2].HSRTIA_b = 0, // 1e8
.Lv[2][2].HSRTIA_c = 0, // 1e4
.Lv[3][2].HSRTIA_a = 0, // 1e8
.Lv[3][2].HSRTIA_b = 0, // 1e8
.Lv[3][2].HSRTIA_c = 0, // 1e4
// hsrtia200r
.Lv[0][3].HSRTIA_a = 9404, // 1e8
.Lv[0][3].HSRTIA_b = 4309654444, // 1e8
.Lv[0][3].HSRTIA_c = 15315713, // 1e4
.Lv[1][3].HSRTIA_a = 0, // 1e8
.Lv[1][3].HSRTIA_b = 0, // 1e8
.Lv[1][3].HSRTIA_c = 0, // 1e4
.Lv[2][3].HSRTIA_a = 0, // 1e8
.Lv[2][3].HSRTIA_b = 0, // 1e8
.Lv[2][3].HSRTIA_c = 0, // 1e4
.Lv[3][3].HSRTIA_a = 0, // 1e8
.Lv[3][3].HSRTIA_b = 0, // 1e8
.Lv[3][3].HSRTIA_c = 0, // 1e4
.Ft[0][0].PhaseParaA = 148031,
.Ft[0][0].PhaseParaB = -89728680,
.Ft[0][1].PhaseParaA = 0,
.Ft[0][1].PhaseParaB = 0,
.Ft[0][2].PhaseParaA = 0,
.Ft[0][2].PhaseParaB = 0,
.Ft[0][3].PhaseParaA = 0,
.Ft[0][3].PhaseParaB = 0,
.Ft[1][0].PhaseParaA = 341117,
.Ft[1][0].PhaseParaB = -89913235,
.Ft[1][1].PhaseParaA = 0,
.Ft[1][1].PhaseParaB = 0,
.Ft[1][2].PhaseParaA = 0,
.Ft[1][2].PhaseParaB = 0,
.Ft[1][3].PhaseParaA = 0,
.Ft[1][3].PhaseParaB = 0,
.Ft[2][0].PhaseParaA = 20622054,
.Ft[2][0].PhaseParaB = -90005211,
.Ft[2][1].PhaseParaA = 0,
.Ft[2][1].PhaseParaB = 0,
.Ft[2][2].PhaseParaA = 0,
.Ft[2][2].PhaseParaB = 0,
.Ft[2][3].PhaseParaA = 0,
.Ft[2][3].PhaseParaB = 0,
.Ft[3][0].PhaseParaA = 99823148,
.Ft[3][0].PhaseParaB = -89960369,
.Ft[3][1].PhaseParaA = 0,
.Ft[3][1].PhaseParaB = 0,
.Ft[3][2].PhaseParaA = 0,
.Ft[3][2].PhaseParaB = 0,
.Ft[3][3].PhaseParaA = 0,
.Ft[3][3].PhaseParaB = 0,
//only for EIS 1e10
.HSDAC_coeff_a = 14,
.HSDAC_coeff_b = 9717249,
.HSDAC_coeff_c = 8586589,
.LPDAC_coeff_a = 7,
.LPDAC_coeff_b = 8394088,
.LPDAC_coeff_c = 131973802074,
.LP[0].LPTIA_coeff_a = 0, // PGA = 1.5 | calibrated by ADCDAT
.LP[0].LPTIA_coeff_b = -54816709,
.LP[0].LPTIA_coeff_c = 179606310,
.LP[1].LPTIA_coeff_a = 2,
.LP[1].LPTIA_coeff_b = -434063200,
.LP[1].LPTIA_coeff_c = 1422073413,
.LP[2].LPTIA_coeff_a = -9,
.LP[2].LPTIA_coeff_b = -3163492996,
.LP[2].LPTIA_coeff_c = 10368161009,
.LP[3].LPTIA_coeff_a = -481,
.LP[3].LPTIA_coeff_b = -16202491299,
.LP[3].LPTIA_coeff_c = 53149447309,
};
#endif
/* Ft[4][4]; Lv[4][4] */