OpenEdv-开源电子网

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

带霍尔传感器编码器的直流减速电机测速原理讲解(附源码)

  [复制链接]

0

主题

1

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2019-11-15
在线时间
6 小时
发表于 2019-12-29 20:46:16 | 显示全部楼层
1209943162 发表于 2019-8-4 17:51
我定时器定时的是50ms,就是说我记录的是50ms的脉冲数,你要算速度的话,即每秒转多少圈,你就要把50ms记 ...

楼主,你这个50ms是在哪里设置的,新手求教
正点原子逻辑分析仪DL16劲爆上市
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2019-10-22
在线时间
4 小时
发表于 2020-2-2 13:51:41 | 显示全部楼层
1209943162 发表于 2019-11-22 17:11
这个就是你得到的脉冲数是线数*4的原因,这一步设置的就是编码器模式3。在编码器模式3下,你看懂那个图后 ...


看中文参考手册,那个图的例子是上下边沿都检测,所以是4倍频。但如果都检测上升沿的话,应该是2倍频。个人觉得,要想4倍频,就要选择上下边沿检测
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
220
金钱
220
注册时间
2020-1-8
在线时间
42 小时
发表于 2020-2-2 18:02:56 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2019-10-22
在线时间
4 小时
发表于 2020-2-3 10:47:55 | 显示全部楼层
有为青年 发表于 2019-11-22 15:47
楼主,还要麻烦您解答一下:    TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12,TIM_ICPolarity_Ri ...

对,你的想法是对的,上面的说法包括楼主的说法应该不正确。各位,冒犯了。
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-8-3
在线时间
9 小时
发表于 2020-3-7 01:11:35 | 显示全部楼层
楼主您好,你这个计算一个时间转过的脉冲数中的一个时间指的是多长时间啊,该怎么理解?还有编码器溢出的次数不是在开头已经定义了吗,为什么在读取编码器计数时又重新定义了一个溢出次数变量呢?请您抽时间帮我解答一下,谢谢大佬。
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-8-3
在线时间
9 小时
发表于 2020-3-7 01:16:54 | 显示全部楼层
楼主您好,我想问一下,在读取计数器值时,计算出一个时间转过的脉冲数,一个时间怎么理解?还有编码器溢出次数不是在函数开始已经定义了吗?为什么在读取计数器的函数中又重新定义了?您抽时间帮我解答一下吧,谢谢啦
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-8-3
在线时间
9 小时
发表于 2020-3-7 01:18:02 | 显示全部楼层
楼主您好,我想问一下,在读取计数器值时,计算出一个时间转过的脉冲数,一个时间怎么理解?还有编码器溢出次数不是在函数开始已经定义了吗?为什么在读取计数器的函数中又重新定义了?您抽时间帮我解答一下吧,谢谢啦
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-8-3
在线时间
9 小时
发表于 2020-3-7 01:21:46 | 显示全部楼层
楼主您好,我想问一下,在读取计数器值时,计算出一个时间转过的脉冲数,一个时间怎么理解?还有编码器溢出次数不是在函数开始已经定义了吗?为什么在读取计数器的函数中又重新定义了?您抽时间帮我解答一下吧,谢谢啦
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-8-3
在线时间
9 小时
发表于 2020-3-7 01:23:55 | 显示全部楼层
楼主您好,我想问一下,在读取计数器值时,计算出一个时间转过的脉冲数,一个时间怎么理解?还有编码器溢出次数不是在函数开始已经定义了吗?为什么在读取计数器的函数中又重新定义了?您抽时间帮我解答一下吧,谢谢啦
回复 支持 反对

使用道具 举报

3

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2019-7-9
在线时间
27 小时
发表于 2020-3-12 16:44:42 | 显示全部楼层
好东西不错啊
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-8-3
在线时间
9 小时
发表于 2020-3-12 22:14:33 | 显示全部楼层
15197718816dlc 发表于 2019-7-25 20:52
老哥 讲的很透彻,我喜欢实战派,不喜欢理论派,嘿嘿:

您好,这个代码你有没有调试过,可以读到定时器计数器的值吗
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-8-3
在线时间
9 小时
发表于 2020-3-12 22:15:51 | 显示全部楼层

您好,这个代码您有没有调试过,能否输出定时器计数器的值。
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-8-3
在线时间
9 小时
发表于 2020-3-12 22:17:48 | 显示全部楼层
how2051 发表于 2019-7-29 10:52
嗯,很感谢你的回复,不好意思现在才看到你的回复,没能及时回复你。
但是在你帖子留言之后我自己又去琢 ...

您好,这个代码你有没有调试过,能否读出定时器计数器的值
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-8-3
在线时间
9 小时
发表于 2020-3-12 22:24:29 | 显示全部楼层

