diff --git a/config.h b/config.h index a20bf05..6758ac5 100644 --- a/config.h +++ b/config.h @@ -1,6 +1,6 @@ #pragma once -#define PWM_FREQ 16000 // PWM frequency in Hz +#define PWM_FREQ 10000 // PWM frequency in Hz #define DEAD_TIME 48 // PWM deadtime #ifdef VARIANT_TRANSPOTTER #define DELAY_IN_MAIN_LOOP 2 diff --git a/defines.h b/defines.h index 13f2a06..8b6687b 100644 --- a/defines.h +++ b/defines.h @@ -39,22 +39,25 @@ #define RIGHT_HALL_W_PORT GPIOC #define LEFT_TIM TIM8 + #define LEFT_TIM_U CCR1 #define LEFT_TIM_UH_PIN GPIO_PIN_6 #define LEFT_TIM_UH_PORT GPIOC #define LEFT_TIM_UL_PIN GPIO_PIN_7 #define LEFT_TIM_UL_PORT GPIOA + #define LEFT_TIM_V CCR2 -#define LEFT_TIM_VH_PIN GPIO_PIN_7 -#define LEFT_TIM_VH_PORT GPIOC -#define LEFT_TIM_VL_PIN GPIO_PIN_0 -#define LEFT_TIM_VL_PORT GPIOB -#define LEFT_TIM_W CCR3 -#define LEFT_TIM_WH_PIN GPIO_PIN_8 +#define LEFT_TIM_WH_PIN GPIO_PIN_7 #define LEFT_TIM_WH_PORT GPIOC -#define LEFT_TIM_WL_PIN GPIO_PIN_1 +#define LEFT_TIM_WL_PIN GPIO_PIN_0 #define LEFT_TIM_WL_PORT GPIOB +#define LEFT_TIM_W CCR3 +#define LEFT_TIM_VH_PIN GPIO_PIN_8 +#define LEFT_TIM_VH_PORT GPIOC +#define LEFT_TIM_VL_PIN GPIO_PIN_1 +#define LEFT_TIM_VL_PORT GPIOB + #define RIGHT_TIM TIM1 #define RIGHT_TIM_U CCR1 #define RIGHT_TIM_UH_PIN GPIO_PIN_8 diff --git a/main.cpp b/main.cpp index 1275bed..1dce694 100644 --- a/main.cpp +++ b/main.cpp @@ -215,24 +215,24 @@ int main() int pwm = 0; int8_t dir = 1; - const int pwmMax = 1000; + const int pwmMax = 400; for (;;) { - HAL_Delay(DELAY_IN_MAIN_LOOP * 2); //delay in ms + HAL_Delay(DELAY_IN_MAIN_LOOP ); //delay in ms timeout = 0; - left.state.enable = false; - left.state.ctrlMod = ControlMode::Voltage; - left.state.ctrlTyp = ControlType::Sinusoidal; + left.state.enable = true; + left.state.ctrlMod = ControlMode::Voltage;//FieldOrientedControl + left.state.ctrlTyp = ControlType::FieldOrientedControl;//Sinusoidal; left.state.pwm = pwm; - left.state.iMotMax = 1; + left.state.iMotMax = 10; right.state.enable = true; right.state.ctrlMod = ControlMode::Voltage; - right.state.ctrlTyp = ControlType::Sinusoidal; + right.state.ctrlTyp = ControlType::FieldOrientedControl; right.state.pwm = pwm; - right.state.iMotMax = 1; + right.state.iMotMax = 10; pwm += dir; if (pwm > pwmMax) { @@ -288,13 +288,13 @@ void updateMotors() } // Get Left motor currents - int16_t curL_phaA = (int16_t)(offsetrl1 - adc_buffer.rl1); - int16_t curL_phaB = (int16_t)(offsetrl2 - adc_buffer.rl2); + int16_t curL_phaA = (int16_t)(offsetrl1 - adc_buffer.rl1)*2; + int16_t curL_phaB = (int16_t)(offsetrl2 - adc_buffer.rl2)*2; int16_t curL_DC = (int16_t)(offsetdcl - adc_buffer.dcl); // Get Right motor currents - int16_t curR_phaB = (int16_t)(offsetrr1 - adc_buffer.rr1); - int16_t curR_phaC = (int16_t)(offsetrr2 - adc_buffer.rr2); + int16_t curR_phaB = (int16_t)(offsetrr1 - adc_buffer.rr1)*2; + int16_t curR_phaC = (int16_t)(offsetrr2 - adc_buffer.rr2)*2; int16_t curR_DC = (int16_t)(offsetdcr - adc_buffer.dcr); const int8_t chopL = std::abs(curL_DC) > (left.state.iDcMax * A2BIT_CONV); @@ -792,7 +792,7 @@ void MX_TIM_Init() { sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 0; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_LOW; + sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_SET; @@ -833,7 +833,7 @@ void MX_TIM_Init() { sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 0; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCNPolarity = TIM_OCNPOLARITY_LOW; + sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_SET;