sine works

This commit is contained in:
Wolfgang Hottgenroth
2016-10-24 17:07:50 +02:00
parent 07b99a9f23
commit 6151b968a5
17 changed files with 864 additions and 120 deletions

View File

@ -15,35 +15,74 @@
#include <stdlib.h>
#include <math.h>
#include <PontCoopScheduler.h>
#include "stm32f1xx_hal.h"
extern TIM_HandleTypeDef htim1;
extern TIM_HandleTypeDef htim2;
extern TIM_HandleTypeDef htim3;
extern TIM_HandleTypeDef htim4;
#define NUM_OF_SINE_SLOT 30
uint16_t freqOut = 100;
const uint32_t FREQ_IN = 72E6;
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 uint8_t slotCnt;
void blink(void *handle) {
HAL_GPIO_TogglePin(LED_PIN_GPIO_Port, LED_PIN_Pin);
}
void my_setup_1() {
for (uint8_t i = 0; i < NUM_OF_SINE_SLOT; i++) {
float angle = i * slotAngle;
sineValues[i] = sinf(angle / 180 * PI);
}
schInit();
schAdd(blink, NULL, 0, 100);
}
void my_setup_2() {
HAL_TIM_OC_Start_IT(&htim1, TIM_CHANNEL_1);
HAL_TIM_OC_Start_IT(&htim1, TIM_CHANNEL_2);
HAL_TIM_OC_Start_IT(&htim1, TIM_CHANNEL_3);
uint16_t myArr = (FREQ_IN / (freqOut * NUM_OF_SINE_SLOT * 4));
HAL_TIM_OC_Start(&htim2, TIM_CHANNEL_1);
HAL_TIM_OC_Start(&htim2, TIM_CHANNEL_2);
HAL_TIM_OC_Start(&htim2, TIM_CHANNEL_3);
HAL_TIM_OC_Start_IT(&htim1, TIM_CHANNEL_1);
HAL_TIM_OC_Start_IT(&htim1, TIM_CHANNEL_2);
HAL_TIM_OC_Start_IT(&htim1, TIM_CHANNEL_3);
HAL_NVIC_SetPriority(TIM1_CC_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM1_CC_IRQn);
HAL_NVIC_SetPriority(TIM1_CC_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM1_CC_IRQn);
__HAL_TIM_SET_AUTORELOAD(&htim3, myArr);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);
uint16_t slotWidth = __HAL_TIM_GET_AUTORELOAD(&htim2);
for (uint8_t i = 0; i < NUM_OF_SINE_SLOT; i++) {
IV[i] = (uint16_t)(sineValues[i] * 0.9 * slotWidth);
}
slotCnt = 0;
__HAL_TIM_SET_AUTORELOAD(&htim2, myArr);
HAL_GPIO_WritePin(BridgePolarity_GPIO_Port, BridgePolarity_Pin, GPIO_PIN_RESET);
HAL_TIM_PWM_Start_DMA(&htim2, TIM_CHANNEL_1, (uint32_t*)IV, NUM_OF_SINE_SLOT);
__HAL_TIM_ENABLE_IT(&htim2, TIM_IT_UPDATE);
HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM2_IRQn);
}
void my_errorHandler() {
HAL_GPIO_WritePin(ERROR_PIN_GPIO_Port, ERROR_PIN_Pin, GPIO_PIN_SET);
}
void my_loop() {
@ -52,10 +91,19 @@ void my_loop() {
void HAL_SYSTICK_Callback() {
//HAL_GPIO_TogglePin(LED_PIN_GPIO_Port, LED_PIN_Pin);
schUpdate();
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
if (htim->Instance == TIM2) {
slotCnt++;
if (slotCnt == NUM_OF_SINE_SLOT + 2) {
slotCnt = 2;
HAL_GPIO_TogglePin(BridgePolarity_GPIO_Port, BridgePolarity_Pin);
}
}
}
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef * htim) {
if (htim->Instance == TIM1) {
if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) {

View File

@ -12,6 +12,7 @@
void my_setup_1();
void my_setup_2();
void my_loop();
void my_errorHandler();
#endif /* MAIN2_H_ */