打印

针对马达控制的六步PWM输出

[复制链接]
2513|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wazhzlp|  楼主 | 2013-4-16 17:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式



沙发
wazhzlp|  楼主 | 2013-4-17 08:24 | 只看该作者
不太明白其中的COM中断(还是事件),需要怎么去设置。

使用特权

评论回复
板凳
wazhzlp|  楼主 | 2013-4-17 09:00 | 只看该作者
本帖最后由 wazhzlp 于 2013-4-17 09:04 编辑

大神帮我看看,主要是主函数,这是模拟的一个6路PWM的换向,是不是可以实现其功能。
我不太明白他的COM事件的意思,谢谢指点。
void main(void)
{
Tim1_Init();
while (1)
  {
for(step=1;step<7;step++)
                {
                        Commutate(step);
                        TIM1_GenerateEvent(TIM1_EVENTSOURCE_COM);
                        
                }
}
}


void Commutate(u8 step)
{
        
          switch(step)
               
        {
        case 1:       //3H、2L//        WH OFF  WL OFF
                        TIM1_CCxCmd(TIM1_CHANNEL_1, DISABLE);
                        TIM1_CCxNCmd(TIM1_CHANNEL_1, DISABLE);
                        
                        TIM1_SelectOCxM(TIM1_CHANNEL_2, TIM1_FORCEDACTION_ACTIVE);
                        TIM1_CCxCmd(TIM1_CHANNEL_2, DISABLE);
                        TIM1_CCxNCmd(TIM1_CHANNEL_2, ENABLE);
                        
                        
                        TIM1_SelectOCxM(TIM1_CHANNEL_3, TIM1_OCMODE_PWM2);
                        TIM1_CCxCmd(TIM1_CHANNEL_3, ENABLE);
                        TIM1_CCxNCmd(TIM1_CHANNEL_3, DISABLE);        
        break;
        case 2:   
                        TIM1_SelectOCxM(TIM1_CHANNEL_1, TIM1_FORCEDACTION_ACTIVE);
                        TIM1_CCxCmd(TIM1_CHANNEL_1,DISABLE );
                        TIM1_CCxNCmd(TIM1_CHANNEL_1, ENABLE);
                        
                        
                        TIM1_SelectOCxM(TIM1_CHANNEL_2, TIM1_OCMODE_PWM2);
                        TIM1_CCxCmd(TIM1_CHANNEL_2, ENABLE);
                        TIM1_CCxNCmd(TIM1_CHANNEL_2, DISABLE);
   

                        TIM1_CCxCmd(TIM1_CHANNEL_3, DISABLE);
                        TIM1_CCxNCmd(TIM1_CHANNEL_3, DISABLE);
                break;

                case 3:
               
                        TIM1_SelectOCxM(TIM1_CHANNEL_1, TIM1_FORCEDACTION_ACTIVE);
                        TIM1_CCxCmd(TIM1_CHANNEL_1, DISABLE);
                        TIM1_CCxNCmd(TIM1_CHANNEL_1, ENABLE);


                        TIM1_CCxCmd(TIM1_CHANNEL_2, DISABLE);
                        TIM1_CCxNCmd(TIM1_CHANNEL_2, DISABLE);
   

                        TIM1_SelectOCxM(TIM1_CHANNEL_3, TIM1_OCMODE_PWM2);
                        TIM1_CCxCmd(TIM1_CHANNEL_3, ENABLE);
                        TIM1_CCxNCmd(TIM1_CHANNEL_3, DISABLE);
                break;
                case 4:
        
                        TIM1_CCxCmd(TIM1_CHANNEL_1, DISABLE);
                        TIM1_CCxNCmd(TIM1_CHANNEL_1, DISABLE);
        
                        TIM1_SelectOCxM(TIM1_CHANNEL_2, TIM1_FORCEDACTION_ACTIVE);        
                        TIM1_CCxCmd(TIM1_CHANNEL_2, DISABLE);
                        TIM1_CCxNCmd(TIM1_CHANNEL_2, ENABLE);

                        TIM1_SelectOCxM(TIM1_CHANNEL_3, TIM1_OCMODE_PWM2);
                        TIM1_CCxCmd(TIM1_CHANNEL_3, ENABLE);
                        TIM1_CCxNCmd(TIM1_CHANNEL_3, DISABLE);   

                break;
                case 5:
               
                        TIM1_SelectOCxM(TIM1_CHANNEL_1, TIM1_OCMODE_PWM2);
                        TIM1_CCxCmd(TIM1_CHANNEL_1, ENABLE);
                        TIM1_CCxNCmd(TIM1_CHANNEL_1, DISABLE);

                        TIM1_SelectOCxM(TIM1_CHANNEL_2, TIM1_FORCEDACTION_ACTIVE);        
                        TIM1_CCxCmd(TIM1_CHANNEL_2, DISABLE);
                        TIM1_CCxNCmd(TIM1_CHANNEL_2, ENABLE);
   

                        TIM1_CCxCmd(TIM1_CHANNEL_3, DISABLE);
                        TIM1_CCxNCmd(TIM1_CHANNEL_3, DISABLE);
        break;
               
                case 6:
               
                        TIM1_SelectOCxM(TIM1_CHANNEL_1, TIM1_FORCEDACTION_ACTIVE);        
                        TIM1_CCxCmd(TIM1_CHANNEL_1, DISABLE);
                        TIM1_CCxNCmd(TIM1_CHANNEL_1, ENABLE);
   

                        TIM1_CCxCmd(TIM1_CHANNEL_2, DISABLE);
                        TIM1_CCxNCmd(TIM1_CHANNEL_2, DISABLE);

                        TIM1_SelectOCxM(TIM1_CHANNEL_3, TIM1_OCMODE_PWM2);
                        TIM1_CCxCmd(TIM1_CHANNEL_3, ENABLE);
                        TIM1_CCxNCmd(TIM1_CHANNEL_3, DISABLE);
        break;
        
        
        default:
        break;
        }

使用特权

评论回复
地板
孤独患者905| | 2019-7-5 12:05 | 只看该作者
最后程序实现了吗

使用特权

评论回复
5
goodluck09876| | 2019-7-5 13:37 | 只看该作者
这个 看着好复杂……

你是要控制 步进电机吗?

使用特权

评论回复
6
huzi2099| | 2019-7-5 15:22 | 只看该作者
com事件其实就是定时器的up中断,特殊的情况是用户可以操作代码生成这个事件

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

51

帖子

1

粉丝