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

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

?? pid_main.asm

?? This program controls a BLDC motor in closed loop using PIC18Fxx31 devices. Hardware used is PICDE
?? ASM
?? 第 1 頁 / 共 2 頁
字號:

;********************************************************************
;                                                                   *
;   Filename:	    pid_main.asm                                    *
;   Date:  			9/2/03                                     		*
;   File Version: 	2.00                                            *
;   Author: 		Chris Valenti                                   *
;  	Company:  		Microchip Technology Inc.                       *
;																	*
;                                                                   *
;********************************************************************
;    Files required:                                                *
;					pic18_math.asm									*
;                                                                   *
;********************************************************************

;--------------------------------------------------------------------
;PID Notes:

;	PROPORTIONAL= 	(system error * Pgain )
;	System error = error0:error1

;	INTEGRAL 	= 	(ACUMULATED ERROR  * Igain)
;	Accumulated error (a_error) = error0:error1 + a_error0:a_error1:a_error2

;	DERIVATIVE	=	((CURRENT ERROR  - PREVIOUS ERROR) * Dgain) 
;	delta error(d_error) = errro0:error1 - p_error0:p_error1

;	Integral & Derivative control will be based off sample periods of "x" time.
;	The above sample period should be based off the PLANT response
;	to control inputs. 
;		SLOW Plant response = LONGER sample periods
;		FAST Plant response = SHORTER sample periods

;	If the error is equal to zero then no PID calculations are completed.

;	The PID routine is passed the 16- bit errror data by the main application
;	code through the "	error0:error1	" variables.
;	The sign of this error is passed through the error sign bit: 
;		"	pid_stat1,err_sign	"

;	Current PID Limits
;	Max Input (error0:error1) 		+/- 0 - 4000d (0xFA0)
;	Max	Output (pid_out0:pid_out2)	+/- 0 - 160000 (0x27100)
;	Max accumulated error is defined below.
;-----------------------------------------------------------------------

;        list		p=18F452       
;        #include	<p18f452.inc>  
		
;	__CONFIG	_CONFIG1H, _OSCS_OFF_1H & _HSPLL_OSC_1H
;	__CONFIG	_CONFIG2L, _BOR_OFF_2L & _BORV_20_2L & _PWRT_OFF_2L
;	__CONFIG	_CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
;	__CONFIG	_CONFIG3H, _CCP2MX_ON_3H
;	__CONFIG	_CONFIG4L, _STVR_OFF_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
;	__CONFIG	_CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L 
;	__CONFIG	_CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
;	__CONFIG	_CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L 
;	__CONFIG	_CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
;	__CONFIG	_CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
;	__CONFIG	_CONFIG7H, _EBTRB_OFF_7H
;	
;	errorlevel	-302 

	include 	"BLDC_DATA.inc"

;***** SYSTEM CONSTANTS
#define	a_err_1_lim	0x0F	;accumulative error limits (4000d)
#define	a_err_2_lim	0xA0

#define	timer1_lo	0x9B	;4D	;0x00	;Timer1 timeout defined by timer1_lo & timer1_hi
#define	timer1_hi	0xEC	;F6	;0x80	;this timout is based on Fosc/4

#define P_GAIN .96			;Kp has a X16 multiplication factor
#define I_GAIN .80			;Ki has a X16 multiplication factor
#define D_GAIN .16			;Kd has a X16 multiplication factor

#define deriv_cnt	.4		;determies how often the derivative term will be executed.

;#define	pid_100				;comment out if not using 0 - 100% scale

		
	EXTERN	FXM1616U,FXD2416U,_24_BitAdd,_24_bit_sub	
	EXTERN	AARGB0,AARGB1,AARGB2,AARGB3		
	EXTERN	BARGB0,BARGB1,BARGB2,BARGB3
	EXTERN	ZARGB0,ZARGB1,ZARGB2
	EXTERN	REMB0,REMB1
	EXTERN	TEMP,TEMPB0,TEMPB1,TEMPB2,TEMPB3
	EXTERN	LOOPCOUNT,AEXP,CARGB2
	
;---------------------------------------------------
	GLOBAL	error0
	GLOBAL	error1
	GLOBAL	pid_out0
	GLOBAL	pid_out1
	GLOBAL	pid_out2
	GLOBAL	pid_stat1
	GLOBAL	kp
	GLOBAL	ki
;***** VARIABLE DEFINITIONS 

