您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 第五届飞思卡尔智能车电磁组程序
第五届飞思卡尔智能车电磁组获奖程序MC9S12XS128单片机、用前置线圈检测磁感线、用无线蓝牙采集数据、干簧管检测起跑线磁铁。#includehidef.h/*commondefinesandmacros*/#includederivative.h/*derivative-specificdefinitions*/#includestdio.h/************************************************************************************一·全局变量声明模块*************************************************************************************/typedefunsignedcharINT8U;typedefunsignedintINT16U;typedefintINT32;typedefstruct{INT8Ud;//存放这一次AD转换的值}DATA;/****************************************************全局变量声明区*****************************************************/DATAdata[6]={0};//全局变量数组,存放赛道AD转换最终结果INT8Ua[6][8]={0};//全局变量用来存放赛道AD转换中间结果INT8Ucross0,cross1;//记录十字叉线#defineLEDPORTA_PA7#defineLED_CSPORTA_PA0byteSTART;INT16Udianji0;//用来存放上次电机转速PWM,来判断是否减速#defineduojmax9200//向左转向最大值#defineduojmid8400//打在中间#defineduojmin7600//向右转向最小值#defineduojcs8000;#definedianjmax1200#definedianjmin10#definedianjmid600staticINT8Ulook=0,look1=0;introad_change[100]={0};//判断赛道情况数组introat_change0;int*r_change0;//指向数组最后一位int*r_change1;//指向数组倒数第二位intsum_front=0,sum_back=0;//分别存储数组前后两部分的和INT16Uwaittime=0;INT8Uchoise;//读拨码开关数值/******************************速度测量参数定时********************************/#definePIT0TIME800//定时0初值:设定为4MS测一次速度,采一次AD值#definePIT1TIME1390//定时1初值:设定为7ms定时基值/*******************************脉冲记数变量*******************************/staticINT16UPulseCnt;//最终的脉冲数/******************************电机PID变量*********************************/floatspeed_return_m;struct{interror0;interror1;interror2;intspeed;intchage;floatq0,q1,q2,Kp,Kd,Ki;}staticSpeedPid;/********************************速度变量设定*******************************/INT8Uspeedmax;//直道加速INT8Uspeedmin;//急转弯刹车INT8Uspeedmid;//弯道内部限速INT8Uspeedaveg;//INT8Ubreaktime;//刹车时间////////////////////////////////////////////////////////////////////////////#definespeederror_min2//允许的最小误差staticintNowSpeed;staticintspeed_control;//存储pid输出值staticintspeed_return;/*******************************舵机PID参数******************************/struct{interror0;interror1;interror2;intchage;floatKp,Kd,Ki;}PositionPid;intchange;staticINT16Uangle_left[52]={8550,8562,8574,8586,8598,8610,8622,8634,8646,8658,8670,8682,8694,8706,8718,8730,8742,8754,8766,8778,8790,8802,8814,8826,8838,8850,8862,8874,8886,8898,8910,8922,8934,8946,8958,8970,8982,8994,9006,9018,9030,9042,9054,9066,9078,9090,9102,9114,9126,9138,9150,9150};staticINT16Uangle_right[52]={8250,8238,8226,8214,8202,8190,8178,8166,8154,8142,8130,8118,8106,8094,8082,8070,8058,8046,8034,8022,8010,7998,7986,7974,7962,7950,7938,7926,7914,7902,7890,7878,7866,7854,7842,7830,7818,7806,7794,7782,7770,7758,7746,7734,7722,7710,7698,7686,7674,7662,7650,7650};staticINT16U*angle_l=angle_left,*angle_r=angle_right;staticINT16Uangle_control=duojmid;//舵机PWM最终控制量staticINT16Uangle_control0=duojmid;staticINT16Uangle_control1=duojmid;staticINT16Ubreak_pwm=0;INT16Uangle_return;/****************************lcd液晶显示变量定义**************************/#defineLCD_DATAPORTB#defineLCD_RSPORTA_PA4//PA6#defineLCD_RWPORTA_PA5//PA7#defineLCD_EPORTA_PA6//PA7INT8Ustart[]={WELCOMETOLZJTU};INT8Udate[]={2011-3-15TUS};INT8Utime[]={00:00:00};INT16UCounter=0;INT8UCounter0=0,select=0,min=0;INT8UCounter1=0;INT8ULCD_choice;/**************************标志变量区*************************************/INT8Ustop_flag=0;INT8Ustart_flag=0;INT8Ubackflag=0;INT8UAD_start;INT8Uzhijwan=0;INT8Ushizi=0;/************************************************************************************二·初始化函数模块*************************************************************************************//**************************************************************1.芯片初始化--------MCUInit()**************************************************************/voidMCUInit(void){////////////////////////////////////////////////////////////////////////////////////////////********总线周期计算方法********////fBUS=fPLL/2////fvoc=2*foscclk*(synr+1)/(refdv+1)////PLL=2*16M*(219+1)/(69+1)=96Mhz/////////////////////////////////////////////////////////////////////////////////////////////////CLKSEL=0X00;PLLCTL_PLLON=1;//锁相环控制SYNR=0X40|0X05;REFDV=0X80|0X01;POSTDIV=0X00;while(CRGFLG_LOCK!=1);//等待锁相环时钟稳定,稳定后系统总线频率为24MHzCLKSEL_PLLSEL=0x01;//选定锁相环时钟PLLCTL=0xf1;//锁相环控制//时钟合成fpllclk=2*foscclk*(synr+1)/(refdv+1)//synr=2;refdv=1;外部时钟foscclk=16mb//fpllclk=48mb总线时钟24mb//CRGFLG=0x40;//时钟复位控制//CRGINT=0x00;//时钟复位中断使能//CLKSEL=0xc0;//时钟选择//COPCTL=0x00;//ARMCOP=0x00;//看门狗复位//RTICTL=0x00;//实时中断}/**************************************************************2.AD转换初始化--------ADCInit()**************************************************************/voidADCInit(void){ATD0CTL1=0x00;ATD0CTL2=0x40;//0100,0000,自动清除使能控制位,忽略外部触发//转换结束允许中断,中断禁止ATD0CTL3=0xA4;//0100,0100,转换序列长度为4;FIFO模式,冻结模式下继续转换ATD0CTL4=0x05;//00001000,8位精度,PRS=5,ATDCLOCK=BusClock(24mb)/(5+1)*2,约为2MHz,采样周期位4倍AD周期ATD0DIEN=0x00;//输入使能禁止}/**************************************************************3.PWM初始化--------PWMInit()**************************************************************/voidPWMInit(void)//PWM初始化{//总线频率24mb//1.选择时钟:PWMPRCLK,PWMSCLA,P
本文标题:第五届飞思卡尔智能车电磁组程序
链接地址:https://www.777doc.com/doc-3264699 .html