金牌会员
- 积分
- 1918
- 威望
- 1505
- 贡献
- 345
- 兑换币
- 137
- 注册时间
- 2015-11-18
- 在线时间
- 34 小时
- 毕业学校
- NUDT
|
主函数
uart_init (UART0 , 115200); //初始化UART0,输出脚PTA15,输入脚PTA14,串口频率 9600
// adc_init(ADC1, AD6a) ;
gpio_init (PORTA , 17, GPO,HIGH);
gpio_init (PORTB , 17, GPO,LOW);
FTM_PWM_init(FTM1,CH1,180,30);
pit_init_ms(PIT0, 5); //初始化PIT0,定时时间为: 5ms
// pit_init(PIT1, 10000); //初始化PIT1,定时时间为: 0.2ms
CCD_init1() ; //CCD传感器初始化
pixel_pt = Pixel;
for(i=0; i<128+10; i++) {
*pixel_pt++ = 0;
}
EnableInterrupts; //开总中断
/******************************************
执行程序
******************************************/
while(1)
{
if(TIME1flag_1ms == 1)
{
TIME1flag_1ms = 0 ;
}
if(TIME0flag_20ms == 1)
{
TIME0flag_20ms = 0 ;
/* Sampling CCD data */
ImageCapture(Pixel);
/* Calculate Integration Time */
CalculateIntegrationTime();
/* Send data to CCDView every 100ms */
if(++send_data_cnt >= 5) {
send_data_cnt = 0;
SendImageData(Pixel);
}
Get_Line(); //getline函数找到左右边线
tep=steer(g_nRightLinePosition,g_nLeftLinePosition); //steer函数在下面
uart_putchar (UART0, tep);
ATurnPWM=MIDSTRING+tep*100;
FTM_CnV_REG(FTMx[FTM1], CH1) = ATurnPWM;
/**********
**********/
}
}
}
s16 TurnOut=0,LastTurnOut=0;//转向值
float TurnP=64,TurnD=0.6;//0.6;//*转向PD
float error,errord,lasterror,llasterror;
int steer(unsigned int RightLinePosition,unsigned int LeftLinePosition)
{
error=(64-(RightLinePosition+LeftLinePosition)/2);
errord=error-lasterror;
TurnOut=(TurnP*error+TurnD*errord) ;
lasterror=error;
//llasterror=lasterror;
// LastTurnOut=TurnOut;
return TurnOut;
}
舵机只在通电的一刻稍稍动一下,tep的值也能够变化说明steer函数计算成功了,但是为什么舵机不能左右打角?
|
|