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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? main.c

?? 基于TMS320LF2407的一個(gè)倒立控制程序
?? C
字號(hào):
/**** sample alpha by electrograph
      Using Pendulum Function board designed 07.03.26 
      pzhao@mail.ustc.edu.cn   07.05.23    ****/

#include "Regs240x.h"
#include "Initsystem.h"
#include "Sample.h"
#include "Filter.h"
#include "Control.h"
#include "PWM.h"
#include "Send.h"
#include "ServoControl.h"
#include "JaoZHControl.h"      
#include "sinsource.h"

enum Mode{Calibration,PCControl,InvPdl,Servo,StopControl};
enum Mode ControlMode;

int SampleTime=0,ControlTime=0,SendTime=0; 
int PCdata;
    
int alpha,theta;
int init_alpha,init_theta; 

//inverted pendulum coeff
float FeedbackCoeff[4]={-0.3887f, -92.0636f, -7.7248f, -10.5986f};   
/**ServoPara:input,K,H,A,StartOmega,EndOmega,deltaW,T1,T2 **/
float ServoPara[9]={1.0, 1.0, 1.0, 2.0, 0.1, 5.0, 0.1,0.083,0.0041};    


float DeadZone=5.9f;
float MaxCtrlVol=12.0f; 
int   UpdatecoffFlag=0,UpdateVolFlag=0,UpdateServoFlag=0;

int UpdatecoffBuf[8] = {0};
int UpdateVolBuf[4]={0};
int UpdateServoBuf[18]={0};


int UpdatecoffNum = 0;
int UpdateVolNum = 0;
int UpdateServoNum = 0;

int ServoExpIndex = 0;

unsigned char msg_buf[5]; 

/*******servo ***********/
#define Ts 0.01f                //采樣間隔
#define ATurn_Rad  0.00322f     //AD采樣值轉(zhuǎn)變成弧度值

int count=0;

float Phase=0.0f;    //相位
float f=0.0f;        //頻率
/************************/

