微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > AVR单片机的SPWM程序

AVR单片机的SPWM程序

时间:11-24 来源:互联网 点击:

void T1_inti()
{
TCNT1H=0xfc; //计数器清零
TCNT1L=0xe0;
TCCR1A=0x2d; // 0010 1101 频率相位修正PWM,发生匹配的时候,电平为0
TCCR1B=0x11; // 0001 0001 不分频,要是分频的话开关频率就达不到那么高了
TCCR1C=0x00; //没什么作用
OCR1A=493; // 在这种模式下 最大值寄存器OCR1A中的值,这个值与方波的频率有关系,还和方波的占空比有关系
}

void T0() //在定时器0的中断程序中向OCR1A和OCR1B送正弦函数表中的数值,调节M和OCR1A的值就可以调节频率和幅度
{

if(count<360)
{
OCR1B=SPWM_sin_value[count]*M+OCR1A/2-M;//公式应该是OCR1A=OCR1A/2+M(SPWM_sin_value[count]-1)其中OCR1A是三角波的最大值,M为振幅调节系数范围是0~OCR1A/2,(SPWM_sin_value[count]-1)中减的一是应为做的正弦表是一个全正的表,现在要变成(-1~+1)之间的表,调节OCR1A的值可以调节开关频率,调节M的值克一调节相关方波的占空比
OCR1C=SPWM_sin_value[count]*M+OCR1A/2-M
count++;
}
else
count=0;
TCNT0=0x9C;//可以进一步缩短所用的时间,这样可以达到更好的传送效果,但是也更加占用单片机的时钟资源。
}

void main()
{
PORT_inti(); //端口初始化
TO_inti(); //产生 kHZ的开关频率
T1_inti(); //相位修正PWM用于产生两路的SPWM波
while(1) //死循环 ,等待中断
{
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top