历史上的今天
返回首页

历史上的今天

今天是:2025年01月29日(星期三)

2019年01月29日 | stm32f4编码器模式

2019-01-29 来源:eefocus

研究编码器的使用,简单总结如下


E6B2-CWZ1X编码器

stm32f407 定时器编码器模式

一、编码器简介

1、分类

编码器可按以下方式来分类。


(1)增量型:

每转过单位的角度就发出一个脉冲信号,通常为A相、B相(某些包括Z相)输出。A相、B相为相互延迟1/4周期的脉冲输出(即正交信号),根据延迟关系可以区别正反转,而且通过取A相、B相的上升和下降沿可以进行2或4倍频。Z相为单圈脉冲,即每圈发出一个脉冲,常用于校正累计误差。


(2)绝对值型:

对应一圈,每个基准的角度发出一个唯一与该角度对应二进制的数值,通过外部记圈器件可以进行多个位置的记录和测量。


2、编码器中的线、位、分辨率


3、编码器原理

  

前文提到编码器通过发送正交脉冲信号表示角度信息,如图为一个示例。(其中TI1和TI2分别对应编码器输出A、B项)


脉冲信号特性 表示信息

两项先后关系 旋转方向

脉冲个数 转过角度

注意到A、B项信号都可能出现毛刺,需要算法修正毛刺


二、stm32f4编码器模式

1、简介

我们可以利用外部中断分别捕获A、B项边沿,手写逻辑消除毛刺并解析编码器数据,但这是比较复杂的。其实这里的脉冲输入是一种特殊的输入捕获情况,因此stm32专门在定时器中提供了编码器模式,可大大简化解析过程。


(1)、stm32f407中定时器1、2、3、4、5、8提供编码器接口模式 

(2)、可以对输入信号TI1,TI2进行滤波处理,数字滤波器由事件器组成,每N个事件才视为一个有效边沿,可以在TIMx_CCMR1、TIMx_CCMR2中的IC1F位域设置 

(3)、stm32提供了单项计数(只能测速度)和双项计数模式(可测速度&方向),双项模式可以更好地消除毛刺干扰,一般使用双项模式,具体见下图 

这里写图片描述

下图为双项模式下计数效果,可见在A、B中仅一项有毛刺时,计数值加减后保持不变,实现了抖动补偿 


这里写图片描述

(4)、 编码器A、B相输入的信号TI1、TI2经滤波和反相后成为TI1FP1 或 TI2FP2 ,定时器的时钟由他们上的每次有效信号转换提供,也就是说最终计数值即反映转过角度。 

(5)、 TI1FP1 或 TI2FP2反相可以改变计数方向,如下图: 

这里写图片描述

(6)、定时器配置为编码器接口模式时,会提供传感器当前位置的相关信息。使用另一个配置为捕获模式的定时器测量两个编码器事件之间的周期,可获得动态信息(速度、加速度和减速度)。 

(7)、计数溢出后,定时器会装载“重装载值”,并清零重新计数,此值可设置为编码器旋转一周的脉冲个数,这样既可利用溢出中断次数判断转了几圈。但若只要求旋转角度,此值可以任意。任意时刻角度为:溢出中断次数*重装载值+当前计数值 

(8)、TIMx_CR1寄存器的 DIR 位指示当前旋转方向


2、示例代码

(1)定时器初始化设置


void TIM3_Int_Init() 

{

    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;

    TIM_ICInitTypeDef TIM_ICInitStructure;

    NVIC_InitTypeDef NVIC_InitStructure;


    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); 


//定时器设置-------------------------------------------------------------    

  TIM_TimeBaseInitStructure.TIM_Period = 3600;  //重装载值

    TIM_TimeBaseInitStructure.TIM_Prescaler=0x0;  //预分频

    TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数

    TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分割


    TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3


//编码器模式设置--------------------------------------------------------------                 


    TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//计数模式3


    TIM_ICStructInit(&TIM_ICInitStructure); 

    TIM_ICInitStructure.TIM_ICFilter = 10;//滤波器值

    TIM_ICInit(TIM3, &TIM_ICInitStructure);