void main()
{   
	int dir,duty,sduty;
	int i,Filter_buf[40]={0};
	const int CaliNum = 40;
	const int SampNum = 12;
	float CtrlValue,sfctrl; 
	int   sendnum=0; /* 通信序號(hào) */
	int TempData;
	
	/****** servo *******/
	float StandValue;     //輸入的跟蹤信號(hào)
	float rin;
	float K,H,A,hz_start,hz_end,hz_delta;
	float T1,T2;
	float Xl = 0,Xn = 0,Yl = 0;
	
	/*******************/
	
	Initsystem(); 
  	
	ControlMode=Calibration;
	
	*IFR = 0x0FF;            
	*IMR = 0x03;                     
	
	init_alpha=490;      
	init_theta=539;       
	
    asm(" CLRC INTM ");

	while(1)
	{ 
	  if(Calibration==ControlMode)
	  {
	      *CMPR1 = 1000;             /* do not output */
	      for(i=CaliNum-1;i>=0;i--)
	          Filter_buf[i]=SampleAlpha();
	        
	      init_alpha=Filter(Filter_buf,CaliNum);
	    
	      for(i=CaliNum-1;i>=0;i--)
	          Filter_buf[i]=Sampletheta();
	        
	      init_theta=Filter(Filter_buf,CaliNum);
	              
	      msg_buf[0] = ((init_alpha>>4)&0x30)|((init_theta>>8)&0x03)|0x0C0;
	      msg_buf[1] = init_alpha&0xff;
	      msg_buf[2] = init_theta&0xff;
	      msg_buf[4] = 0;
	  }
	  
	  if(StopControl==ControlMode)
	  {
	  	  *CMPR1 = 1000;             /* do not output */
	  } 
	   	  
	  if(SampleTime)
	  {
	     for(i=SampNum-1;i>=0;i--)
	        Filter_buf[i]=SampleAlpha();
	        
	     alpha=Filter(Filter_buf,SampNum);
	    
	     for(i=SampNum-1;i>=0;i--)
	        Filter_buf[i]=Sampletheta();
	        
	     theta=Filter(Filter_buf,SampNum);
		
	     msg_buf[0] = ((alpha>>4)&0x30)|((theta>>8)&0x03);
	     msg_buf[1] = alpha&0xff;
	     msg_buf[2] = theta&0xff;    

	     SampleTime=0;
	  }
	  
	  if(1 <= ControlTime)
	  {
	  	switch(ControlMode)
		{
		 case PCControl:
			 dir=PCdata&0x80;
			 duty=PCdata&0x7F;
			 sduty = duty;
		 break;

	     case InvPdl:
			  CtrlValue = Control();  
		 break;

		 case Servo:
		 /**/
		 	//servo control mode
		 	if(4 == ServoExpIndex)
		 	{
		 		StandValue = sinsource(A,hz_end,hz_delta,Ts); //正弦輸入
		 	}
		 	else
		 	{
		 		StandValue = rin/ATurn_Rad;          //階躍輸入
		 		
		 	}
		 	//計(jì)算隨動(dòng)控制的控制量
		 	Xn=ServoControl(K,H,StandValue,alpha,init_alpha); 
		 	CtrlValue = Xn; 
		 	
		 	if(5 == ServoExpIndex)
		  	{
			     Yl=JaoZHControl(T1,T2,Ts,Yl,Xl,Xn);  //T1=0.049,T2=0.083
			     Xl = Xn;  
			     CtrlValue = Yl; 
		  	} 
		 	/**/
		 break;	  
	    }/*end_switch*/
	    
	    //sfctrl = CtrlValue; 
	    if(PCControl != ControlMode)
	    {
		   	if( CtrlValue>0 )
		   	{
				CtrlValue += DeadZone;
			}
			else
			{
				CtrlValue -= DeadZone; 
			}
	
			if( CtrlValue>MaxCtrlVol)
			{
				CtrlValue = MaxCtrlVol;
				//sfctrl = MaxCtrlVol;
			}
			if( CtrlValue<-MaxCtrlVol)
			{
				CtrlValue = -MaxCtrlVol;
				//sfctrl = -MaxCtrlVol;
			}
				
			if( CtrlValue<0 ){    
    	        dir = 0x80;    	        
    	        duty = -(int)(100.0*(CtrlValue/MaxCtrlVol));
    	        //sduty =  -(int)(100.0*(sfctrl/MaxCtrlVol));
            }   
            else{  
    	        dir = 0;  
    	        duty = (int)(100.0*(CtrlValue/MaxCtrlVol));
	        }
		}
 
	    PWM(dir,duty);
	    msg_buf[4] = dir | duty;
	    ControlTime=0;  
	}/*end_if(ControlTime)*/
	
     if(1 <= SendTime){
     	 sendnum++;
     	 if(sendnum>100)
     	 {
     	 	sendnum = 1;
     	 }
     	 msg_buf[3] = sendnum;
     	 
		 Send();
    	 SendTime=0;
	 }/*end_if(2<=SendTime)*/
	 
	 if(2 == UpdatecoffFlag && 8==UpdatecoffNum)  //更新底層的反饋系數(shù)
	 {
	 	for(i=0;i<4;i++)   
	    {
	        TempData = (UpdatecoffBuf[2*i]&0x7F); 
	        TempData = (TempData<<8) + UpdatecoffBuf[2*i+1];  
	           
	        if(UpdatecoffBuf[2*i]>>7)   //判斷符號(hào)位
			{
			  	FeedbackCoeff[i] = (-1.0f)*(TempData/100.0f);
			}
			else
			{
			    FeedbackCoeff[i] = (1.0f)*(TempData/100.0f);
			} 
	    }
	    
	    UpdatecoffFlag = 0;    //over to update 
	 }
	 
	 if(2 == UpdateVolFlag && 4==UpdateVolNum)  //更新電壓設(shè)置,電壓不會(huì)有負(fù)值
	 {
	     TempData = (UpdateVolBuf[0]&0x7F); 
	     MaxCtrlVol=((TempData<<8) + UpdateVolBuf[1])/100.0f;
	       
	     TempData = (UpdateVolBuf[2]&0x7F); 
	     DeadZone=((TempData<<8) + UpdateVolBuf[3])/100.0f;	 
	       
	     UpdateVolFlag = 0;    //over to update 
	 }
	 
	 if((2 == UpdateServoFlag)&&(18 == UpdateServoNum))
	 {
	 	for(i=0;i<9;i++)   
	    {
	        TempData = (UpdateServoBuf[2*i]&0x7F); 
	        TempData = (TempData<<8) + UpdateServoBuf[2*i+1];  
	           
	        if(UpdateServoBuf[2*i]>>7)   //判斷符號(hào)位
			{
			  	ServoPara[i] = (-1.0f)*(TempData/100.0f);
			}
			else
			{
			    ServoPara[i] = (1.0f)*(TempData/100.0f);
			} 
	    }
	    //ServoPara:input(rin),K,H,A,StartOmega,EndOmega,deltaW,T1,T2 
	    /****/
	     rin = *ServoPara;
		 K = *(ServoPara+1);
		 H = *(ServoPara+2);
		 A = *(ServoPara+3);
		 hz_start = *(ServoPara+4);
		 hz_end = *(ServoPara+5);
		 hz_delta = *(ServoPara+6);;
	     T1= (*(ServoPara+7))/10.0f;
	     T2= (*(ServoPara+8))/100.0f;
	     
	     f=hz_start;
	    /****/
	 	UpdateServoFlag = 0;    //over to update 
	 }
	 		
   }/*end_while  */
}

