From 3b0e1cd72ef65ec15081f044133c0a9157acdeb5 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Thu, 10 Nov 2016 11:47:28 +0100 Subject: [PATCH] change to modification of PSC to inc or dec frequency --- doc/InFrequencyShifting.xlsx | Bin 0 -> 35982 bytes my_src/inverter.c | 39 +++++++++++++++++++++++++---------- my_src/inverter.h | 4 +++- my_src/main2.c | 21 ++++--------------- 4 files changed, 35 insertions(+), 29 deletions(-) create mode 100644 doc/InFrequencyShifting.xlsx diff --git a/doc/InFrequencyShifting.xlsx b/doc/InFrequencyShifting.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..09f5e83db48549b2a16d9b691acbc1f0a8cd9d94 GIT binary patch literal 35982 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 literal 0 HcmV?d00001 diff --git a/my_src/inverter.c b/my_src/inverter.c index 78f21df..6a11a87 100644 --- a/my_src/inverter.c +++ b/my_src/inverter.c @@ -21,10 +21,9 @@ extern TIM_HandleTypeDef htim5; #define NUM_OF_SINE_SLOT 30 +const uint32_t SLOT_WIDTH = 1500; const uint32_t FREQ_IN = 1E6; const float PI = 3.14159; -float slotAngle = 180.0 / NUM_OF_SINE_SLOT; -float sineValues[NUM_OF_SINE_SLOT]; uint16_t IV[NUM_OF_SINE_SLOT]; volatile uint32_t timer1Cnt; @@ -49,8 +48,10 @@ volatile uint8_t phaseOrder[NUM_OF_TIMER]; void inverterBegin() { for (uint8_t i = 0; i < NUM_OF_SINE_SLOT; i++) { + float slotAngle = 180.0 / NUM_OF_SINE_SLOT; float angle = i * slotAngle; - sineValues[i] = sinf(angle / 180 * PI); + float sineValues = sinf(angle / 180 * PI); + IV[i] = (uint16_t)(sineValues[i] * 0.9 * SLOT_WIDTH); } timerSupport[0].handle = &htim2; @@ -62,6 +63,7 @@ void inverterBegin() { timerSupport[0].channel = TIM_CHANNEL_1; timerSupport[0].startMarkPort = LED0_GPIO_Port; timerSupport[0].startMarkPin = LED0_Pin; + __HAL_TIM_SET_AUTORELOAD(timerSupport[0].handle, SLOT_WIDTH); timerSupport[1].handle = &htim5; timerSupport[1].running = false; @@ -72,6 +74,7 @@ void inverterBegin() { timerSupport[1].channel = TIM_CHANNEL_2; timerSupport[1].startMarkPort = LED1_GPIO_Port; timerSupport[1].startMarkPin = LED1_Pin; + __HAL_TIM_SET_AUTORELOAD(timerSupport[1].handle, SLOT_WIDTH); timerSupport[2].handle = &htim4; timerSupport[2].running = false; @@ -82,15 +85,31 @@ void inverterBegin() { timerSupport[2].channel = TIM_CHANNEL_1; timerSupport[2].startMarkPort = LED2_GPIO_Port; timerSupport[2].startMarkPin = LED2_Pin; + __HAL_TIM_SET_AUTORELOAD(timerSupport[2].handle, SLOT_WIDTH); + + __HAL_TIM_SET_AUTORELOAD(&htim1, SLOT_WIDTH); } -void inverterStart(uint8_t freqOut, direction_t direction) { - inverterStop(); - - uint16_t slotWidth = (FREQ_IN / (freqOut * NUM_OF_SINE_SLOT * 4)); - for (uint8_t i = 0; i < NUM_OF_SINE_SLOT; i++) { - IV[i] = (uint16_t)(sineValues[i] * 0.9 * slotWidth); +void inverterIncFrequency() { + uint16_t currPsc = htim1->Instance->PSC; + currPsc++; + htim1->Instance->PSC = currPsc; + for (uint8_t i = 0; i < NUM_OF_TIMER; i++) { + timerSupport[i].handle->Instance->PSC = currPsc; } +} + +void inverterDecFrequency() { + uint16_t currPsc = htim1->Instance->PSC; + currPsc--; + htim1->Instance->PSC = currPsc; + for (uint8_t i = 0; i < NUM_OF_TIMER; i++) { + timerSupport[i].handle->Instance->PSC = currPsc; + } +} + +void inverterStart(direction_t direction) { + inverterStop(); if (direction == CLOCKWISE) { phaseOrder[0] = 0; @@ -107,11 +126,9 @@ void inverterStart(uint8_t freqOut, direction_t direction) { timerSupport[i].slotCnt = 0; timerSupport[i].running = false; HAL_GPIO_WritePin(timerSupport[i].bridgePolarityPort, timerSupport[i].bridgePolarityPin, GPIO_PIN_RESET); - __HAL_TIM_SET_AUTORELOAD(timerSupport[i].handle, slotWidth); } timer1Cnt = 0; - __HAL_TIM_SET_AUTORELOAD(&htim1, slotWidth); HAL_TIM_Base_Start_IT(&htim1); __HAL_TIM_ENABLE_IT(&htim1, TIM_IT_UPDATE); } diff --git a/my_src/inverter.h b/my_src/inverter.h index dc29e28..f5f8b75 100644 --- a/my_src/inverter.h +++ b/my_src/inverter.h @@ -12,8 +12,10 @@ typedef enum { CLOCKWISE, COUNTERCLOCKWISE } direction_t; void inverterBegin(); -void inverterStart(uint8_t freqOut, direction_t direction); +void inverterStart(direction_t direction); void inverterStop(); +void inverterIncFrequency(); +void inverterDecFrequency(); #endif /* INVERTER_H_ */ diff --git a/my_src/main2.c b/my_src/main2.c index 9ed0f95..ce34e65 100644 --- a/my_src/main2.c +++ b/my_src/main2.c @@ -44,26 +44,13 @@ void my_errorHandler() { HAL_GPIO_WritePin(ERROR_PIN_GPIO_Port, ERROR_PIN_Pin, GPIO_PIN_SET); } -void testSwitchFrequency1(void *handle) { - inverterStart(100, CLOCKWISE); -} -void testSwitchFrequency2(void *handle) { - inverterStart(50, CLOCKWISE); -} - -void testSwitchFrequency3(void *handle) { - static uint8_t f = 1; - inverterStart(f, CLOCKWISE); - f++; +void testSwitchFrequency(void *handle) { + inverterIncFrequency(); } void my_setup_2() { inverterBegin(); - - inverterStart(1, CLOCKWISE); -// schAdd(testSwitchFrequency1, NULL, 5000, 0); -// schAdd(testSwitchFrequency2, NULL, 10000, 0); -// schAdd(testSwitchFrequency1, NULL, 15000, 0); - schAdd(testSwitchFrequency3, NULL, 0, 5000); + inverterStart(CLOCKWISE); + schAdd(testSwitchFrequency, NULL, 0, 5000); }