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

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

?? motorctrl.c

?? PID控制,包括算法,控制階梯列表,算法步進
?? C
?? 第 1 頁 / 共 2 頁
字號:
//--------------------------------------------------------
//PID控制,包括算法,控制階梯列表,算法步進
//相關程序:ADC控制;
//--------------------------------------------------------
#include	"math.h"
#include	"stdlib.h"
#include	"..\inc\menu.h"
#include	"..\inc\MotorCtrl.h"

#define	SRSHIFT 8
#define SLSHIFT 5
#define CRSHIFT 8
#define CLSHIFT 5
#define LOWSPEED 30
#define XIANFU1 20
#define XIANFU 1000
#define ZEROSPEED 50

extern int ADRESULT[];
extern int spdgive;
extern unsigned int adc_js;
extern unsigned int ZHUNBEI_LED;
extern unsigned int YUNXING_LED;
extern unsigned int LINGSU_LED;
extern unsigned int GUZHANG_LED;
extern unsigned int qepCnt;

extern void disable();
extern void enable();
extern unsigned int iopbread();
extern unsigned int iopcread();
extern void adsoc();
extern void adstop();
extern void cfenable();
extern void cfdisable();
extern void leddisplay(unsigned int val);
extern void ledout(unsigned int val);
int Ctrldata[20];
unsigned int zero = 0;
unsigned int zeroCount = 0;
unsigned int digChange = 0;
unsigned int pointGive = 0;
unsigned int phasecnt;
float e_current[2];
float e_speed[2];
int zeroflag=0;

ioport unsigned port7;
ioport unsigned port9;

void pidinit();
void pidctrlopen();
void pidctrl();
void selftest();
void zerotest();
int fact();
void ext_ctrl();

//----------------------------------------------------------------
//	函數名稱:pidinit
//	輸入參數:無
//	輸出參數:無
//	功能描述:PID控制參數初始化,參與PI運算的參數清0
//----------------------------------------------------------------
void pidinit()
{
	e_speed[0]=0;
	e_speed[1]=0;
	e_current[0]=0;
	e_current[1]=0;
	Ctrldata[GEIDING]=0;
	Ctrldata[SENDOUT]=0;
	Ctrldata[CRTRF]=0;
	Ctrldata[ERRFLAG]=0;
	Ctrldata[LINGSU]=0;
	Ctrldata[WUCHAJIFEN]=0;
	Ctrldata[JIDIANQI]=0;
	port7=34000;
	return;
}

//----------------------------------------------------------------
//	函數名稱:pidopen
//	輸入參數:無
//	輸出參數:無
//	功能描述:開環控制,給定方式4時選擇
//			  公式:Ctrldata[SENDOUT]=30500-Ctrldata[GEIDING]*16
//----------------------------------------------------------------
void pidctrlopen()
{
	int dvolt;
	if((dvolt & BIT0) || (dvolt & BIT1))		//如果使能和運行關閉,清0
	{
		e_speed[0]=0;
		e_speed[1]=0;
		e_current[0]=0;
		e_current[1]=0;
		Ctrldata[GEIDING]=0;
		Ctrldata[SENDOUT]=0;
		Ctrldata[CRTRF]=0;
	}
	else		//否則開環控制
	{
		dvolt=Ctrldata[GEIDING]*16;	
		Ctrldata[SENDOUT]=dvolt;
		if(Ctrldata[SENDOUT]<0)
		{
			Ctrldata[SENDOUT] = 0;
		}
		if(Ctrldata[SENDOUT]>32000)
		{
			Ctrldata[SENDOUT]>32000;
		}
		dvolt=read_menudata(ERRSET);
		if(!Ctrldata[ERRFLAG])		//如果沒有故障,輸出
		{
			port7=30500-Ctrldata[SENDOUT];
		}
		else		//有故障,停止運行
		{
			port7=34000;
		}
	}
	return;
}

