Browse Source

加入v3后,调整adc的代码

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 3 years ago
parent
commit
40123a36f9

+ 90 - 48
Applications/bsp/adc.c

@@ -6,14 +6,56 @@
 #include "math/fast_math.h"
 
 #define REG_CHAN_DMA 1
-
 #ifdef REG_CHAN_DMA
 #ifndef CONFIG_BOARD_MCXXX
 #define ADC01_NUM 7
 #define ADC2_NUM 0
-#else
+
+#define VBUS_V_BUFF_IDX 0
+#define THROTTLE_BUFF_IDX 1
+#define U_VOL_BUFF_IDX 2
+#define V_VOL_BUFF_IDX 3
+#define W_VOL_BUFF_IDX 4
+#define MOS_TEMP_BUFF_IDX 5
+#define MOTOR_TEMP_BUFF_IDX 6
+
+#elif (CONFIG_HW_VERSION==2)
 #define ADC01_NUM (8)
 #define ADC2_NUM 4
+
+#define MOS_TEMP_BUFF_IDX 0
+#define VREF5v_BUFF_IDX 1
+#define VBUS_I_BUFF_IDX 2
+#define U_VOL_BUFF_IDX 3
+#define V_VOL_BUFF_IDX 4
+#define W_VOL_BUFF_IDX 5
+#define VREF_BUFF_IDX 7
+
+#define VBUS_V_BUFF_IDX 8
+#define ACC_V_BUFF_IDX 9
+#define THROTTLE_BUFF_IDX 10
+#define MOTOR_TEMP_BUFF_IDX 11
+
+#elif (CONFIG_HW_VERSION==3)
+#define ADC01_NUM (12)
+#define ADC2_NUM 5
+
+#define MOS_TEMP_BUFF_IDX 0
+#define MOTOR_TEMP_BUFF_IDX 1
+#define THROTTLE_BUFF_IDX 2
+#define THROTTLE2_BUFF_IDX 3
+#define THROTTLE_5V_BUFF_IDX 5
+#define THROTTLE2_5V_BUFF_IDX 6
+#define U_VOL_BUFF_IDX 7
+#define VREF_BUFF_IDX 9
+#define VREF5v_BUFF_IDX 11
+
+#define VBUS_V_BUFF_IDX 12
+#define ACC_V_BUFF_IDX 13
+#define VBUS_I_BUFF_IDX 14
+#define V_VOL_BUFF_IDX 15
+#define W_VOL_BUFF_IDX 16
+
 #endif
 #define REG_CHAN_NUM (ADC01_NUM + ADC2_NUM)
 s16 adc_buffer[REG_CHAN_NUM];
