单相变频电源


基于该程序的调试作品已经有更新两代,性能良好
资源截图
代码片段和文件信息
#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单相变频0808CORE
     文件      109142  2016-04-15 21:57  V2.0单相变频0808COREcore_cm4.h
     文件       22735  2016-04-15 21:57  V2.0单相变频0808COREcore_cm4_simd.h
     文件       17146  2016-04-15 21:57  V2.0单相变频0808COREcore_cmFunc.h
     文件       20513  2016-04-15 21:57  V2.0单相变频0808COREcore_cmInstr.h
     文件       29605  2016-04-15 21:57  V2.0单相变频0808COREstartup_stm32f40_41xxx.s
     目录           0  2017-08-06 15:31  V2.0单相变频0808FWLIB
     目录           0  2017-08-06 17:09  V2.0单相变频0808FWLIBinc
     文件        6924  2017-08-06 17:09  V2.0单相变频0808FWLIBincmisc.h
     文件       32880  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_adc.h
     文件       27318  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_can.h
     文件        2416  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_crc.h
     文件       14481  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_cryp.h
     文件       14946  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_dac.h
     文件        4296  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_dbgmcu.h
     文件       12977  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_dcmi.h
     文件       28882  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_dma.h
     文件       19692  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_dma2d.h
     文件        8012  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_exti.h
     文件       24467  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_flash.h
     文件        3275  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_flash_ramfunc.h
     文件       44924  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_fmc.h
     文件       27181  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_fsmc.h
     文件       23548  2017-07-06 01:40  V2.0单相变频0808FWLIBincstm32f4xx_gpio.h
     文件       10084  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_hash.h
     文件       31939  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_i2c.h
     文件        4323  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_iwdg.h
     文件       21191  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_ltdc.h
     文件        7728  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_pwr.h
     文件       30063  2016-04-15 21:57  V2.0单相变频0808FWLIBincstm32f4xx_rcc.h
............此处省略243个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)