德玛西亚 发表于 2013-12-15 00:13:55

没有正交编码器接口的单片机,,想用,能不能给个解决.....

没有正交编码器接口的单片机,,想用,能不能给个解决 ?? 有没有专门的处理芯片?

codefish 发表于 2013-12-15 00:34:49

呵呵,我也想知道。
在需要用编码器的场合,我一直在用带正交编码器接口的stm32芯片。
但是我也想过和楼主同样的问题,至今没找到好的答案。

linjpxt 发表于 2013-12-15 09:32:42

给马达控制用的一般会带,你不是说 stm32带了么

health 发表于 2013-12-15 09:44:53

可以用CPLD,或者专用芯片,例如惠普(安华高)有专用辨向计数芯片。不过成本比mcu就高多了。也可用一片小stm8作为接口。

德玛西亚 发表于 2013-12-15 10:12:10

做飞思卡尔只能用一个可编程的单片机。。求破

德玛西亚 发表于 2013-12-15 10:14:48

health 发表于 2013-12-15 09:44
可以用CPLD,或者专用芯片,例如惠普(安华高)有专用辨向计数芯片。不过成本比mcu就高多了。也可用一片小stm ...

辨向计数芯片 有没有个型号?

mhw 发表于 2013-12-15 10:19:02

同时启用IO的上升沿和下降沿中断(如果不提供则可以用两个IO来分别处理两个边沿),在中断里跑一个状态机就搞定了。

zhouzmt 发表于 2013-12-15 10:47:01

用逻辑电路搭一个

health 发表于 2013-12-15 11:30:29

德玛西亚 发表于 2013-12-15 10:14
辨向计数芯片 有没有个型号?

专用解码芯片
http://www.avagotech.cn/pages/cn/motion_control_encoder_products/integrated_circuits/decoder_ic/

成本上来说,还是stm32,stm8合适。

whatcanitbe 发表于 2013-12-15 12:06:09

mhw 发表于 2013-12-15 10:19
同时启用IO的上升沿和下降沿中断(如果不提供则可以用两个IO来分别处理两个边沿),在中断里跑一个状态机就 ...

嗯,我也是这么处理的

IO口可以上升沿和下降沿中断的话就简单

不过如果IO口不能中断的话,对速度不高,精度不高的场合可以用定时器去勉强实现

可中断时实现
//A,B相对应IO口处理

   //必须用暂时变量,IO值处理过程中可能变动
   uint8 itempA;
    uint8 itempB;
    uint8 itemp;
    uint8 iRe;

    itempA = IOPort_GetAState();
    itempB = IOPort_GetBState();

    itemp =Motor_StateJudge(itempA, itempB);
    iRe =Motor_StateJumpOK(itemp, Motor_m_LastState);

    if(!iRe)
    {
      //最后保存新AB的状态;
   Motor_m_LastAState = itempA;
      Motor_m_LastBState = itempB;
      Motor_m_LastState =itemp;
    }

/****************************************************************
功能:状态编码
原型:uint8 Motor_StateJudge(uint8 a, uint8 b)
输入:AB相即时状态
输出:状态编码号(0~3)
*****************************************************************/
uint8 Motor_StateJudge(uint8 a, uint8 b)
{
    uint8 mTmp;

    if(a==0 &&b==1)
      mTmp =0;
    else if(a==1 &&b==1)
      mTmp =1;
    else if(a==1 &&b==0)
      mTmp =2;
    else if(a==0 &&b==0)
      mTmp =3;

    return mTmp;

}

/****************************************************************
功能:状态转变判别
原型:uint8 Motor_StateJumpOK(uint8 mStateNow, uint8 mStateLast)
输入:当前状态,上一状态;
输出:1非法跳变,0合法跳变
*****************************************************************/
uint8 Motor_StateJumpOK(uint8 mStateNow, uint8 mStateLast)
{

}

myxiaonia 发表于 2013-12-15 12:54:21

用4倍频电路

德玛西亚 发表于 2013-12-15 13:08:44

zhouzmt 发表于 2013-12-15 10:47
用逻辑电路搭一个

数电还没有学额。。。

quzhanguang3 发表于 2013-12-15 15:59:06

中断里判断下方向就好了,速度用普通计数器

rengming2009 发表于 2013-12-15 19:25:52

用一个信号做中断,在中断中检测另一个信号的正负就可以了

rengming2009 发表于 2013-12-15 19:26:22

我就是这样做的,很稳定的

jetli 发表于 2013-12-15 20:30:11

曾经第一个号称1美刀 arm的 LM 有带正交编码器的LM3s6xx。。。不过被Ti杀鸡取卵后,式微了,{:titter:}{:sweat:}

关于以后 发表于 2013-12-15 20:42:01

stm32 有的。

wjungle 发表于 2014-1-10 00:41:11

本帖最后由 wjungle 于 2014-1-10 01:13 编辑

