是可爱的乐乐啊 2022-10-19 22:11 采纳率: 33.3%
浏览 86
已结题

F407旋转编码器捕获问题

问题遇到的现象和发生背景

板子是STM32F407,目的是用cube的HAL库配置编码器模式,读取到旋转编码器的旋转方向和计数值

所用旋转编码器:

img


cube代码,TIM3的编码器模式,4分频,上下沿计数,未开中断

img

img

缓慢转动编码器时,PC串口接收到的数据是
编码器计数值为255
编码器计数值为254
编码器计数值为253
编码器计数值为252
依次递减

然后计数方向不断在0和1之间无规律跳动

疑问的是为什么计数值从255开始向下计数,并且无论正转反转都往下计数,计数到0又变回255,接收到的计数方向也跟转动没规律,有时0有时1,cube里改了滤波值也解决不了问题

用代码块功能插入代码,请勿粘贴截图
while (1)
  {    
        HAL_GPIO_WritePin(GPIOF, GPIO_PIN_7, GPIO_PIN_SET);//LED1
        HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8, GPIO_PIN_RESET);//LED2

        count = (uint32_t)__HAL_TIM_GET_COUNTER(&htim3);
        direction = (short)__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3);
        
        Direction= (short)__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3);
        printf("编码器计数值为%d\r\n",count);
        printf("编码器方向为%d\r\n",Direction);
        
        HAL_Delay(1000);
}

我想要达到的结果

想实现初始计数值为0,正转编码器时,计数递增,反转递减,串口能正确打印计数值和计数方向
知道用另一个定时器中断读取也可以,但这样我还是不清楚32的编码器模式有什么用了,为什么用它的读取计数方向和计数功能达不到我的目的

  • 写回答

3条回答 默认 最新

  • Ko-walski 2022-10-19 22:35
    关注
    获得2.25元问题酬金
    评论

报告相同问题?

问题事件

  • 系统已结题 10月27日
  • 修改了问题 10月19日
  • 修改了问题 10月19日
  • 创建了问题 10月19日

悬赏问题

  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问
  • ¥20 汇川小型plc控制小米微电机
  • ¥15 用MATLAB汇总拟合图
  • ¥15 智能除草机器人方案设计
  • ¥15 对接wps协作接口实现消息发送
  • ¥15 SQLite 出现“Database is locked” 如何解决?
  • ¥15 已经加了学校的隶属邮箱了,为什么还是进不去github education?😭
  • ¥15 求会做聚类,TCN的朋友有偿线上指导。以下是目前遇到的问题