您好,这个代码你有没有调试过,能否读出定时器计数器的值
回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2020-3-13 13:11:06 | 显示全部楼层
ZYL1111111 发表于 2020-3-7 01:21
楼主您好,我想问一下,在读取计数器值时,计算出一个时间转过的脉冲数,一个时间怎么理解?还有编码器溢出 ...

这个帖子时半年前写的了,可能有很多细节已经记不得了,这个代码用原子的探索者和一个带编码器的直流减速电机是可以直接用的,只是我这个代码只能测正转,不能测反转,但是解决的办法我在其中一楼给别人说过了。
至于你的问题:
我用定时器5定时的是50ms中断一次,所以我每50ms就是去读一次此时定时器3的值(定时器此时是正交编码模式,它的值递增不是由内部时钟决定的,而是编码器产生的脉冲决定的),在我读取定时器3的值的同时,我用一个变量a去记录这个值,这样下一次中断又来的时候,我就会用新的读出来的值去减去变量a,而这两个值的差,之间相差的时间就是50ms,这就是直流减速电机能测速度的原理。
回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2020-3-13 13:17:47 | 显示全部楼层
静寂的天空187 发表于 2020-2-3 10:47
对,你的想法是对的,上面的说法包括楼主的说法应该不正确。各位,冒犯了。

是的,的确说法是对的。当初我确实对上升沿检测这东西还有点迷糊,包括现在我也不知道,如果把后面2个参数,都改为下降沿检测,或者一个上升沿检测,一个下降沿检测效果是什么样子的。这个东西只能靠自己去试了,我之所以这个帖子原理性讲的很少,就是因为有很多结论是我亲自做实验推出来的结果。所以有些东西比起一直找资料,还不如自己先亲自试一下来的好。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2019-8-2
在线时间
13 小时
发表于 2020-3-24 22:19:02 | 显示全部楼层
您说的线数指的是线速吗  我的编码器只提到了线速  没有线数这个量
回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2020-3-25 07:57:05 | 显示全部楼层
别看头像 发表于 2020-3-24 22:19
您说的线数指的是线速吗  我的编码器只提到了线速  没有线数这个量

是线数,不是线速。
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2018-5-23
在线时间
23 小时
发表于 2020-4-12 20:47:14 | 显示全部楼层
请问博主390线是不是乘了减速比哇
回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2020-4-14 09:56:08 | 显示全部楼层
lynnn 发表于 2020-4-12 20:47
请问博主390线是不是乘了减速比哇

没有。
回复 支持 反对

使用道具 举报

3

主题

5

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2019-11-6
在线时间
4 小时
发表于 2020-5-13 10:44:09 | 显示全部楼层
大神你好,我想请问一下,就是使用imx6ull开发板,能不能实现您这个带霍尔传感器编码器的直流减速电机测速,不知道原理上可不可行,imx6u的定时器能不能检测到脉冲呢
回复 支持 反对

使用道具 举报

15

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2019-4-22
在线时间
272 小时
 楼主| 发表于 2020-5-15 14:09:27 | 显示全部楼层
lym513681874 发表于 2020-5-13 10:44
大神你好,我想请问一下,就是使用imx6ull开发板,能不能实现您这个带霍尔传感器编码器的直流减速电机测速 ...

理论来说只要有定时器就可以。因为测速最关键的一个地方就是怎么能对外部的脉冲进行计数。这就有点像定时器的捕获模式,在捕获模式下能可以对脉冲下降沿或者上升沿作出反应,说白了,理论来说其实用定时器的捕获模式就能做到测速的目的。而imax6ull比探索者牛逼到不知道那里去,不可能没有这个功能。
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2020-4-26
在线时间
9 小时
发表于 2020-5-16 16:24:26 | 显示全部楼层
liuming
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2020-7-7
在线时间
13 小时
发表于 2020-7-7 22:42:08 | 显示全部楼层
兄弟经你这么一讲我思路清晰了很多,多谢多谢
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2020-7-5
在线时间
4 小时
发表于 2020-7-22 18:11:59 | 显示全部楼层
不管是否对自己有用,都十分感谢
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2020-6-23
在线时间
2 小时
发表于 2020-7-31 10:36:04 | 显示全部楼层
一念花开 发表于 2019-8-3 17:24
大佬   还有这里我不太理解    我知道前面算的是电机转的圈数,但是后面除以0.05是什么意思啊?  怎么跟速 ...

因为TIM5定时周期是20hz,0.05s读一次
回复 支持 反对

使用道具 举报

7

主题

88

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2015-1-10
在线时间
69 小时
发表于 2020-9-3 15:33:00 | 显示全部楼层
学习了,正准备做个编码器项目,感谢楼主的无私奉献
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2019-11-4
在线时间
35 小时
发表于 2020-9-24 21:28:48 | 显示全部楼层
讲得很好,学习了
回复 支持 反对

