From b48361f32d2d6a44d29a0b96d66bce0bcade6378 Mon Sep 17 00:00:00 2001 From: der_zaske Date: Wed, 5 Feb 2025 23:56:42 +0100 Subject: [PATCH] fixed mcpwm --- main/app_main.c | 9 +++++---- main/mcpwm.c | 27 +++++++++++++++------------ 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/main/app_main.c b/main/app_main.c index 39770d5..4a09fdb 100755 --- a/main/app_main.c +++ b/main/app_main.c @@ -39,7 +39,7 @@ void app_main(void) bool RFE_Pulled = false; uint16_t menu_counter = 0; float duty = (float)CONFIG_DUTY_PWM; - duty = 75.0; + duty = 15.0; char display_message[50]; // Puffer für die Nachricht bool enc_but_state = false; bool in_menu = false; @@ -50,11 +50,11 @@ void app_main(void) mcpwm_init(); set_mcpwm_output(PHASE_U, PHASE_V, PHASE_W); set_enc_in_counter(menu_counter); - mcpwm_freq = 40000; + mcpwm_freq = 20000; set_mcpwm_duty(duty); set_mcpwm_frequency(mcpwm_freq); set_mcpwm_output(PHASE_U, PHASE_W, PHASE_V); - + //gpio_set_level(CONFIG_HIN_V_GPIO, 1); while (1) { //ssd1306_clear_screen(dev_pt, false); @@ -77,7 +77,8 @@ void app_main(void) RFE_Pulled = !(gpio_get_level(CONFIG_RFE_GPIO)); - get_enc_in_counter(); + duty = get_enc_in_counter(); + set_mcpwm_duty(duty); //Current_bridge = get_current_bridge(adc1_handle, CONFIG_I_SENSE_ADC); //gpio_set_level(CONFIG_LIN_U_GPIO,1); diff --git a/main/mcpwm.c b/main/mcpwm.c index 4b34a54..3ad1505 100755 --- a/main/mcpwm.c +++ b/main/mcpwm.c @@ -67,7 +67,7 @@ void mcpwm_init(){ mcpwm_sync_handle_t sync_signal = NULL; mcpwm_timer_sync_src_config_t sync_src_config = { - .flags.propagate_input_sync = false, + .flags.propagate_input_sync = SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX, .timer_event = MCPWM_TIMER_EVENT_EMPTY, }; @@ -176,7 +176,7 @@ void mcpwm_init(){ ESP_ERROR_CHECK(mcpwm_generator_set_dead_time(generator_W_HIN, generator_W_LIN, &deadtime_config)); } -static void conf_gens(Phase phase){ +static void conf_gens(){ ESP_ERROR_CHECK(mcpwm_generator_set_action_on_compare_event(generator_U_HIN, MCPWM_GEN_COMPARE_EVENT_ACTION(MCPWM_TIMER_DIRECTION_UP, comperator_U, MCPWM_GEN_ACTION_LOW))); ESP_ERROR_CHECK(mcpwm_generator_set_action_on_compare_event(generator_U_HIN, MCPWM_GEN_COMPARE_EVENT_ACTION(MCPWM_TIMER_DIRECTION_DOWN, comperator_U, MCPWM_GEN_ACTION_HIGH))); @@ -205,12 +205,12 @@ static void set_lowside(Phase lowside){ ESP_ERROR_CHECK(mcpwm_generator_set_force_level(generator_U_LIN, 0,true)); break; case PHASE_V: - ESP_ERROR_CHECK(mcpwm_generator_set_force_level(generator_U_HIN, 0,true)); - ESP_ERROR_CHECK(mcpwm_generator_set_force_level(generator_U_LIN, 0,true)); + ESP_ERROR_CHECK(mcpwm_generator_set_force_level(generator_V_HIN, 0,true)); + ESP_ERROR_CHECK(mcpwm_generator_set_force_level(generator_V_LIN, 0,true)); break; case PHASE_W: - ESP_ERROR_CHECK(mcpwm_generator_set_force_level(generator_U_HIN, 0,true)); - ESP_ERROR_CHECK(mcpwm_generator_set_force_level(generator_U_LIN, 0,true)); + ESP_ERROR_CHECK(mcpwm_generator_set_force_level(generator_W_HIN, 0,true)); + ESP_ERROR_CHECK(mcpwm_generator_set_force_level(generator_W_LIN, 0,true)); break; default: @@ -227,12 +227,12 @@ static void set_highside(Phase highside){ ESP_ERROR_CHECK(mcpwm_generator_set_force_level(generator_U_LIN, -1,true)); break; case PHASE_V: - ESP_ERROR_CHECK(mcpwm_generator_set_force_level(generator_U_HIN, -1,true)); - ESP_ERROR_CHECK(mcpwm_generator_set_force_level(generator_U_LIN, -1,true)); + ESP_ERROR_CHECK(mcpwm_generator_set_force_level(generator_V_HIN, -1,true)); + ESP_ERROR_CHECK(mcpwm_generator_set_force_level(generator_V_LIN, -1,true)); break; case PHASE_W: - ESP_ERROR_CHECK(mcpwm_generator_set_force_level(generator_U_HIN, -1,true)); - ESP_ERROR_CHECK(mcpwm_generator_set_force_level(generator_U_LIN, -1,true)); + ESP_ERROR_CHECK(mcpwm_generator_set_force_level(generator_W_HIN, -1,true)); + ESP_ERROR_CHECK(mcpwm_generator_set_force_level(generator_W_LIN, -1,true)); break; default: @@ -265,10 +265,11 @@ esp_err_t set_mcpwm_output(Phase highside, Phase lowside, Phase inactive){ if (timer_U == NULL) { return ESP_ERR_INVALID_STATE; // Fehlerbehandlung, wenn mcpwm nicht initialisiert wurde } - conf_gen(); + set_mcpwm_duty(duty); set_inactive(inactive); set_highside(highside); set_lowside(lowside); + conf_gens(); return ESP_OK; } @@ -277,7 +278,9 @@ esp_err_t set_mcpwm_duty(float new_duty){ return ESP_ERR_INVALID_STATE; // Fehlerbehandlung, wenn mcpwm nicht initialisiert wurde } duty = new_duty; - conf_gen(); + ESP_ERROR_CHECK(mcpwm_comparator_set_compare_value(comperator_U, (periode_ticks*duty/100)/2)); + ESP_ERROR_CHECK(mcpwm_comparator_set_compare_value(comperator_V, (periode_ticks*duty/100)/2)); + ESP_ERROR_CHECK(mcpwm_comparator_set_compare_value(comperator_W, (periode_ticks*duty/100)/2)); return ESP_OK; }