@@ -121,11 +163,9 @@ static void adc0_init(void){
 	adc_regular_channel_config(ADC0, 4, W_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
 	adc_regular_channel_config(ADC0, 5, MOS_TEMP_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
 	adc_regular_channel_config(ADC0, 6, MOTOR_TEMP_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
-#else
+#elif (CONFIG_HW_VERSION==2)
 	adc_regular_channel_config(ADC0, 0, MOS_TEMP_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
-#ifdef MOS_TEMP1_ADC_CHAN
 	adc_regular_channel_config(ADC0, 1, MOS_TEMP1_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
-#endif
 	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);
@@ -134,6 +174,21 @@ static void adc0_init(void){
 	adc_regular_channel_config(ADC0, 7, ADC_CHANNEL_17, ADC_REGCHAN_SAMPLE_TIME);
 	adc_tempsensor_vrefint_enable();
 	adc_buffer[7] = VREF_ADC_DATA; //1.21/3.3*4095
+#elif (CONFIG_HW_VERSION==3)
+	adc_regular_channel_config(ADC0, 0, MOS_TEMP_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+	adc_regular_channel_config(ADC0, 1, MOTOR_TEMP_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+	adc_regular_channel_config(ADC0, 2, THROTTLE_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+	adc_regular_channel_config(ADC0, 3, THROTTLE2_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+	adc_regular_channel_config(ADC0, 4, ZERO_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME); //insert zero vol
+	adc_regular_channel_config(ADC0, 5, THROTTLE_5V_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+	adc_regular_channel_config(ADC0, 6, THROTTLE2_5V_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+	adc_regular_channel_config(ADC0, 7, U_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+	adc_regular_channel_config(ADC0, 8, ZERO_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME); //insert zero vol
+	adc_regular_channel_config(ADC0, 9, ADC_CHANNEL_17, ADC_REGCHAN_SAMPLE_TIME); //mcu内部vref
+	adc_regular_channel_config(ADC0, 10, ZERO_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME); //insert zero vol
+	adc_regular_channel_config(ADC0, 11, DC5V_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+	adc_tempsensor_vrefint_enable();
+	adc_buffer[7] = VREF_ADC_DATA; //1.21/3.3*4095
 #endif
 #endif
     /* configure ADC regular channel trigger */
@@ -219,11 +274,19 @@ static void adc2_init(void){
 
 #ifdef REG_CHAN_DMA
     /* configure ADC regular channel */
-    adc_channel_length_config(ADC2, ADC_REGULAR_CHANNEL, ADC2_NUM);
+	 adc_channel_length_config(ADC2, ADC_REGULAR_CHANNEL, ADC2_NUM);
+#if (CONFIG_HW_VERSION==2)
     adc_regular_channel_config(ADC2, 0, VBUS_V_CHAN, ADC_REGCHAN_SAMPLE_TIME);
 	adc_regular_channel_config(ADC2, 1, ACC_V_CHAN, ADC_REGCHAN_SAMPLE_TIME);
     adc_regular_channel_config(ADC2, 2, THROTTLE_CHAN, ADC_REGCHAN_SAMPLE_TIME);
 	adc_regular_channel_config(ADC2, 3, MOTOR_TEMP_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+#elif (CONFIG_HW_VERSION==3)
+	adc_regular_channel_config(ADC2, 0, VBUS_V_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+	adc_regular_channel_config(ADC2, 1, ACC_V_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+	adc_regular_channel_config(ADC2, 2, VBUS_I_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+	adc_regular_channel_config(ADC2, 3, V_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+	adc_regular_channel_config(ADC2, 4, W_VOL_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
+#endif
 #endif
     /* configure ADC regular channel trigger */
     adc_external_trigger_source_config(ADC2, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
@@ -347,9 +410,9 @@ void adc_set_5vref_calc(float v) {
 
 #define VREF_COMP_LFP_CEOF (0.0001F)
 static float vref_compestion_filter = 1.0f;
-#define VREF_COMPESTION() (vref_adc/(float)adc_buffer[7])
+#define VREF_3V3_COMPESTION() (vref_adc/(float)adc_buffer[VREF_BUFF_IDX])
 void adc_3v3ref_filter(void) {
-	float value = VREF_COMPESTION();
+	float value = VREF_3V3_COMPESTION();
 	LowPass_Filter(vref_compestion_filter, value, VREF_COMP_LFP_CEOF);
 }
 
@@ -358,7 +421,7 @@ float adc_vref_compesion(void) {
 }
 
 static float vref_5v_compestion_filter = 1.0f;
-#define VREF_5V_COMPESTION() (vref_5v_adc/(float)adc_buffer[1])
+#define VREF_5V_COMPESTION() (vref_5v_adc/(float)adc_buffer[VREF5v_BUFF_IDX])
 void adc_5vref_filter(void) {
 	float value = VREF_5V_COMPESTION();
 	LowPass_Filter(vref_5v_compestion_filter, value, VREF_COMP_LFP_CEOF);
@@ -374,16 +437,12 @@ void adc_vref_filter(void) {
 }
 
 u16 adc_get_vbus(void) {
-#ifdef CONFIG_BOARD_MCXXX
-	return (float)adc_buffer[ADC01_NUM + 0] * VREF_COMPESTION();
-#else
-	return adc_buffer[0];
-#endif
+	return (float)adc_buffer[VBUS_V_BUFF_IDX] * VREF_3V3_COMPESTION();
 }
 
 u16 adc_get_acc(void) {
 #ifdef CONFIG_BOARD_MCXXX
-	return (float)adc_buffer[ADC01_NUM + 1] * VREF_COMPESTION();
+	return (float)adc_buffer[ACC_V_BUFF_IDX] * VREF_3V3_COMPESTION();
 #else
 	return adc_get_vbus();
 #endif
@@ -391,61 +450,44 @@ u16 adc_get_acc(void) {
 
 u16 adc_get_ibus(void) {
 #ifdef CONFIG_BOARD_MCXXX
-	return (float)adc_buffer[2] * VREF_5V_COMPESTION();
+	return (float)adc_buffer[VBUS_I_BUFF_IDX] * VREF_5V_COMPESTION();
 #else
 	return 0;
 #endif
 }
 
 u16 adc_get_throttle(void) {
-#ifdef CONFIG_BOARD_MCXXX
-	return adc_buffer[ADC01_NUM + 2] * VREF_COMPESTION();
-#else
-	return adc_buffer[1];
-#endif
+	return adc_buffer[THROTTLE_BUFF_IDX] * VREF_3V3_COMPESTION();
 }
 
 void adc_get_uvw_phaseV(u16 *uvw) {
-	int offset = 0;
-#ifdef CONFIG_BOARD_MCXXX
-	offset = 1;
-#endif
-	uvw[0] = adc_buffer[2 + offset];
-	uvw[1] = adc_buffer[3 + offset];
-	uvw[2] = adc_buffer[4 + offset];
+	uvw[0] = adc_buffer[U_VOL_BUFF_IDX];
+	uvw[1] = adc_buffer[V_VOL_BUFF_IDX];
+	uvw[2] = adc_buffer[W_VOL_BUFF_IDX];
 }
 
 u16 adc_get_mos_temp(void) {
-#ifdef CONFIG_BOARD_MCXXX
-	return adc_buffer[0];
-#else
-	return adc_buffer[5];
-#endif
+	return adc_buffer[MOS_TEMP_BUFF_IDX];
 }
 
-u16 adc_get_mos_temp2(void) {
-#ifdef CONFIG_BOARD_MCXXX
-	return adc_buffer[1];
-#else
-	return adc_get_mos_temp();
-#endif
+u16 adc_get_motor_temp(void) {
+	return adc_buffer[MOTOR_TEMP_BUFF_IDX];
 }
 
-
-u16 adc_get_motor_temp(void) {
+u16 adc_get_vref(void) {
 #ifdef CONFIG_BOARD_MCXXX
-	return adc_buffer[ADC01_NUM + 3];
+	return adc_buffer[VREF_BUFF_IDX];
 #else
-	return adc_buffer[6];
+	return 0;
 #endif
 }
 
-u16 adc_get_vref(void) {
-	return adc_buffer[7];
-}
-
 u16 adc_get_5v_ref(void) {
-	return adc_buffer[1];
+#ifdef CONFIG_BOARD_MCXXX
+	return adc_buffer[VREF5v_BUFF_IDX];
+#else
+	return 0;
+#endif
 }
 
 void adc_start_convert(void) {

+ 0 - 1
Applications/bsp/adc.h

@@ -170,7 +170,6 @@ u16 adc_get_acc(void);
 u16 adc_get_throttle(void);
 void adc_get_uvw_phaseV(u16 *uvw);
 u16 adc_get_mos_temp(void);
-u16 adc_get_mos_temp2(void);
 u16 adc_get_motor_temp(void);
 u16 adc_get_ibus(void);
 u16 adc_get_vref(void);

+ 6 - 1
Applications/bsp/board_mc105_v3.h

@@ -182,7 +182,6 @@
 #define THROTTLE_5V_ADC_PIN 		GPIO_PIN_6
 #define THROTTLE_5V_ADC_RCU 		RCU_GPIOA
 #define THROTTLE_5V_ADC_MODE 	GPIO_MODE_AIN
-#define THROTTLE_5V_VOL_CEOF 		(ADC_REFERENCE_VOLTAGE*(15.1f/10.0f)/ADC_FULL_MAX)
 
 /* 第二路供电5V电压采集 */
 #define THROTTLE2_5V_CHAN           	ADC_CHANNEL_9
@@ -219,6 +218,12 @@
 #define DC5V_ADC_RCU 	RCU_GPIOA
 #define DC5V_ADC_MODE 	GPIO_MODE_AIN
 
+/* 0v电压采集,主要是用来给上一次的采集放电 */
+#define ZERO_ADC_CHAN     ADC_CHANNEL_13 //adc012
+#define ZERO_ADC_GROUP 	GPIOC
+#define ZERO_ADC_PIN 	GPIO_PIN_3
+#define ZERO_ADC_RCU 	RCU_GPIOC
+#define ZERO_ADC_MODE 	GPIO_MODE_AIN
 
 /* 刹车手把输入 */
 #define GPIO_BRAKE_IN_GROUP 	GPIOB

+ 1 - 0
Applications/bsp/bsp.h

@@ -68,6 +68,7 @@
 #include "bsp/board_mc100_v1.h"
 #define CONFIG_BOARD_MCXXX
 #define CONFIG_BOARD_NAME "MC100"
+#define CONFIG_HW_VERSION 2
 #elif defined (MC105_HW_V3)
 #include "bsp/board_mc105_v3.h"
 #define CONFIG_BOARD_MCXXX

+ 0 - 22
Applications/foc/samples.c

@@ -32,10 +32,6 @@ static samples_t motor_temp;
 #ifdef MOS_TEMP_ADC_CHAN
 static samples_t mos_temp;
 #endif
-#undef MOS_TEMP1_ADC_CHAN
-#ifdef MOS_TEMP1_ADC_CHAN
-static samples_t mos_temp1;
-#endif
 #ifdef ACC_V_CHAN
 static samples_t acc_vol;
 #endif
@@ -82,11 +78,6 @@ void samples_init(void){
 	mos_temp.lowpass = 0.01f;
 	sample_mos_temp();
 #endif
-#ifdef MOS_TEMP1_ADC_CHAN
-	mos_temp1.value = mos_temp1.filted_value = 0;
-	mos_temp1.lowpass = 0.01f;
-	sample_mos_temp();
-#endif
 #ifdef VBUS_I_CHAN
 	_ibus.value = _ibus.filted_value = 0;
 	_ibus.lowpass = 0.01f;
@@ -134,13 +125,6 @@ s16 get_motor_temp(void) {
 s16 get_mos_temp(void) {
 	return mos_temp.filted_value;
 }
-s16 get_mos_temp2(void) {
-#ifdef MOS_TEMP1_ADC_CHAN
-	return mos_temp1.filted_value;
-#else
-	return get_mos_temp();
-#endif
-}
 
 float get_throttle_float(void) {
 #ifdef THROTTLE_CHAN
@@ -238,12 +222,6 @@ void sample_mos_temp(void) {
 	u16 r = MOS_TEMP_R(adc);
 	mos_temp.value = ntc_get_mos_temp(r);
 	LowPass_Filter(mos_temp.filted_value, mos_temp.value, mos_temp.lowpass);
-#ifdef MOS_TEMP1_ADC_CHAN
-	adc = adc_get_mos_temp2();
-	r = MOS_TEMP_R(adc);
-	mos_temp1.value = ntc_get_mos_temp(r);
-	LowPass_Filter(mos_temp1.filted_value, mos_temp1.value, mos_temp1.lowpass);
-#endif
 #endif
 }
 

+ 1 - 1
Applications/prot/can_foc_msg.c

@@ -85,7 +85,7 @@ void can_report_foc_status(u8 can) {
 	u32 errMask = mc_get_critical_error();
 	encode_u32(data + 3, errMask);
 	encode_s16(data + 7, get_motor_temp());
-	encode_s16(data + 9, MAX(get_mos_temp(), get_mos_temp2()));
+	encode_s16(data + 9, get_mos_temp());
 	encode_u32(data + 11, shark_get_seconds());
 	can_send_message(get_indicator_can_id(can), data, sizeof(data), 0);
 }

+ 2 - 2
Project/MC105_V3.uvoptx

@@ -73,11 +73,11 @@
         <LExpSel>0</LExpSel>
       </OPTXL>
       <OPTFL>
-        <tvExp>0</tvExp>
+        <tvExp>1</tvExp>
         <tvExpOptDlg>0</tvExpOptDlg>
         <IsCurrentTarget>1</IsCurrentTarget>
       </OPTFL>
-      <CpuCode>0</CpuCode>
+      <CpuCode>255</CpuCode>
       <DebugOpt>
         <uSim>0</uSim>
         <uTrg>1</uTrg>