//----------------------------------------------------------------
//	函數名稱:pidctrl
//	輸入參數:無
//	輸出參數:無
//	功能描述:PID閉環控制
//		公式:速度環:Ctrldata[CRTRF]=Ctrldata[CRTRF]+e_speed[0]*(P+I/10)-espeed[1]*P
//			 		其中,e_speed在模擬給定方式中為Ctrldata[CHA];
//				    在數字給定方式中為(Ctrldata[GEIDING]-Ctrldata[SUDU])*4.
//           電流環:空載:Ctrldata[SENDOUT]=Ctrldata[SENDOUT]+(e_current[0]*(P1+I1/10)-e_current[1]*I1)/16
//			        加載:Ctrldata[SENDOUT]=Ctrldata[SENDOUT]+(e_current[0]*(P1+I1/10)-e_current[1]*I1)/32
//			        其中e_current=Ctrldata[CRTRF]-Ctrldata[DIANLIU].
//----------------------------------------------------------------
void pidctrl()
{
	int dvolt;
	int i,j;
	float microChange;
	float x1,x2;
	float Kca,Kcb;
	int speedMax;
	int speedMin;

	speedMax=read_menudata(SPDMAX);	
	speedMin=read_menudata(SPDMIN);
	
	dvolt=read_menudata(ERRSET);
	if(dvolt & BIT0)//使能關閉,則清0
	{
		e_speed[0]=0;
		e_speed[1]=0;
		e_current[0]=0;
		e_current[1]=0;
		Ctrldata[SENDOUT]=0;
	}
	else
	{
//-----------------------------速度環---------------------------------
		Kca=read_menudata(SPD_I);
		Kca/=10;
		Kca+=read_menudata(SPD_P);
		Kcb=read_menudata(SPD_P);
		switch(read_menudata(RFWAY))
		{
			case 0: x2=Ctrldata[SUDU];
					  break;
			case 1: x2=Ctrldata[SUDU];
					  break;
			case 2: dvolt=read_menudata(IRSET)*Ctrldata[DIANLIU]/10;
					Ctrldata[IRRF]=(Ctrldata[DIANYA]+dvolt)*4;
					x2=Ctrldata[IRRF];
					break;
			default: break;
		}
		x1=Ctrldata[GEIDING];
		e_speed[1]=e_speed[0];
		e_speed[0]=x1-x2;
		e_speed[0]*=4;
		
		if((read_menudata(SETWAY)==0)&&(pointGive==0))		//給定方式0,則用模擬差作為差量
		{
			j=Ctrldata[CHA];	//模擬差
			i=spdgive;
			if(i>=speedMax)
			{
				x2=spdgive;
				x1=e_speed[0] * Kca;
				x2=e_speed[1] * Kcb;
				x1=x1-x2;	//數字差
				microChange=x1;
			}
			else if(i<speedMin)
			{
				x2=spdgive;
				x1=e_speed[0] * Kca;
				x2=e_speed[1] * Kcb;
				x1=x1-x2;	//數字差
				microChange=x1;
			}
			else
			{
				e_speed[0]=j;
				x1=e_speed[0] * Kca;
				x2=e_speed[1] * Kcb;
				x1=x1-x2;	//變化量
				microChange=x1;
			}
		}
		else		//其他都是數字差量
		{
			x1=e_speed[0] * Kca;
			x2=e_speed[1] * Kcb;
			x1=x1-x2;	//數字差
			microChange=x1;
		}

		if((Ctrldata[GEIDING]<100) && (Ctrldata[GEIDING]>=90))		//以下為速度環分段,因為給定較小,進行放大
		{
			microChange*=2;
		}
		else if((Ctrldata[GEIDING]<90) && (Ctrldata[GEIDING]>=80))
		{
			microChange*=4;
	    }
	       else if((Ctrldata[GEIDING]<80) && (Ctrldata[GEIDING]>=60))
		{
			microChange*=6;
	    }
		else if(Ctrldata[GEIDING]<60)
		{
			microChange*=8;
		}		
		dvolt=(int)microChange;		//得到速度環最終的變化量
//--------------------------------電流環----------------------------
		Ctrldata[CRTRF]=Ctrldata[CRTRF]+dvolt;
		if(Ctrldata[CRTRF]<-4000)
		{
			Ctrldata[CRTRF]=-4000;
		}
		else if(Ctrldata[CRTRF]>16000)//1000*16
		{
			Ctrldata[CRTRF]=16000;
		}
		x2=Ctrldata[CRTRF];
		x1=Ctrldata[DIANLIU]*16;
//-------電流PI分段,以便在空載和加載時都能獲得良好的靜態和動態響應-------
		if(Ctrldata[DIANLIU]<30)		//空載PI
		{
			Kca=read_menudata(CRT_I1);
			Kca/=10;
			Kca+=read_menudata(CRT_P1);
			Kcb=read_menudata(CRT_P1);
		}
		else		//加載PI
		{
			Kca=read_menudata(CRT_I2);
			Kca/=10;
			Kca+=read_menudata(CRT_P2);
			Kcb=read_menudata(CRT_P2);
		}
		e_current[1]=e_current[0];
		e_current[0]=x2-x1;
		x1=e_current[0] * Kca;
		x2=e_current[1] * Kcb;
		x1=x1-x2;
		if(Ctrldata[DIANLIU]<30)
		{
			microChange=x1/32;
		}
		else
		{
			microChange=x1/64;
		}
		dvolt=(int)microChange;		//得到電流環最終的變化量
//----------------------------限幅-----------------------------------------
		if(dvolt > XIANFU)
			dvolt=XIANFU;
		else if(dvolt < -XIANFU)
			dvolt=-XIANFU; 
		Ctrldata[SENDOUT]=Ctrldata[SENDOUT]+dvolt;
		if(Ctrldata[SENDOUT]<0)
		{
			Ctrldata[SENDOUT]=0;
		}
		else if(Ctrldata[SENDOUT]>32000)
		{
			Ctrldata[SENDOUT]=32000;
		}
	}
//-----------------------------運行判斷--------------------------------------
	dvolt=read_menudata(ERRSET);
    if(pointGive==0)		
    {
		if((dvolt & BIT0) || (dvolt & BIT1))		//如為非點動給定,只有使能和運行同時按下,才正常輸出
		{
			e_speed[0]=0;
			e_speed[1]=0;
			e_current[0]=0;
			e_current[1]=0;
			Ctrldata[SENDOUT]=0;
			Ctrldata[CRTRF]=0;
		}
	}
	else
	{
		if(dvolt & BIT0)		//如為點動給定,則只要按下使能,即可正常輸出
		{
			e_speed[0]=0;
			e_speed[1]=0;
			e_current[0]=0;
			e_current[1]=0;
			Ctrldata[SENDOUT]=0;
			Ctrldata[CRTRF]=0;
		}
	}
//------------------------故障判斷---------------------------------------
	if(!Ctrldata[ERRFLAG])		//有故障,不輸出
	{
		port7=32000-Ctrldata[SENDOUT];
	}
	else
	{
		port7=34000;
	}
	return;
}

