历史上的今天
返回首页

历史上的今天

今天是:2024年12月13日(星期五)

正在发生

2018年12月13日 | STM32之编码器模式学习

2018-12-13 来源:eefocus

一、编码器模式理论储备


通常为了提高精度我们会选择在上升沿和下降沿都进行计数!


在这里插入图片描述


还有一个非常重要的图这里也记录下


在这里插入图片描述


其中让人费解的应该是在第二列的相对信号的电平,这里就来详细谈一下吧。


其实也不难理解哈,我们上面也说了通常为了提高精度会在A、B两相的上升沿和下降沿都进行计数,那么对应在一个周期就可以计数四次,计数次数的增加也就意味着精度的提高!


编码器模式下,如果此时处于正转,那么这四次计数应该都是加的。同理,如果是反转,那么这四次计数都是减的。那么问题来了,如何判断正反转呢?


不就是在相对电平的基础上嘛!!!


在这里插入图片描述


仔细对照图中,在正转或者反转的情况下,A相对B的电平高低以及上表中的计数方向便可了然于心!!!


二、STM32实战代码


对了,必须要说明的是编码器模式下只能对应一个定时器的CH1/CH2通道,也就是刚好接A、B相! Perfect!!!


/*TIM2初始化为编码器接口*/

void Encoder_Init_TIM2(void)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;  

TIM_ICInitTypeDef TIM_ICInitStructure;  

GPIO_InitTypeDef GPIO_InitStructure;


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//使能定时器4的时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能PA端口时钟

 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //端口配置

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入

GPIO_Init(GPIOA, &GPIO_InitStructure);       //根据设定参数初始化GPIOA


TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);

TIM_TimeBaseStructure.TIM_Prescaler = 0x0; // 预分频器 

TIM_TimeBaseStructure.TIM_Period = ENCODER_TIM_PERIOD; //设定计数器自动重装值

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//选择时钟分频:不分频

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;////TIM向上计数  

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//使用编码器模式3

TIM_ICStructInit(&TIM_ICInitStructure);

TIM_ICInitStructure.TIM_ICFilter = 10;

TIM_ICInit(TIM2, &TIM_ICInitStructure);

TIM_ClearFlag(TIM2, TIM_FLAG_Update);//清除TIM的更新标志位

TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);

//Reset counter

TIM_SetCounter(TIM2,0);

TIM_Cmd(TIM2, ENABLE); 

}


/*TIM4初始化为编码器接口*/

void Encoder_Init_TIM4(void)

{

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;  

TIM_ICInitTypeDef TIM_ICInitStructure;  

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);//使能定时器4的时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能PB端口时钟


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; //端口配置

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入

GPIO_Init(GPIOB, &GPIO_InitStructure);       //根据设定参数初始化GPIOB


TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);

TIM_TimeBaseStructure.TIM_Prescaler = 0x0; // 预分频器 

TIM_TimeBaseStructure.TIM_Period = ENCODER_TIM_PERIOD; //设定计数器自动重装值

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//选择时钟分频:不分频

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;////TIM向上计数  

TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//使用编码器模式3

TIM_ICStructInit(&TIM_ICInitStructure);

TIM_ICInitStructure.TIM_ICFilter = 10;

TIM_ICInit(TIM4, &TIM_ICInitStructure);

TIM_ClearFlag(TIM4, TIM_FLAG_Update);//清除TIM的更新标志位

TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);

//Reset counter

TIM_SetCounter(TIM4,0);

TIM_Cmd(TIM4, ENABLE); 

}


/*单位时间编码器计数 输入定时器 输出速度值*/

int Read_Encoder(u8 TIMX)

{

int Encoder_TIM;    

switch(TIMX)

{

case 2:  Encoder_TIM= (short)TIM2 -> CNT;  TIM2 -> CNT=0;break;

case 3:  Encoder_TIM= (short)TIM3 -> CNT;  TIM3 -> CNT=0;break;

case 4:  Encoder_TIM= (short)TIM4 -> CNT;  TIM4 -> CNT=0;break;

default:  Encoder_TIM=0;

}

return Encoder_TIM;

}


void TIM4_IRQHandler(void)

{           

if(TIM4->SR&0X0001)//溢出中断

{                 

}    

TIM4->SR&=~(1<<0);//清除中断标志位     

}


void TIM2_IRQHandler(void)

{           

if(TIM2->SR&0X0001)//溢出中断

{                 

}    

TIM2->SR&=~(1<<0);//清除中断标志位     

}


推荐阅读

史海拾趣

Andon Electronics公司的发展小趣事

