sine works
This commit is contained in:
@ -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) {
|
||||
|
@ -12,6 +12,7 @@
|
||||
void my_setup_1();
|
||||
void my_setup_2();
|
||||
void my_loop();
|
||||
void my_errorHandler();
|
||||
|
||||
|
||||
#endif /* MAIN2_H_ */
|
||||
|
Reference in New Issue
Block a user