void interrupt c_int1()  /* SCI interrupt*/
{
	int msg;
 	asm(" SETC INTM ");		
 
	while( !(* SCIRXST & 0x40) ); /*Receive message */ 
	  msg = * SCIRXBUF;
    
    //更新數(shù)據(jù)區(qū)間,收到的msg<=248,為更新的數(shù)據(jù),而非命令字
   if((1 == UpdatecoffFlag)&&(msg<=248))   //receive K[4]
	{
		UpdatecoffBuf[UpdatecoffNum] = msg;
		UpdatecoffNum++;
	}
	else if((1 == UpdateVolFlag)&&(msg<=248))   //receive update voltage
	{
		UpdateVolBuf[UpdateVolNum] = msg;
		UpdateVolNum++;
	}
	else if((1== UpdateServoFlag)&&(msg<=248))    //receive update servo para
	{
		UpdateServoBuf[UpdateServoNum] = msg;
		UpdateServoNum++;
	}
	else
	{		
	    switch(msg){      
		    case  229:         
		         ControlMode=Calibration; 
				 break;
			case  230:
				 ControlMode=StopControl;
				 break;
			case  234:         
				 ControlMode=PCControl; 
				 break;
			case  239:         
				 ControlMode=InvPdl; 
				 break;
			case  240:        
				 ControlMode=Servo;  
				 break;
			case  241:
				 ServoExpIndex = 2;
				 break;
			case  242:
				 ServoExpIndex = 3;
				 break;
			case  243:
				 ServoExpIndex = 4;
				 break;
			case  244:
				 ServoExpIndex = 5;
				 break;
				 
			case  249:
				 UpdateServoFlag = 1; //Start to receive update servo coeff
				 UpdateServoNum = 0;
				 break;
			case  250:
				 UpdateServoFlag = 2; //End to receive update servo para
				 break;
			case  251:
				 UpdatecoffFlag = 1; //Start to receive update K[4]
				 UpdatecoffNum = 0;
				 break;
			case  252:
				 UpdatecoffFlag = 2; //end to receive update K[4]
				 break;
			case  253:
				 UpdateVolFlag = 1;  //Start to receive Update DeadZone,MaxCtrlVol;
				 UpdateVolNum = 0;
				 break;
			case  254:
				 UpdateVolFlag = 2; //end to receive Update DeadZone,MaxCtrlVol;
				 
		   default:
				if(((msg&0x7F)<=100)&&(PCControl==ControlMode)) //receive ctrl value
				{
					PCdata=msg;
				}		
		   
		} /*end_switch  */
	}

  asm(" CLRC INTM ");  
}

