OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
楼主: 科科1987

STM32编码器接口模式--寄存器版

  [复制链接]

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2016-1-21
在线时间
18 小时
发表于 2016-2-15 15:32:54 | 显示全部楼层
你好,STM32编码器接口模式,是不是只是适用于电机上的编码器(光电的那种),如果用在机械编码器(ALPS的编码开关)抖动<4ms的机械触点就不行了。
正点原子逻辑分析仪DL16劲爆上市
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2013-6-15
在线时间
32 小时
发表于 2016-2-16 09:22:42 | 显示全部楼层
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
 楼主| 发表于 2016-2-16 14:53:06 | 显示全部楼层
Jerry_9527 发表于 2016-2-15 15:32
你好,STM32编码器接口模式,是不是只是适用于电机上的编码器(光电的那种),如果用在机械编码器(ALPS的 ...

是的
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2014-6-23
在线时间
17 小时
发表于 2016-2-18 16:32:22 | 显示全部楼层
mark~~
回复 支持 反对

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2016-2-18 23:16:40 | 显示全部楼层
本帖最后由 SCREA 于 2016-2-18 23:19 编辑

楼主,抓狂了,帮忙看下,一晚上出来的值一直是ARR的值
先谢谢了
TIM4_CodeInit(399,36);
读取CNT全是399,读数据是从TIM4->CNT读取吧
我用的400线的
[mw_shl_code=applescript,true]void TIM4_CodeInit(u16 arr,u16 psc)
{
        RCC->APB2ENR |= 1<<3;
        GPIOB->CRL &= 0x00ffffff;
        GPIOB->CRL |= 0x44000000;      //浮空输入,PB6/7
        RCC->APB1ENR|=1<<2 ;            /*TIM4时钟使能*/
        RCC->APB1RSTR |= (1<<2);
        RCC->APB1RSTR &= ~(1<<2);
        TIM4->ARR    =arr;                   /*设定计数器自动重装值*/
        TIM4->PSC    =psc;                                 /*预分频器*/
        TIM4->CR1   |=0x0080;             /*ARPE使能, 中央对齐模式2,向上计数*/
        
        TIM4->SMCR  |= 3;                 /*俩通道全用上*/
        TIM4->CCMR1 |= 0x4141;        /*CH1 通道,无预分频器,采样率N=6   CH2同CH1*/
        TIM4->CCER  |= 0x11;             /*CH1、2 捕获发生在 上升沿, 捕获使能*/
        TIM4->CNT    = 0;
        
        TIM4->DIER  |= (1<<6) | 7;    /*允许跟新中断*/
        TIM4->CR1   |=1<<0;            /*使能定时器4*/
//        MY_NVIC_Init(1,2,TIM4_IRQChannel,2);  /*抢占,子优先级3,组2 */
}[/mw_shl_code]
回复 支持 反对

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2016-2-19 08:58:18 | 显示全部楼层
科科1987 发表于 2013-8-9 21:19
回复【26楼】648342243:

                                                                        回复【楼主位】科科1987:
---------------------------------
LZ你好, ...

楼主,我遇到一样的问题。


A相接CH1,B相接CH2.    且 外部电路 都上拉一个电阻。  不对吗?
电源5V,GND都接了
QQ截图20160219085700.png
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
 楼主| 发表于 2016-2-19 09:29:44 | 显示全部楼层
SCREA 发表于 2016-2-18 23:16
楼主,抓狂了,帮忙看下,一晚上出来的值一直是ARR的值
先谢谢了
TIM4_CodeInit(399,36);

TIM4->CCMR1 |= 0x4141;        /*CH1 通道,无预分频器,采样率N=6   CH2同CH1*/
这里为什么要这样设置?
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2016-2-19 09:40:10 | 显示全部楼层
科科1987 发表于 2016-2-19 09:29
TIM4->CCMR1 |= 0x4141;        /*CH1 通道,无预分频器,采样率N=6   CH2同CH1*/
这里为什么要这样设置 ...

框住的就是,通道1、2 都是 的N是6,所以是0x4040

先谢谢楼主及时回答!谢谢了
QQ截图20160219093834.png
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
 楼主| 发表于 2016-2-19 10:44:39 | 显示全部楼层
SCREA 发表于 2016-2-19 09:40
框住的就是,通道1、2 都是 的N是6,所以是0x4040

先谢谢楼主及时回答!谢谢了

400线的编码器,如果AB相向上向下都计数,每转计数400*4=1600
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2016-2-19 10:59:57 | 显示全部楼层
本帖最后由 SCREA 于 2016-2-19 11:35 编辑
科科1987 发表于 2016-2-19 10:44
400线的编码器,如果AB相向上向下都计数,每转计数400*4=1600

你遇到过 这样没 ,  就是  转的时候 CNT 不是0就是ARR 或这ARR-1 ,ARR-2
这是怎么回事啊

-------------------
我的硬件接的 应该正确啊,确实 外部上拉了啊
回复 支持 反对

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2016-2-19 11:07:17 | 显示全部楼层
本帖最后由 SCREA 于 2016-2-19 11:35 编辑
科科1987 发表于 2016-2-19 10:44
400线的编码器,如果AB相向上向下都计数,每转计数400*4=1600

你遇到过 这样没 ,  就是  转的时候 CNT 不是0就是ARR 或这ARR-1 ,ARR-2
这是怎么回事啊


-------------------
我的硬件接的 应该正确啊,确实 外部上拉了啊

回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
 楼主| 发表于 2016-2-19 14:14:13 | 显示全部楼层
SCREA 发表于 2016-2-19 11:07
你遇到过 这样没 ,  就是  转的时候 CNT 不是0就是ARR 或这ARR-1 ,ARR-2
这是怎么回事啊

没有遇到你这种情况,你转动一个很小的角度,计数器数值看有什么变化
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2016-2-19 17:36:26 | 显示全部楼层
本帖最后由 SCREA 于 2016-2-19 17:38 编辑
科科1987 发表于 2016-2-19 14:14
没有遇到你这种情况,你转动一个很小的角度,计数器数值看有什么变化

我想问下楼主,寄存器设置对吗???她们的程序 这个预分频为何  TIM_TimeBaseStructure.TIM_Prescaler = 0x0; // No prescaling


我的主频72Mhz, 改成36Mhz不对吗?
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
 楼主| 发表于 2016-2-20 08:39:57 | 显示全部楼层
SCREA 发表于 2016-2-19 17:36
我想问下楼主,寄存器设置对吗???她们的程序 这个预分频为何  TIM_TimeBaseStructure.TIM_Prescaler = ...

寄存器配置没看到什么错的地方,你再仔细看看。主频改为36M也应该可以。
你可以这样试试:按照我的程序测试一下,如果可以再一步一步改成你现在的,看看问题出在哪里
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2016-2-21 07:50:53 | 显示全部楼层
本帖最后由 SCREA 于 2016-2-21 21:27 编辑
科科1987 发表于 2016-2-20 08:39
寄存器配置没看到什么错的地方,你再仔细看看。主频改为36M也应该可以。
你可以这样试试:按照我的程序 ...

怪我,没仔细看是否上拉成功
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-6-10
在线时间
1 小时
发表于 2016-6-10 20:53:37 | 显示全部楼层
@科科1987
编码器计数,轮子一周正转正常,反转比正转一周多出了三四百个计数:
然后我用51产生一定数量的方波,发现随着频率的升高,编码器计数趋向正常了。
这可能是什么原因
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
 楼主| 发表于 2016-6-11 14:47:44 | 显示全部楼层
STONEK 发表于 2016-6-10 20:53
@科科1987
编码器计数,轮子一周正转正常,反转比正转一周多出了三四百个计数:
然后我用51产生一定数量 ...

计数的时候统计溢出次数了吗?
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2016-4-11
在线时间
10 小时
发表于 2016-10-22 18:59:28 | 显示全部楼层
各位高手,谁有编码器现成的AB倍频 程序 麻烦给传授一下,可以私下交流。邮箱:tzsm_fzy@163.com
回复 支持 0 反对 1

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
 楼主| 发表于 2016-10-24 07:31:07 | 显示全部楼层
yyfnfqp 发表于 2016-10-22 18:59
各位高手,谁有编码器现成的AB倍频 程序 麻烦给传授一下,可以私下交流。邮箱:

配置成在TI1和TI2上计数,例如200线的编码器,每转计数800次。
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-4-16
在线时间
1 小时
发表于 2016-10-31 21:03:00 | 显示全部楼层
如果用编码器模式同时测两个电机的速度,用到两个定时器,该如何设置定时器的中断优先级呢,望大神解答
回复 支持 反对

使用道具 举报

6

主题

305

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2876
金钱
2876
注册时间
2016-7-17
在线时间
404 小时
发表于 2016-11-1 08:33:45 | 显示全部楼层
看见直接操作寄存器就觉得舒服。
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
 楼主| 发表于 2016-11-1 09:24:25 | 显示全部楼层
stephen_young 发表于 2016-10-31 21:03
如果用编码器模式同时测两个电机的速度,用到两个定时器,该如何设置定时器的中断优先级呢,望大神解答

编码器接口模式相当于使用了一个带有方向选择的外部时钟,一般使用定时器计算溢出中断来统计溢出次数,然后再单位时间内统计计数个数来测速,如果ARR配置合适的话,编码器转的很快的时候才会发生溢出中断,也就是说中断发生并不频繁,中断里执行一个overcnt++就行,很短,这2个溢出中断优先级配置成相同也行。
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

21

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2017-3-6
在线时间
32 小时
发表于 2017-7-1 11:52:42 | 显示全部楼层
我用你的程序怎么测出来的脉冲一直为0?
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2017-3-2
在线时间
15 小时
发表于 2017-7-3 12:15:46 | 显示全部楼层
科科1987 发表于 2013-6-10 19:50
回复【19楼】敌害:

                                                                        回复【18楼】科科1987:
---------------------------------
使用CH3和&nbsp;C ...

好像并不可以啊,有具体的修改方法么
回复 支持 反对

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2017-3-2
在线时间
15 小时
发表于 2017-7-3 12:51:33 | 显示全部楼层
murongyiruo 发表于 2013-4-27 10:49
回复【16楼】科科1987:
---------------------------------
void&nbsp;Encoder_Init(void)
{
        /*&nbsp;TIM4 ...

我也是这么改的同样不行,不知道楼主有没有解决
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2014-7-9
在线时间
25 小时
发表于 2017-7-3 13:35:27 | 显示全部楼层
顶下
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2017-7-3
在线时间
0 小时
发表于 2017-7-3 17:55:27 来自手机 | 显示全部楼层
这里怎么使用?
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2017-7-3
在线时间
0 小时
发表于 2017-7-3 17:56:05 来自手机 | 显示全部楼层
我想请教问题
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2017-7-3
在线时间
0 小时
发表于 2017-7-3 17:57:09 来自手机 | 显示全部楼层
我要用TFT显示器,买哪家的好?
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2017-7-3
在线时间
0 小时
发表于 2017-7-3 17:57:42 来自手机 | 显示全部楼层
用什么开发工具好呢?
回复 支持 反对

使用道具 举报

1

主题

10

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2017-7-3
在线时间
0 小时
发表于 2017-7-3 17:58:17 来自手机 | 显示全部楼层
哪位高手请指点一下我。
回复 支持 反对

使用道具 举报

3

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2016-1-16
在线时间
15 小时
发表于 2017-7-4 09:54:17 | 显示全部楼层
棒棒哒
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2017-7-12
在线时间
0 小时
发表于 2017-7-12 20:54:56 | 显示全部楼层
最近在学光电编码器,一点头绪都没,看看楼主的,希望有帮助。
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
 楼主| 发表于 2017-7-15 10:51:16 | 显示全部楼层
我超爱学习 发表于 2017-7-12 20:54
最近在学光电编码器,一点头绪都没,看看楼主的,希望有帮助。

加油
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2017-7-20
在线时间
21 小时
发表于 2017-8-11 21:27:54 | 显示全部楼层
SCREA 发表于 2016-2-21 07:50
怪我,没仔细看是否上拉成功

我也遇到和你一样的问题,请问是如何解决的
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2017-7-20
在线时间
21 小时
发表于 2017-8-11 21:42:03 | 显示全部楼层
请问楼主,用你的程序,读CNT的值就是0或者ARR,请问这是什么问题,是硬件要接上拉电阻吗,第一次用不是很懂
回复 支持 反对

使用道具 举报

28

主题

140

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
461
金钱
461
注册时间
2013-10-18
在线时间
72 小时
发表于 2017-8-14 12:01:25 | 显示全部楼层
DragonZ 发表于 2017-8-11 21:27
我也遇到和你一样的问题,请问是如何解决的

端口上拉就解决了
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2017-5-10
在线时间
2 小时
发表于 2017-12-27 16:25:56 | 显示全部楼层
楼主,你能帮我看看这个编码器的程序吗?计数出来不太对,能帮我解决一下吗

测试速度左右电机.rar

5.41 MB, 下载次数: 151

回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
 楼主| 发表于 2018-2-27 13:26:03 | 显示全部楼层
无限思念 发表于 2017-12-27 16:25
楼主,你能帮我看看这个编码器的程序吗?计数出来不太对,能帮我解决一下吗

寄存器操作需要对仔细研究参考手册,建议使用stm32cubeMX生成编码器配置代码。
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2018-7-27
在线时间
1 小时
发表于 2018-7-27 23:53:02 | 显示全部楼层
楼主,你好。我最近也在用编码器,用的STM32F103RBT6的定时器3的CH1和CH2,使用PC6和PC7重映射,可是读出来的脉冲数不是0就是ARR-1,我看到很多人都遇到这个问题了,可是都没有贴出来解决方法,有说把端口改成上拉的,我改了也没有用,困住几天了,请问能不能给个排错思路?
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
 楼主| 发表于 2018-8-11 14:30:19 | 显示全部楼层
zrm 发表于 2018-7-27 23:53
楼主,你好。我最近也在用编码器,用的STM32F103RBT6的定时器3的CH1和CH2,使用PC6和PC7重映射,可是读出来 ...

建议采用stm32cubeMX来配置寄存器。
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

0

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-6-22
在线时间
10 小时
发表于 2019-7-28 15:24:49 | 显示全部楼层
两个脉冲输入只在TI1计数怎么配置
回复 支持 反对

使用道具 举报

0

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2014-9-18
在线时间
21 小时
发表于 2020-5-10 14:28:45 | 显示全部楼层

谢谢楼主,学习学习。
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2020-8-17
在线时间
5 小时
发表于 2020-8-24 10:52:43 | 显示全部楼层
您好作者,我想问一下,您这个程序我编译了以后,提示没有32f10x_lib头文件,我把这个lib去掉以后就报没有选型号的错误,在修改了define选型以后最终的错误是不存在"stm32f10x_conf.h"这个头文件。请作者指导一下可以吗
回复 支持 反对

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2015-10-24
在线时间
18 小时
发表于 2020-12-2 07:40:16 | 显示全部楼层
科科1987 发表于 2013-8-30 21:17
--
回复【31楼】 simms01 :
---------------------------------

实际使用DIR会误判
回复 支持 反对

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
 楼主| 发表于 2022-8-23 20:46:45 | 显示全部楼层
marshellhu 发表于 2020-8-24 10:52
您好作者,我想问一下,您这个程序我编译了以后,提示没有32f10x_lib头文件,我把这个lib去掉以后就报没有 ...

超出了本帖所讨论的范畴了
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 06:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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