智能车制作

标题: 疑问··关于计算编码器脉冲测速的。 [打印本页]

作者: issaclam    时间: 2011-3-13 21:52
标题: 疑问··关于计算编码器脉冲测速的。
先看源程序:
#define bus 24000000
#define timeclk (bus/128)
#define intcnt   200
#define cnts    (timeclk/intcnt)
#define duoji   1500

void PLL_Init(void)   //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)

{                     //锁相环时钟=2*16*(2+1)/(1+1)=48MHz

  REFDV=1;            //总线时钟=48/2=24MHz
  SYNR=2;
  while(!(CRGFLG&0x08));
  CLKSEL=0x80;        //选定锁相环时钟                                          

}


void PACN_Init()

{

PACTL = 0x50;      //脉冲计数 下降沿
PACNT = 0x0000;  //清0计数器

}

void Time_Init()

{
TIOS=0x01;    //定时器通道0设置为输出比较
TC0=(int)(TCNT+cnts); //赋初值,当TCNT从0计数到此值时第一次进入中断
TCTL2=0x01;  
TSCR2=0x07;   //计一个数用5.33微秒  
TSCR1=0x80;
TIE=0x01;      
}

#pragma CODE_SEG NON_BANKED
void interrupt 8 TIM(void)

{

TFLG1_C0F=1;//清中断标志位
TIE=0x00;
TC0=(int)(TCNT+cnts);
sudu=PACNT ;  //读取脉冲数
PACNT =0;
   TIE=0x01;   
}

#pragma CODE_SEG DEFAULT



读到脉冲数后直接显示,显示数字是60.按照定时器的定义,5000US左右中断一次读取数值,那么一秒钟脉冲就差不多是12000个,我用的是200P的速度编码器,那么每秒钟编码器转60圈,编码器齿轮直径16毫米,车大齿轮直径42毫米,乘上换成速度那差不多20M/S,这显然不可能。我不知道哪里出现了问题,请各位帮我看看问题出现在哪里?
作者: zouzhiting35    时间: 2011-3-13 21:54
我还没做到测速部分呢,,先来学习一下
作者: 孜孜和少阳    时间: 2012-2-27 11:01
你把中断的时间设置长一点看看怎么样呀?
作者: 宁静致远    时间: 2012-2-27 22:45
好像有个公式,可惜没记住啊
作者: Damonx    时间: 2012-7-22 09:05
(PACNT/200)*(编码器齿数/连接轮齿数)*连接轮周长/测速周期==speed
作者: 244880113    时间: 2015-2-16 22:16
PACTL = 0x50;      //脉冲计数 下降沿,应该是上升沿吧
作者: 信标快到碗里来    时间: 2016-3-17 11:16
我是随便说的,因为编码器的齿轮没有直接和车轮的齿轮耦合,错了别骂我啊




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