实验工程应用的逆变器常采用SPWM技术来实现,以前常用硬件来产生三角波和正弦波进行比较来产生SPWM信号,但常常不稳定,而用嵌入式ARM来产生SPWM信号就非常容易,几乎不用增加任何附加硬件产生调制正弦信号,而由LPC2132的内置PWM功能就能实现。下面是实验程序,已在SP1010-LPC213X-ARM实验开发板调试通过,供参考。
来源:www.supermcu.com (西谱电子)
/*
利用LPC2132器件的PWM功能模拟产生正弦信号由P0.21引脚的PWM5功能引脚输出
实验平台:(1).SP1010-LPC213X-ARM实验开发板,其详细介绍地址:http://www.supermcu.com/p_info.asp?id=288)
(2).示波器,探头接到P0.21引脚上
FOSC=12MHz,FCCLK=60MHz,FPCLK=FCCLK/4
更多内容:http://www.supermcu.com (西谱电子)
*/
#include <LPC213X.H>
#define FCCLK 60000000
void ARM_PWM_Init(void)
{
PINSEL0 = 0;
PINSEL1 = (PINSEL1 & (~(3 << 10))) | (1 << 10); //--- 配置为PWM5引脚输出功能 ---
PWMPR = 0;
PWMPC = 0;
PWMTC = 0;
PWMMCR = 3;
PWMPCR = (1 << 13); //--- 使能PWM5引脚功能 ---
PWMMR0 = FCCLK / (4 * 100000) - 1; //--- 配置PWM5的周期值,产生Fpwm = 1KHz ---
PWMMR5 = (PWMMR0 + 1) * 50 / 100 - 1; //--- 配置PWM5的占空比,占空比= 30 % ---
PWMLER = (1 << 5) | (1 << 0); //--- 锁存PWM5的周期和占空比数值 ---
PWMTCR = 9; //--- 使能PWM5和PWM0 ---
}
void time_dly(unsigned long dly)
{
unsigned long i;
do
{
i = 600;
do
{
}
while(-- i);
}
while(-- dly);
}
int main(void)
{
long i,j;
ARM_PWM_Init();
while(1)
{
for(i=0;i<200;i++)
{
j = i;
if (j > 100) j = 200 - i;
PWMMR0 = FCCLK / (4 * 100000) - 1;
PWMMR5 = j;
PWMLER = (1 << 5) | (1 << 0);
time_dly(20);
}
}
}
/*
更多内容:http://www.supermcu.com (西谱电子)
SP1010-LPC213X-ARM实验开发板详细介绍地址:http://www.supermcu.com/p_info.asp?id=288)
*/
文章评论(0条评论)
登录后参与讨论