#include
#include "derivative.h"
/* common defines and macros */
/* derivative-specific definitions */
int left1=0;
int left2=0;
int right1=0;
int right2=0;
int AR_LEFT=0;//left2-right2
int AR_RIGHT=0;
int CR=0;//左边相加减右边相加
int preCR=0;
int ppreCR=0;
int mkp=0;
int mki=0;
int mkd=0;
//设定速度
int ideal_speed=0;
int speed=0;
int s_ideal0[6]={75,80,42,42,42,42}; //普通道、长直道、普通到弯、长直道到弯、弯内、偏离
黑线
int s_ideal1[6]={70,75,42,42,42,42};
int s_ideal2[6]={62,70,42,40,41,40};
int s_ideal3[6]={54,66,42,40,41,40};
int table_mkp0[6]={30,30,30,30,30,30};
int table_mkp1[6]={25,25,25,25,25,25};
int table_mkp2[6]={5,4,4,20,20,20};
int table_mkp3[6]={4,4,4,10,8,9}; //稳定速度
//ni 16.31
,shun 15.16
int table_mki0[6]={0,0,20,20,20,20};
int table_mki1[6]={0,0,20,20,20,20};
int table_mki2[6]={0,0,0,10,10,20};
int table_mki3[6]={0,0,0,0,0,0};
int table_mkd0[6]={0,0,0,0,0,0};
int table_mkd1[6]={0,0,0,0,0,0};
int table_mkd2[6]={0};
int table_mkd3[6]={0,0,0,0,0,0};
int s_table[6];
int b_mkp[6]=0;
int b_mki[6]=0;
int b_mkd[6]=0;
int table_rkp0[7]={5,3,2,550,550,550,8};//普通道中间、长直道低速、长直道高速、普到弯、
直到弯、弯、普通道两边
int table_rkp1[7]={7,5,4,450,450,400,9};
int table_rkp2[7]={6,3,2,150,150,150,9};
int table_rkp3[7]={5,3,2,150,150,150,9};
int table_rkd0[7]={0,0,0,400,400,400,100};
int table_rkd1[7]={0,0,0,500,500,500,100};
int table_rkd2[7]={0,0,0,200,300,400,100};
int table_rkd3[7]={0,0,0,200,300,400,100};
int b_rkp[7]=0;
int b_rkd[7]=0;
int rkp=0;
int rkd=0;
int f=0;// pwmDTY 要加的值
int pref=0;
//脉冲数
int Pulse_count=0;
int ganhuang=0;
unsigned int ting=0;
int i=0;
//道路标志
int Flag_Chute=0;
int GeneralCtn=0;
int CurveCtn=0;
int ChuteCtn=0;
int WANCtn=0;
int Flag_gaosu=0;
unsigned char Flag_Pwm;//知道转弯道标志
int flag=0;
/***********************
//PLL 超频到 40MHZ
****************/
void PLL_Init(void) {
CLKSEL=0X00;
PLLCTL_PLLON=1;
REFDV=0X80|0X01;
SYNR=0X40|0X04;
POSTDIV=0X00;
asm nop;
asm nop;
while(!(CRGFLG_LOCK==1));
CLKSEL_PLLSEL=1;
}
//延时函数 cnt*1ms;
void delay(unsigned int cnt) {
unsigned int loop_i,loop_j;
for(loop_i=0;loop_i)
CRGINT_RTIE=1;
asm cli;
}
//舵机初始化
void PWM_rudder_init(void) {
PWME_PWME3=0;
PWME_PWME2=0;
PWMPRCLK_PCKB=2;//CLOCKB=BUS/4=10MHz
PWMSCLB=2;//CLOCCSB=10/(2*2)=2.5MHz
PWMCTL_CON23=1;//组合 PWM23
PWMCLK_PCLK3=1;//PWM3 使用 SB
PWMPER23=50000;//写 PWM23 的周期寄存器,周期是 20ms
PWMPOL_PPOL3=1;//极性为正
PWMCAE_CAE3=0;//左对齐
PWME_PWME3=1;//使能 PWM23
}
//电机初始化
void PWM_init_motor(void){ //电机初始化
PWME_PWME0=0;
PWME_PWME1=0;
PWMPRCLK_PCKA=2; //Clock A=40M/4=10M
PWMPOL_PPOL1=1;//通道 1 正极性输出
PWMCLK_PCLK1=0;//通道 1 选择 A 时钟
PWMCAE_CAE1=0;//左对齐
PWMCTL_CON01=1;
PWMPER01=1000;//输出频率=10M/1000=10Khz
PWMDTY01=0;//通道 1 占空比为 100/250
PWME_PWME1=1;//通道 1 使能
PWME_PWME4=0;
PWME_PWME5=0;
PWMPRCLK_PCKA=1; //Clock A=40M/2=20M
PWMPOL_PPOL5=1;//通道 5 正极性输出
PWMCLK_PCLK5=1;//通道 5 选择 SA 时钟
PWMSCLA=1;
PWMCAE_CAE5=0;//左对齐
PWMCTL_CON45=1;
PWMPER45=1000;//输出频率=10M/1000=10Khz
PWMDTY45=0;//初始通占空比 0
PWME_PWME5=1;//通道 5 使能
//ClockSB=20M/(2*1)=10M
}
void AD_Init(void)
ATD0CTL1=0x20;
ATD0CTL2=0x40;
ATD0CTL3=0xA0;
ATD0CTL4=0x09;
ATD0CTL5=0x30;
ATD0DIEN=0x00;
//选择 AD 通道为外部触发,10 位精度,采样前不放电
//标志位自动清零,禁止外部触发, 禁止中断
//右对齐无符号,每次转换 4 个序列, No FIFO, Freeze 模式下继续转
//采样时间为 4 个 AD 时钟周期,PRS=9,ATDClock=40/(2*(9+1))2MHz
//特殊通道禁止,连续转换 4 个通道 ,多通道转换,起始通道为 0 转换
//禁止数字输入
{
}
/************************
/////////检测起跑线\\\\\\\\\\\
*****************/
void Checkstart(){
asm sei;
TIOS_IOS0=0;
TSCR1=0X80;
TSCR2=0X07;
//输入捕捉
TCTL4=0X01;//上升沿捕捉
TIE=0X01;
//允许硬件中断
asm cli;
}
//拨码开关
void boman(){
if(PORTA_PA0==1) {
b_rkp[0]=table_rkp0[0];
b_rkp[1]=table_rkp0[1];
b_rkp[2]=table_rkp0[2];
b_rkp[3]=table_rkp0[3];
b_rkp[4]=table_rkp0[4];
b_rkp[5]=table_rkp0[5];
b_rkp[6]=table_rkp0[6];
b_rkd[0]=table_rkd0[0];
b_rkd[1]=table_rkd0[1];
b_rkd[2]=table_rkd0[2];
b_rkd[3]=table_rkd0[3];
b_rkd[4]=table_rkd0[4];
b_rkd[5]=table_rkd0[5];
b_rkd[6]=table_rkd0[6];
b_mkp[0]=table_mkp0[0];
b_mkp[1]=table_mkp0[1];
b_mkp[2]=table_mkp0[2];
b_mkp[3]=table_mkp0[3];
b_mkp[4]=table_mkp0[4];
b_mkp[5]=table_mkp0[5];
b_mki[0]=table_mki0[0];
b_mki[1]=table_mki0[1];
b_mki[2]=table_mki0[2];
b_mki[3]=table_mki0[3];
b_mki[4]=table_mki0[4];
b_mki[5]=table_mki0[5];
b_mkd[0]=table_mkd0[0];
b_mkd[1]=table_mkd0[1];
b_mkd[2]=table_mkd0[2];
b_mkd[3]=table_mkd0[3];
b_mkd[4]=table_mkd0[4];
b_mkd[5]=table_mkd0[5];
s_table[0]=s_ideal0[0];
s_table[1]=s_ideal0[1];
s_table[2]=s_ideal0[2];
s_table[3]=s_ideal0[3];
s_table[4]=s_ideal0[4];
s_table[5]=s_ideal0[5];
}
if(PORTA_PA1==1) {
b_rkp[0]=table_rkp1[0];
b_rkp[1]=table_rkp1[1];
b_rkp[2]=table_rkp1[2];
b_rkp[3]=table_rkp1[3];
b_rkp[4]=table_rkp1[4];
b_rkp[5]=table_rkp1[5];
b_rkp[6]=table_rkp1[6];
b_rkd[0]=table_rkd1[0];
b_rkd[1]=table_rkd1[1];
b_rkd[2]=table_rkd1[2];
b_rkd[3]=table_rkd1[3];
b_rkd[4]=table_rkd1[4];
b_rkd[5]=table_rkd1[5];
b_rkd[6]=table_rkd1[6];
b_mkp[0]=table_mkp1[0];
b_mkp[1]=table_mkp1[1];
b_mkp[2]=table_mkp1[2];
b_mkp[3]=table_mkp1[3];
b_mkp[4]=table_mkp1[4];
b_mkp[5]=table_mkp1[5];
b_mki[0]=table_mki1[0];
b_mki[1]=table_mki1[1];
b_mki[2]=table_mki1[2];
b_mki[3]=table_mki1[3];
b_mki[4]=table_mki1[4];
b_mki[5]=table_mki1[5];
b_mkd[0]=table_mkd1[0];
b_mkd[1]=table_mkd1[1];
b_mkd[2]=table_mkd1[2];
b_mkd[3]=table_mkd1[3];
b_mkd[4]=table_mkd1[4];
b_mkd[5]=table_mkd1[5];
s_table[0]=s_ideal1[0];
s_table[1]=s_ideal1[1];
s_table[2]=s_ideal1[2];
s_table[3]=s_ideal1[3];
s_table[4]=s_ideal1[4];
s_table[5]=s_ideal1[5];
}
if(PORTA_PA2==1) {
b_rkp[0]=table_rkp2[0];
b_rkp[1]=table_rkp2[1];
b_rkp[2]=table_rkp2[2];
b_rkp[3]=table_rkp2[3];
b_rkp[4]=table_rkp2[4];
b_rkp[5]=table_rkp2[5];
b_rkp[6]=table_rkp2[6];
b_rkd[0]=table_rkd2[0];
b_rkd[1]=table_rkd2[1];
b_rkd[2]=table_rkd2[2];
b_rkd[3]=table_rkd2[3];
b_rkd[4]=table_rkd2[4];
b_rkd[5]=table_rkd2[5];
b_rkd[6]=table_rkd2[6];
b_mkp[0]=table_mkp2[0];
b_mkp[1]=table_mkp2[1];
b_mkp[2]=table_mkp2[2];
b_mkp[3]=table_mkp2[3];
b_mkp[4]=table_mkp2[4];
b_mkp[5]=table_mkp2[5];
b_mki[0]=table_mki2[0];
b_mki[1]=table_mki2[1];
b_mki[2]=table_mki2[2];
b_mki[3]=table_mki2[3];
b_mki[4]=table_mki2[4];
b_mki[5]=table_mki2[5];
b_mkd[0]=table_mkd2[0];
b_mkd[1]=table_mkd2[1];
b_mkd[2]=table_mkd2[2];
b_mkd[3]=table_mkd2[3];
b_mkd[4]=table_mkd2[4];
b_mkd[5]=table_mkd2[5];
s_table[0]=s_ideal2[0];
s_table[1]=s_ideal2[1];
s_table[2]=s_ideal2[2];
s_table[3]=s_ideal2[3];
s_table[4]=s_ideal2[4];
s_table[5]=s_ideal2[5];
}
if(PORTA_PA3==1) {
b_rkp[0]=table_rkp3[0];
b_rkp[1]=table_rkp3[1];
b_rkp[2]=table_rkp3[2];
b_rkp[3]=table_rkp3[3];