资源简介
基于该程序的调试作品已经有更新两代,性能良好
代码片段和文件信息
#include “stdint.h“
#include “math.h“
#define MATH_PI (3.1415926f)
#define SINE_TABLE_LEN (1000ul) //Sine表长
#define SPWM_FR_CYCLE (100ul) //输出频率
#define SPWM_FR_POLL (100000ul) //轮询频率
#define SPWM_LOSERANGE (0.0f) //丢失占空比
//是否使用线性插值
#define SPWM_USE_INTERPOLATION (0)
uint16_t Sine_table[SINE_TABLE_LEN];
void spwm_table_init(int16_t amp);
uint16_t spwm_get_duty_fast();
uint16_t spwm_get_duty();
void spwm_table_init(int16_t amp)
{
uint16_t i;
float bias;
bias = 0.5f * amp;
for(i = 0; i < SINE_TABLE_LEN; i++)
{
Sine_table[i] = roundf(bias + (0.5f - SPWM_LOSERANGE) * amp * sinf(i * 2.0f * MATH_PI / SINE_TABLE_LEN));
}
}
uint16_t spwm_get_duty_fast()
{
static uint32_t index = 0;
static int32_t e = 0;
e += SPWM_FR_CYCLE * SINE_TABLE_LEN;
if(e >= ((int32_t)SPWM_FR_POLL >> 1))
{
e -= SPWM_FR_POLL;
index += 1;
if(index >= SINE_TABLE_LEN)
{
index = 0;
}
}
return Sine_table[index];
}
uint16_t spwm_get_duty()
{
static int32_t e = 0;
static uint16_t index = 0;
uint16_t value;
uint16_t index_next;
e += SPWM_FR_CYCLE * SINE_TABLE_LEN;
index += e / SPWM_FR_POLL;
e %= SPWM_FR_POLL;
index_next = index + 1;
if(index >= SINE_TABLE_LEN)
{
index -= SINE_TABLE_LEN;
}
if(index_next >= SINE_TABLE_LEN)
{
index_next -= SINE_TABLE_LEN;
}
#if SPWM_USE_INTERPOLATION
value = (e * Sine_table[index_next]
+ (SPWM_FR_POLL - e) * Sine_table[index]
+ ((int32_t)SPWM_FR_POLL >> 1)) / SPWM_FR_POLL;
#else
if(e < ((int32_t)SPWM_FR_POLL >> 1))
{
value = Sine_table[index];
}
else
{
value = Sine_table[index_next];
}
#endif
return value;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-08-07 13:24 V2.0单相变频0808\
目录 0 2017-08-06 18:36 V2.0单相变频0808\CORE\
文件 109142 2016-04-15 21:57 V2.0单相变频0808\CORE\core_cm4.h
文件 22735 2016-04-15 21:57 V2.0单相变频0808\CORE\core_cm4_simd.h
文件 17146 2016-04-15 21:57 V2.0单相变频0808\CORE\core_cmFunc.h
文件 20513 2016-04-15 21:57 V2.0单相变频0808\CORE\core_cmInstr.h
文件 29605 2016-04-15 21:57 V2.0单相变频0808\CORE\startup_stm32f40_41xxx.s
目录 0 2017-08-06 15:31 V2.0单相变频0808\FWLIB\
目录 0 2017-08-06 17:09 V2.0单相变频0808\FWLIB\inc\
文件 6924 2017-08-06 17:09 V2.0单相变频0808\FWLIB\inc\misc.h
文件 32880 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_adc.h
文件 27318 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_can.h
文件 2416 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_crc.h
文件 14481 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_cryp.h
文件 14946 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_dac.h
文件 4296 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_dbgmcu.h
文件 12977 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_dcmi.h
文件 28882 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_dma.h
文件 19692 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_dma2d.h
文件 8012 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_exti.h
文件 24467 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_flash.h
文件 3275 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_flash_ramfunc.h
文件 44924 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_fmc.h
文件 27181 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_fsmc.h
文件 23548 2017-07-06 01:40 V2.0单相变频0808\FWLIB\inc\stm32f4xx_gpio.h
文件 10084 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_hash.h
文件 31939 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_i2c.h
文件 4323 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_iwdg.h
文件 21191 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_ltdc.h
文件 7728 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_pwr.h
文件 30063 2016-04-15 21:57 V2.0单相变频0808\FWLIB\inc\stm32f4xx_rcc.h
............此处省略243个文件信息
- 上一篇:snipaste 2.0
- 下一篇:ABB ACS800
评论
共有 条评论