;pid_data	UDATA
PID_VAR		UDATA	0x60	
#ifdef	pid_100
percent_err	RES	1			;8-bit error input, 0 - 100% (0 - 100d)
percent_out	RES	1			;8-bit output, 0 - 100% (0 - 100d)
#endif		

pid_out0	RES	1			;24-bit Final Result of PID for the "Plant"
pid_out1	RES	1
pid_out2	RES	1

error0		RES	1			;16-bit error, passed to the PID
error1		RES	1			
a_error0	RES	1			;24-bit accumulated error 
a_error1	RES	1			
a_error2	RES	1
p_error0	RES	1			;16-bit previous error 
p_error1	RES	1			
d_error0	RES	1			;16-bit delta error (error - previous error)
d_error1	RES	1

prop0		RES	1			;24-bit proportional value 
prop1		RES	1
prop2		RES	1
integ0		RES 1			;24-bit Integral value 
integ1		RES	1
integ2		RES	1
deriv0		RES 1			;24-bit Derivative value 
deriv1		RES	1
deriv2		RES	1

kp			RES	1			;8-bit proportional Gain
ki			RES	1			;8-bit integral Gain
kd			RES	1			;8-bit derivative Gain

pid_stat1	RES	1			;PID bit-status register
pid_stat2	RES	1			;PID bit-status register2
deriv_count	RES	1			;derivative count register
temp_reg	RES	1			;temporary register
t_temp_reg	RES	1			;interrupt temp register

T_WREG		RES	1
T_STATUS	RES	1
T_BSR		RES	1
T_AARGB0	RES	1			;temporary registers for ISR
T_AARGB1	RES	1
T_AARGB2	RES	1
T_AARGB3	RES	1
T_BARGB0	RES	1
T_BARGB1	RES	1
T_BARGB2	RES	1
T_BARGB3	RES	1
T_REMBO		RES	1
T_REMB1		RES	1
T_TEMP		RES	1
T_LOOPCOUNT	RES	1
T_TEMPB0	RES	1
T_TEMPB1	RES	1
T_TEMPB2	RES	1
T_TEMPB3	RES	1
T_ZARGB0	RES	1
T_ZARGB1	RES	1
T_ZARGB2	RES	1
T_CARGB2	RES	1

	;***** pid_stat1 Bit Names
err_z		equ	0			;error zero flag, Zero = set
a_err_z		equ	1			;a_error zero flag, Zero = set
err_sign	equ	2			;error sign flag, Pos = set/ Neg = clear
a_err_sign	equ	3			;a_error sign flag, Pos = set/ Neg = clear
p_err_sign	equ	4			;a_error sign flag, Pos = set/ Neg = clear
mag			equ	5			;set = AARGB magnitude, clear = BARGB magnitude
d_err_sign	equ	6			;d_error sign flag, Pos = set/ Neg = clear
pid_sign	equ	7			;PID result sign flag, Pos = set/ Neg = clear
	;***** pid_stat2 Bit Names
integ_go	equ	0			;1 = integral term should be included in the PID result
deriv_go	equ	1			;1 = derivative term should be included in the PID result
d_err_z		equ	2			;d_error zero flag, Zero = set

timer_expire equ	7
;-----------------------------------------------------------------------
;R_VECTOR	CODE	0x0000	;processor reset vector
;	goto    start           ;go to beginning of program

;HI_INT_VEC	CODE	0x0008	;interrupt vector location
;	bra		highInt

;--------------------------- INITALIZATION ------------------------------
pid_code	CODE	;0x010	;start PID code here
;start		

PID_INIT
	GLOBAL	PID_INIT	
	clrf	BSR

	clrf	error0,1			
	clrf	error1,1	
	clrf	a_error0,1	
	clrf	a_error1,1		
	clrf	a_error2,1
	clrf	p_error0,1
	clrf	p_error1,1
	clrf	d_error0,1
	clrf	d_error1,1
	
	clrf	prop0,1
	clrf	prop1,1
	clrf	prop2,1
	clrf	integ0,1
	clrf	integ1,1
	clrf	integ2,1
	clrf	deriv0,1
	clrf	deriv1,1
	clrf	deriv2,1
	
	clrf	kp,1
	clrf	ki,1
	clrf	kd,1
	
	clrf	pid_out0,1
	clrf	pid_out1,1
	clrf	pid_out2,1
	
	clrf	AARGB0,1
	clrf	AARGB1,1
	clrf	AARGB2,1
	clrf	BARGB0,1
	clrf	BARGB1,1
	clrf	BARGB2,1
	