使用道具 举报

1

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2019-10-18
在线时间
36 小时
发表于 2021-1-27 16:59:50 | 显示全部楼层
楼主厉害  感谢楼主
回复 支持 反对

使用道具 举报

1

主题

24

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2020-12-8
在线时间
6 小时
发表于 2021-2-3 19:51:35 | 显示全部楼层
感謝大大分享
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2021-4-13
在线时间
4 小时
发表于 2021-4-13 11:13:36 | 显示全部楼层
插眼,备查看
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2019-3-7
在线时间
13 小时
发表于 2021-4-15 11:24:29 | 显示全部楼层
        if((TIM3->CR1&0x0010) == 0x0010)                                //èç1û·′×a
    Count = (u32)((Enc_Timer_Overflow_one)* -1*(4*ENCODER_PPR) - (Current_Count - Previous_Count));  
        else                                                         
                Count = (u32)(Current_Count - Previous_Count + (Enc_Timer_Overflow_one) * (4*ENCODER_PPR));     
  Previous_Count = Current_Count;  
  return(Count);


请问大佬,这里的正转和反转代码为什么不一样,为什么正转((Enc_Timer_Overflow_one)* 不用减一
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2019-3-7
在线时间
13 小时
发表于 2021-4-17 21:12:29 | 显示全部楼层
请问大佬,套用您的代码,串口打印出来全是0,请问您知道是什么原因么。
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2020-12-28
在线时间
28 小时
发表于 2021-4-20 11:34:36 | 显示全部楼层
楼主,为什么我的编码器不能直接反转,以直接反转编码器就没法计数了
回复 支持 反对

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2020-11-28
在线时间
11 小时
发表于 2021-6-10 14:58:48 | 显示全部楼层
受益匪浅,谢谢大佬
回复 支持 反对

使用道具 举报

2

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2019-8-24
在线时间
40 小时
发表于 2021-7-12 14:49:33 | 显示全部楼层
多谢分享
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2021-7-11
在线时间
4 小时
发表于 2021-7-12 16:45:03 | 显示全部楼层
老哥太强了👍
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2020-7-17
在线时间
3 小时
发表于 2021-7-16 16:40:16 | 显示全部楼层
多谢分享
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2021-8-20
在线时间
7 小时
发表于 2021-10-18 10:32:14 | 显示全部楼层
大神,那我编码器的AB相是接在什么IO口
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2021-4-4
在线时间
33 小时
发表于 2021-11-4 00:38:42 | 显示全部楼层
帮顶楼主
回复 支持 反对

使用道具 举报

8

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2021-3-11
在线时间
30 小时
发表于 2021-11-15 22:52:07 | 显示全部楼层
感谢大佬无私分享,
勤学如春起之苗,不见其增,日有所长
回复 支持 反对

使用道具 举报

13

主题

643

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2432
金钱
2432
注册时间
2019-12-28
在线时间
527 小时
发表于 2022-1-24 10:30:26 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2022-1-28
在线时间
21 小时
发表于 2022-2-21 02:10:53 | 显示全部楼层
请问  第一节  分割线上面一行最后一个例子  应该是  溢出数目/转一圈溢出数目  也就是(360*6)/(360*2)对吧  而不是(360*6)/(360*4)   用脉冲数目除以转一圈的溢出数?
回复 支持 反对

使用道具 举报

14

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2016-5-19
在线时间
86 小时
发表于 2022-2-28 10:02:09 | 显示全部楼层
使用霍尔传感器测出的转速和电机厂家标注的转速(比如标注的是960 rpm)是什么关系呢
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2022-6-1
在线时间
0 小时
发表于 2022-6-1 20:26:49 | 显示全部楼层
有没有STM32F103的编码器例程?
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2021-11-25
在线时间
3 小时
发表于 2022-8-5 18:36:53 来自手机 | 显示全部楼层
我认为,PreviousCount完全不需要,初始化Counter()值时就为0.
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2022-10-4
在线时间
2 小时
发表于 2022-10-5 16:41:38 | 显示全部楼层
大佬真厉害
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2023-2-6
在线时间
2 小时
发表于 2023-3-3 14:11:21 | 显示全部楼层
一念花开 发表于 2019-8-3 16:48
大佬 我拜读了您的代码   这里算一段时间转过的脉冲数    不知道是不是我理解错了   前面这里Current_Count ...

大佬请问你搞懂了吗,我想的跟你一样
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2022-4-21
在线时间
17 小时
发表于 2023-5-23 07:56:25 | 显示全部楼层
一念花开 发表于 2019-8-3 17:24
大佬   还有这里我不太理解    我知道前面算的是电机转的圈数,但是后面除以0.05是什么意思啊?  怎么跟速 ...

大佬,这个0.05有答案了吗,我也没看懂
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 11:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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