Skip to content

Commit 325cfe2

Browse files
committed
Filter and Gauge Gain implemented as C4 and C5 parameter
1 parent 194bb41 commit 325cfe2

File tree

7 files changed

+37
-18
lines changed

7 files changed

+37
-18
lines changed

.cproject

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@
240240
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
241241
<storageModule moduleId="scannerConfiguration">
242242
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
243-
<scannerConfigBuildInfo instanceId="fr.ac6.managedbuild.config.gnu.cross.exe.debug.2137842050;fr.ac6.managedbuild.config.gnu.cross.exe.debug.2137842050.;fr.ac6.managedbuild.tool.gnu.cross.c.compiler.534950749;fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c.641220284">
243+
<scannerConfigBuildInfo instanceId="fr.ac6.managedbuild.config.gnu.cross.exe.debug.256937461;fr.ac6.managedbuild.config.gnu.cross.exe.debug.256937461.;fr.ac6.managedbuild.tool.gnu.cross.c.compiler.739920956;fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c.1911422534">
244244
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
245245
</scannerConfigBuildInfo>
246246
</storageModule>

.settings/language.settings.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
66
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
77
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
8-
<provider class="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" console="false" env-hash="82508738073283839" id="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="Ac6 SW4 STM32 MCU Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
8+
<provider class="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" console="false" env-hash="1712418860116272036" id="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="Ac6 SW4 STM32 MCU Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
99
<language-scope id="org.eclipse.cdt.core.gcc"/>
1010
<language-scope id="org.eclipse.cdt.core.g++"/>
1111
</provider>
@@ -16,7 +16,7 @@
1616
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
1717
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
1818
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
19-
<provider class="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" console="false" env-hash="82508738073283839" id="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="Ac6 SW4 STM32 MCU Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
19+
<provider class="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" console="false" env-hash="1712418860116272036" id="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="Ac6 SW4 STM32 MCU Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
2020
<language-scope id="org.eclipse.cdt.core.gcc"/>
2121
<language-scope id="org.eclipse.cdt.core.g++"/>
2222
</provider>

Inc/config.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#define CALIB_GAUGE 1 // calibration factor for DMS-Torque, better value not known :-)
1212
#define CALIB_EXT_TORQUE 3 // calibration factor for DMS-Torque, better value not known :-)
1313
#define CALIB_REGEN 64 //calibration factor for regen
14-
#define FILTER 4 //average from 2^x samples
14+
1515

1616
#define THROTTLE_MIN 640
1717
#define THROTTLE_MAX 3450

Inc/display_kunteng.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ typedef struct _lcd_configuration_variables
2424
uint8_t ui8_controller_max_current;
2525
uint8_t ui8_C1;
2626
uint8_t ui8_C2;
27+
uint8_t ui8_C4;
28+
uint8_t ui8_C5;
2729
uint8_t ui8_P2;
2830
uint8_t ui8_P3;
2931
uint8_t ui8_P4;

Inc/main.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ typedef struct
100100
uint8_t Gauge_Ext_Torq_Flag;
101101
uint8_t MotorTemperature;
102102
uint8_t Assist_Level;
103+
uint8_t Filter;
103104
uint16_t Min_Voltage;
104105
uint16_t Max_Voltage;
105106

