智能车制作

标题: 编码器测速 [打印本页]

作者: □借ωο①生    时间: 2012-5-2 15:56
标题: 编码器测速
基于PIT计数器用光电编码器测速,如何把编码器输出的方波脉冲信号用PIT计数?原理和程序的实现!!!
作者: 5768340    时间: 2012-5-2 16:07
脉冲累加器
作者: □借ωο①生    时间: 2012-5-2 22:05
5768340 发表于 2012-5-2 16:07
脉冲累加器

是利用FTM的捕捉模式做个计数器吗?

作者: jusson    时间: 2012-5-24 14:30
mini绝对式编码器测速&测转向非常方便,可以考虑下,淘宝上有卖
作者: □借ωο①生    时间: 2012-5-24 15:26
谢谢啦!
作者: 陌路樱花泪    时间: 2012-5-26 09:39
一直在做LPTM脉冲累加……还没做出来……交流下啊
作者: □借ωο①生    时间: 2012-5-26 12:32
你做到什么程度...
作者: □借ωο①生    时间: 2012-5-26 12:33
陌路樱花泪 发表于 2012-5-26 09:39
一直在做LPTM脉冲累加……还没做出来……交流下啊

你做到什么程度...
作者: z12c34j56    时间: 2012-5-26 12:40
5768340 发表于 2012-5-2 16:07
脉冲累加器

脉冲累加需不需要中断啊

作者: 陌路樱花泪    时间: 2012-5-26 15:30
□借ωο①生 发表于 2012-5-26 12:33
你做到什么程度...

代码早就写好了,等下帖给你,我在PIT中断里读取速度,现在的问题就是,用手转的小速度可以测到数值,速度一快寄存器的值就为0了,怀疑是PIT周期没设好,你看下能做出来不?搞好也教教我啊
下面代码:
void PIT_init(){
  SIM_SCGC6|=SIM_SCGC6_PIT_MASK;
  PIT_MCR&=~PIT_MCR_MDIS_MASK;//定时器时钟使能
  PIT_MCR&=~PIT_MCR_FRZ_MASK;//在调试模式下停止
  //PIT_MCR=0x00;
  PIT_LDVAL(0)=960000;//周期设置
  PIT_TCTRL(0)|=PIT_TCTRL_TEN_MASK;       //使能pit模块运行
  PIT_TCTRL(0)|=PIT_TCTRL_TIE_MASK;//关中断
}
//LPTM初始化
  void LPTM_init(){
   unsigned int cmp_value=65535; //比较值设到最大
    SIM_SCGC5 |=  SIM_SCGC5_PORTC_MASK ;
    SIM_SCGC5|=SIM_SCGC5_LPTIMER_MASK;//开启LPTM模块时钟
    LPTMR0_CSR=0x00;  //清空寄存器
    LPTMR0_PSR=0x00;
    LPTMR0_CMR=0x00;
    SIM_SCGC5 |= SIM_SCGC5_PORTC_MASK; //设置PTC5为脉冲累加,用C5口作为脉冲接收口
    PORTC_PCR5=PORT_PCR_MUX(0x4); // PTC5
    PORTC_PCR5|=PORT_PCR_PE_MASK;
    PORTC_PCR5|=(PORT_PCR_PS_MASK);//下拉电阻配置 //外部输入的信号作为计数时钟
    LPTMR0_CSR = LPTMR_CSR_TPS(0x2);//选择输入通道2 C5
    LPTMR0_PSR=LPTMR_PSR_PCS(0x01);
    LPTMR0_PSR|=LPTMR_PSR_PBYP_MASK; //LPO clock1KHZ的时钟 , 预分频绕道              
    LPTMR0_CMR=LPTMR_CMR_COMPARE(cmp_value);
    LPTMR0_CSR|=LPTMR_CSR_TPP_MASK;            //设置上升沿触发计数
        LPTMR0_CSR |=LPTMR_CSR_TMS_MASK;//设置为脉冲计数模式
    LPTMR0_CSR|=LPTMR_CSR_TFC_MASK;//自由计数模式   
   
    LPTMR0_CSR&=~LPTMR_CSR_TIE_MASK;//不使能中断
    LPTMR0_CSR|=LPTMR_CSR_TEN_MASK;             //开启模块
  }
void pit0_isr()//在PIT中断里测速,//自己设置中断
{      
GetCnt++;
          if(GetCnt>100){   
          GetFreq=(vint16)(LPTMR0_CNR);
          GetFreq=(vint16)(LPTMR0_CNR);
             LPTMR0_CSR&=(~LPTMR_CSR_TEN_MASK);       //清空寄存器
             LPTMR0_CSR|=LPTMR_CSR_TEN_MASK;
             GetCnt=0;
          }
    PIT_TCTRL(0)|=PIT_TFLG_TIF_MASK;//清中断标志位
},希望你能有突破

