亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? motors.c

?? 老外開發的機器人的底層單片機代碼。比較有參考價值哦!
?? C
?? 第 1 頁 / 共 2 頁
字號:
		 if (AccTemp2 > 32767) AccTemp2 =  32767; //fix overflow when convert
		 if (AccTemp2 <-32767) AccTemp2 = -32767; //  to integer next line
		 AccCmd = (int)AccTemp2;
		 if(AccCmd > AccMax) AccCmd = AccMax;
		 if(AccCmd <-AccMax) AccCmd =-AccMax;
	  }

   //Keep motors from splitting if pwm limit reached
   		//if both motors below pwm limit, accelerate normally  
		if(pwmL < PWMmax && pwmR < PWMmax)
		  {V1 = V1 + AccCmd;
		  }
		else  //else don't incr Vcmd & back off DistCmd to wheel farthest behind  
		  { if (Vcmd > 0)  //going forward
		    {  if(DistErrL>0 || DistErrR>0)
		       { if(pwmL >= PWMmax && pwmR >= PWMmax) 	 //if both on limit
		         { if (DistErrL > DistErrR)  
				        D1 = D1 - (long)DistErrL * 61 * 1000 / KdistL;
			       else D1 = D1 - (long)DistErrR * 61 * 1000 / KdistR;
			     }
		         else	   	 	  			  	  	  //else just one on limit
			     { if (pwmL >= PWMmax)
				        D1 = D1 - (long)DistErrL * 61 * 1000 / KdistL;
			       if (pwmR >= PWMmax) 
				        D1 = D1 - (long)DistErrR * 61 * 1000 / KdistR;
			     }
			   }	 
		    }	   	      
			else               //going in reverse
			{  if(DistErrL<0 || DistErrR<0)
		       { if(pwmL >= PWMmax && pwmR >= PWMmax) 	 //if both on limit
		         { if (DistErrL < DistErrR) 
				        D1 = D1 - (long)DistErrL * 61 * 1000 / KdistL;
			       else D1 = D1 - (long)DistErrR * 61 * 1000 / KdistR;
			     }
		         else	   	 	  			  	  	   	 //else just one on limit
			     { if (pwmL >= PWMmax) 
				        D1 = D1 - (long)DistErrL * 61 * 1000 / KdistL;
			       if (pwmR >= PWMmax)
				        D1 = D1 - (long)DistErrR * 61 * 1000 / KdistR;
			     }
		       }	
			}
		  }	
		
	    Vcmd = V1/61;
	    D1 += Vcmd;
        DistCmd = D1/61;

   //or is it time to stop?
	    if((MotorMode == 1) && (abs(DistToGo) < 2))  //in forward mode
		{ StopFlag = 1;
		  FwdModeDone = 1;
		}
		
//	    if ((MotorMode == 0) && (abs(Vcmd) < 5) )	 //in stop mode
	    if ((MotorMode == 0) && (abs(Speed) < 10) )	 //in stop mode
		 { DistTarget = DistCmd;
		   StopFlag = 1;
		   FwdModeDone = 1;
		 }  

		if (StopFlag)
		 {  AccCmd = 0;
			Vcmd = 0;
			V1 = 0;
			DistCmd = DistTarget;
			D1 = (long) DistCmd * 61;
		 }
}   //end of function MotorCmd()

  
//---------------------------------------------------------------------------
/*  MOTOR SPEED CONTROL

    Calculates the necessary pwm duty cycle for each wheel.  Sets direction bit
	output, limits to maximum pwm level (100%) and sets PWM duty cycle register.
	Brake output to h-bridge is not controlled (always turned off).
*/ 

