最近在调试平衡小车,在网上找到的关于直流电机编码器的使用源码。查看stm32使用手册可以看到如下的配置,和图片。基本上程序也是这样去设置的相关寄存器的。

如果TI1和TI2分别接电机的A相和B相的话,那么,当电机正转的时候,如下图计数器回想上计数,反转的时候会向下计数,注意了这个向下计数并不会出现负的值,依旧是从(0-ARR)计数。

这种模式的好处:1.上升沿和下降沿都会计数,所以被软件4倍频了。2.当某一相有毛刺的时候,计数器会在硬件上停止计数。

下面看网上找到的代码。

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;

}

上面这样传进去要读的定时器,返回的是相关编码器的速度值。但是为什么,会是一个负数呢。计数器只能计数(0-ARR)

注意看上面使用了强制类型装换。把寄存器的值读出来了之后,转换成了short型(2字节,32位系统下),范围为(-32768-32767),此时当我们把计数器的初始值设置为0之后,如果出现反转,它就会从0开始向下计数(0,65535,65534,...)但是经过强制类型转换之后就变成了(0,-1,-2,...)。

为什么65535会变成-1这是我不能理解的,此时我们回到short的表示范围(-32768-32767),也就是说当读出来的值为(32767,  32768, 32769,...,65535,65536,65537...)的时候会因为溢出而转换为

(32767,-32768,-32767,...,   -1,      ,0,       , 1)就这样不断地循环下去。所以我们的电机反转的时候读出的数就是反方向的速度值。而不必用65535去减去读出的值再加上负号才可以的到方便观察的值。只需要一个强制类型转换就可以了。

stm32 负数_stm32中编码器模式读出“负数”的问题相关推荐

  1. STM32之通用定时器编码器模式

    1.编码器原理 如果两个信号相位差为90度,则这两个信号称为正交.由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向.根据每个信号脉冲数量的多少及整个编码轮的周长就可以算出当前行走的距 ...

  2. stm32采集脉冲信号_STM32 TIM 编码器模式采集编码器信号

    layout: post tags: [STM32] comments: true 什么是正交解码? 对于常用增量式编码器,光学编码器,采用带槽圆盘,一侧是发射光线的发射端,而光电晶体管在相对的一侧. ...

  3. STM32和定时器:编码器模式

    在本指南中,我们将介绍如何使用STM32的TIM2读取轴编码器. 我们将介绍以下内容: 什么是编码器 所需部件和连接 配置引脚和定时器以读取编码器 演示代码 1.1 什么是编码器: 旋转编码器,也称为 ...

  4. STM32学习笔记——基于正点原子例程编码器模式小结

    STM32学习笔记--基于正点原子例程编码器模式小结 最近一段时间学习了,STM32f4的编码器功能,经过自己探索和他人的热心帮助,对于编码器模式有了一定了解.STM32f4单片机提供编码器模式,以便 ...

  5. STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式

    机器人开发过程中,对于直流电机来说,编码器至关重要,它不仅可以使我们对电极进行精确的速度闭环,位置闭环,还可以通过时间积分,根据运动学关系,获得速度.位置等信息 STM32的定时器有编码器模式,大大的 ...

  6. STM32之增量式编码器电机测速

    STM32之增量式编码器电机测速 编码器 编码器种类 按监测原理分类 光电编码器 霍尔编码器 按输出信号分类 增量式编码器 绝对式编码器 编码器参数 分辨率 精度 最大响应频率 信号输出形式 编码器倍 ...

  7. 【STM32】 定时器---正交解码编码器模式详解

    增量式编码器 增量式编码器也成为正交编码器,是通过两个信号线的脉冲输出来进行数据处理,一个输出脉冲信号就对应于一个增量位移,编码器每转动固定的位移,就会产生一个脉冲信号  通过读取单位时间脉冲信号的数 ...

  8. STM32定时器---正交编码器模式详解

    编码器分类: 按工作原理:光电式.磁电式和触点电刷式 按码盘的刻孔方式:增量式和绝对式两类 由于博主接触面还不是很广,一共就用过两个种类的编码器,都是属于光电的 差分编码器:一般由8根线连接 信号线分 ...

  9. stm32编码器正反转计数程序_第六章:STM32CubeMx 定时器编码器模式基本使用方法...

    前言: 增量式编码器在实际应用中还是很常见.stm32的定时器带的也有编码器模式.所用的编码器是有ABZ三相,其中ab相是用来计数,z相输出零点信号.AB相根据旋转的方向不同,输出的波形如下图所示: ...

最新文章

  1. 任务调度器leetcode621
  2. 【Deep Learning笔记】循环神经网络
  3. SQLSERVER数据库日志文件过大,如何压缩并定期清理 ?
  4. 团队博客第五周 运行与总结
  5. 除了TensorFlow、PyTorch,还有哪些深度学习框架值得期待?
  6. 以下哪些参数不是sqlmap中的_变频器控制中必须要设置哪些参数?
  7. JavaScript--百度地图那些坑
  8. 转载 JavaScript的24条实用建议
  9. 363.矩形区域不超过K的最大数值和
  10. Chrome(谷歌浏览器)插件资料 !
  11. 微电网逆变器VF控制_SIMULINK_模型搭建详解_附加“仿真教程”
  12. Android Jetpack组件(九)DataStore
  13. vscode: Code Runner直接运行多文件C++程序
  14. 相亲聊什么?想要避免尬聊,就从这6个话题入手
  15. 时间复杂度的三种常见表示符号
  16. 在mtk移植个linux内核,移植 Linux Kernel 造成無法開機之解決方案以及除錯工具
  17. scanf函数的返回值以及在while循环中的应用
  18. 分布式存储与集中式存储
  19. 如何使用ReadProcessMemory读取多重指针
  20. STA series --- 8.Timing Verification (PARTII)

热门文章

  1. 前端项目:基于Nodejs+vue开发实现高校学院网站系统
  2. 如何快速为视频添加ai字幕的解决方案
  3. fiddler启动后浏览器不能上网问题解决
  4. 申请SSL证书需要多长时间
  5. 学生机房虚拟化(六)使用Clonezilla克隆Linux系统
  6. 更换Latex模板后部分包的参数失效问题的解决方案(如xcolor,algorithm2e)
  7. 这是我见过最牛逼的滑动加载前端框架
  8. 支付宝AR扫福是怎么实现的?
  9. Ubuntu下用Emacs编写D语言程序
  10. 编写程序FooBizBaz.java,从1循环到150并且在每行打印一个值,另外在每个3的倍数行上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印输出“baz”。