搜索
bottom↓
回复: 6

STM8 接 正交编码器 遇到一个奇怪问题

[复制链接]

出0入0汤圆

发表于 2020-9-23 10:02:08 | 显示全部楼层 |阅读模式
本帖最后由 huangyiting1990 于 2020-9-23 17:25 编辑

  我用 STM8L052RB   TIM1 接正交编码器遇到一个很奇怪的问题  :编码器计数起始为 0 , 如果我正向旋转(计数累加) , 一切正常 , 比如正向旋转 10 刻度 , 计数会累加到 10 ; 这时候反向旋转10刻度, 计数会减少到 0 ; 但是如果我起始为0时, 反向旋转10刻度 , 计数并不能如期望的那样 减成 (最大计数 - 10) , 而且步调也乱了(顺着一个方向旋转 , 有时是加 , 有时候是减,没有规律) , 即使这个时候,我正向旋转,现象依然不正常。
  有没有人遇到过我这种问题?
  我的初始化程序如下 :
  1.           //打开外设TIM1时钟
  2.           CLK -> PCKENR2 |= (1<<1);
  3.        
  4.         //输入 IO 初始化
  5.         GPIOD -> CR1 |=  ((1<<2)|(1<<4)) ;                        
  6.         GPIOD -> CR2 &= ~((1<<2)|(1<<4)) ;
  7.         GPIOD -> DDR &= ~((1<<2)|(1<<4)) ;
  8.        
  9.         TIM1_TimeBaseInit(15 , TIM1_CounterMode_Down , 10000,0);
  10.         TIM1_ICInit(TIM1_Channel_1 ,
  11.                     TIM1_ICPolarity_Rising ,
  12.                     TIM1_ICSelection_DirectTI,
  13.                     TIM1_ICPSC_DIV1,
  14.                     0x03);
  15.         TIM1_EncoderInterfaceConfig(TIM1_EncoderMode_TI1 , TIM1_ICPolarity_Rising , TIM1_ICPolarity_Rising);
  16.         TIM1_ARRPreloadConfig(ENABLE);
  17.        
  18.        
  19.         TIM1_Cmd(ENABLE);
复制代码



-===================================================
暂时没找到问题,但是用一个比较粗暴的办法掩盖了这个问题 :
  每次输入捕获溢出后,关掉 TIM1 , 重新初始化一遍(暂时测试还OK)
                                                                                                

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入1074汤圆

发表于 2020-9-23 10:13:42 | 显示全部楼层
本帖最后由 Himem 于 2020-9-23 10:15 编辑

以前遇到过类似问题,调了半天发现是编码器接触不良

摘了段之前用003的项目里编码器初始化代码
  1.     GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT); //enc_1
  2.     GPIO_Init(GPIOC, GPIO_PIN_7, GPIO_MODE_IN_PU_NO_IT); //enc_2

  3.     TIM1_DeInit();
  4.     CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1,ENABLE);
  5.     TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_DOWN , 255, 0);
  6.     TIM1_EncoderInterfaceConfig(TIM1_ENCODERMODE_TI1, TIM1_ICPOLARITY_RISING, TIM1_ICPOLARITY_RISING);
  7.     TIM1_ICInit(TIM1_CHANNEL_1, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI,  TIM1_ICPSC_DIV2, 0);
  8.     TIM1_ICInit(TIM1_CHANNEL_2, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI,  TIM1_ICPSC_DIV2, 0);
  9.     TIM1_ARRPreloadConfig(ENABLE);
  10.     TIM1_Cmd(ENABLE);

  11.     //ENC = TIM1_GetCounter();
复制代码

出1315入193汤圆

发表于 2020-9-23 10:32:23 | 显示全部楼层
逻辑分析仪先确定编码器没有问题  因   市场上面劣质的编码器多得很   玻璃码盘改为塑料的   变形成为必须   
都是  打价格战的最终结果

出0入0汤圆

 楼主| 发表于 2020-9-23 10:34:02 | 显示全部楼层
lb0857 发表于 2020-9-23 10:32
逻辑分析仪先确定编码器没有问题  因   市场上面劣质的编码器多得很   玻璃码盘改为塑料的   变形成为必须  ...

逻辑分析仪抓的波形没有问题 , 基本能确定是 我单片机代码问题。    我再查是不是我初始化,或者什么问题

出0入0汤圆

 楼主| 发表于 2020-9-23 10:34:38 | 显示全部楼层
Himem 发表于 2020-9-23 10:13
以前遇到过类似问题,调了半天发现是编码器接触不良

摘了段之前用003的项目里编码器初始化代码

编码器的问题可能性不大 , 用逻辑分析仪抓过波形是对的

出100入0汤圆

发表于 2020-9-23 16:31:33 | 显示全部楼层
难道不是signed和unsigned的问题?

出0入0汤圆

 楼主| 发表于 2020-9-23 16:41:54 | 显示全部楼层
wochai 发表于 2020-9-23 16:31
难道不是signed和unsigned的问题?

这用的是硬件接口 , 直接读 TIM1 输入捕获寄存器 , 不存在符号问题....
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-3 20:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表