void MotorHB(void) 
  { 
	// Left motor calculations
    pwmL = gain(VcmdL,KvL) + gain(AccCmdL,KaccL) + gain(DistErrL,KdistL);
    if(PWMtestOn) pwmL = testvalueL;       // BITE test pwm override 

	if (pwmL > 0) PTH &= ~0x04;		       //set direction bit to forward
    else          PTH |=  0x04;		       //set direction bit to reverse

	pwmL = abs(pwmL) + PwmBaseL;  	 	   //add motor breakout pwm
	if(pwmL > PWMmax) pwmL = PWMmax;
	PWMDTY2 = pwmL;
	
	PTH &= ~0x08;  	  	   	       		   //set brake bit off   

	 // Right motor calculations
    pwmR = gain(VcmdR,KvR) + gain(AccCmdR,KaccR) + gain(DistErrR,KdistR);
    if(PWMtestOn) pwmR = testvalueR;       // BITE test pwm override 

	if (pwmR > 0) PTH |=  0x10; 	       //set direction bit to forward
    else          PTH &= ~0x10;		       //set direction bit to reverse

	pwmR = abs(pwmR) + PwmBaseR;  	 	   //add motor breakout pwm
	if(pwmR > PWMmax) pwmR = PWMmax;
	PWMDTY1 = pwmR;
	
	PTH &= ~0x20;  	  	   	       		   //set brake bit off   
	
  }  		  //end of function 
  
void MotorRC(void) 
  { 
	int	temp;
	
	// Left motor calculations
    pwmL = gain(VcmdL,KvL) + gain(AccCmdL,KaccL) + gain(DistErrL,KdistL);
    if(PWMtestOn) pwmL = testvalueL;       // BITE test pwm override 
//printf("xx %d %d %d %d %d %d %d",VcmdL,KvL,AccCmdL,KaccL,DistErrL,KdistL,pwmL);
	if(pwmL > 0) pwmL += PwmBaseL;
	if(pwmL < 0) pwmL -= PwmBaseL;
	if(pwmL >  PWMmax) pwmL =  PWMmax;
	if(pwmL < -PWMmax) pwmL = -PWMmax;
	temp = 1500 + RCoffsetL + 5 * pwmL;
//printf("   %d\n",pwmL);
	PWMDTY2 = temp / 256;
	PWMDTY3 = temp - PWMDTY2 * 256;
	PWMCNT3 = 0;   	 		   	   //to restart PWM period
	
	 // Right motor calculations
    pwmR = gain(VcmdR,KvR) + gain(AccCmdR,KaccR) + gain(DistErrR,KdistR);
    if(PWMtestOn) pwmR = testvalueR;       // BITE test pwm override 

	if(pwmR > 0) pwmR += PwmBaseR;
	if(pwmR < 0) pwmR -= PwmBaseR;
	if(pwmR >  PWMmax) pwmR =  PWMmax;
	if(pwmR < -PWMmax) pwmR = -PWMmax;
	temp = 1500 + RCoffsetR + 5 * pwmR;
	
	PWMDTY0 = temp / 256;
	PWMDTY1 = temp - PWMDTY0 * 256;
	PWMCNT1 = 0;     		   	   	 	   //to restart PWM period
//printf("%d %d %d %d %d\n",pwmR, pwmL,VcmdL,AccCmdL,DistErrL);
  }  		  //end of function 
  
//---------------------------------------------------------------------------
//sets up stop forward motion mode 
void MotorStop(int Acc) 
  {  
   MotorMode = 0;
    if(Acc != 0) AccMax = abs(Acc);
	else         AccMax = 300;  //default decel
	StopFlag = 0;
	DecelFlag = 1;
	FwdModeDone = 0;
//printf("Mo Stop AccMax = %d \n",AccCmd);
  }	
	
