智能车制作
标题:
疑问··关于计算编码器脉冲测速的。
[打印本页]
作者:
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://111.231.132.190/)
Powered by Discuz! X3.2