你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

求助 STM32 的定时器1 输出 4路相位差90度的SPWM控制步进电机

[复制链接]
50031185 提问时间:2020-2-16 16:26 /
最近在做步进电机控制

需要输出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?
收藏 评论2 发布时间:2020-2-16 16:26

举报

2个回答
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就那么几个,看看应用换向时能否用上,用不上就没法产生了。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版