Broken spark implementation
This commit is contained in:
@@ -4,9 +4,9 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#include "cmsis_os2.h"
|
||||
#include "global_state.h"
|
||||
#include "macros.h"
|
||||
#include "main.h"
|
||||
#include "global_state.h"
|
||||
#include "ring_buffer.h"
|
||||
#include "tasks.h"
|
||||
|
||||
@@ -18,10 +18,10 @@ void camHandler(void *argument) {
|
||||
ringBufferRead(&state_g.cam_RB, 0));
|
||||
|
||||
// FILTERS
|
||||
if (CAM_TRIGD) {
|
||||
ringBufferRevert(&state_g.cam_RB,1);
|
||||
return;
|
||||
}
|
||||
// if (CAM_TRIGD) {
|
||||
// ringBufferRevert(&state_g.cam_RB,1);
|
||||
// return;
|
||||
// }
|
||||
state_g.cam_state = CAM_TRIGD;
|
||||
state_g.cam_miss_ctr = 0;
|
||||
switch (state_g.sync_state) {
|
||||
|
||||
@@ -24,11 +24,19 @@ void crankHandler(void *argument) {
|
||||
DEBUG_LOG("Crank pulse detected at: %lu\n\r",
|
||||
ringBufferRead(&state_g.crank_RB, 0));
|
||||
// FILTER
|
||||
float delta_percentage = ((float)(D1A - D1B)) / D1B;
|
||||
if (delta_percentage > 0.4 || delta_percentage < -0.4) {
|
||||
state_g.sync_state = SYNC_NOT_OK;
|
||||
state_g.crank_state = CYCLE_UNKNOWN;
|
||||
continue;
|
||||
if (state_g.sync_state == SYNC_OK) {
|
||||
uint32_t d1a = CRANK(0) - CRANK(1);
|
||||
uint32_t d1b = CRANK(1) - CRANK(2);
|
||||
int32_t delta_percentage =
|
||||
((int64_t)d1a - (int64_t)d1b) * 100 / (int64_t)d1b;
|
||||
DEBUG_LOG("%ld\n\r", delta_percentage);
|
||||
if (delta_percentage > 40 || delta_percentage < -40) {
|
||||
// state_g.sync_state = SYNC_NOT_OK;
|
||||
// state_g.crank_state = CYCLE_UNKNOWN;
|
||||
// ringBufferRevert(&state_g.crank_RB, 1);
|
||||
state_g.crank_RB.w_head -= 1;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// INCREMENT SWITCH
|
||||
switch (state_g.crank_state) {
|
||||
@@ -71,19 +79,39 @@ void crankHandler(void *argument) {
|
||||
}
|
||||
|
||||
// SPARK SCHEDULE
|
||||
if (state_g.crank_state == CYCLE_COMPRESSION &&
|
||||
state_g.sync_state == SYNC_OK) {
|
||||
DEBUG_LOG("Spark schedule reached, congrats\n\r");
|
||||
uint32_t d1a = CRANK(0) - CRANK(1);
|
||||
// TODO: Map interpolation rather than SPARK_ADVANCE CONSTANT
|
||||
uint32_t d_spark = d1a * (45 - SPARK_ADVANCE) / 180;
|
||||
uint32_t t_spark = CRANK(0) + d_spark;
|
||||
// TODO: schedule spark
|
||||
// __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_3, t_spark);
|
||||
// TIM2_CH3_SetOCMode(t_spark);
|
||||
} else if (state_g.crank_state == CYCLE_EXHAUST) {
|
||||
uint32_t t_injection = CRANK(0) + (45+INJECTION_PHASE) * (CRANK(4) - CRANK(0)) / 720;
|
||||
//TODO Schedule injection
|
||||
if (state_g.sync_state == SYNC_OK) {
|
||||
switch (state_g.crank_state) {
|
||||
case CYCLE_COMPRESSION: {
|
||||
DEBUG_LOG("Spark schedule reached, congrats\n\r");
|
||||
uint32_t d1a = CRANK(0) - CRANK(1);
|
||||
// TODO: Map interpolation rather than SPARK_ADVANCE CONSTANT
|
||||
uint32_t d_spark = d1a * (45 - SPARK_ADVANCE) / 180;
|
||||
uint32_t t_spark = CRANK(0) + d_spark;
|
||||
// TODO: schedule spark
|
||||
if (state_g.current_spark_state != SPARK_CHARGING) {
|
||||
uint32_t force_charge_time = __HAL_TIM_GET_COUNTER(&htim2) + 2000;
|
||||
// TIM2_CH3_SetOCMode(TIM_OCMODE_ACTIVE);
|
||||
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_3, force_charge_time);
|
||||
|
||||
state_g.next_spark_state = SPARK_CHARGING;
|
||||
osThreadFlagsWait(0x02, osFlagsWaitAny, osWaitForever);
|
||||
}
|
||||
DEBUG_LOG("Spark scheduled for: %lu , current time: %lu\n\r", t_spark,
|
||||
__HAL_TIM_GET_COUNTER(&htim2));
|
||||
// TIM2_CH3_SetOCMode(TIM_OCMODE_INACTIVE);
|
||||
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_3, t_spark);
|
||||
state_g.next_spark_state = SPARK_IDLE;
|
||||
break;
|
||||
}
|
||||
case CYCLE_EXHAUST: {
|
||||
uint32_t t_injection =
|
||||
CRANK(0) + (45 + INJECTION_PHASE) * (CRANK(4) - CRANK(0)) / 720;
|
||||
// TODO: Schedule injection
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user