|
|
@@ -1,7 +1,7 @@
|
|
|
#include "bsp/adc.h"
|
|
|
#include "foc_type.h"
|
|
|
#include "libs/utils.h"
|
|
|
-
|
|
|
+#include "libs/logger.h"
|
|
|
#define MOS_Rds_Calibrate 1
|
|
|
|
|
|
#define NB_OFFSET_SAMPLES 32
|
|
|
@@ -13,8 +13,8 @@
|
|
|
|
|
|
#define Lower_Pass_p 0.2f
|
|
|
|
|
|
-#define VBUS_VOL(adc) ((adc) * 3.3f / 65535.0f / Gvbus)
|
|
|
-#define MOSds_VOL(adc) ((adc) * 3.3f / 65535.0f / Gmos)
|
|
|
+#define VBUS_VOL(adc) ((adc) * 3.3f / 4096.0f / Gvbus)
|
|
|
+#define MOSds_VOL(adc) ((adc) * 3.3f / 4096.0f / Gmos)
|
|
|
|
|
|
#define current_i(v, r) ((v)/(r))
|
|
|
|
|
|
@@ -33,9 +33,11 @@ void phase_current_init(current_samp_t *cs) {
|
|
|
|
|
|
|
|
|
void phase_current_offset(current_samp_t *cs) {
|
|
|
- u32 phase_current1, phase_current2;
|
|
|
- adc_phase_current_read(cs->sector, &phase_current1, &phase_current2);
|
|
|
+ s32 phase_current1, phase_current2;
|
|
|
+
|
|
|
+ adc_disable_ext_trigger();
|
|
|
|
|
|
+ adc_phase_current_read(cs->sector, &phase_current1, &phase_current2);
|
|
|
if (cs->offset_sample_count > 0) {
|
|
|
cs->offset_sample_count--;
|
|
|
if (cs->sector == SECTOR_5 && cs->offset_sample_count >= 0) {
|
|
|
@@ -57,35 +59,39 @@ void phase_current_offset(current_samp_t *cs) {
|
|
|
}
|
|
|
|
|
|
void phase_current_sample(current_samp_t *cs){
|
|
|
- u32 phase_current1, phase_current2;
|
|
|
+ s32 phase_current1, phase_current2;
|
|
|
|
|
|
+ adc_disable_ext_trigger();
|
|
|
+ cs->sector = SECTOR_1;
|
|
|
adc_phase_current_read(cs->sector, &phase_current1, &phase_current2);
|
|
|
if (cs->sector == SECTOR_1 || cs->sector == SECTOR_2) {
|
|
|
/* Current on Phase C is not accessible */
|
|
|
/* Ia = PhaseAOffset - ADC converted value) */
|
|
|
- cs->Ib = current_i(MOSds_VOL((int)phase_current1 - (int)cs->adc_offset_b), cs->Rds_b);
|
|
|
- cs->Ia = current_i(MOSds_VOL((int)phase_current2 - (int)cs->adc_offset_a), cs->Rds_a);
|
|
|
+ cs->Ib = current_i(MOSds_VOL(phase_current1 - cs->adc_offset_b), cs->Rds_b);
|
|
|
+ cs->Ia = current_i(MOSds_VOL(phase_current2 - cs->adc_offset_a), cs->Rds_a);
|
|
|
cs->Ic = -(cs->Ia + cs->Ib);
|
|
|
}else if (cs->sector == SECTOR_3 || cs->sector == SECTOR_4) {
|
|
|
/* Current on Phase A is not accessible */
|
|
|
/* Ib = PhaseBOffset - ADC converted value) */
|
|
|
- cs->Ic = current_i(MOSds_VOL((int)phase_current1 - (int)cs->adc_offset_c), cs->Rds_c);
|
|
|
- cs->Ib = current_i(MOSds_VOL((int)phase_current2 - (int)cs->adc_offset_b), cs->Rds_b);
|
|
|
+ cs->Ic = current_i(MOSds_VOL(phase_current1 - cs->adc_offset_c), cs->Rds_c);
|
|
|
+ cs->Ib = current_i(MOSds_VOL(phase_current2 - cs->adc_offset_b), cs->Rds_b);
|
|
|
cs->Ia = -(cs->Ib + cs->Ic);
|
|
|
}else if (cs->sector == SECTOR_5 || cs->sector == SECTOR_6) {
|
|
|
/* Current on Phase B is not accessible */
|
|
|
/* Ia = PhaseAOffset - ADC converted value) */
|
|
|
- cs->Ia = current_i(MOSds_VOL((int)phase_current1 - (int)cs->adc_offset_a), cs->Rds_a);
|
|
|
- cs->Ic = current_i(MOSds_VOL((int)phase_current2 - (int)cs->adc_offset_c), cs->Rds_c);
|
|
|
+ cs->Ia = current_i(MOSds_VOL(phase_current1 - cs->adc_offset_a), cs->Rds_a);
|
|
|
+ cs->Ic = current_i(MOSds_VOL(phase_current2 - cs->adc_offset_c), cs->Rds_c);
|
|
|
cs->Ib = -(cs->Ia + cs->Ic);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* 校准mos的 drain-source 内阻 */
|
|
|
-void phase_Rds_calibrate(current_samp_t *cs) {
|
|
|
+void phase_Rds_calibrate(current_samp_t *cs) {
|
|
|
+ adc_disable_ext_trigger();
|
|
|
+
|
|
|
if (cs->vbus_i_invert != INVERT_NO) {
|
|
|
- u32 adcm;
|
|
|
- u32 adcv;
|
|
|
+ s32 adcm;
|
|
|
+ s32 adcv;
|
|
|
adc_cali_current_read(&adcm, &adcv);
|
|
|
float vbus_i = VBUS_VOL(adcv)/Rvbus;
|
|
|
if (cs->vbus_i_invert == INVERT_A) {
|
|
|
@@ -135,5 +141,6 @@ void phase_current_adc_triger(current_samp_t *cs){
|
|
|
adc_config_trigger(ADC_TRIGGER_PHASE);
|
|
|
adc_phase_inserted_config(cs->sector);
|
|
|
}
|
|
|
+ adc_enable_ext_trigger();
|
|
|
}
|
|
|
|