Board logo

标题: SPWM 问题。谢谢 [打印本页]

作者: leonquick    时间: 2006-2-18 13:59     标题: SPWM 问题。谢谢

在调试 SPWM 。谁有例子参考一下啊。或者讲讲怎么做。
我用定时器中断采样(334 us)电压电流。在这个中断中计算出需要的占空比。
在PWM更新中断(1kHz)里,将占空比送到 PWM 所需 channel 的寄存器内。
发现生成的PWM不对。不知道大家是怎么做的。
作者: leonquick    时间: 2006-2-18 14:00

不知道什么时候能有人回答。
这里好象没有什么人气。大概都去用TI的板子了。
作者: strongchen    时间: 2006-2-20 11:15

你在用什么芯片?
作者: leonquick    时间: 2006-2-21 02:19

56f805
作者: leonquick    时间: 2006-2-21 02:32

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);
}





欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0