各位朋友,今天遇到个很奇怪的问题,我用的直流电机带增量式编码器,使用TIM5配置为编码器模式,在电机低速情况下,编码器值读取正确,正反转正确,但是当我提高电机的PWM占空比超过50%,编码器的读数值开始出现严重的丢失现象,比如本来电机转一圈读取到4096脉冲数,现在提高速度以后,只能读取到三千多 个脉冲数,不明白为什么电机速度提高会导致编码器丢失脉冲,编码器频响上限是875HZ,电机转速不可能突破这个上限,好着急啊,求大神指点一二,后天要验收了,突然遇到这个问题,心都碎了。编码器配置代码如下:
void Encoder_Init_TIM5(void)
{
GPIO_InitTypeDef GPIO_Initstruc;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInit_Struc;
TIM_ICInitTypeDef TIM_ICInit_Struc;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);// TIM5时钟使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);// GPIOA时钟使能
GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM5);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource1,GPIO_AF_TIM5);//设置PA0和PA1为复用模式
GPIO_Initstruc.GPIO_Mode=GPIO_Mode_AF;
GPIO_Initstruc.GPIO_OType=GPIO_OType_OD;
GPIO_Initstruc.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;
GPIO_Initstruc.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Initstruc.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_Init(GPIOA,&GPIO_Initstruc);
TIM_TimeBaseStructInit(&TIM_TimeBaseInit_Struc);
TIM_TimeBaseInit_Struc.TIM_Prescaler=0x00; //定时器预分频
TIM_TimeBaseInit_Struc.TIM_Period=0xffffffff; //设定计数器自动重装值
TIM_TimeBaseInit_Struc.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit_Struc.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM5,&TIM_TimeBaseInit_Struc);
TIM_EncoderInterfaceConfig(TIM5,TIM_EncoderMode_TI1,
TIM_ICPolarity_Rising,TIM_ICPolarity_Rising); //初始化编码器Tim5为TI1边沿计数
TIM_ICStructInit(&TIM_ICInit_Struc); //?????????
TIM_ICInit_Struc.TIM_ICFilter=10; //输入滤波器
TIM_ICInit(TIM5,&TIM_ICInit_Struc);
TIM_ClearFlag(TIM5,TIM_FLAG_Update);
TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE);
TIM5->CNT=0;
TIM_Cmd(TIM5,ENABLE);//启动定时器5
}
/******************************************
单位时间读取编码器计数,返回位置值
********************************************/
int Read_Position(u8 TIMX)
{
Encoder_TIM= TIM5 -> CNT;
return Encoder_TIM;
}
/******************************************
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>