Files
microchip-application-pec93…/Examples/template/dds/src/main.c
T
2026-03-20 15:39:52 +08:00

90 lines
2.9 KiB
C

/**
* Copyright (c) 2026 Wisetop. All Rights Reserved.
*/
/** @file main.c
*
* @author Roy Luo
* @version 0.1
* @date 2026/03/20
* @license
* @description
*/
#include "main.h"
#include "hal_gpio.h"
#include "hal_tim.h"
#include "init.h"
#include "isr.h"
//=============================================================================
// Constant Definition
//=============================================================================
//=============================================================================
// Macro Definition
//=============================================================================
#define PWM_TABLE_SIZE 64
//=============================================================================
// Structure Definition
//=============================================================================
//=============================================================================
// Global Data Definition
//=============================================================================
const uint16_t pwm_table[PWM_TABLE_SIZE]
= { 1250, 1372, 1493, 1612, 1728, 1839, 1944, 2042, 2133, 2216, 2289,
2352, 2404, 2446, 2475, 2493, 2499, 2493, 2475, 2446, 2404, 2352,
2289, 2216, 2133, 2042, 1944, 1839, 1728, 1612, 1493, 1372, 1250,
1127, 1006, 887, 771, 660, 555, 457, 366, 283, 210, 147,
95, 53, 24, 6, 0, 6, 24, 53, 95, 147, 210,
283, 366, 457, 555, 660, 771, 887, 1006, 1127 };
//=============================================================================
// Private Function Definition
//=============================================================================
//=============================================================================
// Public Function Definition
//=============================================================================
void uvw_set_duty(uint16_t base_idx)
{
uint16_t iA = base_idx;
uint16_t iB = (base_idx + PWM_TABLE_SIZE / 3) % PWM_TABLE_SIZE;
uint16_t iC = (base_idx + 2 * PWM_TABLE_SIZE / 3) % PWM_TABLE_SIZE;
EPWM->CCR1 = pwm_table[iA];
EPWM->CCR2 = pwm_table[iB];
EPWM->CCR3 = pwm_table[iC];
}
int main(void)
{
static uint16_t base_idx = 0;
uint32_t timer = sys_get_tick();
SYS_Config();
uvw_set_duty(base_idx);
pwm_enable();
while (1)
{
#if 0
if (sys_get_tick() - timer >= 1)
{
GPIO_TogglePin(GPIOA, GPIO_Pin_14);
base_idx = (base_idx + 1) % PWM_TABLE_SIZE;
uvw_set_duty(base_idx);
timer = sys_get_tick();
}
#endif
#if 1
if (flag_24Khz_timer)
{
GPIO_TogglePin(GPIOA, GPIO_Pin_14);
base_idx = (base_idx + 1) % PWM_TABLE_SIZE;
uvw_set_duty(base_idx);
flag_24Khz_timer = false;
}
#endif
}
}