;	clrf	PORTA			;clear PORTS
;	clrf	PORTB
;	clrf	TRISA			;make I/O outputs
;	clrf	TRISB
	
	movlw	b'00000001'		;configure T1 for Timer operation from Fosc/4
	movwf	T1CON
	movlw	timer1_hi		;load T1 registers with 5ms count
	movwf	TMR1H
	movlw	timer1_lo
	movwf	TMR1L
			
	movlw	P_GAIN		;10 x 16, Kp, Ki & Kd are 8-bit vlaues that cannot exceed 255
	movwf	kp,1			;Enter the PID gains scaled by a factor of 16, max = 255

	movlw	I_GAIN   ;80 ;10 x 16
	movwf	ki,1
	
	movlw	D_GAIN	;10 x 16
	movwf	kd,1
	
	movlw	deriv_cnt
	movwf	deriv_count,1				;derivative action = TMR1H:TMR1L * deriv_count
	bcf		pid_stat1,err_z,1			;start w/error not equal to zero
	bsf		pid_stat1,p_err_sign,1	;start w/ previous error = positive
	bsf		pid_stat1,a_err_sign,1	;start w/ accumulated error = positive	
	bcf		pid_stat2,integ_go,1		;initalize integral go bit to 0
	bcf		pid_stat2,deriv_go,1		;initalize derivative go bit to 0
	
	bcf		PIR1,TMR1IF				;clear T1 flag
	bsf		INTCON,PEIE				;enable peripheral interrupts
	bsf		INTCON,GIE				;enable global interrupts
	bsf		PIE1,TMR1IE				;enable T1 interrupt
	
	return	
;------------------------------PID MAIN ------------------------------------		
PID_MAIN		
	GLOBAL	PID_MAIN	

pid_main		

#ifdef		pid_100				;if using % scale then scale up PLANT error
	movlw	.40					; 0 - 100% == 0 - 4000d			
	mulwf	percent_err,1		;40 * percent_err --> PRODH:PRODL
	movff	PRODH,error0		
	movff	PRODL,error1		;percentage has been scaled and available in error0:error1
#endif	
	
			;---START PROPORTIONAL			
	movlw	0
	cpfseq	error0,1				;Is error0 = 00 ?		
	bra		call_prop			;NO, done checking
	
	cpfseq	error1,1				;YES, Is error1 = 00 ?		
	bra		call_prop			;NO, start proportional term
	bsf		pid_stat1,err_z,1		;YES, set error zero flag
	return
;	bra		pid_main			;look for error again
call_prop
;	btfss		pid_stat2,timer_expire,1
;	return

;	call	PID_INT_CALC


	call	proportional		;NO
	call	get_a_error			;get a_error, is a_error = 00? reached limits?

	call 	get_pid_result
;	goto 	pid_main			;testing  do again
	Return		
		
;-------------------------- PROPORTIONAL TERM --------------------------																	
;	Proportional value = error0:error1 * Proportional gain
;	Propoertional term sign = error sign
proportional	
	clrf	BARGB0,1			
	movff	kp,BARGB1	
	movff	error0,AARGB0						
	movff	error1,AARGB1
	call	FXM1616U		;proportional gain * error	

	movff	AARGB1,prop0	;AARGB2 --> prop0
	movff	AARGB2,prop1	;AARGB3 --> prop1	
	movff	AARGB3,prop2	;AARGB4 --> prop2			
	return					;return to mainline code
	
	
;-------------------------- START INTEGRAL TERM ------------------------------								
;	Integral value = (a_erro1:a_error2 * Integral gain)
;	Integral term sign = a_error sign
start_integral		
	clrf	BARGB0,1			
	movff	ki,BARGB1
	movff	a_error1,AARGB0							
	movff	a_error2,AARGB1			
	call	FXM1616U		;Integral gain * accumulated error
		
	movff	AARGB1,integ0	;AARGB1 --> integ0	
	movff	AARGB2,integ1	;AARGB2 --> integ1	
	movff	AARGB3,integ2	;AARGB3 --> integ2	
	return					;return to ISR	
	
		
