|
@@ -6,14 +6,56 @@
|
|
|
#include "math/fast_math.h"
|
|
#include "math/fast_math.h"
|
|
|
|
|
|
|
|
#define REG_CHAN_DMA 1
|
|
#define REG_CHAN_DMA 1
|
|
|
-
|
|
|
|
|
#ifdef REG_CHAN_DMA
|
|
#ifdef REG_CHAN_DMA
|
|
|
#ifndef CONFIG_BOARD_MCXXX
|
|
#ifndef CONFIG_BOARD_MCXXX
|
|
|
#define ADC01_NUM 7
|
|
#define ADC01_NUM 7
|
|
|
#define ADC2_NUM 0
|
|
#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 ADC01_NUM (8)
|
|
|
#define ADC2_NUM 4
|
|
#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
|
|
#endif
|
|
|
#define REG_CHAN_NUM (ADC01_NUM + ADC2_NUM)
|
|
#define REG_CHAN_NUM (ADC01_NUM + ADC2_NUM)
|
|
|
s16 adc_buffer[REG_CHAN_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, 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, 5, MOS_TEMP_ADC_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
adc_regular_channel_config(ADC0, 6, MOTOR_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);
|
|
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);
|
|
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, 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, 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, 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_regular_channel_config(ADC0, 7, ADC_CHANNEL_17, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
adc_tempsensor_vrefint_enable();
|
|
adc_tempsensor_vrefint_enable();
|
|
|
adc_buffer[7] = VREF_ADC_DATA; //1.21/3.3*4095
|
|
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
|
|
|
#endif
|
|
#endif
|
|
|
/* configure ADC regular channel trigger */
|
|
/* configure ADC regular channel trigger */
|
|
@@ -219,11 +274,19 @@ static void adc2_init(void){
|
|
|
|
|
|
|
|
#ifdef REG_CHAN_DMA
|
|
#ifdef REG_CHAN_DMA
|
|
|
/* configure ADC regular channel */
|
|
/* 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, 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, 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, 2, THROTTLE_CHAN, ADC_REGCHAN_SAMPLE_TIME);
|
|
|
adc_regular_channel_config(ADC2, 3, MOTOR_TEMP_ADC_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
|
|
#endif
|
|
|
/* configure ADC regular channel trigger */
|
|
/* configure ADC regular channel trigger */
|
|
|
adc_external_trigger_source_config(ADC2, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);
|
|
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)
|
|
#define VREF_COMP_LFP_CEOF (0.0001F)
|
|
|
static float vref_compestion_filter = 1.0f;
|
|
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) {
|
|
void adc_3v3ref_filter(void) {
|
|
|
- float value = VREF_COMPESTION();
|
|
|
|
|
|
|
+ float value = VREF_3V3_COMPESTION();
|
|
|
LowPass_Filter(vref_compestion_filter, value, VREF_COMP_LFP_CEOF);
|
|
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;
|
|
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) {
|
|
void adc_5vref_filter(void) {
|
|
|
float value = VREF_5V_COMPESTION();
|
|
float value = VREF_5V_COMPESTION();
|
|
|
LowPass_Filter(vref_5v_compestion_filter, value, VREF_COMP_LFP_CEOF);
|
|
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) {
|
|
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) {
|
|
u16 adc_get_acc(void) {
|
|
|
#ifdef CONFIG_BOARD_MCXXX
|
|
#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
|
|
#else
|
|
|
return adc_get_vbus();
|
|
return adc_get_vbus();
|
|
|
#endif
|
|
#endif
|
|
@@ -391,61 +450,44 @@ u16 adc_get_acc(void) {
|
|
|
|
|
|
|
|
u16 adc_get_ibus(void) {
|
|
u16 adc_get_ibus(void) {
|
|
|
#ifdef CONFIG_BOARD_MCXXX
|
|
#ifdef CONFIG_BOARD_MCXXX
|
|
|
- return (float)adc_buffer[2] * VREF_5V_COMPESTION();
|
|
|
|
|
|
|
+ return (float)adc_buffer[VBUS_I_BUFF_IDX] * VREF_5V_COMPESTION();
|
|
|
#else
|
|
#else
|
|
|
return 0;
|
|
return 0;
|
|
|
#endif
|
|
#endif
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
u16 adc_get_throttle(void) {
|
|
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) {
|
|
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) {
|
|
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
|
|
#ifdef CONFIG_BOARD_MCXXX
|
|
|
- return adc_buffer[ADC01_NUM + 3];
|
|
|
|
|
|
|
+ return adc_buffer[VREF_BUFF_IDX];
|
|
|
#else
|
|
#else
|
|
|
- return adc_buffer[6];
|
|
|
|
|
|
|
+ return 0;
|
|
|
#endif
|
|
#endif
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-u16 adc_get_vref(void) {
|
|
|
|
|
- return adc_buffer[7];
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
u16 adc_get_5v_ref(void) {
|
|
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) {
|
|
void adc_start_convert(void) {
|