首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

SPWM 问题。谢谢

SPWM 问题。谢谢

在调试 SPWM 。谁有例子参考一下啊。或者讲讲怎么做。
我用定时器中断采样(334 us)电压电流。在这个中断中计算出需要的占空比。
在PWM更新中断(1kHz)里,将占空比送到 PWM 所需 channel 的寄存器内。
发现生成的PWM不对。不知道大家是怎么做的。
LEON
不知道什么时候能有人回答。
这里好象没有什么人气。大概都去用TI的板子了。
LEON
你在用什么芯片?
海纳百川  有容乃大
56f805
LEON
PWMA 初始化:
PESL(PWM_A, PWM_SET_MODULO, 0x4e20);

PESL(PWM_A, PWM_SET_DEADTIME, 0x00e0);

PESL(PWM_A, PWM_WRITE_VALUE_REG_0, 0x0000);
PESL(PWM_A, PWM_WRITE_VALUE_REG_1, 0x0000);
PESL(PWM_A, PWM_WRITE_VALUE_REG_2, 0x0000);
PESL(PWM_A, PWM_WRITE_VALUE_REG_3, 0x0000);
PESL(PWM_A, PWM_WRITE_VALUE_REG_4, 0x0000);
PESL(PWM_A, PWM_WRITE_VALUE_REG_5, 0x0000);

PESL(PWM_A, PWM_WRITE_DISABLE_MAPPING_REG1, 0);
PESL(PWM_A, PWM_WRITE_DISABLE_MAPPING_REG2, 0);

PESL(PWM_A, PWM_SET_ALIGNMENT, PWM_ALIGN_CENTER);
PESL(PWM_A, PWM_SET_COMPLEMENTARY_MODE, PWM_CHANNEL_45 | PWM_CHANNEL_23 | PWM_CHANNEL_01);

PESL(PWM_A, PWM_OUTPUT_PAD, PWM_ENABLE);
PESL(PWM_A, PWM_RELOAD_INT, PWM_ENABLE);

PESL(PWM_A, PWM_DEVICE, PWM_ENABLE);
PESL(PWM_A, PWM_LOAD_OK, NULL);

定时中断中计算duty cycle:
duty_cycle_1 = 0x4e20 + mult_r(0x4e20,mult_r(modulation_index,sin_vAsh));
我设置的是 center aligned pwm 模式。

PWM reload 更新 duty cycle:
#pragma interrupt saveall
void PWMReload_Interrupt(void)
{
GPIOB6_NegVal();
PESL(PWM_A, PWM_UPDATE_VALUE_REG_0, duty_cycle_1);

PESL(PWM_A, PWM_CLEAR_RELOAD_FLAG, NULL);
PESL(PWM_A, PWM_LOAD_OK, NULL);
}
LEON
返回列表