//--------------------------relay init----------------------------------
void relayinit()
{
	asm("	NOP");
	return;
}

//----------------------------------------------------------------
//	函數名稱:selftest
//	輸入參數:無
//	輸出參數:無
//	功能描述:故障保護及繼電器輸出,具體如下:
//			  BIT11:0:過壓
//			  BIT10:0:過流
//			  BIT9: 0:過載
//			  BIT8: 0:缺相
//			  BIT7: 0:失磁
//			  BIT6: 0:電機過熱
//            BIT5: 0:散熱器過熱
//----------------------------------------------------------------
void selftest()
{
	int temp,val;
	val=0;
	temp=0;
//-------------------------------------------------------			
	temp=(3*read_menudata(POWERMAX)/2);//過載功率為額定功率的150%
	if(read_menudata(PB_GUOZAI))//是否過載屏蔽
	{
		Ctrldata[ERRFLAG]=(Ctrldata[ERRFLAG]==GUOZAICODE)? 0:Ctrldata[ERRFLAG];
	}
	else if(read_menudata(POWER)>temp)//故障后只能復位
	{
		val |=BIT9;
		Ctrldata[ERRFLAG]=GUOZAICODE;//過載
	}
	temp=read_menudata(CRTMAX);//額定電流
	if(read_menudata(PB_GUOLIU))//是否過流屏蔽
	{
		Ctrldata[ERRFLAG]=(Ctrldata[ERRFLAG]==GUOLIUCODE)? 0:Ctrldata[ERRFLAG];
	}
	else if(read_menudata(CRT)>temp)//故障后只能復位
	{
		val |=BIT10;
		Ctrldata[ERRFLAG]=GUOLIUCODE;
	}
	temp=read_menudata(VOLTMAX);//額定電壓
	if(read_menudata(PB_GUOYA))//是否過壓屏蔽
	{
		Ctrldata[ERRFLAG]=(Ctrldata[ERRFLAG]==GUOYACODE)? 0:Ctrldata[ERRFLAG];
	}
	else if(read_menudata(VOLT)>temp)//故障后只能復位
	{
		val |=BIT11;
		Ctrldata[ERRFLAG]=GUOYACODE;//過壓
	}
//-------------------------缺相判斷---------------------
	if(phasecnt<30 || phasecnt> 45)//判斷為缺相(120ms內準確應為36次)
	{
		val |=BIT8;
		adsoc();//10-21燒寫后添加
	}
	phasecnt=0;
//-------------------------外部開關量輸入---------------
	temp=iopbread();
	temp &=0x00ff;
	val|=temp;
	write_menudata(ERRSET,val);
	
//------------開關量的保護功能實現----------------------
	val &=~(BIT14);//排除零速BIT14的影響
	val |=(BIT1+BIT0+BIT2+BIT3+BIT4);//排除外部按鍵的影響

	if(read_menudata(PB_QUEXIANG))val &=~BIT8;//故障屏蔽
	if(read_menudata(PB_SHICI)) val &=~BIT7;//失磁屏蔽
	if(read_menudata(PB_SRQGUORE)) val &=~BIT5;//散熱器過熱屏蔽
	if(read_menudata(PB_GUORE)) val |=BIT6;//電機過熱屏蔽
				
	if(val!=NORMAL)//檢測到故障
	{
		Ctrldata[ERRFLAG]|=0x0ffff;
	}
	else//故障消失后恢復正常
	{
		Ctrldata[ERRFLAG] &=0x0000;
	}
	if(Ctrldata[ERRFLAG])
	{
		if(read_menudata(JDQ2)==0)
		{
			Ctrldata[JIDIANQI] |=BIT1;
		}
		else
		{
			Ctrldata[JIDIANQI] &=(~BIT1);
		}
	}
	else
	{
		Ctrldata[JIDIANQI] &=(~BIT1);	
	}
	port9=Ctrldata[JIDIANQI];
	return;
}
//-------------------------------    -----------------------
//	函數名稱:zerotest
//	輸入參數:無
//	輸出參數:無
//	功能描述:0速繼電器輸出,
//----------------------------------------------------------
void zerotest()
{
    int temp;
//--------------------讀PB口狀態------------------------
	temp=iopbread();
	temp =temp&0x00ff;
	if(temp & BIT0)//使能關閉
	{
		Ctrldata[JIDIANQI] |=BIT0;
	}
	else
	{
		if(zeroCount>=150)//500ms累計給定和反饋小于一定值則0速

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av在线免费不卡| 色偷偷久久一区二区三区| 国产凹凸在线观看一区二区| 欧洲色大大久久| 久久久久久久国产精品影院| 亚洲一区二区在线视频| 久久综合久久鬼色| 欧美揉bbbbb揉bbbbb| 成人免费观看视频| 欧美大胆一级视频| 亚洲成av人**亚洲成av**| 亚洲国产精品精华液ab| 亚洲国产cao| 97久久超碰精品国产| 久久精品亚洲精品国产欧美kt∨| 亚洲午夜成aⅴ人片| 91网站最新地址| 国产午夜亚洲精品不卡| 美女免费视频一区| 欧洲精品在线观看| 亚洲色图都市小说| 成人av动漫网站| 久久久五月婷婷| 精品一区二区三区的国产在线播放| 欧美日韩在线免费视频| 亚洲色图清纯唯美| 国v精品久久久网| 丁香桃色午夜亚洲一区二区三区| www国产精品av| 人人精品人人爱| 在线播放91灌醉迷j高跟美女| 亚洲美女视频在线观看| 色噜噜久久综合| 亚洲精品一二三| 欧美性猛片aaaaaaa做受| 一区二区免费看| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 欧美日韩aaaaa| 午夜精品福利一区二区蜜股av| 欧美天天综合网| 视频一区视频二区在线观看| 678五月天丁香亚洲综合网| 亚州成人在线电影| 日韩免费高清av| 国产精品一区二区不卡| 国产欧美在线观看一区| 成人黄页在线观看| 亚洲精品一二三区| 欧美一级二级三级蜜桃| 久久99精品久久久久久国产越南| 久久先锋影音av| 成人黄色免费短视频| 亚洲自拍与偷拍| 日韩亚洲欧美一区| 国产91精品欧美| 亚洲综合精品自拍| 精品国产一区二区在线观看| 粉嫩嫩av羞羞动漫久久久| 亚洲色图欧洲色图| 日韩一区二区在线观看视频| 国产精品性做久久久久久| 亚洲天堂免费在线观看视频| 欧美日韩一区二区三区在线看| 麻豆成人久久精品二区三区小说| 亚洲国产高清不卡| 欧美人妖巨大在线| 粉嫩av一区二区三区在线播放| 亚洲伊人色欲综合网| 久久久久久久综合色一本| 日本韩国欧美一区| 国产一区啦啦啦在线观看| 亚洲激情网站免费观看| 日韩欧美一二区| 91麻豆国产精品久久| 九一久久久久久| 一区二区三区成人| 国产三级精品三级在线专区| 欧美性感一区二区三区| 国产一区二区在线观看免费| 亚洲高清在线精品| 国产精品久久影院| 欧美大片在线观看一区二区| 色综合夜色一区| 国产精品系列在线播放| 日韩av在线播放中文字幕| 综合av第一页| 国产人妖乱国产精品人妖| 欧美福利视频一区| 日本乱码高清不卡字幕| 成人午夜视频网站| 国产综合久久久久久久久久久久 | 亚洲午夜久久久久久久久久久| 欧美电影免费观看完整版 | 成人黄色一级视频| 精品一区二区综合| 免费成人在线观看视频| 偷拍自拍另类欧美| 亚洲精品乱码久久久久久日本蜜臀| 2021久久国产精品不只是精品| 欧美日韩久久久一区| 日本精品视频一区二区三区| 成人性色生活片| 国产高清亚洲一区| 国产精品99久久久| 国产成人夜色高潮福利影视| 黄色小说综合网站| 国模一区二区三区白浆| 久草在线在线精品观看| 久久精品二区亚洲w码| 免费观看日韩电影| 激情小说欧美图片| 经典三级在线一区| 国产大陆a不卡| 国产成人高清视频| 国产精品88888| 成人app网站| 91一区二区在线观看| 欧美在线视频全部完| 欧美日韩一本到| 91精品国产综合久久久久久久| 制服丝袜成人动漫| 精品美女一区二区| 欧美激情一区在线观看| 成人欧美一区二区三区视频网页 | 天天操天天色综合| 三级亚洲高清视频| 九一九一国产精品| 成人免费精品视频| 欧美视频一区二区在线观看| 欧美放荡的少妇| 日韩精品一区二区在线观看| 久久午夜电影网| 亚洲欧洲无码一区二区三区| 亚洲精品一二三| 日本女人一区二区三区| 国产一区二区三区在线观看精品 | 久久99久国产精品黄毛片色诱| 国产一区二区成人久久免费影院| 成人午夜激情视频| 色丁香久综合在线久综合在线观看| 欧美三级日韩三级国产三级| 日韩欧美亚洲一区二区| 中文字幕中文在线不卡住| 一区二区三区日韩欧美精品| 奇米精品一区二区三区在线观看| 国产电影精品久久禁18| 欧美视频一区二区在线观看| 久久亚区不卡日本| 一二三四社区欧美黄| 国产酒店精品激情| 欧美性色欧美a在线播放| 欧美精品一区二区三区高清aⅴ| 国产精品免费久久| 日韩电影网1区2区| av高清久久久| 精品少妇一区二区| 亚洲精品日韩综合观看成人91| 奇米影视一区二区三区| 不卡免费追剧大全电视剧网站| 在线综合视频播放| 中文字幕一区在线| 激情成人午夜视频| 欧美色老头old∨ideo| 欧美国产精品一区| 免费观看在线综合色| 欧美亚洲综合网| 欧美激情一区二区三区不卡| 日韩精品乱码免费| 色狠狠av一区二区三区| 亚洲国产电影在线观看| 美女视频一区二区| 欧美日韩亚洲不卡| 亚洲欧美怡红院| 国产高清精品网站| 精品剧情在线观看| 五月天激情综合| 日本精品视频一区二区三区| 国产精品天干天干在线综合| 久久国产人妖系列| 91精品在线免费| 亚洲高清免费视频| 欧洲精品一区二区| 亚洲欧美日韩一区| www.色精品| 国产精品久久久久久久久快鸭| 寂寞少妇一区二区三区| 日韩一级片网站| 日韩av午夜在线观看| 欧美老人xxxx18| 亚洲电影在线免费观看| 欧美综合亚洲图片综合区| 日韩理论片网站| 色综合天天综合色综合av| 国产精品萝li| 97精品久久久午夜一区二区三区 | 国产精品一区二区三区四区| 91精品久久久久久久久99蜜臂 | 亚洲欧洲av在线| 风间由美性色一区二区三区| www亚洲一区|