;----------------------- START DERIVATIVE TERM -----------------------------
;	Derivative value = ((current error - previous error) * Derivative gain)
;	Derivative term sign = result of current error - previous error
start_deriv
	call	get_delta_error		;error - p_error
	btfsc	pid_stat2,d_err_z,1	;Is d_error = 0?	
	return						;YES, return to ISR
	bsf		pid_stat2,deriv_go,1	;NO, set derivative go bit for PID calculation	
	
	movff	d_error1,BARGB1		;result ---> BARGB1			
	movff	d_error0,BARGB0		;result ---> BARGB0									
	movff	kd,AARGB1	
	clrf	AARGB0,1
	call	FXM1616U			;Derivative gain * (error_l - prv_error1)
	
	movff	AARGB1,deriv0		;AARGB1 --> deriv0
	movff	AARGB2,deriv1		;AARGB2 --> deriv1	
	movff	AARGB3,deriv2		;AARGB3 --> deriv2			
	return						;return to ISR
		
		
;-------------------------- Final result of PID ---------------------------------
get_pid_result
	movff	prop0,AARGB0		;load Prop term & Integral term
	movff	prop1,AARGB1
	movff	prop2,AARGB2			
	movff	integ0,BARGB0
	movff	integ1,BARGB1
	movff	integ2,BARGB2
	
	bcf		PIE1,TMR1IE			;Timer 1 interrupt disabled to avoid PID result corruption
	
;	btfss	pid_stat2,integ_go,1	;is the integral ready?
;	bra		scale_down			;NO, just calculate proportional

	call	spec_sign			;YES, call routine for add/sub sign numbers
	btfss	pid_stat1,mag,1		;which is greater in magnitude ?
	bra		integ_mag			;BARGB is greater in magnitude
	bra		prop_mag			;AARGB is greater in magnitude
	
integ_mag						;integ > prop
	bcf		pid_stat1,pid_sign,1	;PID result is negative
	btfsc	pid_stat1,a_err_sign,1			
	bsf		pid_stat1,pid_sign,1	;PID result is positive
	bra 	add_derivative		;(Prop + Integ) + derivative
	
prop_mag						;integ < prop
	bcf		pid_stat1,pid_sign,1	;PID result is negative
	btfsc	pid_stat1,err_sign,1			
	bsf		pid_stat1,pid_sign,1	;PID result is positive

