50031185 发表于 2020-2-16 16:26:18

求助 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?

butterflyspring 发表于 2020-3-16 12:05:03

把RAM中的数据通过DMA 传输被CCRn理论上是可行的,只要有DMA REQUEST就行。 关键是把握好这个REQUEST的设置。能够在换向是触发发出这个REQUEST就可以实现。所以把握换向条件就行。以F1系列为例,高级定时器能产生的REQUEST就那么几个,看看应用换向时能否用上,用不上就没法产生了。

butterflyspring 发表于 2020-3-16 12:06:15

把RAM中的数据通过DMA 传输被CCRn理论上是可行的,只要有DMA REQUEST就行。 关键是把握好这个REQUEST的设置。能够在换向是触发发出这个REQUEST就可以实现。所以把握换向条件就行。以F1系列为例,高级定时器能产生的REQUEST就那么几个,看看应用换向时能否用上,用不上就没法产生了。
页: [1]
查看完整版本: 求助 STM32 的定时器1 输出 4路相位差90度的SPWM控制步进电机