//---------------------------------------------------------------------------
//sets up forward/reverse mode and starts odom at zero.
void MotorFwd(int Acc, int Vmx, long int DistTarg, int ResetOdom) 
  { 
    if(Acc != 0) AccMax = abs(Acc);
	else         AccMax = 300;  //default accel
	
	Vmax   = abs(Vmx);
   //reset decel  & stop flags if target changes
	  if(DistTarget != DistTarg)
	  {  DecelFlag = 0;
	     StopFlag = 0;
	  }
	DistTarget = DistTarg;
	if(MotorMode != 1)             //if starting a new forward/reverse motion
	 {MotorMode = 1;
	  AccCmd = 0;
	  Vcmd = 0;
      StopFlag = 0;
	  DecelFlag = 0;
	 }
	if(ResetOdom == 1) 
	 {D1 = 0; DistCmd = DistCmdL = DistCmdR =0;
	  V1 = 0;
	  StopFlag = 0;
	  DecelFlag = 0;
	  enc0 = enc1 = 0;  	       //reset encoders to zero
	  odomLlast = 0;
	  odomRlast = 0;
	  
     TurnCmd = 0; 				   //reset turn data
	 TurnIC = 0;
	 TurnTarget = 0;
	 TV1 = TD1 = 0;
	 }
	FwdModeDone = 0;
//printf("//mo Fwd   AMx %d  VMx %d DT %ld\n",AccMax,Vmax,DistTarget);	
  }	
	

//---------------------------------------------------------------------------
//sets up stop turn mode 
void MotorTurnStop(int TAcc) 
  {  
     if(TAcc != 0) TAccMax = abs(TAcc);
	 else          TAccMax = 150;  //default turn accel
	 TurnType = 5;
	 TurnStopFlag = 0;
	 TurnDecelFlag = 1;
	 TurnModeDone = 0;
//printf("//Mo TurnStop TAccMax = %d \n",TAccMax);
  }	
	
//---------------------------------------------------------------------------
//Turns from current direction a specified number of degrees
void   MotorTurnDeg(int TAcc, int temp1, long tempL1)
   {  
     if(TAcc != 0) TAccMax = abs(TAcc);
	 else          TAccMax = 150;  //default turn accel
	 
	 TurnRateMax = abs(temp1);
	 TurnIC += TurnCmd*PivotConv/11460;
	 TD1 = 0;
	 TurnCmd = 0;
     TurnTarget = tempL1;
	 TurnType = 1;
	 TurnDecelFlag = 0;
	 TurnStopFlag = 0;
	 TurnModeDone = 0;
//printf("//mo MotorTurnDeg  %d  %d  %ld \n",TAccMax,TurnRateMax,TurnTarget);
   }   

//---------------------------------------------------------------------------
//Modifies ongoing MotorTurnDeg command
void   MotorTurnDegMod(int TAcc, int temp1, long tempL1)
   {  
     if(TAcc != 0) TAccMax = abs(TAcc);
	 else          TAccMax = 150;  //default turn accel
	 
	 TurnRateMax = abs(temp1);
   //reset decel  & stop flags if target changes Note: duplicated in Steering(),
   //  maybe this one can be deleted, I think Steering() version more general.
	  if(TurnTarget != temp1)
	  {  TurnDecelFlag = 0;
	     TurnStopFlag = 0;
	  }
     TurnTarget = tempL1;
	 TurnModeDone = 0;
//printf("mo MotorTurn  %d  %d  %ld \n",TAccMax,TurnRateMax,TurnTarget);
  }   

//---------------------------------------------------------------------------
//Turns to a specified heading  
void   MotorHdgSel(int TAcc, int temp1, long tempL1)
   { 
     if(TAcc != 0) TAccMax = abs(TAcc);
	 else         AccMax = 150;  //default turn accel
	 
     TurnRateMax = abs(temp1);
     HdgTarget = tempL1;
	 TurnType = 10;
	 TurnIC = TurnCmd * PivotConv/11460;
	 TurnTarget = 0;
	 TD1 = 0;
	 TurnModeDone = 0;
//printf("mo MotorHdgSel  %d  %d  %ld \n",TAccMax,TurnRateMax,HdgTarget);
   }   
