jcx0324 发表于 2016-12-10 16:55:08

编码器应用问题

型号为103系列,将PA0和PA1作为编码器的两个输入通道(定时器通道1和通道2), 配置代码如下:

    GPIO_InitTypeDef             GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef      TIM_TimeBaseStructure;
    TIM_ICInitTypeDef             TIM_ICInitStructure;
    NVIC_InitTypeDef            NVIC_InitStructure;   

    RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);    //使能TIM2时钟
    /* Enable GPIOA, clock */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    //使能GPIOA时钟
   
    GPIO_StructInit(&GPIO_InitStructure);//将GPIO_InitStruct中的参数按缺省值输入
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0 | GPIO_Pin_1;   
    GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);                           

    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
   
    TIM_DeInit(TIM2);
    TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
    TIM_TimeBaseStructure.TIM_Period = 360 * 4 -1;//设定计数器重装值
    TIM_TimeBaseStructure.TIM_Prescaler = 0;         //TIM2时钟预分频值
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;//设置时钟分割 T_dts = T_ck_int   
    TIM_TimeBaseStructure.TIM_CounterMode   = TIM_CounterMode_Up; //TIM向上计数
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);            

   
    TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12, TIM_ICPolarity_BothEdge ,TIM_ICPolarity_BothEdge);//使用编码器模式3,上升下降都计数
    TIM_ICStructInit(&TIM_ICInitStructure);      //将结构体中的内容缺省输入

    TIM_ICInitStructure.TIM_ICFilter = 6;          //选择输入比较滤波器
    TIM_ICInit(TIM2, &TIM_ICInitStructure);      //将TIM_ICInitStructure中的指定参数初始化TIM2
   
    TIM_ClearFlag(TIM2, TIM_FLAG_Update);      //清除TIM2的更新标志位
    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);    //运行更新中断
    //Reset counter
    TIM2->CNT = 0;

    TIM_Cmd(TIM2, ENABLE);   //启动TIM2定时器


结果是定时器2的寄存器值全为0,定时器2也无法开启,单独将定时器2作为普通定时器用则正常, 求帮忙找下原因啊

jackten 发表于 2016-12-10 19:10:23

谢谢分享                              

斜阳__ 发表于 2016-12-11 09:57:31

mark一下,

jcx0324 发表于 2016-12-12 08:47:04

是有问题求助............

队长shiwo 发表于 2017-1-25 09:09:51

编码器回的是脉冲信号的吧

wtliu 发表于 2017-1-25 09:50:45

先看看编码器的输入脉冲是否正常

cldym 发表于 2017-1-25 10:24:51

mark一下,

无薪税绵 发表于 2017-1-25 11:15:21

感觉是编码器没有输出脉冲信号,
建议楼主接示波器测试一下。

五哥1 发表于 2017-1-25 11:50:14

用CUBEMX设置生成一下,和这个进行对比

boboo-23776 发表于 2017-1-25 13:25:15

上示波器看波形先
页: [1] 2
查看完整版本: 编码器应用问题