Andon Electronics 是一家全球领先的电子元件制造商,以下是该公司发展的相关故事:

  1. 公司成立与初期发展:Andon Electronics 成立于 1984 年,总部位于美国加利福尼亚州。最初,公司主要从事 LED 和其他电子元件的生产和销售。由于对高质量产品和客户服务的执着追求,公司迅速赢得了客户的信任和好评。

  2. 技术创新与产品拓展:随着市场需求的变化和技术的进步,Andon Electronics 不断进行技术创新,并逐步扩大产品线。除了 LED 产品外,公司还推出了多种其他电子元件,包括连接器、电缆组件、线束和传感器等。这些产品在汽车、工业、通信和消费电子等领域得到了广泛应用。

  3. 质量管理和认证:Andon Electronics 一直致力于质量管理和产品认证,确保产品符合国际标准和客户要求。公司拥有 ISO 9001 质量管理体系认证,并不断优化生产流程和质量控制体系,以确保产品质量的稳定性和可靠性。

  4. 全球布局和市场拓展:随着业务的不断发展,Andon Electronics 在全球建立了多个生产基地和销售办事处。除了在美国的总部和生产基地外,公司还在亚洲、欧洲和其他地区设立了办事处和生产工厂,以更好地服务全球客户,并适应当地市场的需求。

  5. 可持续发展和未来展望:Andon Electronics 将继续致力于技术创新、产品拓展和质量管理,以满足客户不断变化的需求。公司将继续关注环保和可持续发展,推动节能减排和资源利用效率的提升。同时,Andon Electronics 也将积极响应行业的变革和挑战,不断调整战略,保持在电子元件制造业的领先地位。

华大北斗(Allystar)公司的发展小趣事

在电子行业中,华大北斗(Allystar)公司以其卓越的技术实力和市场表现脱颖而出,其发展历程中充满了许多引人注目的故事。以下是关于华大北斗发展起来的五个相关故事:

一、华大北斗的南迁之旅

华大北斗的发展史上,一个重要的节点是2016年的南迁。当时,华大北斗主动选择深圳作为新的研发总部所在地,这是基于深圳电子制造业的雄厚基础和良好的创新环境。在短短几个月内,华大北斗完成了研发环境的选址与装修、研发团队的组建以及实验设备的部署,展现了其高效的执行力。这一举措得到了深圳市政府及各级领导的高度关注与认可,华大北斗也被列为深圳市重点引进的战略项目。

二、北斗芯片技术的突破

华大北斗在北斗芯片技术方面取得了重大突破。公司成功研发出支持北斗三号信号体制的多系统多频高精度SoC芯片,这一成果在芯片多频定位方面取得了重要进展。该芯片集成了射频、基带、处理器、存储器等单元,不仅大幅缩小了芯片尺寸,还优化了功耗,实现了单芯片双频北斗高精度定位一体化SoC解决方案。这一技术的突破为北斗应用的自主可控提供了关键支持,推动了北斗产业化、国际化、规模化应用的进程。

三、高精度芯片进入共享单车市场

随着共享经济的兴起,共享单车市场蓬勃发展。华大北斗凭借其高精度芯片技术,成功进入了共享单车市场。其高精度芯片为共享单车提供了精准的定位服务,有效提升了用户体验和车辆管理效率。这一成功应用不仅展示了华大北斗技术的市场竞争力,也为其在更多领域的应用提供了广阔的空间。

四、双频北斗手机的面市

基于华大北斗双频北斗芯片研发的全球首款双频北斗手机的面市,是华大北斗发展历程中的又一里程碑。这款手机的推出,标志着北斗导航技术在智能手机领域的成功应用,也展示了华大北斗在推动北斗产业化进程中的积极作用。双频北斗手机的出现,不仅提升了用户体验,也为北斗导航技术的普及和推广做出了贡献。

五、斩获香港环球创新奖

2023年,华大北斗荣获首届香港环球创新奖年度创新大奖,这是对其在北斗导航芯片领域技术创新和产业化应用的高度认可。这一奖项的获得,不仅提升了华大北斗的品牌形象和市场影响力,也为其在未来的发展中注入了强大的动力。华大北斗将继续坚持技术创新,针对行业应用的不同需求,用领先的技术研发和应用能力推动北斗产业的高质量规模化发展。

这些故事只是华大北斗发展历程中的一部分,但它们足以展现出华大北斗在电子行业中的技术实力和市场竞争力。华大北斗将继续秉持创新精神,不断推动北斗导航技术的发展和应用,为电子行业的进步做出更大的贡献。

集创北方(CHIPONE)公司的发展小趣事