請問我用stm32的encoder interface,使用JGA25-370電機,其規格如下:
給電12V,24KHz, 一圈334 pulse,減速比為1:34
我的stm32是使用TIM3的ch1及ch2來設定為encoder interface,
TIM_EncoderInterfaceConfig (TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
我是可以得到正數及倒數的結果,但是我不知道數的這個數字(getCounter)是代表什麼?
是1秒24K,然後24K * 4嗎?,所以一秒數96K嗎?這樣是超過16 bits ~= 65K
我試著將TIMER的prescaler改為10,得到的數字大約是11000,而不是預期的9600,
另外我是將其電機的白綠線直接接到ch1, ch2,會跟硬體接法有關嗎?
我已經被困擾好幾個禮拜了,而且問不到人,還煩請站內前輩解答,感謝。

xiaobendan 发表于 2014-1-10 08:22:48

这样要看速度和精度了,就是看信号的最高频率了
其实频率不高的话,扫描方式也够用了

lhn0409 发表于 2014-1-10 09:24:22

什么是正交编码器?

jacky_yhy 发表于 2014-1-10 09:49:22

边沿中断。直接可以的

doramin 发表于 2014-1-10 10:05:37

计数的话用普通计数器,方向的话可以将两个输出口分别接到一个D锁存器的输入和时钟上

gy54321 发表于 2014-8-11 01:46:43

本帖最后由 gy54321 于 2014-8-11 02:15 编辑

四倍频电路的单片机高速算法设计:
参考资料:
http://wenku.baidu.com/link?url=GfdZzz1yE-KdLzFHjhYgNDxoAeLPtYlPUcMLl-41ekndlTDaGIlC7MpPVQhuxD-mxxDTEwVmh7_WhQmT_kvE13Dyrxe1XFoBLo_i9ZCGPEu



u8 MotorX_EncoderStore;//状态储存变量
void MotorX_phase_check(void) // 编码器
{
        u8 Encoder_temp;

        Encoder_temp= MotorX_EncoderStore;   //读出上次保存存数据
        Encoder_temp=(Encoder_temp<<3)|XEnCoderA;       //读A 相状态
        Encoder_temp=(Encoder_temp<<1)|XEnCoderB;//读B相状态 ,组成低2位
        switch(Encoder_temp)
        {
                case 1://00 01
                                        MotorX_CounterEncoder--; //编码计数器自减
                                break;
               
                case 2://00 10
                                        MotorX_CounterEncoder++;//编码计数器自加
                                break;       
               
                case 4://01 00
                                        MotorX_CounterEncoder++;
                                break;       
               
                case 7://01 11
                                        MotorX_CounterEncoder--;//编码计数器自减
                                break;               
                case 8://10 00
                                        MotorX_CounterEncoder--;
                                break;               
                case 11://10 11
                                MotorX_CounterEncoder++;
                                break;       
                case 13://11 01
                                MotorX_CounterEncoder++;
                                break;                       
                case 15://10 00
                                        MotorX_CounterEncoder--;
                                break;       
                default:   //其他状态为错误,或抖动, 计数值不加减
                                break;       
        }
        MotorX_EncoderStore=(Encoder_temp&0x03);//保存最后一次AB相位图
}

木桥 发表于 2014-10-29 19:29:21

codefish 发表于 2013-12-15 00:34
呵呵,我也想知道。
在需要用编码器的场合,我一直在用带正交编码器接口的stm32芯片。
但是我也想过和楼主 ...

如果只是测量方向的话可以用D触发器,需要编码器输出AB两相脉冲

stevenniu500 发表于 2016-7-27 17:06:55

收藏学习了

闲鱼翻身 发表于 2016-7-27 17:13:47

{:lol:}以前XS128就是A相B相电平判断正反转和转速的~可以实现哦

闲鱼翻身 发表于 2016-7-27 17:14:30

gy54321 发表于 2014-8-11 01:46
四倍频电路的单片机高速算法设计:
参考资料:
http://wenku.baidu.com/link?url=GfdZzz1yE-KdLzFHjhYgNDxoA ...

{:lol:} 好东西,感谢分享

richard1984 发表于 2017-2-25 20:09:48

HTCL2032芯片

su33691 发表于 2017-2-26 10:11:39

感谢分享,学习了。

cpholr1 发表于 2017-3-25 21:59:02

当年做飞思卡尔 搞单方向计数,真是痛苦死了。

zeroXone 发表于 2020-11-9 14:42:42

gy54321 发表于 2014-8-11 01:46
四倍频电路的单片机高速算法设计:
参考资料:
http://wenku.baidu.com/link?url=GfdZzz1yE-KdLzFHjhYgNDxoA ...

Mark,喜欢状态机,这个不错!
测出编码器运行时候的最大频率,按4倍的频率去运行这个状态机。
刚好要控制4个带编码器的减速电机。
页: [1]
查看完整版本: 没有正交编码器接口的单片机,,想用,能不能给个解决.....