中级会员
- 积分
- 278
- 威望
- 180
- 贡献
- 68
- 兑换币
- 48
- 注册时间
- 2012-3-1
- 在线时间
- 16 小时
- 毕业学校
- 陕西科技大学
|
#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); }
|
|