首页 第五界飞思卡尔智能车大赛程序(光电组)

第五界飞思卡尔智能车大赛程序(光电组)

举报
开通vip

第五界飞思卡尔智能车大赛程序(光电组)第五界飞思卡尔智能车大赛程序(光电组) 我是光电组的,下面是程序,小车可以跑起来,但速度有待提升 #include /* common defines and macros */ #include /* derivative information */ #pragma LINK_INFO DERIVATIVE "mc9s12xs128" //static unsigned char direction_turn[12]={888,1098,1208,1328,1481,1612,1730,1856,19...

第五界飞思卡尔智能车大赛程序(光电组)
第五界飞思卡尔智能车大赛程序(光电组) 我是光电组的,下面是程序,小车可以跑起来,但速度有待提升 #include /* common defines and macros */ #include /* derivative information */ #pragma LINK_INFO DERIVATIVE "mc9s12xs128" //static unsigned char direction_turn[12]={888,1098,1208,1328,1481,1612,1730,1856,1988,2100,2222,2368}; //Chapter 12 //Periodic Interrupt Timer (S12PIT24B4CV1) Page349 //The PIT module has no external pins. //PIT 模式没有外部引脚 unsigned char light=0; //激光管检测标志 unsigned short turn_value=0; //转向的PWM数值 unsigned short direction_turn[7]={333,430,560,647,705,780,888}; //转向给定值初始 化 short speed_set[7]={250,300,350,400,350,300,250}; //速度给定值 short speed_flag=0; //速度档位标志位 short speed[3]={0,0,0}; //速度检测函数 short pulse_count=0; //编码器脉冲计数值 short speed_expect=0; //理想速度 short kp=2; //比例环节 short ki=0; //积分环节 short kd=1; //微分环节 short ek1=0; //误差1 short ek2=0; //误差2 short ek3=0; //误差3 short speed_add=0; //速度增量 =====================================================================void PLL_Init() //时钟初始化 { REFDV=0x81; /* PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)*/ SYNR=2; /* 锁相环时钟=2*16*(2+1)/(1+1)=48MHZ */ while(!(CRGFLG&0x08)); /* 总线时钟=48/2=24MHZ */ CLKSEL=0x80; } void PWM_Init() //PWM初始化 { PWME=0x00; //关闭PWM使能 PWMPRCLK=0x66; //A,B时钟均为总线的64分频,375KHZ //PWMSCLA=0x01; //clockSA=clockA/(2*PWMSCLA) = 1500KHZ //PWMSCLB=0X01; //clockSB=clockB/(2*PWMSCLB) =1500KHZ PWMCLK=0x00; PWMPOL=0xFF; //PWM输出起始电平为高电平 PWMCAE=0x00; //输出左对齐 PWMCTL=0xf0; //通道01,23,45,67级联 PWMPER01=5999; //舵机频率为62.5Hz PWMDTY01=647; //占空比a=(PWMDTY01+1)/(PWMPER01+1) PWMPER23=1000; //PWM通道3周期为375HZ PWMDTY23=0; //占空比a=(PWMDTY01+1)/(PWMPER01+1)占空比50% ~~ 150 PWMPER45=1000; //PWM通道5周期为0.10ms 10KZH 300=0.00010/(1/3000000) PWMDTY45=300; //占空比a=(PWMDTY01+1)/(PWMPER01+1) PWMPER67=375; //频率为1000Hz PWMDTY67=200; // PWME=0xff; //使能pwm } void Pit0_Init() //PIT初始化 { PITCFLMT_PITE=0; //关PIT使能 PITCE_PCE0=1; //通道0使能 PITMUX_PMUX0=0; //通道0接微时钟0 PITMTLD0=99; //微时钟0值设置为7f PITLD0=3839; //time-out period = (PITMTLD + 1) * (PITLD + 1) / fBUS. //时间计算 100*3840/24000000=0.016s PITINTE_PINTE0=1; //通道0中断时能 PITCFLMT_PITE=1; //PIT使能 } void ECT_Init() { TIOS=0x00; /* OC0路为输出比较,OC1路为输入捕捉 */ TSCR2=0x06; /* 定时器溢出中断禁止,计数器自由运行禁止复位,64分频 */ TSCR1=0x80; /* 定时器使能 */ TIE=0x01; /* 输出比较相应中断使能 */ TCTL4=0x01; } void dly_1ms() { int i,j; for(i=0;i<200;i++) { for(j=0;j<1000;j++){;} } } void sam_position() //车位检测函数 { int i=0,j=0; unsigned char m=0,n=0; n=PORTA; for(i;i<10;i++) { m=PORTA; if(n==m) j++; } if(j>6) light=n; } void check_start() //检测起始线 { if((light&&4)||(light&&16)) start_flag++; } void check_start() { } void turning() //舵机转向函数 { switch(light) { case 1:if(turn_value==direction_turn[1]) //出界判断算法 { turn_value=direction_turn[0]; speed_expect=speed_set[0]; } else if(turn_value==direction_turn[0]) { turn_value=direction_turn[0]; speed_expect=speed_set[0]; } break; case 2:if(turn_value==direction_turn[0]) { turn_value=direction_turn[1]; speed_expect=speed_set[1]; } else if(turn_value==direction_turn[1]) { turn_value=direction_turn[1]; speed_expect=speed_set[1]; } else if(turn_value==direction_turn[2]) { turn_value=direction_turn[1]; speed_expect=speed_set[1]; } break; case 4:if(turn_value==direction_turn[1]) { turn_value=direction_turn[2]; speed_expect=speed_set[2]; } else if(turn_value==direction_turn[2]) { turn_value=direction_turn[2]; speed_expect=speed_set[2]; } else if(turn_value==direction_turn[3]) { turn_value=direction_turn[2]; speed_expect=speed_set[2]; } break; case 8:if(turn_value==direction_turn[2]) { turn_value=direction_turn[3]; speed_expect=speed_set[3]; } else if(turn_value==direction_turn[3]) { turn_value=direction_turn[3]; speed_expect=speed_set[3]; } else if(turn_value==direction_turn[4]) { turn_value=direction_turn[3]; speed_expect=speed_set[3]; } break; case 16:if(turn_value==direction_turn[3]) { turn_value=direction_turn[4]; speed_expect=speed_set[4]; } else if(turn_value==direction_turn[4]) { turn_value=direction_turn[4]; speed_expect=speed_set[4]; } else if(turn_value==direction_turn[5]) { turn_value=direction_turn[4]; speed_expect=speed_set[4]; } break; case 32:if(turn_value==direction_turn[4]) { turn_value=direction_turn[5]; speed_expect=speed_set[5]; } else if(turn_value==direction_turn[5]) { turn_value=direction_turn[5]; speed_expect=speed_set[5]; } else if(turn_value==direction_turn[6]) { turn_value=direction_turn[5]; speed_expect=speed_set[5]; } break; case 64:if(turn_value==direction_turn[5]) //出界判断算法 { turn_value=direction_turn[6]; speed_expect=speed_set[6]; } else if(turn_value==direction_turn[6]) { turn_value=direction_turn[6]; speed_expect=speed_set[6]; } break; default:break; } PWMDTY01=turn_value; } void check_speed() //速度检测函数 { ek3=ek2; //计算速度差值 ek2=ek1; ek1=speed_expect-pulse_count; speed[2]=speed[1]; //当前速度放在[0],之前放在[1],[2] speed[1]=speed[0]; speed[0]=pulse_count; pulse_count=0; } void speed_down() //制动函数 { PWMDTY23=300; //电机反向供电 PWMDTY45=0; } void speed_pid() //PID算法 { speed_add=kp*(ek1-ek2)+ki*ek1+kd*(ek1-2*ek2+ek3); //PID增量式 } void driver() //驱动电机控制函数 { //if(((turn_value>705)||(turn_value<560))&&(speed[0]>200)) //当前速度若远超给定 速度 // { //speed_down(); // } //else // { PWMDTY23=0; speed_pid(); PWMDTY45=PWMDTY45+speed_add; // } if(PWMDTY45>600) PWMDTY45=600; } void main() { DisableInterrupts; /* 关中断 */ PLL_Init(); PWM_Init(); Pit0_Init(); ECT_Init(); turn_value=direction_turn[3]; DDRA=0x00; DDRB=0xFF; PORTB=0X00; EnableInterrupts; for(;;) { //sam_position(); //turning(); } } #pragma CODE_SEG NON_BANKED void interrupt 8 Timer0_ISR(void) { pulse_count++; TFLG1_C0F=1; /* TC0端有中断产生 */ } void interrupt 66 PIT0_ISR(void) { sam_position(); //车位检测函数 turning(); //舵机转向函数 check_speed(); //速度检测函数 driver(); // 驱动电机控制函数 PITTF_PTF0=1; /* PIT0端有中断产生,清除标志位 */ }
本文档为【第五界飞思卡尔智能车大赛程序(光电组)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_196623
暂无简介~
格式:doc
大小:28KB
软件:Word
页数:10
分类:
上传时间:2018-02-21
浏览量:26