打印

电机测速

[复制链接]
2862|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
libinxtdj|  楼主 | 2007-1-12 10:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void cal_speed(void)
{
    
    if(tmr5isr_nums>0)//当T5产生溢出中断就认为转速为0
    {
        now_speed=0;
        ic_isr_nums=0;
    //    direction=NO_MOV;
        return;
    }
    if(ic_isr_nums>3)//当转速达到一定的转速的时候才开始检测
    {
        if(conflag.ad_ready==1)
        {
            if(conflag.velocity_ready==1)
            {
                //csbuf1/=2;
                now_speed=(unsigned int)(SPEED_CON/csbuf1);
                conflag.velocity_ready=0;                
                }
             else
             {
                return;
            }    
        }
        else
        {
            return;
        }    
    }    
}

void isr_ic(void)
{
    if(PIR3bits.IC1IF==1)
    { 
    updata_sequence();    
    PIR3bits.IC1IF=0;              
            if(conflag.valid_hall==1)
               { 
                PORTCbits.RC7=0;
                csbuf2=CAP1BUFL;  
                csbuf0=CAP1BUFH;
                csbuf0<<=8;
                csbuf0|=csbuf2;
                csbuf+=csbuf0;
                   if (hall_sensor_count<hall_cap_count)
                           {
                       hall_sensor_count++;
                       }
                       else
                    {
                    PORTCbits.RC7=1;   
                    csbuf1=csbuf;
                    csbuf=0;
                    csbuf0=0;
                    csbuf2=0;
                    hall_sensor_count=0;
                    conflag.velocity_ready=1;
                    }
                }
            else
               {
                       conflag.valid_hall=1;
                return;
                     }
    }
 else if(PIR3bits.IC2QEIF==1)
    {
        updata_sequence();    
        PIR3bits.IC2QEIF=0;
        if(conflag.valid_hall==1)
            {   
                csbuf2=CAP2BUFL;  
                csbuf0=CAP2BUFH;
                csbuf0<<=8;
                csbuf0|=csbuf2;
                csbuf+=csbuf0;
               if (hall_sensor_count<hall_cap_count)
               {
                   hall_sensor_count++;
                PORTCbits.RC7=0;
               }
                   else
                {
                csbuf1=csbuf;
                csbuf=0;
                csbuf0=0;
                csbuf2=0;
                hall_sensor_count=0;
                conflag.velocity_ready=1;
                }
            }
        else
             {
            conflag.valid_hall=1;
            return;
                }
}
这是一段使用PIC18F2431的IC捕捉模块测速的子程序,现在的问题是检测到的误差会跳变,在1000的时候会有100-200的跳变,经过仿真观察是因为CSBUF1的值,在同等转速下产生很大的跳变,不知道如果去处理?
希望大家给点建议,已经找了10多天了始终没有找到问题!!
在此先谢谢!!

相关帖子

沙发
tyw| | 2007-1-16 06:50 | 只看该作者

你这样提问很难找到解答

你应该把你的检测硬件交代得清楚一点才便于别人帮你分析

使用特权

评论回复
板凳
soso| | 2007-1-17 07:43 | 只看该作者

你用示波器测试一下你的电机

  你不要以为电机的转速是恒定的,100 - 200转的跳动可能是电机的问题了,我做过电机测速,苦恼的问题时有刷电机接触打火导致假数据。

使用特权

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

本版积分规则

48

主题

181

帖子

0

粉丝