
一个连续函数是可以用无限多个离散函数逼近或替代的,因而可以设想用多个不同幅值的矩形脉冲波来替代正弦波,在一个正弦半波上分割出多个等宽不等幅的波形(假设分出的波形数目n=12);
如果每一个矩形波的面积都与相应时间段内正弦波的面积相等,则这一系列矩形波的合成面积就等于正弦波的面积,也即有等效的作用。为了提高等效的精度,矩形波的个数越多越好,显然,矩形波的数目受到开关器件允许开关频率的限制。
例如,把正弦半波分作n等分(n=9),把每一等分的正弦曲线与横轴所包围的面积都用一个与此面积相等的矩形脉冲来代替,矩形脉冲的幅值不变,各脉冲的中点与正弦波每一等分的中点相重合,这样就形成spwm波形。
同样,正弦波的负半周也可用相同的方法与一系列负脉冲波等效。这种正弦波正、负半周分别用正、负脉冲等效的spwm波形称作单极式spwm。
单片机生成
市场上使用的很多单片机都有生成SPWM控制波形的功能,该生成波形外接驱动电路即可驱动功率桥,达到逆变的目的。应该说,只要具有PWM模块和定时器模块的单片机都可以完成此任务。
具体实现即首先将正弦表赋值给数组。然后PWM波形发生模块每个PWM周期进入中断,在ISR中按照正弦表更改PWM比较器的值,依次循环即可。
pwm的全称是pulse
width
modulation(脉冲宽度调制),它是通过改变输出方波的占空比来改变等效的输出电压。广泛的用于电动机调速和阀门控制,比如我们现在的电动车电机调速就是使用这种方式。
所谓spwm,就是在pwm的基础上改变了调制脉冲方式,脉冲宽度时间占空比按正弦规律排列,这样输出波形经过适当的滤波可以做到正弦波输出。它广泛的用于直流-交流(dc-ac)逆变器等,比如高级一些的ups就是一个例子。三相spwm是使用spwm模拟市电的三相输出,在变频器领域被广泛的采用。
在进行脉宽调制时,使脉冲系列的占空比按正弦规律来安排。当正弦值为最大值时,脉冲的宽度也最大,而脉冲间的间隔则最小,反之,当正弦值较小时,脉冲的宽度也小,而脉冲间的间隔则较大,这样的电压脉冲系列可以使负载电流中的高次谐波成分大为减小,称为正弦波脉宽调制。
用51单片机啊,大致看你电路觉得用计算法不知道性能如何。而且还要调压,精度要求还蛮高,功率还比较大的,个人觉得有难度。仅仅spwm的话倒好说,倒是后面有些难度。如果单片机计算性能达不到,大不了不用软件调制。如果是毕业设计,建议跟你导师谈谈用什么方案可行。
void PWM_Init()
{
unsigned short CCR1_Val = 5000;
unsigned short CCR2_Val = 5000;
GPIO_InitTypeDef GPIO_InitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);
GPIO_InitStructureGPIO_Pin = BSP_GPIOC_PWM1|BSP_GPIOC_PWM2; // PC6,PC7输出
GPIO_InitStructureGPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructureGPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/ -----------------------------------------------------------------------
TIM3 Configuration: generate 4 PWM signals with 4 different duty cycles:
TIM3CLK = 36 MHz, Prescaler = 0x0, TIM3 counter clock = 36 MHz
TIM3 ARR Register = 999 => TIM3 Frequency = TIM3 counter clock/(ARR + 1)
TIM3 Frequency = 36 KHz
TIM3 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR) 100 = 50%
TIM3 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR) 100 = 375%
TIM3 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR) 100 = 25%
TIM3 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR) 100 = 125%
----------------------------------------------------------------------- /
/ Time base configuration /
TIM_DeInit(TIM3);
TIM_TimeBaseStructureTIM_Period = 10000; // 200Hz
TIM_TimeBaseStructureTIM_Prescaler = 35; //36M/(35+1)=1MHz
TIM_TimeBaseStructureTIM_ClockDivision = 0;
TIM_TimeBaseStructureTIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
/ PWM1 Mode configuration: Channel1 /
TIM_OCInitStructureTIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructureTIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructureTIM_Pulse = CCR1_Val; //50%占空比
TIM_OCInitStructureTIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
/ PWM1 Mode configuration: Channel2 /
TIM_OCInitStructureTIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructureTIM_Pulse = CCR2_Val;
TIM_OC2Init(TIM3, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3, ENABLE);
/ TIM3 enable counter /
TIM_Cmd(TIM3, ENABLE);
}
spwm的物理意义:采样反馈信号,可以是高速采样一个正弦周期,进行傅里叶变换,求取该周期的基波有效值。为了简化程序,也可以采用低通滤波器滤波后,进行高速采样,直接计算方均根。
正弦波逆变器,关注的是输出spwm基波的有效值,采用pid控制,应该以输出spwm的基波有效值为反馈量,有效值至少是一个周期才有意义,每个或多个正弦波周期调整一次spmw表的值即可。
等面积法:
该方案实际上就是SPWM法原理的直接阐释,用同样数量的等幅而不等宽的矩形脉冲序列代替正弦波,然后计算各脉冲的宽度和间隔,并把这些数据存于微机中,通过查表的方式生成PWM信号控制开关器件的通断,以达到预期的目的。
由于此方法是以SPWM控制的基本原理为出发点,可以准确地计算出各开关器件的通断时刻,其所得的的波形很接近正弦波,但其存在计算繁琐,数据占用内存大,不能实时控制的缺点。
void
delay(uchar
i)
{
uint
x,y;
for(x=i;x>0;x--)
for(y=100;y>0;y--);
}
void
main()
{
uchar
pwm
=
1,h
=
20;
while(1)
{
RC3
=1;
delay(pwm);
RC3
=
0;
delay(h
-
pwm);
}
}
改变pwm的值(1-19),
就可以改变输出高电平的宽度,还有其它的办法,这是最简单的,软件延时
以上就是关于简述spwm控制的工作原理全部的内容,包括:简述spwm控制的工作原理、SPWM控制的控制原理、急!!!基于8951单片机产生单相SPWM波的程序怎么写的,我用IR2101驱动的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)