发布: 2009-9-05 08:37 | 作者: xly2104 | 来源: StmFans思蜕盟 OPELC 自由电子联盟
SPWM.rar(2009-09-06 19:14:51, Size: 488 KB, Downloads: 95)
SPWM-10KHZ.rar(2009-09-09 14:27:50, Size: 468 KB, Downloads: 61)
SPWM-5KHZ.rar(2009-09-09 14:25:24, Size: 468 KB, Downloads: 60)
如果速度够,就实时运算,如果不够快就先生成一个表,用查表法。
(2009-09-06 19:14:51, Size: 488 KB, Downloads: 95)
是MCU输出脚波形还是高压输出波形?最好分别测一下,还可找一模拟示波器比对一下.
看图,缺口有些规律,是否以缺口脉冲为触发条件,查一查相关电路波形,是否有相关性.
如果是即时更新,则有可能出现你这种情况。
我之前也有想过这个问题,但是在例程里面也没看到有对UEV的设置,所以一直都没怎么在意。刚才我又看了下用户手册,发现原来TIM1_CR1里的ARPE就是控制着ARR的,也就是影响着是立即更新还是等到更新事件产生才更新的问题。
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_Channel = TIM_Channel_1;
TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInit(TIM3, &TIM_OCInitStructure);
//启用CCR1寄存器的影子寄存器(直到产生更新事件才更改设置)
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
这样的设置就是等到下一个周期才更新占空比啦。
呵呵,现在我觉得应该就是这个问题了,明天去试试看。
这个应该是将定时器设置为立即更新的吧。
实在是惭愧,定时器这东西也是经常在用的东东了,到现在才发现原来很多问题一直都没理解
谢谢炳哥哥的提醒呀
我用的这个函数TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, u16 TIM_OCPreload);
我用来产生SPWM的就只有TIM1,在TIM1的中断中修改占空比,实际上就是查表得到下一个周期的占空比。TIM1的通道1和3产生的波形一样,是前半周期输出SPWM,后半周期为0,通道2和4产生的波形一样,在后半周期输出SPWM,用在全桥逆变器上面。
麻烦炳哥哥了哈
我把多余的东西删掉了,只用了TIM1,不过从刚才的波形看,又是和预期波形相符的。这波形时好时坏的,真搞不懂
(2009-09-09 14:27:50, Size: 468 KB, Downloads: 61)
上面那个SPWM是10KHZ的,半周期100个点。
(2009-09-09 14:25:24, Size: 468 KB, Downloads: 60)