[update] lsv module
This commit is contained in:
+1
-1
@@ -3,7 +3,7 @@
|
||||
|
||||
#define Vset INSTRUCTION.Vset
|
||||
|
||||
static void CV3Curve(void)
|
||||
static void cv_volt_out(void)
|
||||
{
|
||||
struct wm_cv_ctx_t *cv = (struct wm_cv_ctx_t *)wm_get();
|
||||
struct wm_meas_t *m = &cv->measure;
|
||||
|
||||
+96
-94
@@ -3,99 +3,101 @@
|
||||
|
||||
#define Vset INSTRUCTION.Vset
|
||||
|
||||
//static uint16_t LSVCurve(void *WM){
|
||||
// struct LSVMode *LSV = (struct LSVMode *)WM;
|
||||
//
|
||||
// static uint16_t DACOutCode;
|
||||
// static int32_t Vin;
|
||||
// static int32_t Vout;
|
||||
// static int32_t DeltaVout;
|
||||
//
|
||||
// Vin = LSV->_measureVin * 200;//[5nV]
|
||||
// if(DACReset){
|
||||
// Vout = Vset + Vin;
|
||||
// DACReset = false;
|
||||
// }else{
|
||||
// DeltaVout = Vset - (Vout - Vin);
|
||||
// Vout = Vout + DeltaVout;
|
||||
// }
|
||||
//
|
||||
// INSTRUCTION.VoltConstant = Vout / 40000 + 25000;//5nV=>usercode
|
||||
// DACOutCode = Usercode_Correction_to_DAC(INSTRUCTION.VoutGainLevel, INSTRUCTION.VoltConstant);
|
||||
//
|
||||
// int32_t RealV2;
|
||||
// RealV2 = (int32_t)((Vout - Vin) / 200);//[1uV]
|
||||
// InputNotify(NOTIFY_VOLT, RealV2);
|
||||
//
|
||||
// int32_t RealV;
|
||||
// RealV = (int32_t)(Vout / 200);//[1uV]
|
||||
// InputNotify(NOTIFY_IMPEDANCE, RealV);
|
||||
//
|
||||
// DAC_outputV(DACOutCode);
|
||||
////
|
||||
// return DACOutCode;
|
||||
//}
|
||||
static void lsv_volt_out(void)
|
||||
{
|
||||
struct wm_lsv_ctx_t *lsv = (struct wm_lsv_ctx_t *)wm_get();
|
||||
struct wm_meas_t *m = &lsv->measure;
|
||||
uint16_t DACOutCode;
|
||||
int32_t Vin;
|
||||
int32_t Vout;
|
||||
int32_t DeltaVout;
|
||||
|
||||
//static void lsv_vscan(void *WM){
|
||||
// struct LSVMode *LSV = (struct LSVMode *)WM;
|
||||
//
|
||||
// NotifyCycleNumber = (INSTRUCTION.cycleNumber - LSV->_cycleNumber + 1);
|
||||
//
|
||||
// if(vscanReset){
|
||||
// if(INSTRUCTION.directionInit == 1){
|
||||
// LSV->_direction_up = true;
|
||||
// LSV->_current_direction_up = true;
|
||||
// }else{
|
||||
// LSV->_direction_up = false;
|
||||
// LSV->_current_direction_up = false;
|
||||
// }
|
||||
//
|
||||
// //Vsetp = x * 20 * N, x=xmV ; N=VscanRate
|
||||
// if(INSTRUCTION.step <= 10){
|
||||
// LSV->_Vstep = INSTRUCTION.step * INSTRUCTION.VsetRate / 5;
|
||||
// }else{
|
||||
// LSV->_Vstep = INSTRUCTION.step / 5 * INSTRUCTION.VsetRate;
|
||||
// }
|
||||
//
|
||||
// Vset = LSV->_Vinit;
|
||||
// }
|
||||
//
|
||||
// if(!vscanReset){
|
||||
//
|
||||
// if (LSV->_current_direction_up){
|
||||
// Vset = Vset + LSV->_Vstep * GPT.GptimerMultiple;
|
||||
// }else{
|
||||
// Vset = Vset - LSV->_Vstep * GPT.GptimerMultiple;
|
||||
// }
|
||||
//
|
||||
// /*stop condition*/
|
||||
// if (Vset >= LSV->_Vmax){
|
||||
// ModeLED(POST_WORK);
|
||||
//// PeriodicEvent = false;
|
||||
// Vset = LSV->_Vmin;
|
||||
// InitEliteFlag();
|
||||
// INSTRUCTION.eliteFxn = CURVE_CC;
|
||||
// INSTRUCTION.sampleRate = 15;
|
||||
// INSTRUCTION.charge = 0x01;
|
||||
// INSTRUCTION.constantCurrent = 0x00;
|
||||
// INSTRUCTION.Vmax = 0xC350;
|
||||
// INSTRUCTION.Vmin = 0x0000;
|
||||
// INSTRUCTION.notifyRate = 500;
|
||||
// INSTRUCTION.VoViSwitch = 0x02;//read Vscan = Vout - Vin
|
||||
// }else if (Vset <= LSV->_Vmin){
|
||||
// ModeLED(POST_WORK);
|
||||
//// PeriodicEvent = false;
|
||||
// Vset = LSV->_Vmax;
|
||||
// InitEliteFlag();
|
||||
// INSTRUCTION.eliteFxn = CURVE_CC;
|
||||
// INSTRUCTION.sampleRate = 15;
|
||||
// INSTRUCTION.charge = 0x01;
|
||||
// INSTRUCTION.constantCurrent = 0x00;
|
||||
// INSTRUCTION.Vmax = 0xC350;
|
||||
// INSTRUCTION.Vmin = 0x0000;
|
||||
// INSTRUCTION.notifyRate = 500;
|
||||
// INSTRUCTION.VoViSwitch = 0x02;//read Vscan = Vout - Vin
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
Vin = m->_measureVin * 200;//[5nV]
|
||||
if (DACReset) {
|
||||
Vout = Vset + Vin;
|
||||
DACReset = false;
|
||||
} else {
|
||||
DeltaVout = Vset - (Vout - Vin);
|
||||
Vout = Vout + DeltaVout;
|
||||
}
|
||||
|
||||
INSTRUCTION.VoltConstant = Vout / 40000 + 25000;//5nV=>usercode
|
||||
DACOutCode = Usercode_Correction_to_DAC(INSTRUCTION.VoutGainLevel, INSTRUCTION.VoltConstant);
|
||||
|
||||
int32_t RealV2;
|
||||
RealV2 = (int32_t)((Vout - Vin) / 200);//[1uV]
|
||||
InputNotify(NOTIFY_VOLT, RealV2);
|
||||
|
||||
int32_t RealV;
|
||||
RealV = (int32_t)(Vout / 200);//[1uV]
|
||||
InputNotify(NOTIFY_IMPEDANCE, RealV);
|
||||
|
||||
DAC_outputV(DACOutCode);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void lsv_vscan(void)
|
||||
{
|
||||
struct wm_lsv_ctx_t *lsv = (struct wm_lsv_ctx_t *)wm_get();
|
||||
|
||||
NotifyCycleNumber = (INSTRUCTION.cycleNumber - lsv->_cycleNumber + 1);
|
||||
|
||||
if (vscanReset) {
|
||||
if (INSTRUCTION.directionInit == 1) {
|
||||
lsv->_direction_up = true;
|
||||
lsv->_current_direction_up = true;
|
||||
} else {
|
||||
lsv->_direction_up = false;
|
||||
lsv->_current_direction_up = false;
|
||||
}
|
||||
|
||||
//Vsetp = x * 20 * N, x=xmV ; N=VscanRate
|
||||
if (INSTRUCTION.step <= 10) {
|
||||
lsv->_Vstep = INSTRUCTION.step * INSTRUCTION.VsetRate / 5;
|
||||
} else {
|
||||
lsv->_Vstep = INSTRUCTION.step / 5 * INSTRUCTION.VsetRate;
|
||||
}
|
||||
|
||||
Vset = lsv->_Vinit;
|
||||
}
|
||||
|
||||
if (!vscanReset) {
|
||||
|
||||
if (lsv->_current_direction_up) {
|
||||
Vset = Vset + lsv->_Vstep * GPT.GptimerMultiple;
|
||||
} else {
|
||||
Vset = Vset - lsv->_Vstep * GPT.GptimerMultiple;
|
||||
}
|
||||
|
||||
/*stop condition*/
|
||||
if (Vset >= lsv->_Vmax) {
|
||||
ModeLED(POST_WORK);
|
||||
// PeriodicEvent = false;
|
||||
Vset = lsv->_Vmin;
|
||||
InitEliteFlag();
|
||||
INSTRUCTION.eliteFxn = CURVE_CC;
|
||||
INSTRUCTION.sampleRate = 15;
|
||||
INSTRUCTION.charge = 0x01;
|
||||
INSTRUCTION.constantCurrent = 0x00;
|
||||
INSTRUCTION.Vmax = 0xC350;
|
||||
INSTRUCTION.Vmin = 0x0000;
|
||||
INSTRUCTION.notifyRate = 500;
|
||||
INSTRUCTION.VoViSwitch = 0x02;//read Vscan = Vout - Vin
|
||||
} else if (Vset <= lsv->_Vmin) {
|
||||
ModeLED(POST_WORK);
|
||||
// PeriodicEvent = false;
|
||||
Vset = lsv->_Vmax;
|
||||
InitEliteFlag();
|
||||
INSTRUCTION.eliteFxn = CURVE_CC;
|
||||
INSTRUCTION.sampleRate = 15;
|
||||
INSTRUCTION.charge = 0x01;
|
||||
INSTRUCTION.constantCurrent = 0x00;
|
||||
INSTRUCTION.Vmax = 0xC350;
|
||||
INSTRUCTION.Vmin = 0x0000;
|
||||
INSTRUCTION.notifyRate = 500;
|
||||
INSTRUCTION.VoViSwitch = 0x02;//read Vscan = Vout - Vin
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
+38
-26
@@ -89,12 +89,11 @@ struct wm_cv_ctx_t {
|
||||
VOUT_PARA;
|
||||
};
|
||||
|
||||
//struct LSVMode {
|
||||
// /* WARNING: please keep MEASURE at first!! */
|
||||
// struct wm_meas_t measure;
|
||||
//
|
||||
// VOUT_PARA;
|
||||
//};
|
||||
struct wm_lsv_ctx_t {
|
||||
/* WARNING: please keep MEASURE at first!! */
|
||||
struct wm_meas_t measure;
|
||||
VOUT_PARA;
|
||||
};
|
||||
|
||||
//struct CVSCANMode {
|
||||
// /* WARNING: please keep MEASURE at first!! */
|
||||
@@ -350,23 +349,35 @@ static int __cv_create(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
//void *InitLSVMode(){
|
||||
// struct LSVMode *ret = malloc(sizeof(struct LSVMode));
|
||||
// ret->_measureCurrent = 0;
|
||||
// ret->_measureVin = 0;
|
||||
// ret->_measureVout = 0;
|
||||
// ret->_measureBat = 0;
|
||||
// ret->_VoViSwitch = INSTRUCTION.VoViSwitch;
|
||||
// ret->_Vinit = (INSTRUCTION.Vinit - 25000) * 4 * 10000; //[5nV]
|
||||
// ret->_Vmax = (INSTRUCTION.Vmax - 25000) * 4 * 10000; //[5nV]
|
||||
// ret->_Vmin = (INSTRUCTION.Vmin - 25000) * 4 * 10000; //[5nV]
|
||||
// ret->_Vset = 0;
|
||||
// ret->_Vstep = 0;
|
||||
// ret->_direction_up = true;
|
||||
// ret->_current_direction_up = true;
|
||||
// ret->_cycleNumber = INSTRUCTION.cycleNumber;
|
||||
// return (void *)ret;
|
||||
//} /* LSV Mode */
|
||||
static int __lsv_create(void)
|
||||
{
|
||||
struct wm_meas_t *m;
|
||||
struct wm_lsv_ctx_t *p;
|
||||
void **wm = &workMode_p;
|
||||
|
||||
p = malloc(sizeof(struct wm_lsv_ctx_t));
|
||||
if (!p) return -1;
|
||||
|
||||
m = (struct wm_meas_t *)p;
|
||||
m->_measureCurrent = 0;
|
||||
m->_measureVin = 0;
|
||||
m->_measureVout = 0;
|
||||
m->_measureBat = 0;
|
||||
m->_VoViSwitch = INSTRUCTION.VoViSwitch;
|
||||
|
||||
p->_Vinit = (INSTRUCTION.Vinit - 25000) * 4 * 10000; //[5nV]
|
||||
p->_Vmax = (INSTRUCTION.Vmax - 25000) * 4 * 10000; //[5nV]
|
||||
p->_Vmin = (INSTRUCTION.Vmin - 25000) * 4 * 10000; //[5nV]
|
||||
p->_Vset = 0;
|
||||
p->_Vstep = 0;
|
||||
p->_direction_up = true;
|
||||
p->_current_direction_up = true;
|
||||
p->_cycleNumber = INSTRUCTION.cycleNumber;
|
||||
|
||||
*wm = p;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//void *InitCVSCANMode(){
|
||||
// struct CVSCANMode *ret = malloc(sizeof(struct CVSCANMode));
|
||||
@@ -416,9 +427,6 @@ static int __cv_create(void)
|
||||
// case CURVE_CALI_DAC:
|
||||
// *WM = InitVoltOutMode();
|
||||
// break;
|
||||
// case CURVE_LSV:
|
||||
// *WM = InitLSVMode();
|
||||
// break;
|
||||
// case CURVE_CA:
|
||||
// *WM = InitCVSCANMode();
|
||||
// break;
|
||||
@@ -468,6 +476,10 @@ int wm_init(void)
|
||||
if (__cv_create()) return -2;
|
||||
break;
|
||||
|
||||
case CURVE_LSV:
|
||||
if (__lsv_create()) return -2;
|
||||
break;
|
||||
|
||||
default:
|
||||
// printf("DO NOT support!!");
|
||||
return -3;
|
||||
|
||||
+2
-2
@@ -82,11 +82,11 @@ static void DACenable(uint8_t afterRead){
|
||||
break;
|
||||
|
||||
case CURVE_CV:
|
||||
CV3Curve();
|
||||
cv_volt_out();
|
||||
break;
|
||||
|
||||
case CURVE_LSV:{
|
||||
// LSVCurve(wm);
|
||||
lsv_volt_out();
|
||||
break;
|
||||
}
|
||||
case CURVE_CA:{
|
||||
|
||||
+3
-3
@@ -600,7 +600,7 @@ static void EliteVscanControl(void);
|
||||
static void mode_done(void);
|
||||
|
||||
//mode (Vset)
|
||||
static void lsv_vscan(void *WM);
|
||||
static void lsv_vscan(void);
|
||||
static void ca_vscan(void *WM);
|
||||
static void cv_vscan(void);
|
||||
static void cc_vscan(void);
|
||||
@@ -608,8 +608,8 @@ static void cc_vscan(void);
|
||||
//mode (DAC)
|
||||
static void DACenable(uint8_t afterRead);
|
||||
static void volt_out();
|
||||
static void CV3Curve(void);
|
||||
static uint16_t LSVCurve(void *WM);
|
||||
static void cv_volt_out(void);
|
||||
static void lsv_volt_out(void);
|
||||
static uint16_t CVSCANCurve(void *WM);
|
||||
static void pulse_vscan(void);
|
||||
|
||||
|
||||
+5
-5
@@ -335,7 +335,7 @@ static void EliteADCControl(void)
|
||||
case CURVE_RT:
|
||||
case CURVE_CC:
|
||||
case CURVE_CV:
|
||||
// case CURVE_LSV:
|
||||
case CURVE_LSV:
|
||||
// case CURVE_CA:
|
||||
// case CURVE_PULSE:
|
||||
case CURVE_VO:
|
||||
@@ -398,10 +398,10 @@ static void EliteVscanControl(void)
|
||||
cv_vscan();
|
||||
break;
|
||||
|
||||
// case CURVE_LSV:{
|
||||
// lsv_vscan(WM);
|
||||
// break;
|
||||
// }
|
||||
case CURVE_LSV:
|
||||
lsv_vscan();
|
||||
break;
|
||||
|
||||
// case CURVE_CA:{
|
||||
// ca_vscan(WM);
|
||||
// break;
|
||||
|
||||
Reference in New Issue
Block a user