//溢出中断设置--------------------------------------------------------------  

    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许TIM3溢出中断


    NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; 

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; 

    NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x01; 

    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

    NVIC_Init(&NVIC_InitStructure);


 //Reset counter-----------------------------------------------

  TIM_SetCounter(TIM3,0); //TIM3->CNT=0

  TIM_Cmd(TIM3, ENABLE); 

}


(2)在中断服务函数中进行圈数计算


int circle_count=0;//全局变量-圈数

void TIM3_IRQHandler(void)

{

    if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)

    {       

        if((TIM3->CR1>>4 & 0x01)==0) //DIR==0

            circle_count++;

        else if((TIM3->CR1>>4 & 0x01)==1)//DIR==1

            circle_count--;

    }

    TIM_ClearITPendingBit(TIM3,TIM_IT_Update); 

}


(3)获取当前角度值


int Encoder=0;

extern int circle_count;


Encoder=TIM_GetCounter(TIM3)+3600*circle_count;//当前角度


上述代码在stm32f407平台测试通过

使用另一个配置为捕获模式的定时器测量两个编码器事件之间的周期,可获得动态信息(速度、加速度和减速度)。



推荐阅读

史海拾趣

Alpha & Omega Semiconductor(万国半导体)公司的发展小趣事

Alpha & Omega Semiconductor(简称AOS)是一家全球领先的半导体公司,致力于设计、制造和销售高性能、高可靠性的功率半导体产品。以下是Alpha & Omega Semiconductor公司发展的相关故事:

  1. 公司成立和早期发展: Alpha & Omega Semiconductor公司于2000年成立于美国加利福尼亚州的Santa Clara市。公司成立之初,专注于研发和生产功率半导体器件,包括功率MOSFET、IGBT、功率IC和电源管理器件等。通过不断创新和技术突破,公司迅速在市场上建立了良好的声誉,并吸引了投资者的关注。

  2. 技术创新和产品发展: Alpha & Omega Semiconductor公司在功率半导体领域不断进行技术创新和产品研发。他们不断推出新的产品系列,包括低压、中压和高压功率MOSFET、IGBT和功率集成电路等,以满足不同应用领域的需求。公司还专注于提高产品性能、降低功耗,并不断优化产品结构和工艺流程。

  3. 全球化布局和生产基地: 随着业务的不断扩张,Alpha & Omega Semiconductor公司逐步建立了全球化的运营和生产体系。除了总部位于美国的研发中心外,公司还在亚洲地区建立了多个生产基地和销售办事处,包括中国、台湾、韩国和菲律宾等地。这些生产基地不仅提高了产品供应的灵活性和效率,还加强了与当地客户和合作伙伴的合作关系。

  4. 持续投入研发和创新: Alpha & Omega Semiconductor公司持续投入大量资源用于研发和创新,致力于提供行业领先的功率半导体解决方案。公司与全球顶尖的研究机构和合作伙伴合作,共同探索新的材料、工艺和器件结构,以应对不断变化的市场需求和技术挑战。通过持续的技术创新,公司不断拓展产品线,拓展业务领域,并保持了在市场上的竞争优势。

  5. 持续发展和业务拓展: Alpha & Omega Semiconductor公司持续保持业务的稳健增长和发展态势,不断拓展业务范围和市场份额。公司在汽车电子、工业控制、通信设备、消费电子和电源供应等领域取得了广泛的应用,成为了全球领先的功率半导体供应商之一。同时,公司还通过并购和合资等方式,加速业务拓展,拓展了在新兴领域的市场地位。

以上是Alpha & Omega Semiconductor公司发展的相关故事,展示了他们在功率半导体领域的持续创新和不断发展的势头。

Datalinear公司的发展小趣事

在竞争激烈的电子行业中,Datalinear公司意识到单打独斗很难取得长远的发展。因此,公司积极寻求与其他企业的合作。通过与上下游企业的紧密合作,Datalinear公司不仅降低了生产成本,还提高了产品质量和交货速度。此外,公司还与一些科研机构建立了合作关系,共同研发新技术和新产品,实现了共赢的局面。

安信可(Ai)公司的发展小趣事

在不断创新和突破的过程中,安信可不断推出具有创新性的产品。例如,公司推出的WiFi+BLE蓝牙二合一的Ai-WB1系列模组,凭借其高可靠度、高集成度、应用灵活、高性价比等特点,深受市场欢迎。这款产品不仅为智能设备提供了无线通信连接能力,还广泛应用于工业、商业、消费等各类市场,进一步拓展了安信可的应用领域。