作者: □借ωο①生    时间: 2012-5-26 16:21
陌路樱花泪 发表于 2012-5-26 15:30
代码早就写好了,等下帖给你,我在PIT中断里读取速度,现在的问题就是,用手转的小速度可以测到数值,速度 ...

不需要在中端里写,我当时写PIT时,发现没有执行中断里的内容,你试试用PIT定时里做脉冲累加吧...

作者: leosaac    时间: 2012-5-26 16:43
用TIM的IC功能捕捉脉冲,8个通道可以捕捉8路,捕捉到了就中断,然后对应速度加一,然后100ms读取该速度一次并清零。
作者: leosaac    时间: 2012-5-26 16:44
话说用光码盘可以判断车子是否前进或者后退
作者: □借ωο①生    时间: 2012-5-26 22:40
leosaac 发表于 2012-5-26 16:43
用TIM的IC功能捕捉脉冲,8个通道可以捕捉8路,捕捉到了就中断,然后对应速度加一,然后100ms读取该速度一次 ...

这个功能还真不知道呢...它是每捕捉一个脉冲就产生一个中断吗???
作者: leosaac    时间: 2012-5-27 07:58
□借ωο①生 发表于 2012-5-26 22:40
这个功能还真不知道呢...它是每捕捉一个脉冲就产生一个中断吗???

对,脉冲捕捉就是这个功能,中断函数字段为:VectorNumber_Vtimch0~7一共八路,完全够用了。相关的模块初始化可以参考XS128的教材资料。

作者: zhukongkong    时间: 2012-6-3 15:44
陌路樱花泪 发表于 2012-5-26 15:30
代码早就写好了,等下帖给你,我在PIT中断里读取速度,现在的问题就是,用手转的小速度可以测到数值,速度 ...

有关于 12xs128的吗

作者: jimoudao    时间: 2012-6-3 23:53
5768340 发表于 2012-5-2 16:07
脉冲累加器

你妹,只有一路脉冲累加器,怎么累加呀,要中断配合才能行的
作者: 5768340    时间: 2012-6-4 09:13
jimoudao 发表于 2012-6-3 23:53
你妹,只有一路脉冲累加器,怎么累加呀,要中断配合才能行的

小子,做文明人!!!!!!!!!!!

作者: 汪稳wangwen    时间: 2012-6-8 22:10

作者: □借ωο①生    时间: 2012-6-9 18:08
leosaac 发表于 2012-5-27 07:58
对,脉冲捕捉就是这个功能,中断函数字段为:VectorNumber_Vtimch0~7一共八路,完全够用了。相关的模块初 ...

我们改用FTM的正交测速了...不用那个啦

作者: as8793765    时间: 2012-6-16 13:18
#define BIT_SET(x)     1<<x//把X位置一
#define BIT_CLR(y)     ~(1<<y)//把Y位清零

void lptime_init()
{
        SIM_SCGC5|=SIM_SCGC5_LPTIMER_MASK;
        SIM_SCGC5|=BIT_SET(11);//开C端口时钟
        PORTC_PCR5=(1<<10);
       
        LPTMR0_CSR&=BIT_CLR(0);
        LPTMR0_CSR=0xa2;
        LPTMR0_PSR=0x5;
        LPTMR0_CMR=0xff;
}

uint16 read_pulse_num()
{
        uint8 pulse_num;
       
        pulse_num=LPTMR0_CNR;
        LPTMR0_CSR&=BIT_CLR(0);
        LPTMR0_CSR|=BIT_SET(0);
        return pulse_num;
}
作者: 330672126    时间: 2012-6-19 20:06
k60的话 最好用FTM脉冲累加器来测速  LPTM由于是只有一个计数器 不太好实现  PIT最好是用来定时 其他的话别用它
作者: 冯志远    时间: 2012-6-24 18:14
需中断在终端里执行
作者: MILAI    时间: 2012-6-24 22:38
切,光电码盘肯定是用FTM的正交编码模式
作者: 扁舟子    时间: 2012-12-1 23:08
陌路樱花泪 发表于 2012-5-26 15:30
代码早就写好了,等下帖给你,我在PIT中断里读取速度,现在的问题就是,用手转的小速度可以测到数值,速度 ...

嗨   请问有没有编码器的技术手册   发给我一份呗    新手  今年做光电平衡组@2855697362
作者: 心静0189    时间: 2012-12-10 20:46

作者: somebodyes    时间: 2014-2-8 21:39

作者: 不二小小    时间: 2014-3-2 17:48
这个貌似是输出比较值设的太低了,导致溢出了
作者: 恋钒尘    时间: 2015-10-26 00:09

作者: captain_q3p5i    时间: 2016-3-1 19:27
求指导欧姆龙500的使用方法,现在还是不能正常计数




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2