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

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

?? savedata.c

?? 本人在Linux實時內核下寫的PID算法的電機驅動程序
?? C
字號:
/*	PID control*/#include <linux/kernel.h>#include <linux/module.h>#include <linux/errno.h>#include <rtai.h>#include <rtai_sched.h>#include <math.h>#include <asm/io.h>#include <rtai_leds.h>#include <rtai_fifos.h>#include <rtai_shm.h>#include "control.h"#include "formem.h"#include <asm/rtai.h>	#define axisnumber 0#define MINISECOND 1000000#define MICROSECOND 1000#define APLDA_SPI_ADS 0x10E			#define APLDA_SPI_BASE 0x10E#define APLDA_SPI_IDX 0#define DA_BASE 0x110#define BASE_PORT 0x100MODULE_LICENSE("GPL");EXPORT_NO_SYMBOLS;/*  * static int */struct str_data_mem *send_data;int MUTINUM=1;			//sampling period set to 1 msint control_for_in=1;int control_for_out=1;int savevalue=65536;float rk;int K=2;float e[3];int c[3];int checkmode;int add_all_sample=0;int realoutput;int checkfirsttime=0;int checksecondtime=0;float send_to_motor=0;float feed_back=0;int check_for_sign;int controlforsave=1;int okle;int loop=0;static int stop_task_nr=0;static RT_TASK task; /**	Fuctions for output*/	int spi_read(int base);void spi_end(int base);int spi_rrdy(int base){		return inb(base)&1;}int spi_wrdy(int base){	return inb(base)&2;}void spi_begin(int base,int idx,int clk){	int m;	m=idx+4+(clk<<3);	spi_end(base);	outb(m,base);}void spi_end(int base){	outb(0,base);}void spi_write(int base,int d){	while(spi_wrdy(base)==0);	outb(d,base+1);}int spi_read(int base){		while(spi_rrdy(base)==0);	return inb(base+1);}/*	check port parallel or serial*/int s_or_p(void)		{	int t;	if((t=inb(APLDA_SPI_ADS))&0x80)	{		printk("*********   The device is for serial port *********\n");		return 0;	}	else	{		printk("*********  The device is for parallel port  *********\n");		return 1;	}}/*	input axis position */int inport(int b)			{		int result,out;	inw(b);	result=inw(b);	out=savevalue-result;	savevalue=result;	if(control_for_in)		{				control_for_in--;			out=0;		}		else		if(out<0)			out=out+65536;	if(out>60000)		out=65536-out;	if(check_for_sign<6143)		out=0-out;	printk("input value is %d   ",out);	return out;}/*	output control values for serial port*/void outport(int i,int d){		inb(DA_BASE+7); 	//open all D/A channel	d=2047+d;	if(d<=1800)		d=1800;	if(d>2500)		d=2500;			d+=(((i<<2)+1)<<12);			spi_begin(APLDA_SPI_BASE,APLDA_SPI_IDX,2);			spi_write(APLDA_SPI_BASE,d>>8);			spi_read(APLDA_SPI_BASE);			spi_write(APLDA_SPI_BASE,d);			spi_read(APLDA_SPI_BASE);			spi_end(APLDA_SPI_BASE);			check_for_sign=d;//			printk("output value is : %d",d);	}/*	PID control Fuction*/int PIDcontrol(float stm,int fb,struct PID_struct m){		float STM,FB;			//just define for print use		float XXX,xxx,z,zz;	float x,y,uk;	float theory_work,sendout;	int FOR_PD;	sendout=stm;	theory_work=stm/10;	//caculate input V for period=10ms/* * 	Suspend RT-task *	Set motor speed to 0  */	if(stop_task_nr>=2)			{		stop_task_nr++;		sendout=0;		theory_work=0;					if(stop_task_nr==5)		{				stop_task_nr=0;			STM=send_to_motor;			FB=feed_back;			printk(KERN_ALERT"**send_to_motor value=%d, motor real work=%d**\n",(int)STM,(int)FB);			rt_task_suspend(&task);		}		return sendout;	}/* * 	Do not use first feed back value! */	  	if(checkfirsttime)	{		send_to_motor=send_to_motor+theory_work;		checkfirsttime=0;		realoutput=stm;		return stm;	}		feed_back=feed_back+fb;	A=m.Kp;					//Kp	B=m.Kp*m.T/m.Ti;			//Ki	C=m.Kp*m.TD/m.T;			//KD	e[2]=send_to_motor-feed_back;		//caculate e[2]		if(e[2]<=2&&e[2]>=0)		//if deviation is too small then	{		send_to_motor=send_to_motor+theory_work;		return realoutput;			//not do PID control		}	else	{		if(e[2]>=10||e[2]<0)			FOR_PD=0;		else			FOR_PD=1;				e[0]=e[2]+e[0];		x=e[0];		y=e[2];		xxx=A*e[2];		xxx=xxx+FOR_PD*B*e[0];		xxx=xxx+C*(e[2]-e[1]);					uk=sendout+xxx;		e[1]=e[2];		STM=send_to_motor;		//just for print		FB=feed_back;					printk(KERN_ALERT"\ne[2]=%d-%d=%d e[0]=%d   ",(int)STM,(int)FB,(int)y,(int)x);			XXX=xxx;		printk("uk=%d",(int)XXX);		/*	 *	caculate the float part */				z=uk;		zz=uk-(int)z;		z=10*zz;				if(zz>5)			realoutput=(int)uk+1;		else			realoutput=(int)uk;	//		printk("**send_to_motor value=%d, motor real work=%d**\n",(int)STM,(int)FB);		send_to_motor=send_to_motor+theory_work;		if(realoutput>200)			realoutput=200;		else if(realoutput<-200)			realoutput=-200;		printk(" \nRealoutput = %d  ",realoutput);				return realoutput;	}	return 0;}static void motor_task(int fifo)    		{	struct PID_struct PID;	int resultPID,control;	int okle2;	float FB2,STM2;	e[1]=e[0]=0;	/*  * pre-define PID values  */	PID.T=1;	PID.Ti=2;	PID.TD=3;	PID.Kp=4;	PID.speed=0;	control=0;while(1)	{//	printk("rk=%d\n",rk);	// get new values	rtf_get(7,&PID,sizeof(PID));	rk=PID.speed;	if(send_to_motor>=2500)		rk=0;//{	c[2]=inport(BASE_PORT);			//input axis position value	resultPID=PIDcontrol(rk,c[2],PID);	//do PID control	if(checkmode)	{					//serial port		outport(axisnumber,resultPID);	//out put control result		outport(axisnumber,resultPID);	// for 2 times	}	FB2=feed_back;	STM2=send_to_motor;	if(loop<MAXNUM)	{		okle2=(int)STM2;		send_data->stm[loop+1]=okle2;		okle2=(int)FB2;		send_data->fb[loop]=okle2;		printk("stm[%d]=%d",loop,send_data->stm[loop]);		printk("fb[%d]=%d",loop,send_data->fb[loop]);	}	loop++;//}		rt_task_wait_period();			}}static int myhandler(unsigned int fifo,int rw){	int msg;	int getcommand;	while((getcommand=rtf_get(0,&msg,sizeof(msg)))==sizeof(msg)){	if(!msg)	rt_task_make_periodic_relative_ns(&task,0,MUTINUM*MINISECOND);	else	{			stop_task_nr=2;//		rt_task_suspend(&task);		control_for_in=1;		control_for_out=1;		checkfirsttime=1;		send_to_motor=0;		feed_back=0;		e[0]=0;		loop=0;	}}	return 0;}static int myhandlerPID(unsigned int fifo,int rw){	struct PID_struct msg1;	int getcommand1;	while((getcommand1=rtf_get(5,&msg1,sizeof(msg1)))==sizeof(msg1)){	rtf_put(7,&msg1,sizeof(msg1));}	return 0;}int init_module(void){		outb(0x80,0x108);	checkmode=s_or_p();		printk("      *******Loading module checkmode=%d *******\n",checkmode);	outport(0,0);	outport(0,0);				//set output value=0	rtf_create(0,100);	rtf_create(1,100);	rtf_create(2,100);	rtf_create(5,100);	rtf_create(7,100);	send_data=(struct str_data_mem*)rtai_kmalloc(0xaaaa,sizeof(*send_data));	memset(send_data->stm,0,sizeof(int)*10000);	memset(send_data->fb,0,sizeof(int)*10000);	rt_task_use_fpu(&task,1);	rt_linux_use_fpu(1);	rtf_create_handler(0, X_FIFO_HANDLER(myhandler));	rtf_create_handler(5, X_FIFO_HANDLER(myhandlerPID));	rt_task_init(&task,motor_task,0,10000,0,1,0);		rt_set_oneshot_mode();	start_rt_timer(nano2count(MICROSECOND));	return 0;}void cleanup_module(void){		printk("********** stopping RT-task ***********\n");	rtf_destroy(0);	rtf_destroy(1);	rtf_destroy(2);	rtf_destroy(5);	rtf_destroy(7);	rtai_kfree(0xaaaa);	rt_task_delete(&task);	stop_rt_timer();	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美韩国日本不卡| 美女脱光内衣内裤视频久久影院| 一区二区三区波多野结衣在线观看 | 51精品久久久久久久蜜臀| 久久久精品欧美丰满| 亚洲成人午夜影院| 99麻豆久久久国产精品免费优播| 日韩视频永久免费| 亚洲国产视频直播| 99精品黄色片免费大全| 欧美xxxx老人做受| 免费人成在线不卡| 欧美视频一区二区在线观看| 国产精品情趣视频| 国产成人综合在线播放| 欧美成人精品高清在线播放| 亚洲成人在线免费| 在线观看日韩国产| 亚洲免费伊人电影| 一本到不卡免费一区二区| 国产精品家庭影院| 国产成人在线影院| 欧美经典三级视频一区二区三区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 成人激情图片网| 久久久久88色偷偷免费| 极品少妇xxxx精品少妇| 欧美一区二区国产| 奇米综合一区二区三区精品视频| 欧美三片在线视频观看| 亚洲一区在线观看视频| 一本久久a久久免费精品不卡| 18欧美乱大交hd1984| 成人综合婷婷国产精品久久| 国产三级精品三级在线专区| 国产麻豆成人精品| 国产欧美在线观看一区| 国产99精品国产| 国产精品午夜在线观看| av一二三不卡影片| 一区二区在线电影| 欧美日韩夫妻久久| 美女视频黄频大全不卡视频在线播放| 在线播放亚洲一区| 乱一区二区av| 久久综合国产精品| 成人午夜短视频| 亚洲欧美色一区| 欧美日韩精品一区二区在线播放| 日韩精品乱码av一区二区| 日韩欧美第一区| 丁香啪啪综合成人亚洲小说 | 久久久久久久久久久久久夜| 国产一区免费电影| 国产精品剧情在线亚洲| 一本大道av伊人久久综合| 亚洲第一成年网| 欧美成人r级一区二区三区| 国产成人综合亚洲网站| 亚洲欧美怡红院| 欧美精品亚洲二区| 国产成人av一区二区三区在线| 中文字幕成人av| 欧美日韩一区在线观看| 九色综合狠狠综合久久| 17c精品麻豆一区二区免费| 在线播放中文字幕一区| 不卡av在线免费观看| 偷拍日韩校园综合在线| 欧美国产激情二区三区| 欧美日韩国产免费一区二区| 国产一区二区日韩精品| 亚洲国产婷婷综合在线精品| 国产喂奶挤奶一区二区三区| 色偷偷88欧美精品久久久| 久久99精品久久久久久久久久久久 | 精品国产sm最大网站免费看| 不卡的看片网站| 裸体健美xxxx欧美裸体表演| 国产精品视频线看| 日韩亚洲欧美成人一区| 99视频国产精品| 美女精品一区二区| 一区二区三区日韩精品| 久久五月婷婷丁香社区| 欧美最新大片在线看| 国产一区二区在线观看视频| 亚洲国产精品一区二区久久 | 亚洲国产日产av| 国产日韩v精品一区二区| 91精品视频网| 在线观看亚洲精品视频| 成人视屏免费看| 精品亚洲欧美一区| 天天影视涩香欲综合网| 亚洲精品少妇30p| 国产精品素人视频| 国产亚洲一区二区在线观看| 91精品国产欧美日韩| 欧美午夜在线一二页| 99视频精品在线| av一二三不卡影片| 丁香六月久久综合狠狠色| 国产精品一区二区男女羞羞无遮挡 | 丰满放荡岳乱妇91ww| 久久99精品国产麻豆婷婷洗澡| 日韩主播视频在线| 亚洲一区在线观看免费| 亚洲欧美日韩在线不卡| 日韩理论电影院| 日韩美女视频一区| 亚洲欧美在线视频| 《视频一区视频二区| 国产精品毛片久久久久久| 久久这里只有精品视频网| 久久亚洲影视婷婷| 精品美女一区二区| 日韩欧美成人激情| 欧美精品一区二区三区四区| 精品国产免费一区二区三区四区| 精品蜜桃在线看| 国产日韩高清在线| 国产精品久久久爽爽爽麻豆色哟哟| 国产欧美精品一区二区色综合 | 国产亚洲精品中文字幕| 国产午夜精品一区二区| 欧美国产禁国产网站cc| 国产精品传媒在线| 洋洋成人永久网站入口| 亚洲成人黄色小说| 麻豆国产一区二区| 国产一区三区三区| 成人av网站在线观看免费| 97se亚洲国产综合在线| 欧美性高清videossexo| 91精品国模一区二区三区| 精品少妇一区二区三区日产乱码 | 亚洲制服欧美中文字幕中文字幕| 亚洲综合在线五月| 日本成人在线不卡视频| 狠狠v欧美v日韩v亚洲ⅴ| 成人黄色av网站在线| 色婷婷激情一区二区三区| 欧美精品三级在线观看| 国产午夜精品久久| 亚洲一线二线三线久久久| 蜜臀久久99精品久久久久宅男| 国产一区二区视频在线播放| 97久久人人超碰| 欧美一级专区免费大片| 国产精品久线观看视频| 午夜久久久久久| 国产福利一区二区三区| 日本黄色一区二区| 精品国产一区二区三区久久影院| 国产精品久久久久一区二区三区| 性久久久久久久久久久久| 国产成人在线电影| 欧美日韩一区二区三区视频| 日韩久久精品一区| 亚洲精品欧美激情| 国精产品一区一区三区mba桃花| 91一区二区在线观看| 欧美精品一区二区三区很污很色的 | 欧美日韩国产高清一区| 国产欧美日韩久久| 男人的j进女人的j一区| 91浏览器打开| 国产欧美日韩视频在线观看| 亚洲成人免费视频| 成人av先锋影音| 久久久久久电影| 五月天亚洲婷婷| 色综合久久久久综合体| 国产性天天综合网| 美女被吸乳得到大胸91| 欧美日韩和欧美的一区二区| 国产精品久久久一本精品| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美一区二区视频网站| 亚洲美女少妇撒尿| 成人精品电影在线观看| 欧美精品一区视频| 男人的天堂亚洲一区| 欧美剧情片在线观看| 一区二区成人在线| 99re免费视频精品全部| 中文字幕免费不卡| 成人综合在线视频| 国产女主播视频一区二区| 黄色日韩网站视频| 日韩精品资源二区在线| 免费日韩伦理电影| 欧美一区二区三区不卡| 肉色丝袜一区二区| 欧美日韩国产电影| 日日欢夜夜爽一区| 3751色影院一区二区三区| 日本不卡一区二区三区高清视频| 欧美日韩一本到|