Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

PD Control Algorithm

Status
Not open for further replies.

StudentSA

Member
Hi,

Im having trouble designing a control algorithm for a temperature controller.

My uC (PIC16F690) has functionality to allow the user to set a "setpoint" and it is integrated with a LM35 Temp Sensor. I read the 10bit A2D channel to get the temperature into a variable TEMP and TEMP+1. The user selected setpoint is stored in variable SETPOINT and SETPOINT+1. The control method works by driving the PWM pin to control the brightness of a globe. This is my control algorithm extract:

Code:
CALC_CORR_ACT:								; Determine the required corrective action
											; Subtract Setpoint from TEMP
											; Check if positive
											; If positive Globe on
											; If negative globe brightness down
											; a TEMP b Setpoint
Calculate_Diffrence		
		MOVF	TEMP,W
		SUBWF	SETPOINT,	W
		MOVWF	ERRER
		MOVF	TEMP+1, 	W
		BTFSS	STATUS,		C
		INCFSZ	TEMP+1,		W				; Result was neg
		SUBWF	SETPOINT+1, W
		MOVWF	ERRER+1
		BTFSS	STATUS, 	C
		GOTO	NegativeResult
		BCF		FLAGS,		5
		GOTO	Determine_Error_Range
NegativeResult
		COMF	ERRER+1,F
		BSF		FLAGS,		5				; Indicates a negative result
Determine_Error_Range
		MOVF	ERRER+1, F
		BTFSS	STATUS, Z
		GOTO	ErrorOutOfRange
		BTFSS	FLAGS,5
		GOTO	ErrerIsPos
ErrerIsNeg
		COMF	ERRER,F
		INCF	ERRER,F						; Make Errer Positive
ErrerIsPos
		MOVF	LEVEL4CORR, W
		SUBWF	ERRER,		W
		BTFSC	STATUS,		C
		GOTO	ErrorOutOfRange				; Result Pos so ERRER > 80 ( Level4 ) 
		MOVF 	LEVEL4CORRVALUE,W			; Result Neg so ERRER LESS THAN 80	
		MOVWF	DELTAPWM
		
		MOVF	LEVEL3CORR, W
		SUBWF	ERRER,		W
		BTFSC	STATUS,		C
		GOTO	ErrorInRange				; Result Pos so 80 > ERRER > 40 ( Level4 ) 
		MOVF 	LEVEL3CORRVALUE,W			; Result Neg so ERRER LESS THAN 40
		MOVWF	DELTAPWM		
		
		MOVF	LEVEL2CORR, W
		SUBWF	ERRER,		W
		BTFSC	STATUS,		C
		GOTO	ErrorInRange				; Result Pos so 40 > ERRER > 20 ( Level4 ) 
		MOVF 	LEVEL2CORRVALUE,W			; Result Neg so ERRER LESS THAN 20
		MOVWF	DELTAPWM	
		
		MOVF	LEVEL1CORR, W
		SUBWF	ERRER,		W
		BTFSC	STATUS,		C
		GOTO	ErrorInRange				; Result Pos so 20 > ERRER > 10 ( Level4 ) 
		MOVF 	LEVEL1CORRVALUE,W			; Result Neg so ERRER LESS THAN 10
		MOVWF	DELTAPWM			

		MOVF	ERRER,F
		BTFSC	STATUS, Z
		CLRF	DELTAPWM
		GOTO	ErrorInRange
ErrorInRange
		BTFSC	FLAGS,5
		GOTO  	Errorwasneg					; NEG Error
		MOVF	DELTAPWM,W				
		SUBWF	PWM,F
		BTFSC	STATUS, C
		RETLW	PWM	
		CLRF	PWM
		RETLW	PWM
Errorwasneg	
		MOVF	DELTAPWM,W
		ADDWF	PWM,F
		BTFSS	STATUS,C
		RETLW	PWM
		MOVLW	B'11111111'
		MOVWF	PWM
		RETLW	PWM
ErrorOutOfRange
		BTFSS	FLAGS,5
		GOTO	SetPWMOffAndExit		; Large Positive Error
SetPWMFullAndExit
		MOVLW	B'11111111'
		MOVWF	PWM
		RETLW	PWM
SetPWMOffAndExit
		MOVLW	B'00000000'
		MOVWF	PWM
		RETLW	PWM


SETUP_PWM_DUTY_CYCLE:
		MOVF	PWM,F
		BTFSS	STATUS,Z
		GOTO	PWMNotZero
		BSF		STATUS,RP0				; Bank 1
		BTFSS	TRISC, 5
		BSF   	TRISC, 5
		BCF		STATUS, RP0				; Bank 0
		RETLW	0
PWMNotZero
		MOVF	PWM,W
		MOVWF	CCPR1L                	; 8 MSB of PWM
		BSF		STATUS,RP0				; Bank 1
		BTFSC	TRISC, 5
		BCF   	TRISC, 5
		BCF		STATUS, RP0				; Bank 0
		RETLW	0

Currently my code really does not work "well" :D .

The functions CALC_CORR_ACT and SETUP_PWM_DUTY_CYCLE are called every two seconds using a timer interrupt.

Basically i am not sure what is the correct way to go about implementing this... I think I need to include a Derivative term to the control.

Any advice is appreciated.

Regards,
StudentSA
 
Check this out it's in basic but he gos in to all the details **broken link removed**
 
This worked for me in asm.
**broken link removed**

Edit: Figure 6 flowchart is the key.
 
Last edited:
Status
Not open for further replies.

New Articles From Microcontroller Tips

Back
Top