近年来,集创北方在电子行业的地位日益稳固。从2019年到2021年,公司的营收实现了飞跃式增长,从14.47亿元增长至56.74亿元,复合增长率高达98%。这一成绩的背后,是公司不断创新、积极应对市场变化的结果。

EQCOLOGIC公司的发展小趣事

为了进一步提升公司的竞争力和市场份额,EQCOLOGIC公司决定实施国际化战略。公司积极参与国际电子展会和交流活动,与国际同行建立广泛的合作关系;同时,还加大在海外市场的投入力度,拓展销售渠道和市场份额。通过不断的努力和创新,EQCOLOGIC的产品逐渐打入国际市场,公司的国际化战略也取得了显著成效。

Condor公司的发展小趣事

随着环保意识的日益增强,电子行业对环保的要求也越来越高。EQCOLOGIC公司积极响应环保号召,将环保理念贯穿于产品研发、生产和销售的各个环节。公司采用环保的生产工艺和材料,减少污染物的排放;同时,还开展了一系列环保宣传活动,提高员工和消费者的环保意识。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了基础。

Cobham Semiconductor Solutions公司的发展小趣事

作为一家有社会责任感的企业,Cobham Semiconductor Solutions不仅关注自身的发展,还积极履行社会责任。公司积极参与公益事业,为社区提供支持和帮助。同时,公司还注重环保和可持续发展,采取多项措施降低生产过程中的能耗和排放。这种积极履行社会责任的态度,使得Cobham在社会各界赢得了广泛赞誉。

这五个故事虽然基于虚构的情节,但它们都反映了Cobham Semiconductor Solutions在电子行业发展的真实背景和趋势。这些故事展示了公司在技术创新、市场扩张、品质管理、人才战略和社会责任等方面的努力和成就。希望这些故事能够为您提供一个关于Cobham Semiconductor Solutions发展起来的有趣而全面的视角。

问答坊 | AI 解惑

[方案]某监狱闭路电视监控系统设计方案--3

4、显示与记录 显示与记录设备安装在控制室内,主要有监视器、硬盘录像机和一些视频处理设备。 现在有一种电视监控系统把云台、变焦镜头和摄像机封装在一起组成一体化摄像机。它们配有高级的伺服系统,云台具有很高的旋转速度,还可以预置监视点和 ...…

查看全部问答>

希望对初次接触mini2440的朋友有些帮助~~

在百问网,看到了如下一段对话,希望别人的经验可以对大家有用: “求助站长,想做Linux驱动,该如何循序渐进? 我做之前是做单片机开发的,最近买了mini2440,和嵌入式Linux完全手册。学习上下了如下功夫: 1.裸机的上程序跑了一遍也消化了许多 ...…

查看全部问答>

开关电源设计手册

本帖最后由 paulhyde 于 2014-9-15 03:29 编辑 开关电源设计手册.pdf供大家参考  …

查看全部问答>

PMSM

PMSM3—2中的SMCPOS是针对什么样的PMSM的啊,凸极的还是面贴式的啊?…

查看全部问答>

请高手指点,关于p89v51rd2的ISP功能

刚刚用p89v51rd2做好的板子,基本上是最小系统,有三个问题请高手指点: (1)据说p89v51rd2里面有最小系统测试程序,上电复位后,串口会不断收到“D”,我连接上串口,并没有发现收到任何东西 (2)上电后,说是默认IO口为高电平,但是测量发现P0 ...…

查看全部问答>

急问!IAR环境下参数的问题

我在IAR调试模式下,我的局部变量在locals窗口中总是显示unavailable,用watch窗口下也一样,一直没找到原因,请各位帮助一下!!!急用,谢谢!…

查看全部问答>

给程序挑错

library IEEE ;use IEEE.std_logic_1164.all ;use IEEE.std_logic_unsigned.all ;use IEEE.numeric_std.all ;entity key1 isport ( Clk_I   : in std_logic ;        Rst_I   : in std_logic ;& ...…

查看全部问答>

430焊好后发现有些管脚被接地了!!!

我P11.2口奇怪的被接地了!与它相连的管脚P11.2没接地,还有一个脚是电源脚,也没接地,但是就是发现它和地短了,除了这个IO不能用了外其他IO都可以用,求高手解释!是我芯片坏了吗?…

查看全部问答>

LPC IAP应用开发与仿真

随着技术的不断发展,IAP不在陌生,很多产品上都实现了IAP的应用。特别是ARM芯片上,由于其足够的Flash和内存空间,以及简单方便的IAP开发,使得用其开发的产品上使用IAP成为必然。       IAP的方式有很多,比较流行的有UART ...…

查看全部问答>