基于磁场导航智能车控制器的设计(编辑修改稿)内容摘要:

结果 unsigned int AD_5。 //AD 转换结果 unsigned int AD_6。 //AD 转换结果 signed int Speed,x1,x2,y,x11,x22。 //速度转换值 unsigned int time,numm,m。 unsigned int numm_last0,numm_last1,numm_last2, num_last0,num_last1,num_last2。 //延时子程序 // void delay(unsigned int xms) { int a,b,c。 for(c=0。 cxms。 c++) { for(a=0。 a=50。 a++) { for(b=0。 b=200。 b++)。 } } } ///////////////////////////////////// //// 电机 PID 定义 ///////////////////////////////////// //int SetPoint=0。 //设定目标 Desired Value int FeedBack=0。 float KKp=。 //比例常数 Proportional Const float KKi=0。 float KKd=。 //微分常数 Derivative Const signed int EE0=0。 //当前误差 signed int EE1=0。 //Error[1] signed int EE2=0。 //Error[2] signed int EError0=0,EError1=0。 signed int iiIncpid=0。 int sp=0。 int pp。 /////////////////////////////// /// PID 定义 ////////////////////////////// float Kp=。 //比例常数 Proportional Const float Ki=。 float Kd=。 //微分常数 Derivative Const signed int E0=0。 //当前误差 signed int E1=0。 //Error[1] signed int E2=0。 //Error[2] signed int Error0=0,Error1=0。 signed int iIncpid=0。 ///////////////////////////////////// ///////////////////////////////////// //// 电机 PID ///////////////////////////////////// //////////////////////////////////// unsigned int Motor_PID(int cch1,int cch2 ) { //cch2=cch2/3。 EE0=cch1cch2。 //增量计算 EError0=EE0EE1。 EError1=EE1EE2。 iiIncpid=(int)(KKi*EError0+KKp*EE0+KKd*(EError0EError1))。 EE1=EE0。 EE2=EE1。 //存储误差,用于下次计算 sp+=iiIncpid。 if(sp90) sp=90。 if(sp10) sp=10。 return sp。 } ////////////////////////// //////////速度 /////////// ///////////////////////// void Sudu(int SetPoint) { pp=Motor_PID(SetPoint,FeedBack)。 PWMDTY1=pp。 } /////////////////////////////// ///////舵机 PID /////////////// /////////////////////////////// int Steer_PID(signed int ch1 ,signed int ch2 ) { E0=ch1ch2。 //增量计算 Error0=E0E1。 Error1=E1E2。 iIncpid=(int)(Ki*Error0+Kp*E0+Kd*(Error0Error1))。 E1=E0。 E2=E1。 //存储误差,用于下次计算 return iIncpid。 } ////////////////////////////// //////////刹车 //////////////// //////////////////////////// void shacheV(int sh_v) { PWME_PWME0=1。 PWME_PWME1=0。 PWMDTY0=sh_v。 while(FeedBackFB)。 PWME_PWME0=0。 PWME_PWME1=1。 flag=0。 Led_right=1。 Led_left=1。 } /////////////////////////// /////////按键检测 /////////// //////////////////////////// void KEY_SCAN(void) { if(KEY==0) { delay(10)。 if(KEY==0) { while(!KEY)。 z++。 if(z==1) { FB=85。 SH=45。 SH1=45。 V1=80。 V2=80。 V3=80。 V4=150。 V5=90。 V6=80。 Led_left=0。 Led_right=1。 delay(500)。 Led_left=1。 } if(z==2) { FB=90。 SH=45。 SH1=45。 V1=85。 V2=85。 V3=80。 V4=150。 V5=90。 V6=80。 Led_right=0。 Led_left=1。 delay(500)。 Led_right=1。 } if(z==3) { FB=100。 SH=45。 SH1=45。 V1=95。 V2=95。 V3=90。 V4= V5=100。 V6=100。 Led_right=0。 Led_left=0。 delay(500)。 Led_right=1。 Led_left=1。 } if(z==4) { z=0。 FB=100。 SH=45。 SH1=45。 V1=95。 V2=95。 V3=90。 V4=170。 V5=100。 V6=100。 Led_right=1。 Led_left=0。 delay(500)。 Led_left=1。 } } } } //////////////////////////////////// ///////////速度控制 ///////////////// //////////////////////////////////// void Speed_con(void) { while(!ATD0STAT0_SCF)。 //等待当前队列转换完成 */ AD_1=ATD0DR0L。 AD_2=ATD0DR1L。 AD_3=ATD0DR2L。 AD_4=ATD0DR3L。 AD_5=。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。