Src/display_kunteng.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ uint8_t ui8_Initial_Max_Speed=0;
2828
uint8_t ui8_Initial_Wheel_Size=0;
2929
uint8_t ui8_Initial_Number_of_cells=0;
3030
uint8_t ui8_Initial_Battery_Current_Max=0;
31+
uint8_t ui8_Initial_Gauge_Gain=0;
3132
uint16_t ui16_wheel_circumference = 2200;
3233
uint8_t ui8_Number_of_Cells[6]={10,13,0,0,0,0};
3334
uint16_t ui16_Battery_Current_Max[8]={10000,12000,14000,16000,18000,20000,25000,30000};
@@ -177,11 +178,14 @@ void check_message(MotorState_t* MS_D)
177178
lcd_configuration_variables.ui8_controller_max_current = (ui8_rx_buffer [7] & 15); //unterste 4 Bits nach https://endless-sphere.com/forums/download/file.php?id=197184
178179
lcd_configuration_variables.ui8_C1 = ((ui8_rx_buffer [6]>>3) & 7); //Bit 3,4,5
179180
lcd_configuration_variables.ui8_C2 = ((ui8_rx_buffer [6]) & 7); //Bit 0,1,2
181+
lcd_configuration_variables.ui8_C4 = (ui8_rx_buffer[8] & 0xE0) >> 5;
182+
lcd_configuration_variables.ui8_C5 = (ui8_rx_buffer[7] & 0x0F);
180183
MS_D->Assist_Level=lcd_configuration_variables.ui8_assist_level;
181184
MS_D->Gauge_Factor=lcd_configuration_variables.ui8_motor_characteristic;
182185
MS_D->Regen_Factor=lcd_configuration_variables.ui8_C1;
183186
MS_D->Gauge_Ext_Torq_Flag=lcd_configuration_variables.ui8_P3;
184187
MS_D->Throttle_Function=lcd_configuration_variables.ui8_P4;
188+
MS_D->Filter=lcd_configuration_variables.ui8_C4+4;
185189
if(lcd_configuration_variables.ui8_light){
186190
HAL_GPIO_WritePin(Light_GPIO_Port, Light_Pin, GPIO_PIN_SET);
187191
}
@@ -196,6 +200,7 @@ void check_message(MotorState_t* MS_D)
196200
ui8_Initial_Number_of_cells = lcd_configuration_variables.ui8_P2;
197201
ui8_Initial_Battery_Current_Max = lcd_configuration_variables.ui8_C2;
198202
ui16_wheel_circumference = GetWheelCircumference(lcd_configuration_variables.ui8_wheel_size);
203+
ui8_Initial_Gauge_Gain=lcd_configuration_variables.ui8_C5;
199204
SetVoltagePercentage(lcd_configuration_variables.ui8_P2);
200205
MS_D->Min_Voltage=ui8_Number_of_Cells[ui8_Initial_Number_of_cells]*3300; //min Voltage per cell 3.3V = 3300 mV
201206
MS_D->Max_Voltage=ui8_Number_of_Cells[ui8_Initial_Number_of_cells]*4100;
@@ -214,6 +219,11 @@ void check_message(MotorState_t* MS_D)
214219
Send_CAN_Command(REG_MOTOR_GEOMETRY_CIRC_LO, (ui16_wheel_circumference & 0xFF));
215220
ui8_Initial_Wheel_Size = lcd_configuration_variables.ui8_wheel_size;
216221
}
222+
if(ui8_Initial_Gauge_Gain != lcd_configuration_variables.ui8_C5){
223+
Send_CAN_Command(REG_MOTOR_PROTECT_UNLOCK , MOTOR_PROTECT_UNLOCK_KEY);
224+
Send_CAN_Command(REG_MOTOR_TORQUE_GAUGE_GAIN, (uint16_t)lcd_configuration_variables.ui8_C5*255/10);
225+
ui8_Initial_Gauge_Gain=lcd_configuration_variables.ui8_C5;
226+
}
217227
if(ui8_Initial_Battery_Current_Max != lcd_configuration_variables.ui8_C2){
218228
Send_CAN_Command(REG_MOTOR_PROTECT_UNLOCK , MOTOR_PROTECT_UNLOCK_KEY);
219229
Send_CAN_Command(REG_MOTOR_CONFIG_MAX_DISCHARGE_HI, (ui16_Battery_Current_Max[lcd_configuration_variables.ui8_C2]>>8));

Src/main.c

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -187,19 +187,14 @@ int main(void)
187187
}
188188
HAL_Delay(200);
189189

190-
Send_CAN_Command(REG_MOTOR_PROTECT_UNLOCK,MOTOR_PROTECT_UNLOCK_KEY);
191-
Send_CAN_Command(REG_MOTOR_TORQUE_GAUGE_GAIN,30); // 30=neuer Gauge_Gain
192-
ui16_Gauge_Gain=0;
193-
Send_CAN_Request(REG_MOTOR_TORQUE_GAUGE_GAIN); // Gauge_Gain abfragen, nur zur Kontrolle
194-
ui16_Gauge_Gain=RxData[3];
195-
196190
MS.Gauge_Ext_Torq_Flag = 1; //set torque source to external BB-sensor by default. Is overwritten by KT-LCD setting of P3 at runtime.
197-
MS.Assist_Level = 1; //set Assistlevel to 3 as default value
191+
MS.Assist_Level = 3; //set Assistlevel to 3 as default value
198192
MS.Gauge_Factor = 127; //default for global gain for torque measurement, set by Kunteng Paramter P1 0 ... 255
199-
MS.Regen_Factor = 2; //default regen strenght for brake lever regen
193+
MS.Regen_Factor = 4; //default regen strenght for brake lever regen
200194
MS.Throttle_Function = 0; //Throttle override for power and regen
201-
MS.Min_Voltage = 20000; //minimum Voltage (mV) for 10s pack as default
202-
MS.Max_Voltage = 46000; //maximum Voltage (mV) for 10s pack as default
195+
MS.Min_Voltage = 33000; //minimum Voltage (mV) for 10s pack as default
196+
MS.Max_Voltage = 41500; //maximum Voltage (mV) for 10s pack as default
197+
MS.Filter = 6; //Filter over 64 readings as default.
203198

