增量式编码器定时器配置和速度计算的处理方法

MCU定时器的CNT寄存器一般是16位的,使用定时器的编码器正交接口功能,计数周期有两种配置方法:
1、计数周期与编码器脉冲数相等

TIM_TimeBaseStructure.TIM_Period = (uint16_t)(PulseNumber) - 1u; 

好处就是转子电角度获取不用做处理,由当前CNT计数值可以很方便对应到转子电角度。

缺点则是圈数计数溢出时,位置计数没有达到有符号2进制的溢出但被强制处理,也就是说位置计数不能在数据格式里完成连续循环,这样在溢出点前后数据就不连贯。如果使用位置信息计算转速,在溢出点前后的两次位置数据相减就会得到错误的速度,这样为保证测速的连贯性,就需要对位置信息做移位处理,这样就限制了编码器脉冲数必须为2的次数,或者速度计算不采用位置数据,记录两次的圈数和脉冲,分开相减后再处理,这样就避免溢出点的问题了。但即使这样正确处理了速度计算,编码器最大支持脉冲仍不能大于65535。

2、计数周期等于65535

TIM_TimeBaseStructure.TIM_Period = 65535; 

好处很明显,这样可以保证位置信息的连贯性,速度计算也不需要特殊处理,直接使用位置信息计算就可以,并且对编码器脉冲数也没有限制,可以支持很高精度的编码器。

缺点则是无法从CNT中直接得到当前的转子电角度,需要从位置信息中处理得到,不过处理也不复杂,可以说方法2适应性更好。

时间: 2024-10-13 02:44:01

增量式编码器定时器配置和速度计算的处理方法的相关文章

增量式编码器专题

编码器简介 编码器(encoder)把角位移或直线位移转换成电信号,前者称为码盘,后者称为码尺. 按照工作原理编码器可分为增量式和绝对式两类: ①增量式编码器: 将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小.通常为A相.B相.Z相输出,A相.B相为相互延迟1/4周期的脉冲输出,根据延迟关系可以区别正反转,而且通过取A相.B相的上升和下降沿可以进行2或4倍频:Z相为单圈脉冲,即每圈发出一个脉冲. ②绝对式编码器: 每一个位置对应一个确定的数字码,因此它的示值

利用stm32自带的正交编码器检测增量式编码器流程总结

由于手术的工频升级机需要自动平层功能,于是着手开始做这方面的工作.硬件选择的是增量式编码器,100脉冲每转,后来了解到stm32的每个定时器的通道1和通道2内置了正交编码器模块,可以直接使用.之前的公司工程师都是用定时器捕捉脉冲,然后自行处理的,我看了下代码挺麻烦的,现在用了stm32自带的感觉就容易多了.找了官方的软件说明,看了下网上已有的例子,一个下午就基本在我的系统架构中添加了这个设备,然后对这个设备初始化,设置上层接口API.最后看些例子将16位计数器软件扩展到32位.就顺利的完成了基本

STM32定时器输出PWM频率和步进电机控制速度计算

1.STM32F4系列定时器输出PWM频率计算 第一步,了解定时器的时钟多少: 我们知道AHP总线是168Mhz的频率,而APB1和APB2都是挂在AHP总线上的. (1)高级定时器timer1, timer8以及通用定时器timer9, timer10, timer11的时钟来源是APB2总线(2)通用定时器timer2~timer5,通用定时器timer12~timer14以及基本定时器timer6,timer7的时钟来源是APB1总线 从STM32F4的内部时钟树可知: 当APB1和APB

增量式PID的stm32实现(转)

源:增量式PID的stm32实现,整定过程 首先说说增量式PID的公式,这个关系到MCU算法公式的书写,实际上两个公式的写法是同一个公式变换来得,不同的是系数的差异. 资料上比较多的是: 还有一种是: 感觉第二种的Kp Ki Kd比较清楚,更好理解,下面介绍的就以第二种来吧.(比例.积分.微分三个环节的作用这里就详细展开,百度会有很多) 硬件部分: 控制系统的控制对象是4个空心杯直流电机,电机带光电编码器,可以反馈转速大小的波形.电机驱动模块是普通的L298N模块. 芯片型号,STM32F103

无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)

1.smartimageview使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"

quartz_spring 定时器配置

quartz:石英,表达精确准时的意思. quartz-all-1.6.1.jar 主要用于定时任务管理. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

增量式强化学习

线性逼近: 相比较于非线性逼近,线性逼近的好处是只有一个最优值,因此可以收敛到全局最优.其中为状态s处的特征函数,或者称为基函数. 常用的基函数的类型为: 增量式方法参数更新过程随机性比较大,尽管计算简单,但样本数据的利用效率并不高.而批的方法,尽管计算复杂,但计算效率高. 批处理方法: 深度强化学习: Q-learning方法是异策略时序差分方法.其伪代码为: 离策略:是指行动策略(产生数据的策略)和要评估的策略不是一个策略.在图Q-learning 伪代码中,行动策略(产生数据的策略)是第5

爬虫 + 数据分析 - 7 CrawlSpider(全站爬取), 分布式, 增量式爬虫

一.全站爬取(CrawlSpider) 1.基本概念 作用:就是用于进行全站数据的爬取 - CrawlSpider就是Spider的一个子类 - 如何新建一个基于CrawlSpider的爬虫文件 - scrapy genspider -t crawl xxx www.xxx.com - LinkExtractor连接提取器:根据指定规则(正则)进行连接的提取 - Rule规则解析器:将链接提取器提取到的链接进行请求发送,然后对获取的页面数据进行 指定规则(callback)的解析 - 一个链接提

python爬虫---CrawlSpider实现的全站数据的爬取,分布式,增量式,所有的反爬机制

CrawlSpider实现的全站数据的爬取 新建一个工程 cd 工程 创建爬虫文件:scrapy genspider -t crawl spiderName www.xxx.com 连接提取器LinkExtractor 可以根据指定的规则对指定的连接进行提取 提取的规则就是构造方法中的allow('正则表达式')参数决定 规则解析器Rule 可以将将连接提取器提取到的连接进行请求发送,可以根据指定的规则(callback)对请求到的数据进行解析 follow=True:将连接提取器 继续作用到