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运行之后,一直在等待中断产生,而传感器信号通过示波器看过之后是方波没有问题,就是无法测到脉冲周期,不知道错误在哪里,搞了几天很纠结,达人们帮我看看吧,谢啦 是增量编码器吗?我几年前用过2292做过类似的。 不是增量编码器,就是用定时器测速么,理论上应该可以用捕捉到,不知道哪里没写对还是什么情况 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
你好象很多寄存器都没设置吧 都设了啊,相关的,楼上写的我都有设吧 mark
页:
[1]