OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2491|回复: 6

关于可变式PWM输出问题。

[复制链接]

1

主题

5

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2016-4-28
在线时间
3 小时
发表于 2016-4-29 15:36:49 | 显示全部楼层 |阅读模式
5金钱
         我要用STM32作svpwm,所以先写了一个小程序输出每个PWM波形都不一样的PWM波形。软件仿真结果如图:
         但是烧到片子里后用示波器现实的波形却是这样的,就像图片PWM1-PWM5一样的波形连续动态刷新。
         
   
         代码如下:
void TIM_Configuration(void)
{
    TIM_TimeBaseInitTypeDef TTypeDef;
  TIM_OCInitTypeDef TIM_OCInitStructure;   
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);               
  TIM_DeInit(TIM1);
  TTypeDef.TIM_Period=60000;                                                  
  TTypeDef.TIM_Prescaler=0;                                       
  TTypeDef.TIM_ClockDivision=TIM_CKD_DIV1;                                               
  TTypeDef.TIM_CounterMode=TIM_CounterMode_CenterAligned2;                              
  TIM_TimeBaseInit(TIM1 , &TTypeDef);
  TIM_ARRPreloadConfig(TIM1 , ENABLE);

   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
   TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
   TIM_OCInitStructure.TIM_Pulse = 0;
   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//TIM1_OCPolarity_High;
   TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;
   TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;//TIM1_OCIdleState_Set;
   TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
   TIM_OC1Init(TIM1 , &TIM_OCInitStructure);  
   TIM_OC1PreloadConfig(TIM1 , TIM_OCPreload_Enable);
   TIM_Cmd(TIM1 , ENABLE);     
   TIM_CtrlPWMOutputs(TIM1 , ENABLE);
  TIM1->DIER=0x0001;
}

void TIM1_UP_IRQHandler(void)
{
    int x;
    if (TIM_GetITStatus(TIM1, TIM_IT_Update)!= RESET)
    {
      //TIM_ClearITPendingBit(TIM3, TIM_IT_CC1);
            TIM1->SR=0x0000;
      if (ClkCount==17)
            {
                ClkCount=0;
            }
            else
            {
                ClkCount++;
            }
            if (ClkCount%2!=0)
            {
            x=3000*ClkCount;
            TIM_SetCompare1(TIM1 , x);
            }               
    }
}
   

PWM软仿波形

PWM软仿波形

PWM1

PWM1

PWM2

PWM2

PWM3

PWM3

PWM4

PWM4

PWM5

PWM5
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2016-4-28
在线时间
3 小时
 楼主| 发表于 2016-4-29 16:22:30 | 显示全部楼层
回复

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3347
金钱
3347
注册时间
2013-4-10
在线时间
333 小时
发表于 2016-4-29 16:44:35 | 显示全部楼层
我也在做这个SVPWM, 我是驱动两相步进电机, 你是准备做无刷电机驱动吧!

软件仿真与实际有一定的差距, 可能是示波器的问题!你好好试式,
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2016-4-28
在线时间
3 小时
 楼主| 发表于 2016-4-29 16:47:45 | 显示全部楼层
likunxue 发表于 2016-4-29 16:44
我也在做这个SVPWM, 我是驱动两相步进电机, 你是准备做无刷电机驱动吧!

软件仿真与实际有一定的差距 ...

我要做永磁同步电机驱动,这个问题不解决后面就没法写。
回复

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3347
金钱
3347
注册时间
2013-4-10
在线时间
333 小时
发表于 2016-4-29 16:51:39 | 显示全部楼层
sankefeixing 发表于 2016-4-29 16:47
我要做永磁同步电机驱动,这个问题不解决后面就没法写。

我只会用寄存器板本, 库函数我没有用过, 没有法帮你看!
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2016-4-28
在线时间
3 小时
 楼主| 发表于 2016-4-29 17:02:46 | 显示全部楼层
likunxue 发表于 2016-4-29 16:51
我只会用寄存器板本, 库函数我没有用过, 没有法帮你看!

大致原理就是定时器更新事件时候产生中断,中断用来修CCR1寄存器。我感觉要是有问题可能是时序上的问题。
可能中断执行的时候已经有几个波形过去了,但是频率不高感觉不会有这样的问题。不管怎样谢谢了。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2016-4-28
在线时间
3 小时
 楼主| 发表于 2016-5-3 09:41:56 | 显示全部楼层
顶一下。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 15:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表