lss1985 发表于 2010-12-27 20:22:55

LPC2294怎么用定时器测转速

程序有关部分如下

void Time1Init(void)      //定时器1初始化
{
T1TC=0;
T1PR=0;   
T1CCR=0x05;      //CAP1.0上升沿跳变将TC装入CR0,并产生中断
T1TCR=0x01;   
}

void Time1_irqInit(void)         //中断初始化
{
VICIntSelect=0x00;
VICVectCntl0=0x20|5;      //定时器1优先级slot0
VICVectAddr0=(uint32)Time1_irq;   //定时器中断地址1
VICIntEnable=0x00000010;
}


void __irq Time1_irq(void)//中断程序
{
   
p=T1CR0;            
st=p-k;
k=p;
n+=1;
if(n==6)
{
    T1TCR=0x00;
    senddata();
}
T1IR=0x00;
VICVectAddr=0;
}

int main(void)       //主程序
{
k=0;
n=0;
delay(3000);   //延时
PINSEL0=0x00200000;//捕获1.0,P0.10口,
   
Time1_irqInit();
Time1Init();

while(1);
return(0);

}

大概意思就是用定时器1的CAP1.0捕获功能捕捉脉冲,并产生中断,在中断中处理数据,捕获几个脉冲,用后一个脉冲所获得的TC值减去前一次获得的TC值,这样就知道这一个脉冲的周期了,多做几次然后平均,输出求转速。程序是这么写的,但实际传感器信号接到CAP1.0运行之后,一直在等待中断产生,而传感器信号通过示波器看过之后是方波没有问题,就是无法测到脉冲周期,不知道错误在哪里,搞了几天很纠结,达人们帮我看看吧,谢啦

oldtom 发表于 2010-12-28 02:39:20

是增量编码器吗?我几年前用过2292做过类似的。

lss1985 发表于 2010-12-28 09:40:30

不是增量编码器,就是用定时器测速么,理论上应该可以用捕捉到,不知道哪里没写对还是什么情况

armandusb 发表于 2010-12-28 13:46:20

T0PR    = 0;                                 //PCLK=11.0592不分频
   T0CCR   = 0xDB6;                                              // CAP0-CAP3都为下降沿中断
   T0TC    = 0;                               //记数从0开始记                                              
   VICIntSelect = 0x00;                                                // 所有中断通道设置为IRQ中断
   VICVectCntl0 = 0x24;                                                // 定时器0中断通道分配最高优先级(向量控制器0)
   VICVectAddr0 = (uint32)IRQ_Time0;                 // 设置中断服务程序地址向量
   VICIntEnable|= 0x00000010;                                // 使能定时器0中断   
   T0TCR=0X01 ;               //使能中断TIMER0

你好象很多寄存器都没设置吧

lss1985 发表于 2010-12-28 19:01:23

都设了啊,相关的,楼上写的我都有设吧

summerliyang 发表于 2011-7-21 08:54:49

mark
页: [1]
查看完整版本: LPC2294怎么用定时器测转速