This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

msp430f5438的捕获问题



我最近需要用430进行光电码盘的测速(码盘连在电机上)

但是430连到码盘上时感觉总会有漏上升沿的问题

比如我本来测速得到450ms转一圈,有大概一半的数据是1100ms(大概2.5倍),而另一半就是450ms

这是测得的数据,其中x轴代表测的次数,y轴代表旋转一圈所需要的毫秒数,可以看到大部分数据在450或1110附近

我是根据两次上升沿之间的时间来确定转速的

电机匀速转动时,示波器看到码盘输出的波形没有问题,周期为11ms,其中高电平2ms

这是我的捕获模式初始化代码


void TimerB0_init()
{
#ifdef PhotoelectricEncoder_Used_
TB0CCTL0 |= CCIE; //TB0CCR0 允许中断
#endif
TB0CCR0 = 4000-1; //设置延时时间(4MHz/4000=1KHz)
TB0CTL |= TBSSEL_2; //SMCLK
TB0CTL |= MC_1;
}

P4DIR &= ~(BIT1+ BIT2);
P4SEL |= BIT1+ BIT2;

TB0CCTL1 = CM_1+CCIS_0+CAP+SCS; // CCR1 capture mode P4.1
TB0CCTL2 = CM_1+CCIS_0+CAP+SCS; // CCR1 capture mode P4.2
TB0CCTL1 |= CCIE;
TB0CCTL2 |= CCIE;

请问这可能是出了什么问题?

  • 补充几点:

    430的频率是16MHz,而我的中断里加了115200波特率串口发送

    我认为捕获不会溢出,因为脉冲都是ms级的,我没有加其他大运算量的任务

    而且我设置了如果COV位为1就在中断里while(1)卡死程序,但是硬件仿真时程序没有停在while(1),而能够顺利结束任务

  • 你好,你的程序的意思是在CCR0的中断服务程序中读取CCR1和CCR2吗?如果是这样,你的中断服务程序怎么写的呢?