联捷(Elinker)公司的发展小趣事

1999年,联捷(Elinker)在浙江的一个小镇上悄然成立,创始人凭借其敏锐的市场洞察力和对电子行业的热情,开始了艰难的创业之旅。初期,公司主要从事低端电子产品的生产和销售,面临着资金短缺、技术落后等重重困难。然而,创始人凭借着坚韧不拔的精神和不断的学习创新,逐渐在市场中站稳了脚跟。

Frolyt Condensers & Elements GmbH公司的发展小趣事

面对电子行业日益增长的定制化需求,Frolyt Condensers & Elements GmbH积极调整策略,提供从设计咨询到产品生产的全方位定制化服务。公司建立了一支专业的技术团队,能够根据客户的具体需求,快速响应并设计出符合要求的电容器产品。这种高度定制化的服务模式赢得了众多客户的信赖和好评,使得Frolyt在竞争激烈的市场中脱颖而出。

GISMA Steckverbinder GmbH公司的发展小趣事

GISMA深知产品质量对于企业生存和发展的重要性。因此,公司建立了完善的质量管理体系,并通过了DIN ISO 9001(DNV)等国际质量认证。这一认证不仅证明了GISMA在产品生产过程中的严格质量控制能力,也为其赢得了更多客户的信任和认可。GISMA始终坚持质量第一的原则,不断提升产品质量和服务水平,确保每一款产品都能达到客户的期望和要求。通过持续的质量管理和改进活动,GISMA在电子行业中树立了良好的品牌形象和口碑。

问答坊 | AI 解惑

【砸分】昨天刚买的实验板,AVR第一个例子中延时程序的几个问题

厂里老大让俺捣鼓AVR,昨天刚买了个MEGA16的实验板。 俺以为以前搞软件的,程序啥的还算凑合。结果修改第一个例程时就卡住了。 /*延时函数*/ void delay_ms(unsigned char i) {         unsigned char a, b, c;     ...…

查看全部问答>

KITL kdstub

我在VS2005里面配置KITL的时候,配置DEBUGGER为kdstub 发现下面有Prompt On Error?? 哪位朋友知道怎么解决的…

查看全部问答>

[Help!]tffs 的 FLASH_BASE_ADRS 怎么确定啊?

44b0x板,FLASH 是 AM29LV160DT   16Mbit/2Mbyte/1Mword 按照 http://www.lwsir.com/ligong/dianzi/200701/17467_3.html 对BSP作了修改。 执行tffsShow -> tffsShow amd29lvMTDIdentify Manufacturer unknown: 0x06 0: **** commu ...…

查看全部问答>

求 AT Command 的资料

如题, 想学习手机开发相关的内容,求高手共享AT command的资料。最好有使用的例子。…

查看全部问答>

路在何方?

这么多年来一直都是用单片机进行开发,最近公司有个项目,用单片机是否不太可能完成。于是公司叫我买了个ARM11的开发板,学习ARM11,并在Windows CE下编程。这是我一直梦想的领域,当然很高兴答应了。通过这么一段时间的学习,感觉非常茫然。我都不 ...…

查看全部问答>

关于AVR熔丝位和时钟的一些问题

今天做AVR定时器0的实验,写一个程序实现1s的定时,下载进去测一下时间还是蛮准的(ISP下载软件设置AVR使用的单片!   机是外部晶振8MHZ)。当修改ISP软件里面有关熔丝位设置时,设置成内部1MHZ时钟源,程序并没有改变,可是定时时间和使用8 ...…

查看全部问答>

主电源驱动边缘做到了小于1uS

这一部分原来是由xu__changhua在调试,近来xu__changhua因故不能再继续做下去了。且也没有得到他的调试数据。所以需要从头开始。 用变压器驱动,电路简单,给电路设计带来很大方便。然而其驱动波形不好,也是最头疼的事。   本驱动变压器使 ...…

查看全部问答>

【视频分享】震撼升级——KeyStone II多内核架构增强功能概览

简介:德州仪器的Ruwanga Dassanayake为你介绍TI KeyStone II多内核架构令人振奋的部分增强功能,为新一代高性能设备奠定基础。   $(\'swf_Ov7\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\ ...…

查看全部问答>