add_derivative
;	btfss	pid_stat2,deriv_go,1	;is the derivative ready?
;	bra		scale_down			;NO, only calculate Proportional & Integral

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91国偷自产一区二区开放时间 | 欧美日韩一区二区三区视频| 国产精品传媒视频| 99久久精品国产精品久久| 国产精品久线在线观看| 成人久久视频在线观看| 中文字幕一区二区三| 色婷婷精品久久二区二区蜜臀av| 亚洲免费av网站| 欧美日韩精品综合在线| 蜜芽一区二区三区| 久久久久久久久久久电影| 国产高清亚洲一区| 亚洲乱码精品一二三四区日韩在线| 日本精品免费观看高清观看| 亚洲国产美女搞黄色| 欧美日韩精品综合在线| 六月丁香婷婷色狠狠久久| 国产欧美精品在线观看| 色屁屁一区二区| 麻豆久久一区二区| 国产精品久久久久天堂| 欧美日韩一区二区三区在线| 九九**精品视频免费播放| 亚洲国产岛国毛片在线| 在线观看欧美精品| 久久福利视频一区二区| 日韩一区有码在线| 日韩午夜激情视频| 99这里只有精品| 日韩高清在线不卡| 亚洲国产精品99久久久久久久久| 在线欧美小视频| 国产自产视频一区二区三区| 国产精品色一区二区三区| 欧美性生活大片视频| 国产一区二区久久| 亚洲线精品一区二区三区| 2024国产精品视频| 欧美性视频一区二区三区| 国产一区二区三区四区在线观看| 亚洲美女在线国产| 久久久久久99精品| 欧美剧情片在线观看| 国产91色综合久久免费分享| 亚洲成av人片一区二区| 国产精品每日更新在线播放网址| 欧美精品18+| 91蜜桃传媒精品久久久一区二区| 蜜臀av一区二区三区| 亚洲精品一二三| 久久久久久久性| 欧美一区二区精品在线| 91福利精品视频| 风间由美性色一区二区三区| 日本成人中文字幕| 亚洲永久精品大片| 日韩毛片高清在线播放| 亚洲精品一区二区三区精华液| 欧洲中文字幕精品| 99精品国产一区二区三区不卡| 国产在线视频一区二区| 日本午夜精品一区二区三区电影| 亚洲麻豆国产自偷在线| 欧美激情一区二区三区蜜桃视频| 日韩精品一区二区三区在线播放 | 欧美在线小视频| av午夜精品一区二区三区| 国产乱理伦片在线观看夜一区| 男人的j进女人的j一区| 香蕉久久一区二区不卡无毒影院| 尤物视频一区二区| 亚洲精品成人少妇| 亚洲三级视频在线观看| 中文字幕亚洲一区二区va在线| 久久久91精品国产一区二区三区| 精品精品欲导航| 欧美成人一级视频| 欧美成人福利视频| 精品乱码亚洲一区二区不卡| 欧美一级二级三级蜜桃| 日韩精品最新网址| 精品国一区二区三区| 欧美第一区第二区| 久久久久久亚洲综合影院红桃| 26uuu国产日韩综合| 国产亚洲精品7777| 亚洲国产精品av| 亚洲女同一区二区| 亚洲自拍偷拍麻豆| 五月激情综合色| 九九国产精品视频| 国产九色sp调教91| 不卡免费追剧大全电视剧网站| 欧美本精品男人aⅴ天堂| 日韩视频在线你懂得| 日韩欧美一区电影| 国产欧美一区二区三区沐欲| 国产精品福利一区二区三区| 亚洲人成网站精品片在线观看| 一区二区三区产品免费精品久久75| 亚洲午夜在线观看视频在线| 日韩精品每日更新| 国产一区二区精品久久| 99精品偷自拍| 欧美区视频在线观看| 欧美大肚乱孕交hd孕妇| 欧美国产精品久久| 一级日本不卡的影视| 日本va欧美va精品发布| 国产成人综合自拍| 日本福利一区二区| 日韩欧美国产不卡| 欧美国产精品劲爆| 午夜精品久久久久久久99水蜜桃| 久久精品国产秦先生| eeuss国产一区二区三区| 欧美中文字幕亚洲一区二区va在线 | 一区二区三区中文字幕| 日韩av中文在线观看| 懂色av一区二区三区免费观看| 欧美在线观看你懂的| 久久久亚洲欧洲日产国码αv| 亚洲人一二三区| 激情六月婷婷久久| 色8久久精品久久久久久蜜| 精品国产污网站| 亚洲与欧洲av电影| 国产精品66部| 制服丝袜日韩国产| 亚洲欧美电影院| 欧美日韩国产首页在线观看| 精品国产一二三| 亚洲国产精品久久久久秋霞影院 | 国产精品乱人伦一区二区| 日韩中文字幕区一区有砖一区 | 国产91综合网| 日韩西西人体444www| 一区二区三区在线视频观看58| 国产一区二区伦理| 91精品免费观看| 一区二区三区视频在线看| 国产一区二区精品在线观看| 911精品产国品一二三产区| 国产精品国产三级国产普通话99 | 色天使久久综合网天天| 国产偷国产偷亚洲高清人白洁| 视频在线在亚洲| 在线观看免费一区| 中文字幕一区二区三区在线不卡| 久久福利资源站| 欧美一区二区视频在线观看2022| 亚洲色图丝袜美腿| 成人精品gif动图一区| 精品国产区一区| 蜜臀精品一区二区三区在线观看| 欧美视频自拍偷拍| 亚洲乱码精品一二三四区日韩在线| 国产成+人+日韩+欧美+亚洲| 日韩免费高清av| 蜜臀av一区二区在线观看| 欧美日本在线播放| 偷窥国产亚洲免费视频| 在线观看91视频| 午夜影院在线观看欧美| 欧美日免费三级在线| 亚洲午夜精品在线| 欧美亚洲日本国产| 亚洲综合丁香婷婷六月香| 在线亚洲一区二区| 亚洲一区二区精品视频| 91成人在线观看喷潮| 亚洲成av人影院| 欧美一区二区三区不卡| 日韩高清电影一区| 日韩精品在线一区| 久久99精品久久久| 欧美xxxxx牲另类人与| 国内外成人在线视频| 国产日韩欧美a| 成人av电影免费观看| 日韩理论片在线| 91电影在线观看| 欧美a级理论片| 日韩欧美一卡二卡| 国产91精品欧美| 中文字幕精品—区二区四季| 91在线你懂得| 亚洲va韩国va欧美va| 日韩视频一区二区在线观看| 国内成人精品2018免费看| 久久精品在这里| 色综合久久99| 日本在线不卡视频| 国产亚洲精品中文字幕| 色综合久久中文字幕综合网| 香蕉影视欧美成人| 久久婷婷综合激情| 一本久久a久久免费精品不卡| 亚洲国产精品一区二区久久恐怖片|