智能车制作
标题:
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