204199
/* USER CODE END 2 */
205200

@@ -273,7 +268,7 @@ int main(void)
273268
i16_PAS_Duration=i16_PAS_Counter;
274269
i16_PAS_Counter=0;
275270
ui16_Ext_Torque=map(adcData[1],EXT_TORQUE_MIN, EXT_TORQUE_MAX, 0, 1024); //map throttle ADC-value to valid LEVEL range
276-
ui32_Ext_Torque_Cumulated-=ui32_Ext_Torque_Cumulated>>FILTER;
271+
ui32_Ext_Torque_Cumulated-=ui32_Ext_Torque_Cumulated>>MS.Filter;
277272
ui32_Ext_Torque_Cumulated+=ui16_Ext_Torque;
278273

279274
}
@@ -293,10 +288,10 @@ int main(void)
293288
if(!MS.Throttle_Function)i8_Throttle=-i8_Throttle;
294289
}
295290
// if internal Gauge is active (selected by P3), calculate current target form Gauge Value,
296-
else if(MS.Gauge_Ext_Torq_Flag)i16_Current_Target = (CALIB_GAUGE*(i32_Gauge_Torque_cumulated>>FILTER)*MS.Assist_Level*MS.Gauge_Factor)>>7; //normal ride mode
291+
else if(MS.Gauge_Ext_Torq_Flag)i16_Current_Target = (CALIB_GAUGE*(i32_Gauge_Torque_cumulated>>MS.Filter)*MS.Assist_Level*MS.Gauge_Factor)>>7; //normal ride mode
297292
// if external torque sensor is active
298293
else {
299-
i16_Current_Target = (((ui32_Ext_Torque_Cumulated>>FILTER)*MS.Assist_Level*MS.Gauge_Factor)>>CALIB_EXT_TORQUE)/(i16_PAS_Duration*(MS.Speed+1));
294+
i16_Current_Target = (((ui32_Ext_Torque_Cumulated>>MS.Filter)*MS.Assist_Level*MS.Gauge_Factor)>>CALIB_EXT_TORQUE)/(i16_PAS_Duration*(MS.Speed+1));
300295
if(i16_PAS_Counter>PAS_TIMEOUT-1){
301296
i16_Current_Target=0; //Switch off power, if pedals are not turning
302297
if(ui32_Ext_Torque_Cumulated>0)ui32_Ext_Torque_Cumulated--;
@@ -412,6 +407,11 @@ int main(void)
412407

413408
case 4:
414409
Send_CAN_Request(REG_MOTOR_STATUS_POWER_VOLTAGE_LO);
410+
l++;
411+
break;
412+
413+
case 5:
414+
Send_CAN_Request(REG_MOTOR_TORQUE_GAUGE_GAIN);
415415
l=0;
416416
break;
417417
/*
@@ -450,7 +450,7 @@ int main(void)
450450

451451
case REG_MOTOR_TORQUE_GAUGE_VALUE:
452452
i16_Gauge_Torque=RxData[3];
453-
i32_Gauge_Torque_cumulated -= (i32_Gauge_Torque_cumulated>>FILTER); // FILTER = 6 für 1s Zeitkonstante
453+
i32_Gauge_Torque_cumulated -= (i32_Gauge_Torque_cumulated>>MS.Filter); // FILTER = 6 für 1s Zeitkonstante
454454
i32_Gauge_Torque_cumulated += i16_Gauge_Torque;
455455

456456
break;
@@ -501,6 +501,12 @@ int main(void)
501501

502502
break;
503503

504+
case REG_MOTOR_TORQUE_GAUGE_GAIN:
505+
506+
ui16_Gauge_Gain=RxData[3];
507+
508+
break;
509+
504510

505511

506512
}

0 commit comments

Comments
 (0)