Просмотр исходного кода

加入母线电流采集的offset校准

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 3 лет назад
Родитель
Сommit
235a9ff9f0
3 измененных файлов с 13 добавлено и 2 удалено
  1. 4 1
      Applications/foc/motor/motor.c
  2. 8 1
      Applications/foc/samples.c
  3. 1 0
      Applications/foc/samples.h

+ 4 - 1
Applications/foc/motor/motor.c

@@ -41,13 +41,16 @@ static motor_t motor = {
 
 static void MC_Check_MosVbusThrottle(void) {
 	int count = 1000;
+	float ibus_adc = 0;
 	gpio_phase_u_detect(true);
-	while(count-- >= 0) {
+	while(count-- > 0) {
 		task_udelay(20);
 		sample_uvw_phase();
 		sample_throttle();
 		sample_vbus();
+		ibus_adc += adc_get_ibus();
 	}
+	sample_ibus_offset(ibus_adc/1000.0f);
 	gpio_phase_u_detect(false);
 	float abc[3];
 	get_phase_vols(abc);

+ 8 - 1
Applications/foc/samples.c

@@ -13,6 +13,7 @@ typedef struct {
 	float value;
 	float filted_value;
 	int   filted_int;
+	u16   adc_offset;
 	float lowpass;
 }samples_t;
 
@@ -167,12 +168,18 @@ void sample_vbus(void){
 
 void sample_ibus(void) {
 #ifdef VBUS_I_CHAN
-	s16 vadc = adc_get_ibus();
+	s16 vadc = adc_get_ibus() - _ibus.adc_offset;
 	_ibus.value = (float)vadc * VBUS_I_CEOF;
 	LowPass_Filter(_ibus.filted_value, _ibus.value, _ibus.lowpass);
 #endif
 }
 
+void sample_ibus_offset(u16 offset) {
+#ifdef VBUS_I_CHAN
+	_ibus.adc_offset = offset;
+#endif
+}
+
 void sample_throttle(void){
 #ifdef THROTTLE_CHAN
 	s16 vadc = adc_get_throttle();

+ 1 - 0
Applications/foc/samples.h

@@ -21,6 +21,7 @@ s16 get_mos_temp(void);
 int get_acc_vol(void);
 s16 get_mos_temp2(void);
 float get_vbus_current(void);
+void sample_ibus_offset(u16 offset);
 
 #endif /* _SAMPLES_H__ */