OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4420|回复: 6

请教STM32F103的编码器使用

[复制链接]

19

主题

45

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1374
金钱
1374
注册时间
2016-2-20
在线时间
335 小时
发表于 2021-10-31 05:50:33 | 显示全部楼层 |阅读模式
1金钱
群里各位,使用103的TIM3做编码器接口,外接增量式1024线编码器,步进电机带动编码器顺时针旋转至最大70°停止。然后让运动部件自由落下,落下时带动编码器反向旋转。运动部件落至0°时会反弹。此时需要迅速判断出编码器的方向改变,锁住运动部件,不让它继续运动。现在的问题是,运动部件落下时,常读到编码器的反向信号(stm32的寄存器里标志位改变),导致运动部件被锁住,不能完成设计功能。有用过的朋友帮忙分析下,是stm32设置错误?或者有什么好方法能正确判断运动方向的标志位?
编码器A接PA6,B接PA7,5V供电。

代码见附件

编码器.zip

2.75 KB, 下载次数: 32

encode

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

592

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1458
金钱
1458
注册时间
2019-7-28
在线时间
137 小时
发表于 2021-11-1 09:47:20 | 显示全部楼层
帮顶                     
回复

使用道具 举报

13

主题

643

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2432
金钱
2432
注册时间
2019-12-28
在线时间
527 小时
发表于 2021-11-1 10:20:22 | 显示全部楼层
帮顶  
回复

使用道具 举报

1

主题

89

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2020-6-12
在线时间
303 小时
发表于 2021-11-1 10:41:19 | 显示全部楼层
本帖最后由 rektito 于 2021-11-1 10:44 编辑

比较像是编码器配置错误。 导致下落时 上下计数。  首先TIM3  IC应该不存在bothedge的硬件。 不能这样配置。  其次TIM_ICInit会覆盖前面TIM_EncoderInterfaceConfig中的一些配置,   (IC中真正有效的只有filter,可以考虑用寄存器配置。或者把encoderconfig挪到后面去。) )

然后给一个我的例程。  (当然计数方向可能与你期望不一致  在这个基础上再修改就可以)(可以先手动步进机(如果可以动的话)测试整个码盘程序的正反转是否正常)
          TIM_DeInit(ENCODER_TIM);
        TIM_TimeBaseStructure.TIM_Period            = ENCODER_PER;           
        TIM_TimeBaseStructure.TIM_Prescaler         = 1-1;           
        TIM_TimeBaseStructure.TIM_ClockDivision     = TIM_CKD_DIV1;         
        TIM_TimeBaseStructure.TIM_CounterMode       = TIM_CounterMode_Up;   
        TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;                 
        TIM_TimeBaseInit(ENCODER_TIM, &TIM_TimeBaseStructure);                     
        
        
        TIM_ICInitStruct.TIM_ICFilter = 4;  
        TIM_ICInitStruct.TIM_Channel = TIM_Channel_1;
        TIM_ICInit(ENCODER_TIM, &TIM_ICInitStruct);
        TIM_ICInitStruct.TIM_Channel = TIM_Channel_2;
        TIM_ICInit(ENCODER_TIM, &TIM_ICInitStruct);
        
  TIM_EncoderInterfaceConfig( ENCODER_TIM,                         //ÅäÖÃÕy½»±àÂëÆ÷½ó¿ú
                                                                TIM_EncoderMode_TI12,              
                                                                TIM_ICPolarity_Rising,               //IC1¼«DÔ
                                                                TIM_ICPolarity_Rising );             //IC2¼«DÔ

        TIM_SetCounter(ENCODER_TIM,ENCODER_INI);   
        TIM_Cmd(ENCODER_TIM, ENABLE);



回复

使用道具 举报

14

主题

821

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2021-7-17
在线时间
659 小时
发表于 2021-11-1 13:38:14 | 显示全部楼层
帮顶  
回复

使用道具 举报

19

主题

45

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1374
金钱
1374
注册时间
2016-2-20
在线时间
335 小时
 楼主| 发表于 2021-11-1 22:56:50 | 显示全部楼层
谢谢指点。在现场调试,才下班。明天照你的查下
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13122
金钱
13122
注册时间
2012-11-26
在线时间
3813 小时
发表于 2021-11-2 10:04:23 | 显示全部楼层
先接示波器,看编码器给的信号有没有问题吧。硬件没问题,再检查软件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-13 21:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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