打印
[51单片机]

C8051F040 用定时器3捕获测试信号频率的问题

[复制链接]
602|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
是这样的,我希望测试HALL信号的频率来计算电机转速
使用了定时器3的捕获功能
但是发现一个问题,电机转速设置成400转,即频率为33HZ,2000转,即167HZ,通过测试频率,闭环控制转速,都没问题
但是单片机分不清楚800转和1600转,在这个转速下测试频率有问题

下面是代码
void interrupt_timer3() interrupt 14
{
        static unsigned int overflow_Flag = 0;
        SFRPAGE   = TMR3_PAGE;
        TR3 = 0;
        if(TF3 == 1)                                           //溢出
        {
                TF3 = 0;
                overflow_Flag++;
        }
        if(EXF3 == 1)                                           //被测信号下降沿
        {
                capture_VAL = RCAP3H * 256 + RCAP3L;
                temp[0] = RCAP3H;
                temp[1] = RCAP3L;
                speed_measure = 1843200 / capture_VAL * 12;
                overflow_Flag = 0;
                EXF3 = 0;
        }       
        SFRPAGE   = TMR3_PAGE;
    TMR3L     = 0x00;
    TMR3H     = 0x00;
        TR3 = 1;
}

我通过串口调试助手把RCAP3H和RCAP3L显示出来,发现同样的被测试频率,他计数值会出错,而且就在这个频率段附近会出现,频率再高或再低都没问题


如图,30DA,2E8A是正确的,但是他会测试出来60C0,5E83这样的值
我晶振频率是22118400Hz,定时器3设置的时钟源是SYSCLK/12
先谢谢了哈

Image 1.png (45.47 KB )

Image 1.png

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

39

帖子

0

粉丝