最近在做步进电机控制 需要输出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[pwm_index]; TIM1->CCR2 = indexWave[pwm_index]; TIM1->CCR3 = indexWave[pwm_index]; TIM1->CCR4 = indexWave[pwm_index]; 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就那么几个,看看应用换向时能否用上,用不上就没法产生了。 |