Browse Source

1. ADC注入通道采样时间修改为28 cycle
2. ADC规则组采样时间修改为239 cycle
3. 去掉硬件过采样处理
4. 软件过采样重新调整

Signed-off-by: huhui <huhui@sharkgulf.com>

huhui 3 years ago
parent
commit
3d66399914
4 changed files with 33 additions and 24 deletions
  1. 13 8
      Applications/bsp/adc.c
  2. 17 13
      Applications/bsp/adc.h
  3. 2 2
      Applications/bsp/board_mc100_v1.h
  4. 1 1
      Applications/bsp/bsp.h

+ 13 - 8
Applications/bsp/adc.c

@@ -119,10 +119,10 @@ static void adc0_init(void){
 #else
 #else
 	adc_regular_channel_config(ADC0, 0, MOS_TEMP_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
 	adc_regular_channel_config(ADC0, 0, MOS_TEMP_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
 	adc_regular_channel_config(ADC0, 1, MOS_TEMP1_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
 	adc_regular_channel_config(ADC0, 1, MOS_TEMP1_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
-	adc_regular_channel_config(ADC0, 2, U_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
-	adc_regular_channel_config(ADC0, 3, V_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
-	adc_regular_channel_config(ADC0, 4, W_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
-	adc_regular_channel_config(ADC0, 5, VBUS_I_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+	adc_regular_channel_config(ADC0, 2, VBUS_I_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+	adc_regular_channel_config(ADC0, 3, U_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+	adc_regular_channel_config(ADC0, 4, V_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+	adc_regular_channel_config(ADC0, 5, W_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
 #endif
 #endif
 #endif
 #endif
     /* configure ADC regular channel trigger */
     /* configure ADC regular channel trigger */
@@ -151,6 +151,7 @@ static void adc1_init(void){
 	rcu_periph_clock_enable(RCU_ADC1);
 	rcu_periph_clock_enable(RCU_ADC1);
 	adc_deinit(ADC1);
 	adc_deinit(ADC1);
 
 
+	adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE);
 	adc_special_function_config(ADC1, ADC_SCAN_MODE, ENABLE);
 	adc_special_function_config(ADC1, ADC_SCAN_MODE, ENABLE);
 
 
     /* configure ADC data alignment */
     /* configure ADC data alignment */
@@ -343,7 +344,7 @@ u16 adc_get_acc(void) {
 
 
 u16 adc_get_ibus(void) {
 u16 adc_get_ibus(void) {
 #ifdef MC100_HW_V1
 #ifdef MC100_HW_V1
-	return adc_buffer[5];
+	return adc_buffer[2];
 #else
 #else
 	return 0;
 	return 0;
 #endif
 #endif
@@ -358,9 +359,13 @@ u16 adc_get_throttle(void) {
 }
 }
 
 
 void adc_get_uvw_phaseV(u16 *uvw) {
 void adc_get_uvw_phaseV(u16 *uvw) {
-	uvw[0] = adc_buffer[2];
-	uvw[1] = adc_buffer[3];
-	uvw[2] = adc_buffer[4];
+	int offset = 0;
+#ifdef MC100_HW_V1
+	offset = 1;
+#endif
+	uvw[0] = adc_buffer[2 + offset];
+	uvw[1] = adc_buffer[3 + offset];
+	uvw[2] = adc_buffer[4 + offset];
 }
 }
 
 
 u16 adc_get_mos_temp(void) {
 u16 adc_get_mos_temp(void) {

+ 17 - 13
Applications/bsp/adc.h

@@ -13,7 +13,7 @@ inserted ADC 由timer0 ch3触发,
 #define ISQ3_OFFSET 15
 #define ISQ3_OFFSET 15
 #define IL_OFFSET   20
 #define IL_OFFSET   20
 
 
-#define ADC_SAMPLE_TIME ADC_SAMPLETIME_7POINT5
+#define ADC_SAMPLE_TIME ADC_SAMPLETIME_28POINT5
 #define ADC_TRIGGER_PHASE ADC0_1_EXTTRIG_INSERTED_T0_CH3
 #define ADC_TRIGGER_PHASE ADC0_1_EXTTRIG_INSERTED_T0_CH3
 #define ADC_TRIGGER_PHASE2 ADC0_1_EXTTRIG_INSERTED_T1_CH0
 #define ADC_TRIGGER_PHASE2 ADC0_1_EXTTRIG_INSERTED_T1_CH0
 #define ADC_TRIGGER_NONE  ADC0_1_2_EXTTRIG_INSERTED_NONE
 #define ADC_TRIGGER_NONE  ADC0_1_2_EXTTRIG_INSERTED_NONE
@@ -70,22 +70,24 @@ static s32 __inline _adc_avg(s32 *v) {
 }
 }
 #endif
 #endif
 static void __inline adc_phase_current_read(u8 phases, s32 *v1, s32 *v2) {
 static void __inline adc_phase_current_read(u8 phases, s32 *v1, s32 *v2) {
-#ifdef CONFIG_HW_MUTISAMPLE
-	*v1 = ADC_IDATA0(ADC0);
-	*v2 = ADC_IDATA0(ADC1);
-#elif defined (CONFIG_SW_MUTISAMPLE)
+#ifdef HIGH_SIDE_CURRENT_SENSOR
+#ifdef CONFIG_SW_MUTISAMPLE
 	s32 v[4];
 	s32 v[4];
 	v[0] = ADC_IDATA0(ADC0);
 	v[0] = ADC_IDATA0(ADC0);
-	v[1] = ADC_IDATA1(ADC0);
+	v[1] = ADC_IDATA1(ADC1);
 	v[2] = ADC_IDATA2(ADC0);
 	v[2] = ADC_IDATA2(ADC0);
-	v[3] = ADC_IDATA3(ADC0);
+	v[3] = ADC_IDATA3(ADC1);
 	*v1 = _adc_avg(v);
 	*v1 = _adc_avg(v);
 
 
 	v[0] = ADC_IDATA0(ADC1);
 	v[0] = ADC_IDATA0(ADC1);
-	v[1] = ADC_IDATA1(ADC1);
+	v[1] = ADC_IDATA1(ADC0);
 	v[2] = ADC_IDATA2(ADC1);
 	v[2] = ADC_IDATA2(ADC1);
-	v[3] = ADC_IDATA3(ADC1);
+	v[3] = ADC_IDATA3(ADC0);
 	*v2 = _adc_avg(v);
 	*v2 = _adc_avg(v);
+#else
+	*v1 = ADC_IDATA0(ADC0);
+	*v2 = ADC_IDATA0(ADC1);
+#endif
 #else
 #else
 	*v1 = (s32)(*adc_phase_reg1[phases]) ;
 	*v1 = (s32)(*adc_phase_reg1[phases]) ;
 	*v2 = (s32)(*adc_phase_reg2[phases]) ;
 	*v2 = (s32)(*adc_phase_reg2[phases]) ;
@@ -94,12 +96,14 @@ static void __inline adc_phase_current_read(u8 phases, s32 *v1, s32 *v2) {
 
 
 
 
 static void __inline adc_current_sample_config(u8 phases) {
 static void __inline adc_current_sample_config(u8 phases) {
-#ifdef CONFIG_HW_MUTISAMPLE
+#ifdef HIGH_SIDE_CURRENT_SENSOR
+#ifdef CONFIG_SW_MUTISAMPLE
+	ADC_ISQ(ADC0) = ADC_INS_RANK_4_CHANS(V_PHASE_I_CHAN, W_PHASE_I_CHAN, V_PHASE_I_CHAN, W_PHASE_I_CHAN);
+	ADC_ISQ(ADC1) = ADC_INS_RANK_4_CHANS(W_PHASE_I_CHAN, V_PHASE_I_CHAN, W_PHASE_I_CHAN, V_PHASE_I_CHAN);
+#else
 	ADC_ISQ(ADC0) = ADC_RANK_CHANNEL(V_PHASE_I_CHAN);
 	ADC_ISQ(ADC0) = ADC_RANK_CHANNEL(V_PHASE_I_CHAN);
 	ADC_ISQ(ADC1) = ADC_RANK_CHANNEL(W_PHASE_I_CHAN);
 	ADC_ISQ(ADC1) = ADC_RANK_CHANNEL(W_PHASE_I_CHAN);
-#elif defined (CONFIG_SW_MUTISAMPLE)
-	ADC_ISQ(ADC0) = ADC_INS_RANK_4_CHANS(V_PHASE_I_CHAN, V_PHASE_I_CHAN, V_PHASE_I_CHAN, V_PHASE_I_CHAN);
-	ADC_ISQ(ADC1) = ADC_INS_RANK_4_CHANS(W_PHASE_I_CHAN, W_PHASE_I_CHAN, W_PHASE_I_CHAN, W_PHASE_I_CHAN);
+#endif
 #else
 #else
 	ADC_ISQ(ADC0) = adc0_rank_channels[phases];
 	ADC_ISQ(ADC0) = adc0_rank_channels[phases];
 	ADC_ISQ(ADC1) = adc1_rank_channels[phases];
 	ADC_ISQ(ADC1) = adc1_rank_channels[phases];

+ 2 - 2
Applications/bsp/board_mc100_v1.h

@@ -114,8 +114,8 @@
 
 
 //#define CONFIG_PWM_UV_SWAP 1
 //#define CONFIG_PWM_UV_SWAP 1
 
 
-#define CONFIG_HW_MUTISAMPLE ADC_OVERSAMPLING_RATIO_MUL4
-#define CONFIG_HW_MUTISAMPLE_SHIFT ADC_OVERSAMPLING_SHIFT_2B
+//#define CONFIG_HW_MUTISAMPLE ADC_OVERSAMPLING_RATIO_MUL2
+//#define CONFIG_HW_MUTISAMPLE_SHIFT ADC_OVERSAMPLING_SHIFT_1B
 //#define CONFIG_SW_MUTISAMPLE 1
 //#define CONFIG_SW_MUTISAMPLE 1
 
 
 /* 母线电压采集 */
 /* 母线电压采集 */

+ 1 - 1
Applications/bsp/bsp.h

@@ -27,7 +27,7 @@
 
 
 #define FOC_CTRL_US (1.0f/(float)FOC_PWM_FS)
 #define FOC_CTRL_US (1.0f/(float)FOC_PWM_FS)
 
 
-#define ADC_REGCHAN_SAMPLE_TIME ADC_SAMPLETIME_28POINT5
+#define ADC_REGCHAN_SAMPLE_TIME ADC_SAMPLETIME_239POINT5
 #define ADC_TRIG_CONV_LATENCY_CYCLES 12.5f
 #define ADC_TRIG_CONV_LATENCY_CYCLES 12.5f
 #define ADC_SAMPLING_CYCLES 13.5f
 #define ADC_SAMPLING_CYCLES 13.5f