一、实验目的
1、了解89C52单片机内部三个定时器/计数器0、1和2的工作原理;
2、掌握基于89C52单片机定时器2的PWM波的输出和电机功率驱动原理,及其实现方法;
3、掌握以89C52单片机为核心、基于PID控制的直流电机闭环调速系统的软、硬件设计方法。
二、实验内容
本实验以AT89C52为核心所组成的实时控制系统,使用PID控制,给单片机输入两个参考控制信号:转速给定信号r(t)和转速反馈信号c(t),且通过PID程序的控制在单片机P1.5口输出PWM信号来控制达林顿管TIP122,通过单片机内部的定时器调节PWM信号的占空比,直流电机的转速也就跟着变化了,从而实现对直流电机的转速控制。从单片机的定时器T0口输入250KHz的给定信号,此信号作为直流电机的转速基准信号,在调节过程中一直处于不变状态;单片机定时器T1口输入转速反馈信号,在电机稳速转动时反馈信号是5KHz。以上两个信号在PID调节过程中是比例环节的输入信号,PID程序通过比较二者的变化情况,当转速有变化时,PID程序启动,通过比例、积分、微分环节来改变PWM波的占空比,从而对直流电机的转速进行实时控制调节。
三、实验流程图
直流电机闭环调速系统框图
单片机控制PWM输出的直流电机闭环调速系统框图
利用Visio绘制的程序流程图
四、实验结果
硬件电路图
运行结果
五、参考程序
ORG 0000H
START: SJMP START1
ORG 001BH
T10: AJMP T100
ORG 002BH
T2: AJMP T20
ORG 0030H
START1: CLR P1.5;PWM=0
SETB 78H ;SET P1.5 SIGN
MOV IE,#10100000B ;T2 REQ
SETB IP.5 ;T2 INTERRVPT PRIORITY
MOV 0C8H,#00000000B ;T2CON
MOV 0CDH,#0D8H ;TH2
MOV 0CCH,#0F0H ;TL2
MOV 0CBH,#0D8H ;RCAP2H
MOV 0CAH,#0F0H ;RCAP2L
MOV 31H,#0D8H ;
MOV 30H,#0F0H ;PWM = 1,10000
MOV 33H,#0D8H ;
MOV 32H,#0F0H ;PWM = 0,10000
NOP
MOV TMOD,#65H ;T1 MODE 2,T0 MODE 1
MOV TH0,#00
MOV TL0,#00
MOV TH1,#244 ;
MOV TL1,#244 ;12 * 1000/300 ms = 40 ms NOP
MOV 41H,#03H ;
MOV 40H,#84H ;600
NOP
MOV 71H,#00
MOV 70H,#24
MOV 72H,#01 ;KP1,KP2;KP1=24,KP2=1,DIV 2 NOP ;KP1/KP2 =12
MOV 75H,#00
MOV 74H,#16
MOV 76H,#05 ;KI1. KI2:KI1=16. KI2=5. DIV 32
MOV 76H,#05 ;KI1,KI2;KI1=16,KI2=5,DIV 32
NOP ;KI1/KI2 =0.5
MOV 79H,#00
MOV 78H,#00
MOV 7AH,#05 ;KD1,KD2;KD1=0,KD2=5,DIV 32
NOP ;KD1/KD2 =0
MOV 7FH,#00
MOV 7EH,#00
MOV 7DH,#00
MOV 7CH,#00
NOP
MOV 35H,#00
MOV 34H,#00
NOP
MOV 37H,#00
MOV 36H,#00
NOP
MOV 39H,#00 ;
MOV 38H,#00 ;e(k)
NOP
MOV 3BH,#00 ;
MOV 3AH,#00 ;e(k-1)
NOP
MOV 3DH,#00 ;
MOV 3CH,#00 ;e(k-2)
NOP
MOV 59H,#00 ;
MOV 58H,#00 ;e(k)-e(k-1)
NOP
MOV 5BH,#00 ;
MOV 5AH,#00 ;e(k)
NOP
MOV 5DH,#00 ;
MOV 5CH,#00 ;e(k)-2e(k-1)+e(k-2)
NOP
MOV 4BH,#00H
MOV 4AH,#00H
MOV 49H,#00H
MOV 48H,#00H ;KP1/KP2 [e(k)-k(k-1)]
NOP
MOV 4FH,#00H
MOV 4EH,#00H
MOV 4DH,#00H
MOV 4CH,#00H ;KI1/KI2 e(k)
NOP
MOV 53H,#00H
MOV 52H,#00H
MOV 51H,#00H
MOV 50H,#00H ;KD1/KD2 [e(k)-2e(k-1)+e(k-2)]
NOP
MOV 57H,#00H
MOV 56H,#00H
MOV 55H,#0D8H
MOV 54H,#0F0H;n(k-1)=10000
NOP
MOV 61H,#00
MOV 60H,#00
START2: SETB P1.5
CLR 78H;CLEAR P1.5 SIGN
SETB 0CAH;SET TR2
MOV R2,#60
LCALL DELAY;DELAY FOR 3S
SETB TR0;SET TRO
SETB TR1;SET TR1
SETB IE.3;T1 INTERRVPT ENABLE
HERE: SJMP HERE
ORG 0200H
T100: PUSH ACC
PUSH B
PUSH PSW
CPL P1.4;############
T11:
MOV A,TH0
MOV B,TL0
CJNE A,TH0,T11
PUSH ACC
PUSH B
CLR C
XCH A,B
SUBB A,34H
MOV 36H,A
XCH A,B
SUBB A,35H
MOV 37H,A
POP 34H
POP 35H
CLR C
MOV A,40H
SUBB A,36H
MOV 38H,A
MOV 60H,A
MOV A,41H
SUBB A,37H
MOV 39H,A
MOV 61H,A
JNC PT
NT:SETB 7CH
MOV A,60H
CPL A
ADD A,#01H
MOV 60H,A
MOV A,61H
CPL A
ADDC A,#00H
MOV 61H,A;|e(k)|
SJMP PTT
PT: CLR 7CH
PTT:
CLR C
MOV A,60H
SUBB A,#200
MOV A,61H
SUBB A,#00
JNC PTTT;500 < SAMPLE < 70000<SAMPLE <700
SJMP PID
PTTT:
LJMP BANG
PID:
CPL P1.2;##
CLR C
MOV A,38H
SUBB A,3AH
MOV 58H,A
MOV A,39H
SUBB A,3BH
MOV 59H,A
;e(k)-e(k-1)
MOV 5AH,38H
MOV 5BH,39H ;e(k)
CLR C
MOV A,3CH
SUBB A,3AH
MOV 5CH,A
MOV A,3DH
SUBB A,3BH
MOV 5DH,A
MOV A,5CH
ADD A,58H
MOV 5CH,A
MOV A,5DH
ADDC A,59H
MOV 5DH,A
;e(K)-2e(K-1)+e(k-2);e(K)-2e(
MOV R0,#58H
MOV R1,#70H
LCALL LOAD
MOV R0,#48H
LCALL MUL3
;KP1[e(k)-e(k-1)]
MOV 7FH,4BH
MOV 7EH,4AH
MOV 7DH,49H
MOV 7CH,48H
MOV R0,72H
LCALL DIVV
MOV 4BH,7FH
MOV 4AH,7EH
MOV 49H,7DH
MOV 48H,7CH
;KP1/KP2 [e(k)-e(k-1)]
MOV R0,#5AH
MOV R1,#74H
LCALL LOAD
MOV R0,#4CH
LCALL MUL3;KI1 e(k)
MOV 7FH,4FH
MOV 7EH,4EH
MOV 7DH,4DH
MOV 7CH,4CH
MOV R0,76H
LCALL DIVV
MOV 4FH,7FH
MOV 4EH,7EH
MOV 4DH,7DH
MOV 4CH,7CH
;KI1/KI2 e(k)
MOV R0,#5CH
MOV R1,#78H
LCALL LOAD
MOV R0,#50H
LCALL MUL3
;KD1 [e(k)-2e([e(k)-2e(k-1)+e(k-2)]
MOV 7FH,53H
MOV 7EH,52H
MOV 7DH,51H
MOV 7CH,50H
MOV R0,7AH
LCALL DIVV
MOV 53H,7FH
MOV 52H,7EH
MOV 51H,7DH
MOV 50H,7CH
;KD1/KD2 [e(k)-2e[e(k)-2e(k-1)+e(k-2)]
MOV R0,#54H
MOV R1,#48H
MOV R2,#03
LCALL ADD4
;n(k-1)+KP[e(k)-e(k-1)]
MOV R0,#54H
MOV R1,#4CH
MOV R2,#03
LCALL ADD4
;n(k-1)+KP[e(k)-e(k-1)]+KIe(k)
MOV R0,#54H
MOV R1,#50H
MOV R2,#03
LCALL ADD4
;n(k)=n(k-1)+KP[e(k)-e(k-1)]+KIe(k)
NOP
;+KD[e(k)-2e(k-1)+e(k-2)]
MOV A,57H
CJNE A,#00,BJ
MOV A,56H
CJNE A,#00,BJ
SJMP NOR
BJ: CPL P1.6
NOR:
CLR IE.5
;CLOSE T2 REQ
MOV 31H,55H
MOV 30H,54H
;WIDTH of PWM-1
CLR C
MOV A,#0E0H
SUBB A,30H
MOV 32H,A
MOV A,#0B1H
SUBB A,31H
MOV 33H,A
SETB IE.5
;OPEN T2 REQ
MOV 3CH,3AH
MOV 3DH,3BH
;ST0RE NEW e(k-2)
MOV 3AH,38H
MOV 3BH,39H
;ST0RE NEW e(k-1)
SJMP T1RE
BANG:
CPL P1.3
;############
JB 7CH,T0_FAST
T0_SLOW:
MOV 31H,#0F8H
MOV 30H,#30H
;COUNTER=2000
MOV 33H,#0B9H
MOV 32H,#0B0H
;L BYTE,COUNTENTER-18000
SJMP T1RE0
T0_FAST:
MOV 31H,#0B9H
MOV 30H,#0B0H
;H BYTE,COUNTI,COUNTER-18000
MOV 33H,#0F8H
MOV 32H,#30H
;L BYTE,COUN,COUNTER=2000
T1RE0:MOV 39H,#00
MOV 38H,#00
;e(K)-0
MOV 3BH,#00
MOV 3AH,#00
;e(K-1)-8
MOV 3DH,#00
MOV 3CH,#00
;e(K-2)-0
MOV 57H,#00H
MOV 56H,#00H
MOV 55H,#0D8H
MOV 54H,#0F0H
;n(k-1)=10000
T1RE:NOP
T1RE1: POP PSW
POP B
POP ACC
RETI
ORG 0400H
T20:
CLR 0CFH
;CLR TF2
JNB 78H,CPWM
SPWM:
SETB P1.5
;PWM=1
;MOV GCBH,33H
;PRESENT PWM-1
MOV 0CBH,33H
;PRESENT PWM=1
MOV 0CAH,32H
;NEXT PWM-0 WIDTH
CLR 78H
SJMP T20R
CPWM:
CLR P1.5
;PWM=0
MOV 0CBH,31H
;PRESENT PWM=0
MOV 0CAH,30H
;NEXT PWM-1 WIDTH
SETB 78H
T20R:
RETI
ORG 0500H
LOAD:
MOV A,@R0
MOV R6,A
INC R0
MOV A,@R0
MOV R7,A
MOV A,@R1
MOV R4,A
INC R1
MOV A,@R1
MOV R5,A
RET
ORG 0600H
MUL3:
MOV A,R7
RLC A
MOV 7AH,C
MOV A,R5
RLC A
MOV 79H,C
ANL C,7AH
JC POSI
MOV C,7AH
ORL C,79H
SJMP SIGN
POSI:CPL C
SIGN:
MOV 7BH,C;NSIS
MOV A,R7
JB ACC.7,CPL11
MUL01: MOV A,R5
JB ACC.7,CPL22
MUL10: LCALL MUL1
JB 7BH,CPL33
SJMP MUL11
CPL11: MOV A,R6
CPL A
ADD A,#01H
MOV R6,A
MOV A,R7
CPL A
ADDC A,#00H
MOV R7,A
SJMP MUL01
CPL22: MOV A,R4
CPL A
ADD A,#01H
MOV R4,A
MOV A,R5
CPL A
ADDC A ,#00H
MOV R5, A
SJMP MUL10
CPL33: DEC R0
DEC R0
DEC R0
MOV R2,#03H
CPL2: MOV A,@R0
CPL A
ADD A,#01H
MOV @R0,A
NEXT: INC R0
MOV A,@R0
CPL A
ADDC A ,#00H
MOV @R0, A
DJNZ R2,NEXT
MUL11: RET
ORG 0700H
MUL1: MOV A,R6
MOV B,R4
MUL AB
MOV @R0,A
MOV R3,B
MOV A,R4
MOV B,R7
MUL AB
ADD A,R3
MOV R3,A
MOV A,B
ADDC A,#00
MOV R2,A
MOV A,R6
MOV B,R5
MUL AB
ADD A,R3
INC R0
MOV @R0,A
MOV R1,#00
MOV A,R2
ADDC A,B
MOV R2,A
JNC LAST
INC R1
LAST: MOV A,R7
MOV B,R5
MUL AB
ADD A,R2
INC R0
MOV @R0,A
MOV A,B
ADDC A,R1
INC R0
MOV @R0,A
RET
ORG 0800H
ADD4: MOV A ,@R0
ADD A,@R1
MOV @R0,A
ADD41: INC R0
INC R1
MOV A,@R0
ADDC A,@R1
MOV @R0, A
DJNZ R2,ADD41
RET
ORG 0900H
SUB4: CLR C
MOV A,@R0
SUBB A,@R1
MOV @R0,A
SUB41: INC R0
INC R1
MOV A,@R0
SUBB A,@R1
MOV @R0,A
DJNZ R2,SUB41
RET
ORG 0A00H
DIVV: MOV A,7FH
JB ACC.7,N
LCALL DIVV1
SJMP DRE
N: LCALL BUM
LCALL DIVV1
LCALL BUM
DRE: RET
ORG 0B00H
DIVV1: CLR C
MOV A,7FH
RRC A
MOV 7FH, A
MOV A,7EH
RRC A
MOV 7EH,A
MOV A,7DH
RRC A
MOV 7DH,A
MOV A,7CH
RRC A
MOV 7CH,A
DJNZ R0,DIVV1
RET
ORG 0C00H
BUM: MOV A,7FH
CPL A
MOV 7FH,A
MOV A,7EH
CPL A
MOV 7EH,A
MOV A,7DH
CPL A
MOV 7DH,A
MOV A,7CH
CPL A
MOV 7CH,A
MOV A,7CH
ADD A,#01H
MOV 7CH,A
MOV A,7DH
ADDC A,#00H
MOV 7DH,A
MOV A,7EH
ADDC A,#00H
MOV 7EH,A
MOV A,7FH
ADDC A,#00H
MOV 7FH,A
RET
ORG 0D00H
DELAY: PUSH 02H
DELY1: PUSH 02H
DELY2: PUSH 02H
DELY3: DJNZ 02H,DELY3
; DELAY :DELY1:DELY2:DELY3
POP 02H
DJNZ 02H,DELY2
POP 02H
DJNZ 02H,DELY1
POP 02H
DJNZ 02H,DELAY
RET
END