void interrupt c_int2()  /*Timer interrupt,10ms(100Hz)*/
{
  asm(" SETC INTM"); 
   
   //forbid automaic sample/control/send during calibration
  if((Calibration!=ControlMode)&&(StopControl!=ControlMode)) 
  {
  
    SampleTime=1;     /* Time to sample (10ms)*/
    ControlTime+=1;    /* Time to Control (20ms)*/
  }
  
  SendTime+=1;         /* Time to Send (10ms)*/
  
   * EVBIFRA=0x00FF;  /*clear Timer3 period intrrupt flag */
   asm(" CLRC INTM ");
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩vs国产vs欧美| 精品亚洲国产成人av制服丝袜| 国产午夜精品在线观看| 日韩精品一区二区三区蜜臀| 欧美日韩一区在线观看| 欧美日韩久久不卡| 欧美在线影院一区二区| 精品视频色一区| 欧美一区二视频| 日韩美一区二区三区| 精品国产乱码久久久久久久久| 欧美成人午夜电影| 精品国产91久久久久久久妲己| 精品国产伦一区二区三区观看方式| 日韩一区二区免费高清| 日韩美女天天操| 91精品国产一区二区三区香蕉| 欧美一卡2卡3卡4卡| 日韩亚洲欧美综合| www一区二区| 久久综合色之久久综合| 久久久久久麻豆| 国产精品麻豆99久久久久久| 久久精品视频在线看| 国产精品色眯眯| 亚洲欧美另类小说视频| 亚洲成av人片www| 九九国产精品视频| 成人av在线一区二区三区| 一本大道久久a久久精二百| 欧美三级日本三级少妇99| 欧美成va人片在线观看| 国产欧美精品一区二区三区四区| 亚洲欧洲日产国产综合网| 亚洲国产精品久久艾草纯爱| 天堂av在线一区| 国产一区三区三区| 国产一区二区三区综合| 国产成人小视频| 91香蕉视频在线| 91精品国产综合久久久久久漫画| 久久婷婷久久一区二区三区| 国产日韩欧美高清| 亚洲成人午夜影院| 激情另类小说区图片区视频区| 成人小视频免费在线观看| 欧美色图在线观看| 久久久久99精品一区| 亚洲综合久久久久| 久久99精品久久久久婷婷| 丰满少妇在线播放bd日韩电影| 91欧美一区二区| 欧美刺激脚交jootjob| 亚洲男人天堂av| 精品一区二区免费| 91福利区一区二区三区| 欧美精品一区二区蜜臀亚洲| 亚洲蜜臀av乱码久久精品蜜桃| 久久国产精品第一页| 色中色一区二区| 国产色一区二区| 久久精品久久99精品久久| 91视频91自| 国产日韩一级二级三级| 日韩激情中文字幕| 一本色道a无线码一区v| 久久精品人人做| 奇米精品一区二区三区在线观看| 99免费精品在线| 久久久久国产精品麻豆ai换脸 | 国产精品久久午夜| 偷拍一区二区三区| 成人永久aaa| 欧美精品一卡二卡| 国产精品女同互慰在线看| 亚洲激情六月丁香| 国产一区二区三区| 欧美精品第1页| 亚洲欧美偷拍另类a∨色屁股| 蜜臀va亚洲va欧美va天堂| 欧美色爱综合网| 国产精品美日韩| 韩国三级电影一区二区| 在线观看亚洲成人| 中文字幕一区二区三区蜜月| 国产在线日韩欧美| 欧美一级日韩一级| 五月天一区二区| av在线不卡免费看| 久久综合中文字幕| 免费黄网站欧美| 欧美亚日韩国产aⅴ精品中极品| 国产精品高潮久久久久无| 国产不卡在线视频| 日韩午夜激情电影| 亚洲成人一区二区在线观看| www.成人网.com| 久久综合九色综合久久久精品综合| 亚洲成a人片在线不卡一二三区| 色婷婷精品久久二区二区蜜臂av| 久久精品夜夜夜夜久久| 日韩 欧美一区二区三区| 91丨porny丨在线| 国产日韩av一区二区| 婷婷久久综合九色国产成人| av日韩在线网站| 精品三级在线观看| 精品国产乱码久久久久久老虎 | 中文字幕一区二区三区蜜月| 久久精品国产精品亚洲红杏| 在线精品视频免费播放| 亚洲人亚洲人成电影网站色| 国产福利一区二区| 久久综合久久综合久久综合| 男男gaygay亚洲| 欧美挠脚心视频网站| 一区二区三区av电影 | 亚洲国产精品国自产拍av| 国产福利精品一区| 国产精品污网站| 国产成人午夜精品影院观看视频| 亚洲国产成人在线| 成人久久久精品乱码一区二区三区| 欧美精品 国产精品| 日韩中文字幕一区二区三区| 这里只有精品视频在线观看| 亚洲国产欧美在线| 欧美一区二区三区不卡| 日韩精品三区四区| 久久伊人蜜桃av一区二区| 国产91丝袜在线18| 国产精品麻豆网站| 欧美性极品少妇| 五月天一区二区三区| 欧美一区日韩一区| 国产91精品入口| 亚洲综合成人在线视频| 欧美精品乱码久久久久久按摩| 久久精品99国产国产精| 国产精品三级久久久久三级| 色综合中文字幕国产| 亚洲一区二区五区| 日韩欧美国产综合在线一区二区三区| 免费观看30秒视频久久| 久久蜜臀中文字幕| 欧美视频在线观看一区| 久久国产精品99久久久久久老狼| 国产夜色精品一区二区av| 99re热这里只有精品免费视频| 亚洲精品视频在线| 日韩欧美一二三| 国内精品免费在线观看| 国产精品久久久久久久久免费丝袜 | 韩国欧美国产一区| 亚洲综合一区二区精品导航| 日韩一级二级三级精品视频| av在线不卡免费看| 激情综合五月婷婷| 亚洲精品视频观看| 久久久噜噜噜久久中文字幕色伊伊| 欧美影院精品一区| 大胆欧美人体老妇| 日本欧美加勒比视频| 亚洲欧洲日产国码二区| 精品国产污网站| 欧美视频一区二区三区| 国产91精品欧美| 蜜桃av一区二区| 亚洲一区二区三区在线播放| 久久久国产精品午夜一区ai换脸| 欧美日韩精品一区二区三区蜜桃| 成人久久视频在线观看| 日韩欧美美女一区二区三区| 色婷婷久久久久swag精品| 国产亚洲一二三区| 91精品黄色片免费大全| 在线这里只有精品| 国产成人在线免费| 日本成人在线看| 亚洲一级片在线观看| 中文字幕av一区二区三区免费看| 日韩一级精品视频在线观看| 欧美三级中文字幕在线观看| 成人av片在线观看| 国产伦精品一区二区三区免费迷 | 亚洲成a人片综合在线| 自拍偷拍欧美精品| 国产欧美日韩在线看| 久久日一线二线三线suv| 欧美一区二区三区日韩| 欧日韩精品视频| 色综合一区二区| 91老司机福利 在线| 不卡的av在线| 国产99久久精品| 国产精品一二三区| 91国偷自产一区二区开放时间 | 欧美精品免费视频| 91麻豆福利精品推荐| 成人18视频在线播放|