关于PWM输出波形有毛刺

2019-07-20 18:36发布

按照原子哥程序写的PWM程序,输出为125K的矩形波,发现每次沿跳变时会有一个抖动,哪位大神告知一下是什么原因造成的,有什么消除的办法。

波形图片附上,
程序如下:
主函数:
   time14_pwm_init(7,83);
   TIM_SetCompare1(TIM14,4);

pwm初始化:

void time14_pwm_init(uint32_t arr, uint32_t psc){
  GPIO_InitTypeDef GPIO_InitStruct;
  TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
  TIM_OCInitTypeDef TIM_OCInitStruct;

   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);

  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7;          // PA7
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
   GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;   
   GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;        
   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;   
   GPIO_Init(GPIOA, &GPIO_InitStruct);  
   
   GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_TIM14);  

  TIM_TimeBaseInitStruct.TIM_Prescaler=psc;  
  TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
  TIM_TimeBaseInitStruct.TIM_Period=arr;   
  TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
  TIM_TimeBaseInit(TIM14,&TIM_TimeBaseInitStruct);
  
  TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
  TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_Low;
  TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
  TIM_OC1Init(TIM14,&TIM_OCInitStruct);
  
  TIM_OC1PreloadConfig(TIM14,TIM_OCPreload_Enable);
  TIM_ARRPreloadConfig(TIM14,ENABLE);
  TIM_Cmd(TIM14,ENABLE);
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。