现在可以用编码器读取计数器的值了,但是怎么去测速呢?

2019-08-14 18:49发布

编码器怎么去测速呢?怎么通过PWM去控制直流电机呢?求教各位大神!最近在用直流电机,希望大家可以帮帮忙!谢谢啦!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
28条回答
张晓斌
2019-08-16 19:49
回复【16楼】joe_knight:
---------------------------------
void TIM5_Configuration(void)
{
   TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
    
   TIM_ClearITPendingBit(TIM5,TIM_IT_Update); 
   
   TIM_TimeBaseInitStructure.TIM_ClockDivision=0;
   TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
   TIM_TimeBaseInitStructure.TIM_Period=1600;
   TIM_TimeBaseInitStructure.TIM_Prescaler=71;
    
   TIM_TimeBaseInit(TIM5,&TIM_TimeBaseInitStructure);
    
   TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE);
    
   //TIM_Cmd(TIM5,ENABLE);
}//TIM5作为高速脉冲计数
void TIM2_Configuration(void)
{
   TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
    
   TIM_ClearITPendingBit(TIM2,TIM_IT_Update); 
   
   TIM_TimeBaseInitStructure.TIM_ClockDivision=0;
   TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
   TIM_TimeBaseInitStructure.TIM_Period=50-1;
   TIM_TimeBaseInitStructure.TIM_Prescaler=7199;//定时5ms
    
   TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
    
   TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
    
   TIM_Cmd(TIM2,ENABLE);
}

void TIM2_IRQHandler(void)
{
  u16 M1=0,M2=0;
    
  TIM_Cmd(TIM3,ENABLE);
  TIM_Cmd(TIM5,ENABLE);
    
  M1=TIM3->CNT;
  M2=TIM5->CNT; 
  n=60*(1000000)*M1/(M2*4*400); 
  
  TIM_Cmd(TIM3,DISABLE);
  TIM_Cmd(TIM5,DISABLE);
    
  TIM_ClearITPendingBit(TIM2,TIM_IT_Update); 
    
}
这样有什么问题吗?为什么测得的n一直是0呢?是按照那个思路啊?哪里不对啊?

一周热门 更多>