//---------------------------------------------------------------------------
//Controls to maintain current heading +/- tempL1
void   MotorHdgHold(int TAcc, int temp1, long tempL1)
   { 
     if(TAcc != 0) TAccMax = abs(TAcc);
	 else         AccMax = 150;  //default turn accel
	 
     TurnRateMax = abs(temp1*10);
     HdgTarget = Compass + tempL1;
	 TurnType = 10;
	 TurnIC = TurnCmd * PivotConv/11460;
	 TurnTarget = 0;
	 TD1 = 0;
	 TurnModeDone = 0;
//printf("mo MotorTurn  %d  %d  %ld \n",TAccMax,TurnRateMax,TurnTarget);
   }   

//  OPEN SOURCE SOFTWARE LICENSE
/* Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to use, 
copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the 
Software, and to permit persons to whom the Software is furnished to do so, 
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all 
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ 	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
看电视剧不卡顿的网站| 欧美探花视频资源| 色婷婷久久一区二区三区麻豆| 欧美日韩在线不卡| 久久久久97国产精华液好用吗| 亚洲一区二区三区四区的| 国产另类ts人妖一区二区| 欧美午夜精品久久久久久孕妇 | 一区二区三区中文字幕| 久久精品国产亚洲高清剧情介绍 | 精品福利视频一区二区三区| 亚洲激情校园春色| 成人午夜精品在线| 欧美videofree性高清杂交| 亚洲不卡在线观看| 一本久久精品一区二区| 国产亲近乱来精品视频| 激情伊人五月天久久综合| 7777精品伊人久久久大香线蕉 | 中文字幕一区二区三区av| 国产一区二区主播在线| 91精品国产综合久久久蜜臀图片| 一区二区三区不卡视频在线观看 | 国产在线精品一区二区不卡了| 欧美人xxxx| 亚洲图片自拍偷拍| 欧美性猛片xxxx免费看久爱| 亚洲欧美激情在线| 色综合色综合色综合| 亚洲精品高清视频在线观看| 91免费版pro下载短视频| 中文字幕一区二区三区在线不卡 | 51久久夜色精品国产麻豆| 亚洲v中文字幕| 欧美一区二区啪啪| 裸体健美xxxx欧美裸体表演| 欧美一区二区三区在线观看| 男男视频亚洲欧美| 精品免费视频一区二区| 久久99国产乱子伦精品免费| 欧美一区二区三区的| 精品一区中文字幕| 国产精品日韩成人| 91日韩在线专区| 午夜一区二区三区在线观看| 在线不卡一区二区| 韩国欧美国产一区| 国产亚洲欧洲997久久综合| 岛国av在线一区| 亚洲男人天堂av网| 欧美日韩一级二级| 精品亚洲成a人在线观看| 国产欧美精品一区二区色综合 | 国产成人无遮挡在线视频| 欧美极品aⅴ影院| 91国内精品野花午夜精品| 视频一区视频二区在线观看| 精品国产青草久久久久福利| 成人h动漫精品| 午夜国产精品一区| 国产欧美日韩另类一区| 日本久久精品电影| 捆绑变态av一区二区三区| 国产精品狼人久久影院观看方式| 欧美在线色视频| 国产精品99久久久久| 一区二区高清视频在线观看| 欧美成人三级在线| 在线免费亚洲电影| 国产乱码精品一区二区三区忘忧草| 亚洲精品乱码久久久久久| 日韩欧美中文一区二区| 99久久99久久精品免费看蜜桃| 亚洲第一成年网| 国产欧美一区二区精品性色| 欧美日韩三级一区二区| 懂色av中文一区二区三区| 亚洲动漫第一页| 亚洲国产高清在线观看视频| 欧美一区三区四区| 色综合久久久久网| 国产福利一区在线| 日日摸夜夜添夜夜添精品视频 | 91免费在线播放| 久久99在线观看| 国产一区二区女| 水蜜桃久久夜色精品一区的特点| 国产精品久久久99| 精品国产伦一区二区三区观看方式 | 亚洲色图都市小说| 精品国产不卡一区二区三区| 欧美日韩国产美女| 99麻豆久久久国产精品免费| 国产一区二区不卡| 日本vs亚洲vs韩国一区三区二区 | 欧美日韩午夜在线视频| 成人18视频日本| 国产精品一区二区三区99| 麻豆一区二区三| 亚洲成a人v欧美综合天堂下载 | 欧美美女黄视频| 在线区一区二视频| 91麻豆免费观看| 成人激情黄色小说| 成人性视频免费网站| 国内久久精品视频| 久久99国产乱子伦精品免费| 蜜臀av亚洲一区中文字幕| 午夜精品福利一区二区蜜股av | 欧美午夜精品一区二区蜜桃| 色婷婷综合久久| 91在线视频播放| 99久久er热在这里只有精品15| 本田岬高潮一区二区三区| 丁香啪啪综合成人亚洲小说| 粉嫩一区二区三区在线看| 国产不卡在线播放| 国产成人8x视频一区二区 | 国产在线精品一区二区| 国产精品资源在线看| 国产精品中文欧美| 国产mv日韩mv欧美| 成人污视频在线观看| proumb性欧美在线观看| 91色.com| 欧美精品成人一区二区三区四区| 欧美精品久久久久久久多人混战 | 欧美视频一区在线| 欧美一区二区三区婷婷月色| 日韩欧美国产三级电影视频| 日韩免费看的电影| 国产欧美一区二区三区鸳鸯浴| 国产精品久99| 亚洲成人自拍网| 美女在线视频一区| 福利电影一区二区| 日本韩国一区二区三区视频| 欧美日韩成人在线| 欧美成人aa大片| 国产精品萝li| 香蕉影视欧美成人| 欧美疯狂做受xxxx富婆| 欧美一区二区不卡视频| 日本一区二区三区dvd视频在线| 亚洲少妇最新在线视频| 日韩精品久久久久久| 国产一区二区在线看| 一本一道久久a久久精品| 91.成人天堂一区| 日本一区二区视频在线观看| 亚洲综合图片区| 国产在线国偷精品产拍免费yy| 成人激情av网| 91精品国产高清一区二区三区| 久久久不卡网国产精品二区 | 亚洲综合清纯丝袜自拍| 蜜桃av噜噜一区二区三区小说| 懂色一区二区三区免费观看| 欧美日韩视频专区在线播放| 久久人人97超碰com| 亚洲高清免费视频| 成人一区二区三区视频 | 在线日韩av片| 久久久亚洲午夜电影| 亚洲超碰精品一区二区| 成人高清免费在线播放| 91精品国产91久久久久久一区二区| 中文字幕乱码亚洲精品一区| 亚洲高清免费观看| 91小宝寻花一区二区三区| 精品对白一区国产伦| 午夜电影网一区| 在线观看亚洲精品| 国产精品美女久久久久久2018| 美国三级日本三级久久99| 欧美在线色视频| 亚洲欧美另类在线| 成人激情av网| 国产欧美一区二区三区在线老狼| 蜜桃视频一区二区| 欧美日产国产精品| 中文字幕视频一区二区三区久| 国产一区高清在线| 精品少妇一区二区三区免费观看| 亚洲一区二区黄色| 91麻豆福利精品推荐| 中文字幕乱码一区二区免费| 国产一区二区三区香蕉| 91精品国产欧美一区二区18| 亚洲成人免费观看| 在线视频综合导航| 亚洲欧美激情视频在线观看一区二区三区| 国产精品一区二区在线看| 精品电影一区二区三区 | 26uuu欧美| 经典三级一区二区| www国产成人| 丁香激情综合五月| 国产精品久久久久婷婷| 成人网男人的天堂|