OpenEdv-开源电子网

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

正交编码器的问题

[复制链接]

3

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2016-1-24
在线时间
9 小时
发表于 2016-3-7 15:12:40 | 显示全部楼层 |阅读模式
3金钱
大家好,刚学stm32没多久,现在碰到关于定时器正交编码器的问题,我需要同时读取7个电机的编码器值,我看了一下stm32F407能用的正交编码器的定时器就4个,找了很久,很少关于正交编码器的定时器的介绍,我有下面两个问题:

1.能给介绍一款stm32或者其他的MCU能够同时读取7个电机编码器值吗

2.stm32的定时器可以直接读取编码器的脉冲而计数吗

谢谢各位了。

最佳答案

查看完整内容[请看2#楼]

STM32定时器算是多的了,其中能直接正交解码的有TIM1、TIM8、TIM2-TIM5,共6个 TIM9和TIM12可以使用TIMx_CH1作为定时器的CNT的时钟,也能计数,但无法正交解码 ------不正经的分割线-------
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-7 15:12:41 | 显示全部楼层
STM32定时器算是多的了,其中能直接正交解码的有TIM1、TIM8、TIM2-TIM5,共6个


TIM9和TIM12可以使用TIMx_CH1作为定时器的CNT的时钟,也能计数,但无法正交解码

1.png


------不正经的分割线-------

z (10).jpg
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

2

主题

686

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10569
金钱
10569
注册时间
2014-6-12
在线时间
1022 小时
发表于 2016-3-7 16:18:33 | 显示全部楼层
可以选读正交编码器的芯片来用,要多路可以多贴几片
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2016-1-24
在线时间
9 小时
 楼主| 发表于 2016-3-7 17:40:54 | 显示全部楼层
xkwy 发表于 2016-3-7 15:42
STM32定时器算是多的了,其中能直接正交解码的有TIM1、TIM8、TIM2-TIM5,共6个

Q`]132(2`_I_NW1J~S(E4L3.png 非常感谢!file:///C:\Documents and Settings\LingFeng\Application Data\Tencent\Users\1358564061\QQ\WinTemp\RichOle\Q`]132(2`_I_NW1J~S(E4L3.png另外TIM1,TIM8,TIM2-TIM5,这6个编码器可以同时用吗,今天刚关注stm32F407,之前用的stm32f103,对stm32F407的复用不是很明白,我看引脚TIM2的CH1,CH2和TIM5存在冲突,但是TIM2的CH1,CH2对应的引脚不止是PA0,PA1,所以想问一下,TIM1,TIM8,TIM2-TIM5,这6个编码器可以同时用吗,不存在引脚冲突吧,谢谢了。
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2016-1-24
在线时间
9 小时
 楼主| 发表于 2016-3-7 17:43:26 | 显示全部楼层
xuyaqi 发表于 2016-3-7 16:18
可以选读正交编码器的芯片来用,要多路可以多贴几片

你好,正交编码器芯片是啥呢
回复

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3340
金钱
3340
注册时间
2013-4-10
在线时间
333 小时
发表于 2016-3-7 21:59:20 | 显示全部楼层
本帖最后由 likunxue 于 2016-3-8 00:10 编辑

用定时器中断处理吧! 这样,你想读几个都行, 速度不快的话,一个定时器就能搞定,
#define   BianMa_A      PCin(1)         //编码器A相输出脉冲线
#define   BianMa_B      PCin(2)         //编码器B机输出脉冲线

vs32 WeiZhiJiShuQi      = 0;            //光电编码器位置计数器
vu8 ShuChuZhuangTai     = 0;            //AB信号状态寄存器(静态变量,前一次的AB状态的结果   



/********************************************************************************************
函 数 名: TIM2_IRQHandler:  定时器2中断函数
调    用: 无
参    数: 无
返 回 值: 无  
说    明: 完成光栅AB信号的采集,并进得4倍频的处理记录  
********************************************************************************************/
void TIM2_IRQHandler(void)
     {  
     u8 k,Cal;           
     if(TIM2->SR & 0x0001)   //检查是否是溢出中断以经发生过
       {
       TIM2->SR &= ~(1<<0);  //清除中断标志      
       Cal = (GPIOC->IDR >>1)&0x03;//取得当前光电编码器输入状态值           
       if(Cal != ShuChuZhuangTai)      
         {
         k = (ShuChuZhuangTai << 2 )+ Cal;//得到4倍频编码输入状态值
         switch(k)
               {
               case 0x07: WeiZhiJiShuQi++;break;
               case 0x0E: WeiZhiJiShuQi++;break;
               case 0x08: WeiZhiJiShuQi++;break;
               case 0x01: WeiZhiJiShuQi++;break;
               case 0x0D: WeiZhiJiShuQi--;break;
               case 0x04: WeiZhiJiShuQi--;break;
               case 0x02: WeiZhiJiShuQi--;break;
               case 0x0B: WeiZhiJiShuQi--;break;
               }
         ShuChuZhuangTai = Cal; //输入状态存副本                    
         }
       }                     
     }

回复

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2015-12-29
在线时间
12 小时
发表于 2016-3-8 10:43:02 | 显示全部楼层
xkwy 发表于 2016-3-7 15:42
STM32定时器算是多的了,其中能直接正交解码的有TIM1、TIM8、TIM2-TIM5,共6个

你好,请问我想用TIM10作为主定时器输出给TIM9,作为TIM9的计数时钟。但是我在TIM10寄存器中没有找到相应的寄存器设置。例如当TIM2作为主定时器的时候,可以在定时器的TIM2_CR2寄存器下的MMS[2:0]位设置通道几作为内部互联输出,在定时器11没找到这样的寄存器,请问定时器11应该怎么配置成内部互连输出。谢谢高手解答。
回复

使用道具 举报

2

主题

686

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10569
金钱
10569
注册时间
2014-6-12
在线时间
1022 小时
发表于 2016-3-8 11:39:14 | 显示全部楼层
unllow 发表于 2016-3-7 17:43
你好,正交编码器芯片是啥呢

LS7266R1可以看一下
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-8 13:26:41 | 显示全部楼层
unllow 发表于 2016-3-7 17:40
非常感谢!另外TIM1,TIM8,TIM2-TIM5,这6个编码器可以同时用吗,今天刚关注stm32F407,之前用的stm32f103 ...

以前STM32是使用引脚重映射实现复用,
现在所有引脚都可独立配置,使用引脚复用矩阵实现
每一行是一个引脚,每一列是一个复用功能,通过使用GPIOx->AFRx[AFRxy]来实现配置这个矩阵
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-8 13:29:35 | 显示全部楼层
网布 发表于 2016-3-8 10:43
你好,请问我想用TIM10作为主定时器输出给TIM9,作为TIM9的计数时钟。但是我在TIM10寄存器中没有找到相应 ...

只有TIM1、TIM8;TIM2-TIM5这六个定时器有CR2寄存器

STIM32的定时器分好多种,功能最全的是高级定时器(TIM1、TIM8)
其他定时器都有不同程度的阉割,
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2015-12-29
在线时间
12 小时
发表于 2016-3-8 13:40:05 | 显示全部楼层
xkwy 发表于 2016-3-8 13:29
只有TIM1、TIM8;TIM2-TIM5这六个定时器有CR2寄存器

STIM32的定时器分好多种,功能最全的是高级定时器 ...

我之前发了一个求助帖,你可以看一下,用户手册上说可以让TIM10作为主定时器,但是没有说怎么弄。http://www.openedv.com/thread-69110-1-1.html
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2016-1-24
在线时间
9 小时
 楼主| 发表于 2016-3-8 21:35:14 | 显示全部楼层
likunxue 发表于 2016-3-7 21:59
用定时器中断处理吧! 这样,你想读几个都行, 速度不快的话,一个定时器就能搞定,
#define   BianMa_A  ...

嗯嗯,非常感谢,我再研究一下
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2016-1-24
在线时间
9 小时
 楼主| 发表于 2016-3-8 21:53:39 | 显示全部楼层
xuyaqi 发表于 2016-3-8 11:39
LS7266R1可以看一下

今天看了一下,这个芯片挺强大的,非常感谢!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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