正交编码器的问题

2019-07-20 23:32发布

大家好,刚学stm32没多久,现在碰到关于定时器正交编码器的问题,我需要同时读取7个电机的编码器值,我看了一下stm32F407能用的正交编码器的定时器就4个,找了很久,很少关于正交编码器的定时器的介绍,我有下面两个问题:

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

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

谢谢各位了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
likunxue
2019-07-21 23:17
本帖最后由 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; //输入状态存副本                    
         }
       }                     
     }

一周热门 更多>