求助 STM32 的定时器1 输出 4路相位差90度的SPWM控制步进电机
最近在做步进电机控制需要输出SPWM正弦调制PWM波,
网上找的资料是在中断中 用CPU处理软件方式实现的
定时器更新中断按照四相四拍的要求使能或禁止定时器PWM输出,代码如下
void TIM1_UP_IRQHandler(void)
{
if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)
{
pwm_index++;
if(pwm_index>35)
{
pwm_index=0;
pwm_count++;
if(pwm_count>3)pwm_count=0;
if(pwm_count==0)TIM1->CCER=0x2ABB;
if(pwm_count==1)TIM1->CCER=0x2BBA;
if(pwm_count==2)TIM1->CCER=0x3BAA;
if(pwm_count==3)TIM1->CCER=0x3AAB;
}
TIM1->CCR1 = indexWave;
TIM1->CCR2 = indexWave;
TIM1->CCR3 = indexWave;
TIM1->CCR4 = indexWave;
TIM_ClearITPendingBit (TIM1, TIM_IT_Update);
}
}
我在想能不能把 更新4路CCRn 寄存器的操作改成DMA方式不知道行不行?
或者其他啥地方可以用DMA来输出 SPWM?
把RAM中的数据通过DMA 传输被CCRn理论上是可行的,只要有DMA REQUEST就行。 关键是把握好这个REQUEST的设置。能够在换向是触发发出这个REQUEST就可以实现。所以把握换向条件就行。以F1系列为例,高级定时器能产生的REQUEST就那么几个,看看应用换向时能否用上,用不上就没法产生了。 把RAM中的数据通过DMA 传输被CCRn理论上是可行的,只要有DMA REQUEST就行。 关键是把握好这个REQUEST的设置。能够在换向是触发发出这个REQUEST就可以实现。所以把握换向条件就行。以F1系列为例,高级定时器能产生的REQUEST就那么几个,看看应用换向时能否用上,用不上就没法产生了。
页:
[1]