zoukankan      html  css  js  c++  java
  • 增量式编码器简介

    1.工作原理 
       旋转编码器是一种采用光电等方法将轴的机械转角转换为数字信号输出的精密传感器,分为增量式旋转编码器和绝对式旋转编码器。
       光电增量式编码器的工作原理如下:随转轴一起转动的脉冲码盘上有均匀刻制的光栅,在码盘上均匀地分布着若干个透光区段和遮光区段。
       增量式编码器没有固定的起始零点,输出的是与转角的增量成正比的脉冲,需要用计数器来计脉冲数。每转过一个透光区时,就发出一个脉冲信号,计数器当前值加1,计数结果对应于转角的增量。
       增量式编码器的制造工艺简单,价格便宜,有时也用来测量绝对转角。

    2.增量式编码器的分类
       1)单通道增量式编码器内部只有一对光电耦合器,只能产生一个脉冲序列。
       2)AB相编码器内部有两对光电耦合器,输出相位差为90°的两组脉冲序列。正转和反转时两路脉冲的超前、滞后关系刚好相反。由下图可知,在B相脉冲的上升沿,正转和反转时A相脉冲的电平高低刚好相反,因此使用AB相编码器,单片机可以很容易地识别出转轴旋转的方向。
             需要增加测量的精度时,可以采用4倍频方式,即分别在A、B相波形的上升沿和下降沿计数,分辨率可以提高4倍,但是被测信号的最高频率相应降低。


      3)三通道增量式编码器内部除了有双通道增量式编码器的两对光电耦合器外,在脉冲码盘的另外一个通道有1个透光段,每转1圈,输出1个脉冲,该脉冲称为Z相零位脉冲,用做系统清零信号,或坐标的原点,以减少测量的积累误差。



    附AB项编码器计数程序:(两个编码器,计数正反转脉冲、stm32RBT6主控)

    ……

    signedint counter_l,counter_r;

    ……

    //外部中断0服务程序

    voidEXTI0_IRQHandler(void)                     //A相PA0  B相PA14

    {

              if(PAin(14)==1)        counter_r--;

              else                           counter_r++;

              EXTI->PR=1<<0;  //清除LINE0上的中断标志位

    }

    //外部中断15_10服务程序

    void EXTI15_10_IRQHandler(void)          //A相PA13  B相PA11

    {

             if(PAin(11)==1) counter_l++;

             else                     counter_l--;

            EXTI->PR=1<<13;     //清除LIN13上的中断标志位

    }

    void EXTIX_Init(void)                  //相关初始化

    {

             RCC->APB2ENR|=1<<2;     //使能PORTA时钟

             JTAG_Set(JTAG_SWD_DISABLE);  

            

             GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入 

             GPIOA->CRL|=0X00000008; 

             GPIOA->CRH&=0XFF0FFFFF;//PA13设置成输入     

             GPIOA->CRH|=0X00800000;                                

            

             GPIOA->CRH&=0XFFFF0FFF;

             GPIOA->CRH|=8<<12;      //PA11设置成输入

             GPIOA->CRH&=0XF0FFFFFF; //PA14设置成输入           

             GPIOA->CRH|=8<<24;

             Ex_NVIC_Config(GPIO_A,0,FTIR); //下降沿触发

             Ex_NVIC_Config(GPIO_A,13,FTIR);

            

             MY_NVIC_Init(3,2,EXTI0_IRQChannel,2);        //抢占2,子优先级2,组2

             MY_NVIC_Init(3,2,EXTI15_10_IRQChannel,2); 

    }


    参考网站:http://blog.gkong.com/liaochangchu_132825.ashx


  • 相关阅读:
    导航控制器的出栈
    UIPickView的基本使用
    多控制器
    通过Xib加载控制器的View
    从StoryBoard加载控制器
    模仿UIApplication单例
    LaunchScreen原理
    UIWindow
    指定初始化的运用
    零长度数组在内核中的运用
  • 原文地址:https://www.cnblogs.com/yucen/p/9343586.html
Copyright © 2011-2022 走看看