野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12616|回复: 0

求大佬看看这个编码器的程序有什么问题

[复制链接]
发表于 2020-4-23 15:48:15 | 显示全部楼层 |阅读模式
void Tim_Encode_Test(void)
{
          s32  TIM3_Old_Count;
                TIM3_Init_Encode();       
               
                while(1)
                {
                        TIM3_Count=TIM3_Get_Encode();
                        if(TIM3_Old_Count != TIM3_Count)
                        {
                                  TIM3_Old_Count = TIM3_Count;                                                                                                             
                                        printf("脉冲=%ld  圈数=%8ld  位置=%d  脉冲圈=%d\r\n"\
                                          ,TIM3_Count,TIM3_Circle_Count,TIM3->CNT,TIM3_Encoder_Line_Number*TIM3_Encoder_Line_Multiple);                         
                        }               
                }       
}

s32 TIM3_Count,TIM3_Circle_Count,TIM3_Encoder_Line_Multiple;//×ܼÆÊý¡¢È¦Êý¼ÆÊý¡¢Âö³å±¶ÆµÏµÊý(һȦÂö³åÊý=TIM3_Encoder_Line_Number*TIM3_Encoder_Line_Multiple)

void TIM3_Init_Encode(void)
{
        GPIO_InitTypeDef         GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_ICInitTypeDef        TIM_ICInitStructure;          
        NVIC_InitTypeDef         NVIC_InitStructure;
       
        TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);  
        TIM_ICStructInit(&TIM_ICInitStructure);        
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
       
        /*- Õý½»±àÂëÆ÷ÊäÈëÒý½Å PA->6  PA->7 -*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;         
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);                           


        TIM_DeInit(TIM3);
        if (TIM3_ENCODER_MODE<TIM_EncoderMode_TI12) TIM3_Encoder_Line_Multiple=2;
        else                                        TIM3_Encoder_Line_Multiple=4;
        TIM_TimeBaseStructure.TIM_Period = TIM3_Encoder_Line_Number*TIM3_Encoder_Line_Multiple-1;
        TIM_TimeBaseStructure.TIM_Prescaler = 0;
        TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1 ;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);              

        TIM_EncoderInterfaceConfig(TIM3, TIM3_ENCODER_MODE, TIM_ICPolarity_Rising ,TIM_ICPolarity_Rising);       
       
        TIM_ICStructInit(&TIM_ICInitStructure);                                                                                                                                                                                                                                                                                 
        TIM_ICInitStructure.TIM_ICFilter = 6;
        TIM_ICInit(TIM3, &TIM_ICInitStructure);

        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;                                 
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;   
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                  
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                              
        NVIC_Init(&NVIC_InitStructure);
       
        TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );
        TIM_ClearFlag(TIM3, TIM_FLAG_Update);
        TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
        TIM3->CNT = 0;
        TIM_Cmd(TIM3, ENABLE);   
}

s32 TIM3_Get_Encode(void)
{                                                                                                       
        return TIM3_Circle_Count*TIM3_Encoder_Line_Number*TIM3_Encoder_Line_Multiple+(TIM3->CNT);

void TIM3_IRQHandler(void)   
{
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  
        {
                TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  
                if((((TIM3->CR1)>>4) & 0x01)==0)TIM3_Circle_Count++;//DIR==0
                else                            TIM3_Circle_Count--;//DIR==1
        }
}


回复

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-26 03:55 , Processed in 0.027762 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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