智能车制作

标题: lpt调速,谁告诉我是什么问题,检测的速度拿好像有问题 [打印本页]

作者: ‘二毛‘    时间: 2013-7-9 18:36
标题: lpt调速,谁告诉我是什么问题,检测的速度拿好像有问题
#include "common.h"
#include "include.h"
  extern volatile u32 LPT_INT_count;   
  extern volatile u8  pit_flag;
   int jspeed,sspeed=100,serror[2],speed;
  int cesu()
  { u16 count;
     lptmr_counter_init(LPT0_ALT1, 6000, 2, LPT_Rising);
     pit_init_ms(PIT0,5);
           enable_irq(68);
           while(pit_flag==0)
           {

           }
           count=LPTMR0_CNR;              //保存脉冲计数器计算值   
           lptmr_counter_clean();         //清空脉冲计数器计算值(马上清空,这样才能保证计数值准确)
          //  printf("LPT_INT_count:%d个\n",LPT_INT_count);      
            LPT_INT_count=0;               //清空LPT中断次数         
      pit_flag=0;
    return count;  
  }
  void tiaosu(int gspeed)
  {

    float skp=0.8,skd=1.5;
  jspeed=cesu();   

   serror[1]=serror[0];
   serror[0]=gspeed-jspeed;
    if(serror[0]<4&&serror[0]>-4)
      speed=sspeed;   
   else
     speed=(int)(sspeed+skp* serror[0]+skd*(serror[0]-serror[1]));
  if(speed>400)
     speed=400;
   else if(speed<0)
      speed=0;
  sspeed=speed;
    FTM_PWM_init(FTM0,CH0,15000,speed+100);
    FTM_PWM_init(FTM0,CH1,15000,100);
   //  printf("serror[0]:%d个\n",serror[0]);
  //  printf("serror[1]:%d个\n",serror[1]);
    printf("jspeed:%d个\n",jspeed);
  //  printf("speed:%d个\n",speed);
  }
  void main()   
  {   u32 i;      
      DisableInterrupts;
     EnableInterrupts;                                                  //开总中断      
      while(1)  
      {      
        tiaosu(10);   
      }   
  }
void  LPT_Handler(void){      LPTMR0_CSR|=LPTMR_CSR_TCF_MASK;
}
void PIT0_IRQHandler(){     pit_flag=1;                 //标记进入PIT中断       PIT_Flag_Clear(PIT0);       //清中断标志位    disable_irq(68);                }






欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2