Beruflich Dokumente
Kultur Dokumente
LUN VN TT NGHIP I HC
IU KHIN NG C KHNG NG B
BA PHA THEO PHNG PHP SINPWM,
S DNG VI IU KHIN dsPIC30F6010
SVTH :
CBHD :
MSSV :
B MN
L TRUNG NAM
TS. L MINH PHNG
40201632
: IN - IN T
TP H Ch Minh, 01/2007
ii
iii
LI CM N
Ti xin gi li cm n chn thnh nht n qu Thy C trng i Hc Bch
Khoa Tp. H Ch Minh, nhng ngi du dt ti tn tnh, truyn t cho ti
nhng kin thc v kinh nghim qu bu trong sut thi gian ti hc tp ti trng.
Ti xin trn trng gi li cm n n tt c cc Thy, C Khoa in-in T
c bit l thy L Minh Phng, thy Phan Quc Dng ,thy Trn Thanh V tn
tnh hng dn, gip , to mi iu kin thun li ti hon thnh tt lun vn tt
nghip ny.
Ti xin cm n gia nh ti, nhng ngi thn cho ti nhng iu kin tt
nht hc tp trong sut thi gian di.
Ngoi ra ti xin gi li cm n n bn gi ti(H.T.T), n tt c nhng ngi
bn ca ti, nhng ngi cng gn b, cng hc tp v gip ti trong nhng
nm qua cng nh trong sut qu trnh thc hin lun vn tt nghip.
iv
MC LC
CHNG 1: GII THIU V NG C KHNG NG B ................ 1
1.1.Tng quan v my in khng ng b ........................................................................ 2
1.1.1 Nguyn l lm vic:............................................................................................... 2
1.1.2 Cu to .................................................................................................................. 3
1.2 ng dng ca ng c khng ng b.......................................................................... 4
1.3 Kh nng dng ng c xoay chiu thay th my in mt chiu: ................................ 5
1.4 Kt lun: ...................................................................................................................... 6
CHNG 7 : KT QU T C ......................................................... 80
7.1 Phn cng: ................................................................................................................. 81
7.1.1 Mch ng lc:.................................................................................................... 81
7.1.2 Mch iu khin .................................................................................................. 82
7.2 Phn mm: ................................................................................................................. 83
7.3 Dng sng in p ng ra: .......................................................................................... 83
PH LC........................................................................................................ 85
TI LIU THAM KHO............................................................................ 111
TI LIU THAM KHO TRONG NC.................................................................... 111
TI LIU THAM KHO NC NGOI..................................................................... 111
WEBSITE THAM KHO ............................................................................................. 111
vi
vii
viii
AC Induction Motor
Analog To Digital
Analog To Digital Conversion
Input/Output
Micro Controller Unit
Pulse Width Modulation
Sin Pulse Width Modulation
ix
TM TT LUN VN
MC CH LUN VN:
A IM THC HIN
Nghin cu ny c thc hin bng cc m hnh qui m phng th nghim in t
cng sut t tai trng i hc Bch Khoa TP H Ch Minh.
CHNG 1
GII THIU V NG C
KHNG NG B
db =
2 f 1
= (rad / s)
p
p
Trong :
p - s i cc
db
db
r = s * 1 (rad / s)
Moment ng c sinh ra:
M =
Trong :
p 2m Fm sin r
Rotor c 2 loi chnh : rotor kiu dy qun v rotor kiu lng sc.
Rotor dy qun :
Rto c dy qun ging nh dy qun ca stator. Dy qun 3 pha ca rto thng u hnh
sao cn ba u kia c ni vo vnh trt thng lm bng ng t c nh mt u trc
v thng qua chi than c th u vi mch in bn ngoi. c im l c th thng qua chi
than a in tr ph hay sut in ng ph vo mch in rto ci thin tnh nng m
my, iu chnh tc hoc ci thin h s cng sut ca my. Khi my lm vic bnh thng
dy qun rotor c ni ngn mch. Nhc im so vi ng c rotor lng sc l gi thnh
cao, kh s dng mi trng khc nghit, d chy n
Rotor lng sc :
ri trong cc ngnh kinh t quc dn vi cng sut t vi chc n hng nghn kW. Trong
cng nghip, ng c khng ng b thng c dng lm ngun ng lc cho cc my cn
thp loi va v nh, cho cc my cng c cc nh my cng nghip nh . . . Trong nng
nghip, c dng lm my bm hay my gia cng nng sn phm. Trong i sng hng
ngy, ng c khng ng b ngy cng chim mt v tr quan trng vi nhiu ng dng nh:
qut gi, ng c trong t lnh, my quay da,. . . Tm li, cng vi s pht trin ca nn sn
xut in kh ha v t ng ha, phm vi ng dng ca ng c khng ng b ngy cng
rng ri.
So vi my in DC, vic iu khin my in xoay chiu gp rt nhiu kh khn bi
v cc thng s ca my in xoay chiu l cc thng s bin i theo thi gian, cng nh bn
cht phc tp v mt cu trc my ca ng c in xoay chiu so vi my in mt chiu.
Cho nn vic tch ring iu khin gia moment v t thng c th iu khin c lp i
hi mt h thng c th tnh ton cc nhanh v chnh xc trong vic qui i cc gi tr xoay
chiu v cc bin n gin . V vy, cho n gn y, phn ln ng c xoay chiu lm vic
vi cc ng dng c tc khng i do cc phng php iu khin trc y dng cho
my in thng t v c hiu sut km. ng c khng ng b cng khng trnh khi
nhc im ny.
1.4 Kt lun:
Vi s pht trin mnh m ca k thut bn dn cng sut cao v k thut vi x l, hin
nay cc b iu khin CKB c ch to vi p ng tt hn, gi thnh r hn cc b
iu khin ng c DC. Do , CKB c th thay th c ng c Dctrong rt nhiu ng
dng .D kin trong tng lai gn , CKB s c s dng rng ri trn hu ht cc b
truyn ng iu khin tc .
CHNG 2
L THUYT V PHNG
PHP IU KHIN
Vi f - tn s lm vic ca ng c, fm
f
fm
tn s nh mc ca ng c.
E m
1
.
f m 2L m
Im =
E
1
.
a.fm 2L m
Vi Lm l in cm mch t ha.
Ti tn s lm vic f:
Tuy nhin trong thc t, vic gi t thng khng i i hi mch iu khin rt phc
tp. Nu b qua st p trn in tr v in khng tn mch stator, ta c th xem nh U E.
Khi nguyn tc iu khin E/f=const c thay bng phng php V/f=const.
Trong phng php V/f=const (gi ngn l V/f), nh trnh by trn th t s V/f
c gi khng i v bng gi tr t s ny nh mc.Cn lu l khi moment ti tng ,
dng ng c tng lm gia tng st p trn in tr Stator dn n E gim, c ngha l t
thng ng c gim.Do ng c khng hon ton lm vic ch t thng khng i.
Ta c cng thc moment nh mc ng vi s n gin ca ng c:
R'
2
Vm
. 2
3
s
M=
.
2
b
'
R 1 + R 2 + X 1 + X '2
s
V moment cc i ch nh mc:
Mmax =
2
Vm
3
.
2. b
R 1 R 12 + X1 + X '2
'
2 R2
Vm
.
3
a.s
M=
.
2
'
b R R
1 + 2 + X1 + X '
2
a
as
,a <1
Mmax =
3
2.b
Vm
.
2
R
R
1 1 + X1 + X '2
a
a
, a < 1
'
2 R2
Vm .
3
a.s
M=
.
2
'
b
R 1 + R 2 + a 2 X1 + X '
2
s
,a >1.
V moment cc i tn s f:
Vm2
M max =
.
,a >1
2
2.b R R 2 + a 2 X + X '
( 1 2 )
1
1
Sau y l th biu din mi quan h gia moment v in p theo tn s trong
phng php iu khin V/f=const.
3
U
Mdm
Uo
fdm
10
11
U DC
2
(1)
U dk
U carry
12
(2)
f
1
3a
3b
t
Tramp
Direction Changed
Tramp
13
min
Trong min l phn gii ca bng sin ( vi bng sin gm 720 gi tr th phn gii ca
bng sin l 0.5 /gi tr)
Tpwm *360
TUdk
l gc nhy ca con tr trong bng sin sau mt chu k PWM
14
Ut =
U dk U dc
*
U carry 2
(3)
(4)
T (3),(4) ta c:
f req = 0.03*U dk
15
*VDC * m *sin( + )
VAB = VAO VBO =
2
6
VBC =
3
5
*VDC * m *sin( + )
2
6
VAC =
3
3
*VDC * m *sin( + )
2
2
T cng thc trn ta thy gi tr in p ln nht gia hai pha t c trong vng tuyn tnh
khi m=1
3
*VDC
2
Vy i vi phng php ny, in p do b chnh lu cung cp ch c s dng ti a l
86.67% trong vng iu khin tuyn tnh.
Gi tr in p ln nht l
16
ua (t ) + ub (t ) + uc (t ) = 0
(2.1)
17
u (t ) = ux + ju y
(2.3)
Ta xy dng c cng thc chuyn i h ta t ba pha abc sang h ta phc x-y bng
cch cn bng phn thc v phn o trong phng trnh (2.2) ta c :
2
u (t ) = ua + ub ( cos ( 2 / 3) + j sin ( 2 / 3) ) + uc ( cos ( 2 / 3) + j sin ( 2 / 3 ) )
3
2
u
=
ua + ub cos ( 2 / 3) + uc cos ( 2 / 3)
x
u = 2 u sin ( 2 / 3) u sin ( 2 / 3)
c
y 3 b
1
ux 2
2
=
3
uy 3 0
1
ua
2
ub
3
uc
2
(2.4)
Tip theo hnh thnh ta quay - bng cch cho h ta x-y quay vi vn tc gc t. Ta
c cng thc chuyn i h ta nh sau
cos(t ) cos + t
u
2
u x cos(t ) sin(t ) u x
=
=
(2.5)
u sin(t ) sin + t u y sin(t ) cos(t ) u y
(2.6)
uc = Vm sin(t + 2 / 3)
(2.7)
V
L 2 3
2
Vs
=
3
VL 3 2 0
1
q1
2
q3
3
q5
2
(2.8)
18
ur
2 2 j (2 n 1) / 6
2 (2n 1)
Vn =
e
=
cos
6
3
3
(2n 1)
+ j sin
6
(2.9)
19
Van
0
2/3
1/3
-1/3
-2/3
-1/3
1/3
0
in p pha
Vbn
0
1/3
1/3
2/3
1/3
-1/3
-2/3
0
Vcn
0
1/3
-2/3
-1/3
1/3
2/3
1/3
0
in p dy
Vab
Vbc
Vca
0
0
0
1
0
-1
0
1
-1
-1
1
0
-1
0
1
0
-1
1
1
-1
0
0
0
0
Vr Ts = V1 T1 + V2 T2 + V0 7 T0 7
(2.10)
Ts = T1 + T2 + T0 7
cos +
cos
cos
2
2
6
6
2
Ts m
= T1
+ T1
+ T0 7 .0
3
3
sin +
sin
sin
6
6
2
20
Ts m cos 6 + = T1
T m sin + = T
6
1
s
2
cos + T1
3
6
2
sin + T1
3
6
2
cos
3
2
2
sin
3
2
cos +
cos +
3
3
6
6
=T m
T1 = Ts m
s
2
2
3
cos
6
2
T1 = Ts m cos + = Ts m cos
6
2
T2 = Ts m
= Ts m sin
3
sin + Ts m cos + sin
2
6
6
6
T2 = Ts m sin + cos cos + sin
6
6
6
6
T2 = Ts m sin + = Ts m sin ( )
6
6
Suy ra
T1 = Ts m sin ( / 3 )
T2 = Ts m sin ( )
T = T T T
1
2
s
0 7
(2.11)
Trong : m l t s iu bin
Ts l chu k iu rng xung
l gc lch gia Vr v Vn.
Ta nhn thy vic gii phng trnh 2-10 tm T1, T2 v Ts khng ph thuc vo hai vector
gii hn ca vng
21
Da trn kt qu phng trnh 2-11, ta xy dng cng thc tng qut nh trong phng trnh
(2.12) sau y:
TA = Ts m sin ( / 3 )
TB = Ts m sin ( )
T = T T T
s
A
B
0 7
(2.12)
T2 = Ts m sin ( )
T = T T T
1
2
s
0 7
22
T PW M
Ts
Ts
To/2
TA
TB
To/2
To/2
TB
TA
To/2
V0
V1
V2
V7
V7
V2
V1
V0
S1
S3
S5
V ector Vs in S ector 1
Ts
Ts
T o/2
TB
TA
T o/2
T o/2
TA
TB
To/2
V0
V3
V2
V7
V7
V2
V3
V0
S1
S3
S5
V ector Vs in S ector 2
Ts
Ts
T o/2
TA
TB
T o/2
T o/2
TB
TA
To/2
V0
V3
V4
V7
V7
V4
V3
V0
S1
S3
S5
V ector Vs in S ector 3
23
Ts
Ts
T o /2
TB
TA
T o/2
T o/2
TA
TB
To /2
V0
V5
V4
V7
V7
V4
V5
V0
S1
S3
S5
V ecto r V s in S ecto r 4
Ts
Ts
T o/2
TA
TB
T o/2
T o/2
TB
TA
To/2
V0
V5
V6
V7
V7
V6
V5
V0
S1
S3
S5
V ector Vs in S ector 5
Ts
Ts
T o/2
TB
TA
T o/2
T o/2
TA
TB
To/2
V0
V1
V6
V7
V7
V6
V1
V0
S1
S3
S5
Vector Vs in S ector 6
24
CHNG 3
CU TO V CC THNG
S PHN CNG
25
Thng s ng c nh sau :
Pm
Vm
Im
cos
s
M
RPM
Cc thng s
Cng sut nh mc
in p nh mc
Dng in nh mc
Hiu sut
H s cng sut
trt
Moment
Vn tc
n v
(KW)
(VAC)
(A)
%
ng c u sao
1.5 (2HP)
380
10
ng c u tam gic
1.5(2HP)
220
10
0.8
0.8
%
( vng /pht)
26
AC
source
B nghch lu
3 phase
AC motor
+ VDC
Mch li
Cch ly
Tn hiu
xung kch
Bin tr
Nt n
LEDs
ng
2x16TCA
LCD
RS 232
Hi n
dsPIC30F6010
Micro
Controller
27
Trong v d trn Q1 v Q2 lun trng thi lm vic i nghch nhau. Khi Q1 trng
thi ON th Q2 trng thi OFF v ngc li.
Khi Q1 ang trng thi OFF chuyn sang trng thi ON => chn S (MOSFET) hay
chn E (IGBT) ca Q1 chuyn t ground sang in p cao ( high voltage rail). Do mun
kch Q1 tip tc ON th phi to in p kch VGS1 c gi tr VGS1= VSQ1 + V.Trong khi
tn hiu ra ca vi x l iu khin ng ngt cc kha ch c gi tr in p +5V (so vi
ground). Nn cn phi c mch li to tri p v cch ly trong vic ng ngt pha cao Q1.
Tuy nhin i vi Q2 th chn S c ni ground , do in p kch VGS2 ch cn c
gi tr V. Do vic ng ngt kha low side (Q2) c iu khin d dng hn .
Ghi ch:
C 3 dng s c bn nh sau:
1-Single ended or double ended gate drive transfomer.
2-Floating bias voltages and opto isolater drive.
3-High voltage bootstrap diver Ics.
Trong cc phng n (1),(2) s dng bin p xung trong thit k mch li mosfet , trng hp
xung iu khin c cnh tc ng ko di hoc tn s thp, bin p xung sm t trng thi
bo ha v ng ra ca n khng ph hp yu cu iu khin.
Do trong phn ny cp n phng n s dng loi High Voltage Bootstrap Diver ICs.
28
29
S chn ca IR2136
30
EN
ITRIP
RCIN
COM
VB1,2,3
HO1,2,3
VS1,2,3
LO1,2,3
Gm ngun pht tia hng ngoi dng diode (IR - LED) v mch thu dng
phototransistor. Do tha mn yu cu cch ly v in, ng thi p ng ca opto tt hn
my bin p xung.
C hai la chn chnh cho vic s dng kho ng ct cng sut trong iu khin ng
c l MOSFET v IGBT. C hai loi MOSFET v IGBT u l linh kin c iu khin
bng in p, ngha l vic dn v ngng dn ca linh kin c iu khin bng mt ngun
in p ni vi cc gate ca linh kin thay v l dng in trong cc b nghch lu s dng
31
transitor nh trc y. V vy cch s dng loi linh kin ny lm cho vic iu khin tr
nn d dng hn.
Vic ng ct linh kin cng s gy nn tn hao cng sut, cng thc xc nh tn hao
cng sut c trnh by nh sau:
c im, ng dng:
32
Yu cu:
"
"
"
VDC =
2 2 *Vpha
33
CHNG 4
S CU TO MCH
IU KHIN
34
5V_2
J8
R33
1
2
3
4
5
6
7
U10
220
1
2
3
4
R34
220
R35
R42
110
110
+ C7
0.1uF
Vin1+ VCC
Vin1- Vout1
Vin2- Vout2
Vin2+ GND
HCPL2631
0
5V_1
5V_2
R37
220
U11
1
2
3
4
R38
220
Vin1+ VCC
Vin1- Vout1
Vin2- Vout2
Vin2+ GND
R43
R44
110
110
+ C8
0.1uF
7
6
5
HCPL2631
5V_1
5V_2
+ C9
R40
U12
220
1
2
3
4
R41
220
Vin1+ VCC
Vin1- Vout1
Vin2- Vout2
Vin2+ GND
8
7
6
5
HCPL2631
35
R36
R45
110
110
0.1uF
H1
H2
H3
L1
L2
L3
5V_1
J5
IN
D15
OUT
3
D17
LED
+ 1
LM7805C
GND
U3
C11
6V_AC
C12
470uF
100uF
C13
10uF
C16
R1
330
104
4 -
1
2
BRIDGE_3A
15V
J6
12V_AC
D16
OUT
3
D18
LED
C10
C14
470uF
100uF
C15
10uF
C17
104
R2
1k
4 -
1
2
IN
+ 1
GND
U4 LM7815C
BRIDGE_3A
5V_2
J7
6V_AC
OUT
3
D20
LED
C18
C19
470uF
100uF
C20
10uF
C21
104
4 -
1
2
D19
IN
+ 1
LM7805C
GND
U5
BRIDGE_3A
36
R3
330
4.2 S mch li
15V
D3 DIODE XUNG
HO1
VS1
HO2
VS2
HO3
VS3
LO1
LO2
LO3
COM
D2 DIODE XUNG
D1 DIODE XUNG
H1
H2
H3
R26
R27
R28
100
100
100
1
2
3
4
L1
L2
L3
R29
R30
R31
100
100
100
5
6
7
FAULT
ENABLE
8
10
VCC
HIN1
HIN2
HIN3
VB1
U1
HO1
VS1
LIN1
LIN2
LIN3
VB2
FAULT
EN
HO2
VS2
VB3
15V
HO3
15V
+ C6
10uF
R32
100
VS3
25
17
21
11
ITRIP
+
C4
.1uF
9
12
25
17
21
LO1
LO2
RCIN
LO3
ITRIP
VSS
COM
ITRIP
28
27
24
23
1R 5W
COM
15V
ENABLE
FAULT
ITRIP
20
19
C3
1uF
18
R20
100
R21
100
R22
100
HO1
VS1
HO2
VS2
HO3
VS3
16
R23
100 LO1
15
R24
100 LO2
14
R25
100 LO3
COM
13
12V
RVAR2
ENABLE
37
C2
1uF
22
PR
J3
CONTROL
1
2
3
4
5
C1
1uF
26
IR2136
RVAR1
J1
OUTPUTS
1
2
3
4
5
6
7
8
9
10
C5
10uF
4.3 S mch ng lc
R1
10K
1
R2
10K
S1
2
Q3
H2
Q5
H3
Q1
H1
R3
10K
S2
FUSE
F1
VDC
J1
S3
P1
P2
P3
J2
1
2
P1
CON10
R4
10K
Q6
L2
1
R5
10K
L3
Q4
L1
P3
1
2
3
4
5
6
7
8
9
10
H1
S1
H2
S2
H3
S3
L1
L2
L3
COM
MOTOR
P2
J3CON2
COM
VDC
D1
D3
J4
2
1
AC_VOLTAGE
C1
C
D2
D4
COM
38
Q2
1
R6
10K
VDC
COM
1
2
3
RD7
RD6
RD5
RD4
R D 13
R D 12
RD3
RD2
RD1
69
68
67
66
65
64
63
62
61
dsPic 6010
R D 14
R D 15
RF4
RF5
RG2
RG3
RF6
RF7
RF8
RF2
RF3
37
38
39
40
VSS
VSS
VSS
VSS
OSC1
R D 14
R D 15
RF4
RF5
11
31
70
51
U1
R B6
R B7
R B8
R B9
R B10
R B11
R B12
R B13
R B14
R B15
VSS
60
59
58
57
56
55
54
53
52
RC14
RC13
RD0
RD11
RD10
RD9
RD8
RA15
RA14
50
RC15
C2 30pF
10MHZ
RG9
RE8
RE9
RB5
RB4
RB3
RB2
RB1
RB0
VD SS
10
13
14
15
16
17
18
19
20
RC14
RC13
RD0
RD11
RD10
RD9
RD8
RA15
RA14
OSC2
21
22
27
28
29
30
33
34
35
36
RG9
RE8
RE9
RB5
RB4
RB3
RB2
RB1
RB0
RC1
RC3
RG6
RG7
RG8
26
4
5
6
7
8
R B6
R B7
R B8
R B9
R B10
R B11
R B12
R B13
R B14
R B15
RC1
RC3
RG6
RG7
RG8
RE5
RE6
RE7
AVD D
1
2
3
25
RE5
RE6
RE7
MCLR
R A9
R A10
23
24
RESET
MCLR
R A9
R A10
SW2
R E4
R E3
R E2
R E1
R E0
RG0
RG1
RF1
RF0
4K7
RD7
RD6
RD5
RD4
R D 13
R D 12
RD3
RD2
RD1
RE4
RE3
RE2
RE1
RE0
RG0
RG1
RF1
RF0
VCC
80
79
78
77
76
75
74
73
72
VDD
VDD
VDD
VDD
47
46
45
44
43
42
41
RG2
RG3
RF6
RF7
RF8
RF2
RF3
48
32
12
71
VDD
39
Y1
49
C1 30pF
VCC
C3
104
104
C4
C5
104
C6
104
MAX232
1
+
C7
1UF
WOMEN
SUB-D 9
5
9
4
8
3
7
2
6
1
C8
1UF
5
11
8
7
15
C+
V+
C1-
VCC
C17
1UF
1UF
2
16
C2+
R1OUT
C2-
T1OUT
T1IN
R1IN
R2IN
T2IN
T2OUT
R2OUT
GND
V-
12
14
J10
13
10
TX
RX
PIN
6
C16
1UF
LCD204A
TT2
RS
R/W
E
D0
D1
D2
D3
D4
D5
D6
D7
LED+
LED-
2
3
1
VCC1
J21
R29
10K
4
5
6
1
2
3
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
15
16
3
2
1
J20
CON3
VCC
J22
J19
DATA
VDD
V0
VSS
3
2
1
VCC1
GND
R33
10K
40
1
2
4.4.4 Khi nt bm
KP1
KP2
KP3
KP4
KP5
KP6
KP7
KP8
KP9
KP10
KP11
KP12
VCC
VCC
220
J4
NEXT
KP1
BACK
KP2
UP
KP3
DOWN
KP4
ENTER
KP5
RUN
KP6
STOP
KP7
REV
KP8
CHANGE
KP9
MODE
KP10
RESET
KP11
R38
1
2
3
4
5
6
7
8
9
10
11
12
4
3
2
1
D1
LED
VCC
J3
4
3
2
1
KEY _PAD
GND
KP12
41
VCC
J2
R26
220
CHNG 5
42
43
Trong ni dung lun vn ny, chng ta s dng MCU dsPIC30F6010 cho vic iu khin
ng c khng ng b ba pha vi cc c im c trnh by nh sau:
-MCU dsPic 6010 c thit k da trn kin trc RISC, hot ng tm in p rng t 2.55.5V , cng sut thp ,c tc x l cao do s dng cng ngh CMOS, p ng c yu
cu lm vic i vi khi lng tnh ton tnh ton ln, p ng nhanh v yu cu chnh
xc cao
-Tp lnh ca MCU 6010 gm 84 lnh
-C b nh RAM l 8K, b nh EPPROM l 4K, c bit c b nh Plash_Program ln n
144K, ph hp vi cc chng chnh i hi c b nh chng trnh ln
-Hot ng ch ngun dao ng ngoi (External Clock) ti a l 40Mhz
-Hot ng ch dao ng thch anh tn s t 4Hhz-10Mhz vi cc cp nhn
PLL(Phase Locked Loop) 4x, 8x,16x, ty theo cc thit lp chng trnh m dao ng thc s
a vo trong MCU c th ln n 120Mhz
PLL c th c thit lp thng qua cc bits FPR<3:0>, tn s dao ng thach anh a vo v
tn s dao ng thc s ca MCU c tm tt trong bng 1.1
44
45
46
47
48
49
50
51
52
53
-Ch hai Timer 16 bit c lp (Two Independent 16 bit Timer( Timer2 v Timer3)) :vi tt
c cc ch hot ng nh cc Timer 16 bit khc ( tr ch m bt ng b
(Asynchronous Counter))
-Ch mt Timer 32 bit ( Single 32-bit Timer):
Khi hot ng trong ch ny, bit iu khin T32 phi c set trong trong thanh ghi
T3CON. Khi hai timer ( Timer 2 v Timer 3) c cu hnh hot ng nh mt Timer 32 bit ,
thanh ghi T3CON c b qua, ch c thanh ghi T2CON ng vai tr l thanh ghi iu khin.
S kin ngt Timer xy ra vi c ngt T3IF. Timer 2 ng vai tr l 16 bit thp, v Timer 3
ng vai tr l 16 bit cao trong Timer 32 bit. Timer 32 bit s tng gi tr cho n khi bng vi
gi tr np vo 2 thanh ghi PR3:PR2 , sau c reset v 0 v tip tc m ln trong ln
xung clock tip theo . Gi tr ti a np vo cp thanh ghi PR3:PR2 l 0xFFFFFFFF. Nu
c kch hot, mt s kin ngt s to ra khi b m c gi tr bng vi gi tr trong cp
thanh ghi PR3:PR2 .
54
Cu hnh cho b m t l:
Xung a vo ( l Fosc/4 hoc l xung clock ngoi) vo TIMER , c th c t l
1:1,1:8,1:64,1:256 bi vic thit lp cc bit iu khin TCKPS<1:0>(T2CON<5:4>) v
(T3CON<5:4>).i vi Timer 32 bit , Timer2 s ng vai tr l ngun xung clock, v vic
la chn cc t l s khng c p dng trn Timer3. B m t l s b xa khi xy ra cc
trng hp sau:
-Tc ng ghi vo thanh ghi TMR2/TMR3.
-Tc ng xo mt trong hai bit TON(T2CON<15>) hoc T3CON<15> v 0.
-Cc tc ng reset MCU nh POR, BOR.
Tuy nhin , nu Timer cha c kch hot th b t l Timer2 khng th c reset khi xung
clock Prescaler c gi
TMR2/TMR3 s khng b xo khi T2CON/T3CON c ghi vo.
Hot ng ca Timer trong trng thi idle v trng thi ng:
Khi CPU ang trong trng thi ng ( sleep mode) th timer s khng hot ng v ngun
xung clock ni b v hiu ho
S kin ngt Timer:
32-bit TIMER c kh nng to ra ngt khi gi tr ca Timer bng vi mt gi tr nh
trc c np vo thanh ghi 32 bit PR2/PR3 hoc khi pht hin c c cnh xung t cng
tn hiu bn ngoi.Bit T3IF (IFS0<7>) s c tc ng v to ra ngt.Trong ch ny,
T3IF c s dng nh l ngun to ngt v bit T3IF phi c xo bng phn mm. Vic
kch hot hot ng ca ngt c thc hin thng qua bit T3IE<ICE0<7>)( Timer Interrup
Enable)
Bng 5.4: Trnh by cc thanh ghi iu khin Timer2/3
55
56
57
58
59
60
61
62
63
64
65
66
67
S trng lp gia thanh ghi PTPER v thanh ghi PTMR c th c la chn theo cc
t l t 1:1 n 1:16 thng qua 4-bit postscaler to ra tn hiu ngt. Vic t l ny c s
dng trong trng hp khng cn thay i duty cycile ca xung PWM mi chu k PWM
B m postscaler s b xa bi cc tc ng sau:
Ghi vo thanh ghi PTMR
Ghi vo thanh ghi PTCON
Cc reset CPU
Thanh ghi PTMR s khng b xo khi thanh ghi PTCON c ghi vo
5.5.3.4 Cc thanh ghi lm vic trong module PWM
Thanh ghi PTPER (PWM Period)
PTPER l mt thanh ghi 15 bit v c s dng ci t vic m thi gian cho
module PWM . PTPER l mt thanh ghi m kp . Ni dung trong thanh ghi m PTPER
c np vo thanh ghi PTPER nh sau:
ch Free Running v Single Shot : Khi thanh ghi PTMR c reset v 0 sau khi bng gi
tr trong thanh ghi PTPER
Chu k PWM trong ch Free Running c tnh bi cng thc sau:
Fcy
1
PTPER =
FPWM *( PTMR Pr escaler )
V d:
FCY = 20 MHz
FPWM = 20,000 Hz
PTMR Prescaler = 1:1
PTPER =20000000/(1**20000)-1=999
69
70
71
72
73
74
CHNG 6
S KHI V GII
THUT IU KHIN
75
F_req
ADC
V/F
STEP
U1
Ua
OFFSET
120
DEGREE
OFFSET
SIN TABLE
Ua
MOTOR
INVERTER
PWM
Ub
Uc
76
Ub
Uc
MAIN
ADC_CONFIG
PWM_CONFIG
MODE_CONFIG
NO
RUN = 1 ?
F_req = 0
YES
MODE = 1
NO
YES
F_req = READ_ADC
MODE = 2
NO
YES
MODE = 3
NO
MODE = 4
YES
YES
F_req = VALUE_1
CHANGE = 0 ?
NO
F_req = VALUE_4
YES
CHANGE_FLAG =
! CHANGE_FLAG
CHANGE_FLAG= 1
WRITE_UART ( )
NO
YES
F_req = VALUE_2
77
F_req = VALUE_3
PWM_ISR
IF=0
F < F_req
NO
YES
GI? M T? N S?
TANG T? N S?
NO
NO
F > F_req
F < F_req
YES
YES
F = F_req
F = F_req
NO
F=0?
YES
NO
REV=1
YES
RUN=1
REV=0
DIRECTION=! DIRECTION
TNH TON K
? C GI TR? T? B? NG SIN
DIRECTION = 1
NO
YES
UPDATE THU? N
UPDATE NGH?CH
RETFIE
78
INT3_ISR ( RUN
BUTTON)
INT0_ISR ( CHANGE
DIRECTION BUTTON)
RUN = 1
RUN = 0
DIRECTION = 1
REV=1
RETFI
E
RETFI
E
INT4_ISR ( STOP
BUTTON)
UART1_ISR
RUN = 0
VALUE_4 = READ_UART1 ( )
RETFI
E
VALUE_4 = 70
YES
REV=1
VALUE_4 = 0
RETFI
E
79
NO
CHNG 7 : KT QU T C
CHNG 7
KT QU T C
80
CHNG 7 : KT QU T C
CHNG 7 : KT QU T C
7.1 Phn cng:
7.1.1 Mch ng lc:
81
CHNG 7 : KT QU T C
82
CHNG 7 : KT QU T C
83
CHNG 7 : KT QU T C
84
PH LC
PH LC
PH LC
PH LC
CODE TRONG CHNG TRNH IU KHIN
/*************************************************************************
* Project:
Dieu Khien Dong Co Khong Dong Bo
*
* Dependencies: Header (p30f6010.h) files
*
* Processor:
dsPIC30F6010
*
* Compiler:
MPLAB C30 v2.02.00 or higher
*
* IDE:
MPLAB IDE v7.50.00 or later
*
*************************************************************************/
#include <p30f6010.h>
#include<ports.h>
#include<adc10.h>
#include<timer.h>
#include<pwm.h>
#include<math.h>
#include<uart.h>
#include "xlcd4bit.h"
/*===========================================================================*/
_FOSC(CSW_FSCM_OFF & XT_PLL8);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_ON & BORV_20 & PWRT_64 & MCLR_EN);
_FGS(CODE_PROT_OFF);
/*======================== VARIABLE DEFINITION ===============================*/
float
Float_k, temp1;
float
Voltage_Value,ADC_Value;
int
Voltage_Value_A,Voltage_Value_B,Voltage_Value_C;
int
j,k,a,b,c,ADC_Result,Int_k,AD;
float
F_req;
int
First_Run,Run,Rev_Status,Stop;
int
Direction,Menu_Flag,Reset;
float
Temp_1, Temp_2, Temp_Mode_1,Temp_Value,Temp_Mode3_1,Temp_Mode3_2;
int
Step_up,Step_down,t,ADC;
float
up,down;
int
PC_Value,PC_Value_Temp;
int
int_F_req;
float
delta;
int
Mode;
int
Change_Speed;
//=============================== Button Define=========== ====================//
#define NEXT
PORTDbits.RD8
#define ENTER
PORTDbits.RD9
#define UP
PORTDbits.RD10
#define BACK
PORTDbits.RD11
#define DOWN
PORTFbits.RF8
#define CHANGE
PORTFbits.RF7
float const SinValue[720]={0.0 , 0.00873 ,0.01745 ,0.02618 ,0.03490 ,0.04362 ,0.05234 ,0.06105 ,0.06976
,0.07846 ,0.08716 ,
0.09585 ,0.10453 ,0.11320 ,0.12187 ,0.13053 ,0.13917 ,0.14781 ,0.15643 ,0.16505 ,0.17365 ,0.18224 ,0.19081
,0.19937 ,
0.20791 ,0.21644 ,0.22495 ,0.23345 ,0.24192 ,0.25038 ,0.25882 ,0.26724 ,0.27564 ,0.28402 ,0.29237 ,0.30071
,0.30902 ,
0.31730 ,0.32557 ,0.33381 ,0.34202 ,0.35021 ,0.35837 ,0.36650 ,0.37461 ,0.38268 ,0.39073 ,0.39875 ,0.40674
,0.41469 ,
PH LC
0.42262 ,0.43051 ,0.43837 ,0.44620 ,0.45399 ,0.46175 ,0.46947 ,0.47716 ,0.48481 ,0.49242 ,0.50000 ,0.50754
,0.51504 ,
0.52250 ,0.52992 ,0.53730 ,0.54464 ,0.55194 ,0.55919 ,0.56641 ,0.57358 ,0.58070 ,0.58779 ,0.59482 ,0.60182
,0.60876 ,
0.61566 ,0.62251 ,0.62932 ,0.63608 ,0.64279 ,0.64945 ,0.65606 ,0.66262 ,0.66913 ,0.67559 ,0.68200 ,0.68835
,0.69466 ,
0.70091 ,0.70711 ,0.71325 ,0.71934 ,0.72537 ,0.73135 ,0.73728 ,0.74314 ,0.74896 ,0.75471 ,0.76041 ,0.76604
,0.77162 ,
0.77715 ,0.78261 ,0.78801 ,0.79335 ,0.79864 ,0.80386 ,0.80902 ,0.81412 ,0.81915 ,0.82413 ,0.82904 ,0.83389
,0.83867 ,
0.84339 ,0.84805 ,0.85264 ,0.85717 ,0.86163 ,0.86603 ,0.87036 ,0.87462 ,0.87882 ,0.88295 ,0.88701 ,0.89101
,0.89493 ,
0.89879 ,0.90259 ,0.90631 ,0.90996 ,0.91355 ,0.91706 ,0.92050 ,0.92388 ,0.92718 ,0.93042 ,0.93358 ,0.93667
,0.93969 ,
0.94264 ,0.94552 ,0.94832 ,0.95106 ,0.95372 ,0.95630 ,0.95882 ,0.96126 ,0.96363 ,0.96593 ,0.96815 ,0.97030
,0.97237 ,
0.97437 ,0.97630 ,0.97815 ,0.97992 ,0.98163 ,0.98325 ,0.98481 ,0.98629 ,0.98769 ,0.98902 ,0.99027 ,0.99144
,0.99255 ,
0.99357 ,0.99452 ,0.99540 ,0.99619 ,0.99692 ,0.99756 ,0.99813 ,0.99863 ,0.99905 ,0.99939 ,0.99966 ,0.99985
,0.99996 ,
1.00000 ,0.99996 ,0.99985 ,0.99966 ,0.99939 ,0.99905 ,0.99863 ,0.99813 ,0.99756 ,0.99692 ,0.99619 ,0.99540
,0.99452 ,
0.99357 ,0.99255 ,0.99144 ,0.99027 ,0.98902 ,0.98769 ,0.98629 ,0.98481 ,0.98325 ,0.98163 ,0.97992 ,0.97815
,0.97630 ,
0.97437 ,0.97237 ,0.97030 ,0.96815 ,0.96593 ,0.96363 ,0.96126 ,0.95882 ,0.95630 ,0.95372 ,0.95106 ,0.94832
,0.94552 ,
0.94264 ,0.93969 ,0.93667 ,0.93358 ,0.93042 ,0.92718 ,0.92388 ,0.92050 ,0.91706 ,0.91355 ,0.90996 ,0.90631
,0.90259 ,
0.89879 ,0.89493 ,0.89101 ,0.88701 ,0.88295 ,0.87882 ,0.87462 ,0.87036 ,0.86603 ,0.86163 ,0.85717 ,0.85264
,0.84805 ,
0.84339 ,0.83867 ,0.83389 ,0.82904 ,0.82413 ,0.81915 ,0.81412 ,0.80902 ,0.80386 ,0.79864 ,0.79335 ,0.78801
,0.78261 ,
0.77715 ,0.77162 ,0.76604 ,0.76041 ,0.75471 ,0.74896 ,0.74314 ,0.73728 ,0.73135 ,0.72537 ,0.71934 ,0.71325
,0.70711 ,
0.70091 ,0.69466 ,0.68835 ,0.68200 ,0.67559 ,0.66913 ,0.66262 ,0.65606 ,0.64945 ,0.64279 ,0.63608 ,0.62932
,0.62251 ,
0.61566 ,0.60876 ,0.60182 ,0.59482 ,0.58779 ,0.58070 ,0.57358 ,0.56641 ,0.55919 ,0.55194 ,0.54464 ,0.53730
,0.52992 ,
0.52250 ,0.51504 ,0.50754 ,0.50000 ,0.49242 ,0.48481 ,0.47716 ,0.46947 ,0.46175 ,0.45399 ,0.44620 ,0.43837
,0.43051 ,
0.42262 ,0.41469 ,0.40674 ,0.39875 ,0.39073 ,0.38268 ,0.37461 ,0.36650 ,0.35837 ,0.35021 ,0.34202 ,0.33381
,0.32557 ,
0.31730 ,0.30902 ,0.30071 ,0.29237 ,0.28402 ,0.27564 ,0.26724 ,0.25882 ,0.25038 ,0.24192 ,0.23345 ,0.22495
,0.21644 ,
0.20791 ,0.19937 ,0.19081 ,0.18224 ,0.17365 ,0.16505 ,0.15643 ,0.14781 ,0.13917 ,0.13053 ,0.12187 ,0.11320
,0.10453 ,
0.09585 ,0.08716 ,0.07846 ,0.06976 ,0.06105 ,0.05234 ,0.04362 ,0.03490 ,0.02618 ,0.01745 ,0.00873 ,0.00000 ,0.00873 ,
-0.01745 ,-0.02618 ,-0.03490 ,-0.04362 ,-0.05234 ,-0.06105 ,-0.06976 ,-0.07846 ,-0.08716 ,-0.09585 ,-0.10453 ,0.11320 ,
-0.12187 ,-0.13053 ,-0.13917 ,-0.14781 ,-0.15643 ,-0.16505 ,-0.17365 ,-0.18224 ,-0.19081 ,-0.19937 ,-0.20791 ,0.21644 ,
-0.22495 ,-0.23345 ,-0.24192 ,-0.25038 ,-0.25882 ,-0.26724 ,-0.27564 ,-0.28402 ,-0.29237 ,-0.30071 ,-0.30902 ,0.31730 ,
-0.32557 ,-0.33381 ,-0.34202 ,-0.35021 ,-0.35837 ,-0.36650 ,-0.37461 ,-0.38268 ,-0.39073 ,-0.39875 ,-0.40674 ,0.41469 ,
-0.42262 ,-0.43051 ,-0.43837 ,-0.44620 ,-0.45399 ,-0.46175 ,-0.46947 ,-0.47716 ,-0.48481 ,-0.49242 ,-0.50000 ,0.50754 ,
PH LC
-0.51504 ,-0.52250 ,-0.52992 ,-0.53730 ,-0.54464 ,-0.55194 ,-0.55919 ,-0.56641 ,-0.57358 ,-0.58070 ,-0.58779 ,0.59482 ,
-0.60182 ,-0.60876 ,-0.61566 ,-0.62251 ,-0.62932 ,-0.63608 ,-0.64279 ,-0.64945 ,-0.65606 ,-0.66262 ,-0.66913 ,0.67559 ,
-0.68200 ,-0.68835 ,-0.69466 ,-0.70091 ,-0.70711 ,-0.71325 ,-0.71934 ,-0.72537 ,-0.73135 ,-0.73728 ,-0.74314 ,0.74896 ,
-0.75471 ,-0.76041 ,-0.76604 ,-0.77162 ,-0.77715 ,-0.78261 ,-0.78801 ,-0.79335 ,-0.79864 ,-0.80386 ,-0.80902 ,0.81412 ,
-0.81915 ,-0.82413 ,-0.82904 ,-0.83389 ,-0.83867 ,-0.84339 ,-0.84805 ,-0.85264 ,-0.85717 ,-0.86163 ,-0.86603 ,0.87036 ,
-0.87462 ,-0.87882 ,-0.88295 ,-0.88701 ,-0.89101 ,-0.89493 ,-0.89879 ,-0.90259 ,-0.90631 ,-0.90996 ,-0.91355 ,0.91706 ,
-0.92050 ,-0.92388 ,-0.92718 ,-0.93042 ,-0.93358 ,-0.93667 ,-0.93969 ,-0.94264 ,-0.94552 ,-0.94832 ,-0.95106 ,0.95372 ,
-0.95630 ,-0.95882 ,-0.96126 ,-0.96363 ,-0.96593 ,-0.96815 ,-0.97030 ,-0.97237 ,-0.97437 ,-0.97630 ,-0.97815 ,0.97992 ,
-0.98163 ,-0.98325 ,-0.98481 ,-0.98629 ,-0.98769 ,-0.98902 ,-0.99027 ,-0.99144 ,-0.99255 ,-0.99357 ,-0.99452 ,0.99540 ,
-0.99619 ,-0.99692 ,-0.99756 ,-0.99813 ,-0.99863 ,-0.99905 ,-0.99939 ,-0.99966 ,-0.99985 ,-0.99996 ,-1.00000 ,0.99996 ,
-0.99985 ,-0.99966 ,-0.99939 ,-0.99905 ,-0.99863 ,-0.99813 ,-0.99756 ,-0.99692 ,-0.99619 ,-0.99540 ,-0.99452 ,0.99357 ,
-0.99255 ,-0.99144 ,-0.99027 ,-0.98902 ,-0.98769 ,-0.98629 ,-0.98481 ,-0.98325 ,-0.98163 ,-0.97992 ,-0.97815 ,0.97630 ,
-0.97437 ,-0.97237 ,-0.97030 ,-0.96815 ,-0.96593 ,-0.96363 ,-0.96126 ,-0.95882 ,-0.95630 ,-0.95372 ,-0.95106 ,0.94832 ,
-0.94552 ,-0.94264 ,-0.93969 ,-0.93667 ,-0.93358 ,-0.93042 ,-0.92718 ,-0.92388 ,-0.92050 ,-0.91706 ,-0.91355 ,0.90996 ,
-0.90631 ,-0.90259 ,-0.89879 ,-0.89493 ,-0.89101 ,-0.88701 ,-0.88295 ,-0.87882 ,-0.87462 ,-0.87036 ,-0.86603 ,0.86163 ,
-0.85717 ,-0.85264 ,-0.84805 ,-0.84339 ,-0.83867 ,-0.83389 ,-0.82904 ,-0.82413 ,-0.81915 ,-0.81412 ,-0.80902 ,0.80386 ,
-0.79864 ,-0.79335 ,-0.78801 ,-0.78261 ,-0.77715 ,-0.77162 ,-0.76604 ,-0.76041 ,-0.75471 ,-0.74896 ,-0.74314 ,0.73728 ,
-0.73135 ,-0.72537 ,-0.71934 ,-0.71325 ,-0.70711 ,-0.70091 ,-0.69466 ,-0.68835 ,-0.68200 ,-0.67559 ,-0.66913 ,0.66262 ,
-0.65606 ,-0.64945 ,-0.64279 ,-0.63608 ,-0.62932 ,-0.62251 ,-0.61566 ,-0.60876 ,-0.60182 ,-0.59482 ,-0.58779 ,0.58070 ,
-0.57358 ,-0.56641 ,-0.55919 ,-0.55194 ,-0.54464 ,-0.53730 ,-0.52992 ,-0.52250 ,-0.51504 ,-0.50754 ,-0.50000 ,0.49242 ,
-0.48481 ,-0.47716 ,-0.46947 ,-0.46175 ,-0.45399 ,-0.44620 ,-0.43837 ,-0.43051 ,-0.42262 ,-0.41469 ,-0.40674 ,0.39875 ,
-0.39073 ,-0.38268 ,-0.37461 ,-0.36650 ,-0.35837 ,-0.35021 ,-0.34202 ,-0.33381 ,-0.32557 ,-0.31730 ,-0.30902 ,0.30071 ,
-0.29237 ,-0.28402 ,-0.27564 ,-0.26724 ,-0.25882 ,-0.25038 ,-0.24192 ,-0.23345 ,-0.22495 ,-0.21644 ,-0.20791 ,0.19937 ,
-0.19081 ,-0.18224 ,-0.17365 ,-0.16505 ,-0.15643 ,-0.14781 ,-0.13917 ,-0.13053 ,-0.12187 ,-0.11320 ,-0.10453 ,0.09585 ,
-0.08716 ,-0.07846 ,-0.06976 ,-0.06105 ,-0.05234 ,-0.04362 ,-0.03490 ,-0.02618 ,-0.01745 ,-0.00873 };
//*============================ ADC Module Setup===============================*//
void ADCSetup(void)
{
unsigned int config1, config2, config3, configport, configscan;
unsigned int channel;
ConfigIntADC10(ADC_INT_DISABLE );
channel =
ADC_CH0_POS_SAMPLEA_AN6&
ADC_CH0_NEG_SAMPLEA_NVREF;
SetChanADC10(channel);
PH LC
configport = ENABLE_AN6_ANA;
//Auto conversion trigger, auto sampling
config3 =
ADC_SAMPLE_TIME_6&
ADC_CONV_CLK_SYSTEM&
ADC_CONV_CLK_6Tcy;
config2 =
ADC_VREF_AVDD_AVSS&
ADC_SCAN_OFF&
ADC_CONVERT_CH0&
ADC_SAMPLES_PER_INT_2&
ADC_ALT_BUF_OFF&
ADC_ALT_INPUT_OFF;
config1 =
ADC_MODULE_ON&
ADC_IDLE_CONTINUE&
ADC_FORMAT_INTG&
ADC_CLK_AUTO&
ADC_AUTO_SAMPLING_ON&
ADC_SAMPLE_SIMULTANEOUS;
configscan = SCAN_NONE;
OpenADC10(config1, config2, config3, configport, configscan);
}
/*==================================PWM Module Setup =======================*/
void PWMSetup(void)
{
unsigned int config1, config2, config3;
unsigned int period, sptime;
unsigned int DeadTime_Config;
//Setup deadtime for 2us
DTCON1bits.DTBPS =0;
DTCON1bits.DTAPS =0;
DTCON1bits.DTB = 40;
//DT=DeadTime/(Perscaler*Tcy)
DTCON1bits.DTA = 40;
DeadTime_Config =
PWM_DTS3A_UA&PWM_DTS3I_UB&
PWM_DTS2A_UA&PWM_DTS2I_UB&
PWM_DTS1A_UA&PWM_DTS1I_UB;
SetMCPWMDeadTimeAssignment(DeadTime_Config);
ConfigIntMCPWM(PWM_INT_EN & PWM_INT_PR7);
period = 1999;
//1999 Fpwm=5KHz
sptime = 0;
config1 = PWM_EN&
//enable
PWM_IDLE_CON&
PWM_OP_SCALE1&
//output post scaler
PWM_IPCLK_SCALE1&
//input prescaler
PWM_MOD_UPDN;
//mode of operation
config2 =
PWM_MOD1_COMP&
PWM_MOD2_COMP&
PWM_MOD3_COMP&
PWM_PEN1H&
PWM_PEN2H&
PWM_PEN3H&
PWM_PEN1L&
PWM_PEN2L&
PWM_PEN3L;
config3 =
PWM_SEVOPS1&
//Special event post scaler
PWM_OSYNC_PWM&
//output Override synchronization
PWM_UEN;
//PWM update enable/disable
OpenMCPWM(period, sptime, config1, config2, config3);
DisableIntFLTA;
PH LC
DisableIntFLTB;
PDC1=0;
PDC2=0;
PDC3=0;
}
void Uart_Setup(void)
{
unsigned int baudvalue,U1MODEvalue,U1STAvalue;
CloseUART1();
ConfigIntUART1(UART_RX_INT_EN & UART_RX_INT_PR6 &
UART_TX_INT_DIS & UART_TX_INT_PR1);
baudvalue = 129;
U1MODEvalue =UART_EN & UART_IDLE_CON &
UART_DIS_WAKE & UART_DIS_LOOPBACK &
UART_DIS_ABAUD & UART_NO_PAR_8BIT &
UART_1STOPBIT;
U1STAvalue = UART_INT_TX &
UART_TX_PIN_NORMAL &
UART_TX_ENABLE &
UART_INT_RX_CHAR &
UART_ADR_DETECT_DIS &
UART_RX_OVERRUN_CLEAR;
OpenUART1(U1MODEvalue, U1STAvalue, baudvalue);
}
//================================Delay Routine===============================//
void Delay_Cycle(unsigned long i_cycle)
{
unsigned long i;
for(i=0;i<i_cycle;i++)
asm("clrwdt");
}
//================================LCD Routine================================//
void ClearLCD(void)
// Clear LCD
{
XlcdCursor(1,1);
printf("
");
XlcdCursor(2,1);
printf("
");
}
void ClearLCD_1(void)
// Clear LCD at first line
{
XlcdCursor(1,1);
printf("
");
}
void ClearLCD_2(void)
// Clear LCD at second line
{
XlcdCursor(2,1);
printf("
");
}
//==============================External Interrupt ==============================//
void Ext_Interrupt (void)
{
ConfigINT3(FALLING_EDGE_INT & EXT_INT_ENABLE & EXT_INT_PRI_6);
ConfigINT4(FALLING_EDGE_INT & EXT_INT_ENABLE & EXT_INT_PRI_5);
ConfigINT0(FALLING_EDGE_INT & EXT_INT_ENABLE & EXT_INT_PRI_4);
ConfigINT1(FALLING_EDGE_INT & EXT_INT_ENABLE & EXT_INT_PRI_3);
ConfigINT2(FALLING_EDGE_INT & EXT_INT_ENABLE & EXT_INT_PRI_3);
}
//=============================== Update PDC Routine ===========================//
PH LC
PH LC
}
else
{
Voltage_Value_A = Voltage_Value * SinValue[b];
}
c=j+480;
if(c>719)
{
c=(c-720);
Voltage_Value_C = Voltage_Value * SinValue[c];
}
else
{
Voltage_Value_C = Voltage_Value * SinValue[c];
}
PDC1 = 1999 + Voltage_Value_A;
PDC2 = 1999 + Voltage_Value_B;
PDC3 = 1999 + Voltage_Value_C;
}
//================================== Calculate Sub_routine ====================//
void Step_Calculate(void)
{
Float_k=0.144*F_req;
Int_k=Float_k;
temp1=Float_k-Int_k;
if(temp1>=0.5)
{
k=Float_k+0.5;
}
else
{
k=Int_k;
}
}
void Voltage_Calculate(void)
{
Voltage_Value= F_req/0.03;
if(
{
Voltage_Value=1900.05;
}
}
//============================ Interrupt Sub_routine ============================//
void __attribute__((__interrupt__)) _PWMInterrupt(void)
{
IFS2bits.PWMIF=0;
ADC_Value=ADC_Result*0.05859375;
if((F_req+0.000005)>ADC_Value)
{
F_req=F_req-down;
if(F_req<=ADC_Value)
//ADC_Value=((ADC_Result*60)/1024);
//SPEED DOWN
PH LC
{
F_req=ADC_Value;
if(Rev_Status==1&&F_req==0)
{
Run=1; //Prepair For Speed Up, Load Value From ADC
Direction=!Direction;
//Change Direction
Rev_Status=0;
PC_Value=PC_Value_Temp;
}
}
}
else
{
F_req=F_req+up;
if(F_req>=ADC_Value)
{
F_req=ADC_Value;
}
}
switch(Direction)
{
case 0:
//SPEED UP
break;
case 1:
//UPDATE FOR FW
Step_Calculate();
Voltage_Calculate();
Update_PDC_FW();
break;
}
}
//========================== UART1 Interrupt Sub-Routine =====================//
void __attribute__((__interrupt__)) _U1RXInterrupt(void)
{
IFS0bits.U1RXIF = 0;
PC_Value = ReadUART1();
if(PC_Value==70)
{
PC_Value=0;
Rev_Status=1;
}
else
{
PC_Value_Temp=PC_Value;
}
}
//=========================External Interrupt Sub-Routine=========================//
void __attribute__((__interrupt__)) _INT3Interrupt(void)
{
CloseINT3();
Run=1;
//RUN
First_Run=1;
Direction=1;
EnableINT3;
}
void __attribute__((__interrupt__)) _INT4Interrupt(void)
PH LC
{
CloseINT4();
Run=0;
Stop=1;
First_Run=0;
EnableINT4;
//STOP
}
void __attribute__((__interrupt__)) _INT0Interrupt(void)
{
CloseINT0();
// Change Direction
Run=0;
First_Run=0;
Rev_Status=1;
EnableINT0;
}
void __attribute__((__interrupt__)) _INT1Interrupt(void)
{
CloseINT1();
// Menu
Run=0;
First_Run=0;
Menu_Flag=1;
EnableINT1;
}
void __attribute__((__interrupt__)) _INT2Interrupt(void)
{
CloseINT2();
// Reset
Run=0;
First_Run=0;
Reset=1;
EnableINT2;
}
//============================= MAIN CODE =================================//
int main(void)
{
Main:
TRISA=0xF000;
F_req=0;
a=0;
c=0;
b=0;
Menu_Flag=0;
Direction=1;
//FW
Reset=0;
Run=0;
Mode=1;
Change_Speed=0;
Step_up=10;
Step_down=10;
up=0.0;
down=0.0;
PC_Value=0;
PC_Value_Temp=0;
Temp_Value=0;
Temp_Mode3_1=0;
Temp_Mode3_2=0;
ADCSetup();
XlcdInit();
//SETUP 4BIT LCD
XlcdWriteCmd(DON&CURSOR_OFF&BLINK_OFF);
PH LC
Ext_Interrupt();
TRISFbits.TRISF8 = 1;
TRISFbits.TRISF7 = 1;
TRISDbits.TRISD8 = 1;
TRISDbits.TRISD9 = 1;
TRISDbits.TRISD10 = 1;
TRISDbits.TRISD11 = 1;
//=================================WELCOME================================//
ClearLCD();
//Welcome Interface
XlcdCursor(1,8);
printf("LC");
Delay_Cycle(300000);
XlcdCursor(1,7);
printf("LLCO");
Delay_Cycle(300000);
XlcdCursor(1,6);
printf("ELLCOM");
Delay_Cycle(300000);
XlcdCursor(1,5);
printf("WELLCOME");
Delay_Cycle(300000);
XlcdCursor(1,4);
printf("*WELLCOME*");
Delay_Cycle(300000);
XlcdCursor(1,3);
printf("**WELLCOME**");
Delay_Cycle(300000);
XlcdCursor(1,2);
printf("***WELLCOME***");
Delay_Cycle(300000);
XlcdCursor(1,1);
printf("****WELLCOME****");
Delay_Cycle(800000);
XlcdCursor(2,1);
printf("READY TO RUN");
while(ENTER)
{
XlcdCursor(2,1);
printf("READY TO RUN");
Delay_Cycle(300000);
ClearLCD_2();
Delay_Cycle(300000);
}
Delay_Cycle(1000000);
LCD_Loop:
ClearLCD();
XlcdCursor(1,1);
printf("Speed_Up:
s");
XlcdCursor(2,1);
printf("Speed_Down: s");
while(ENTER)
{
if(BACK==0)
{
Delay_Cycle(800000);
PH LC
goto LCD_Loop;
}
if(NEXT==0)
{
Delay_Cycle(800000);
goto MODE_STATUS;
}
if(UP==0)
{
Delay_Cycle(150000);
if(UP==0)
{
Step_up=Step_up+1;
if(Step_up>20)
{
Step_up=3;
}
Delay_Cycle(100000);
}
}
if(DOWN==0)
{
Delay_Cycle(150000);
if(DOWN==0)
{
Step_up=Step_up-1;
if(Step_up<3)
{
Step_up=20;
}
Delay_Cycle(100000);
}
}
XlcdCursor(1,12);
printf("%2.0d",Step_up);
}
Delay_Cycle(700000);
//Waitting for ENTER go back to 1
while(ENTER)
{
if(BACK==0)
{
Delay_Cycle(800000);
goto LCD_Loop;
}
if(NEXT==0)
{
Delay_Cycle(800000);
goto MODE_STATUS;
}
if(UP==0)
{
Delay_Cycle(150000);
if(UP==0)
{
Step_down=Step_down+1;
if(Step_down>20)
{
Step_down=3;
}
PH LC
Delay_Cycle(100000);
}
}
if(DOWN==0)
{
Delay_Cycle(150000);
if(DOWN==0)
{
Step_down=Step_down-1;
if(Step_down<3)
{
Step_down=20;
}
Delay_Cycle(150000);
}
}
XlcdCursor(2,12);
printf("%2.0d",Step_down);
}
Delay_Cycle(300000);
ClearLCD();
XlcdCursor(1,1);
printf(" IN_PUT DATA. ");
XlcdCursor(2,1);
printf("Loading");
Delay_Cycle(300000);
XlcdCursor(2,8);
printf("..");
Delay_Cycle(300000);
XlcdCursor(2,10);
printf("..");
Delay_Cycle(300000);
XlcdCursor(2,12);
printf("..");
Delay_Cycle(300000);
XlcdCursor(2,14);
printf("...");
Delay_Cycle(300000);
XlcdCursor(2,1);
Delay_Cycle(1000000);
//Calculate Speed_up and Speed_Down time for the motor
up=0.012/Step_up;
down=0.012/Step_down;
// Time_up=(60*Tpwm)/Tup
// Time_down=(60*Tpwm)/Tdown
PH LC
while(1)
{
if(BACK==0)
{
Delay_Cycle(800000);
goto LCD_Loop;
}
if(ENTER==0)
{
Delay_Cycle(50000);
if(ENTER==0)
{
XlcdCursor(2,14);
printf("RUN");
Delay_Cycle(300000);
goto LOAD_PARAMETER;
}
}
if(UP==0)
{
Delay_Cycle(50000);
if(UP==0)
{
Mode=2;
Delay_Cycle(300000);
goto MODE_STATUS;
}
}
if(DOWN==0)
{
Delay_Cycle(50000);
if(DOWN==0)
{
Mode=4;
Delay_Cycle(300000);
goto MODE_STATUS;
}
}
}
break;
case 2:
// AUTO_1 is chosen
ClearLCD();
XlcdCursor(1,1);
printf("< M2_AUTO_1 >");
XlcdCursor(2,14);
printf("OK");
while(1)
{
if(BACK==0)
{
Delay_Cycle(800000);
goto LCD_Loop;
}
if(ENTER==0)
{
Delay_Cycle(50000);
if(ENTER==0)
{
Delay_Cycle(300000);
PH LC
goto LOAD_PARAMETER;
}
}
if(UP==0)
{
Delay_Cycle(50000);
if(UP==0)
{
Mode=3;
Delay_Cycle(300000);
goto MODE_STATUS;
}
}
if(DOWN==0)
{
Delay_Cycle(50000);
if(DOWN==0)
{
Mode=1;
Delay_Cycle(300000);
goto MODE_STATUS;
}
}
}
break;
case 3:
// AUTO_2 is chosen
ClearLCD();
XlcdCursor(1,1);
printf("< M3_AUTO_2 >");
XlcdCursor(2,14);
printf("OK");
while( 1)
{
if(BACK==0)
{
Delay_Cycle(800000);
goto LCD_Loop;
}
if(ENTER==0)
{
Delay_Cycle(50000);
if(ENTER==0)
{
Delay_Cycle(300000);
goto LOAD_PARAMETER;
}
}
if(UP==0)
{
Delay_Cycle(50000);
if(UP==0)
{
Mode=4;
Delay_Cycle(250000);
goto MODE_STATUS;
}
}
if(DOWN==0)
{
PH LC
Delay_Cycle(50000);
if(DOWN==0)
{
Mode=2;
Delay_Cycle(300000);
goto MODE_STATUS;
}
}
}
break;
case 4:
// PC_Control is chosen
ClearLCD();
XlcdCursor(1,1);
printf("< M4_PC_CON >");
XlcdCursor(2,14);
printf("OK");
while( 1)
{
if(BACK==0)
{
Delay_Cycle(800000);
goto LCD_Loop;
}
if(ENTER==0)
{
Delay_Cycle(50000);
if(ENTER==0)
{
Delay_Cycle(300000);
goto LOAD_PARAMETER;
}
}
if(UP==0)
{
Delay_Cycle(50000);
if(UP==0)
{
Mode=1;
Delay_Cycle(250000);
goto MODE_STATUS;
}
}
if(DOWN==0)
{
Delay_Cycle(50000);
if(DOWN==0)
{
Mode=3;
Delay_Cycle(300000);
goto MODE_STATUS;
}
}
}
break;
} //End Of Switch
//================================ LOAD PARAMETER =========================//
LOAD_PARAMETER:
ClearLCD();
if(Mode==3)
PH LC
{
Temp_1=Temp_Mode3_1;
Temp_2=Temp_Mode3_2;
XlcdCursor(1,1);
printf(" AUTO_2 ");
XlcdCursor(2,1);
printf("F1: F2: ");
Mode3_Loop_1:
while(ENTER)
{
if(BACK==0)
{
Delay_Cycle(800000);
goto MODE_STATUS;
}
if(UP==0)
{
Delay_Cycle(150000);
if(UP==0)
{
Temp_1=Temp_1+1;
if(Temp_1>60)
// Limit frequency under 60Hz
{
Temp_1=0;
}
Delay_Cycle(100000);
}
}
if(DOWN==0)
{
Delay_Cycle(150000);
if(DOWN==0)
{
Temp_1=Temp_1-1;
if(Temp_1<0)
{
Temp_1=60;
}
Delay_Cycle(100000);
}
}
XlcdCursor(2,4);
printf("%2.0lf",Temp_1);
} //End of while
Temp_Mode3_1=Temp_1;
// Save Temp_1 Value
Delay_Cycle(600000);
// Waitting for Enter back to 1
Mode3_Loop_2:
while(ENTER)
{
if(BACK==0)
{
Delay_Cycle(800000);
XlcdCursor(2,13);
printf(" ");
goto Mode3_Loop_1;
}
if(UP==0)
{
Delay_Cycle(150000);
PH LC
if(UP==0)
{
Temp_2=Temp_2+1;
if(Temp_2>60)
{
Temp_2=0;
}
Delay_Cycle(100000);
}
}
if(DOWN==0)
{
Delay_Cycle(150000);
if(DOWN==0)
{
Temp_2=Temp_2-1;
if(Temp_2<0)
{
Temp_2=60;
}
Delay_Cycle(100000);
}
}
XlcdCursor(2,13);
printf("%2.0lf",Temp_2);
}//End of While
Temp_Mode3_2=Temp_2;
//Save Temp_2 Value
ClearLCD_2();
XlcdCursor(2,1);
printf("Loading");
Delay_Cycle(300000);
XlcdCursor(2,8);
printf("..");
Delay_Cycle(300000);
XlcdCursor(2,10);
printf("..");
Delay_Cycle(300000);
XlcdCursor(2,12);
printf("..");
Delay_Cycle(300000);
XlcdCursor(2,14);
printf("...");
Delay_Cycle(300000);
XlcdCursor(2,1);
printf("
RUN");
while(!Run)
{
if(BACK==0)
{
Delay_Cycle(800000);
ClearLCD_2();
XlcdCursor(2,1);
printf("F1: F2: ");
XlcdCursor(2,4);
printf("%2.0lf",Temp_1);
goto Mode3_Loop_1;
}
}
ClearLCD();
PH LC
XlcdCursor(1,1);
printf("AUTO_2");
XlcdCursor(1,10);
printf("F1:%2.0lf",Temp_1);
XlcdCursor(2,1);
printf("F:");
XlcdCursor(2,10);
printf("F2:%2.0lf",Temp_2);
Temp_1=Temp_1/0.05859375;
Temp_2=Temp_2/0.05859375;
goto loop1;
}//end of if mode 3
if(Mode==1)
{
ClearLCD();
XlcdCursor(1,1);
printf(" MANUAL ");
XlcdCursor(2,14);
printf("RUN");
XlcdCursor(2,1);
printf("AD:");
while(!Run)
{
AD=ReadADC10(0);
ADC=AD*0.05859375;
XlcdCursor(2,4);
printf("%2.0d",ADC);
//Print Value from Variable Resistor
if(BACK==0)
{
Delay_Cycle(800000);
goto MODE_STATUS;
}
}
ClearLCD();
XlcdCursor(1,1);
printf("M1 RUNNING...");
XlcdCursor(2,1);
printf("F:");
goto loop1;
}//end if mode 1
if(Mode==2)
{
ClearLCD();
//Temp_Mode_1=0;
XlcdCursor(1,1);
printf(" AUTO_1 ");
XlcdCursor(2,1);
printf("F_Ref:");
Mode2_Loop:
Temp_Mode_1=Temp_Value;
//Restore Temp_Mode_1 Value
while(ENTER)
{
if(BACK==0)
{
Delay_Cycle(800000);
goto MODE_STATUS;
}
if(UP==0)
PH LC
{
Delay_Cycle(150000);
if(UP==0)
{
Temp_Mode_1=Temp_Mode_1+1;
if(Temp_Mode_1>60)
{
Temp_Mode_1=0;
}
Delay_Cycle(100000);
}
}
if(DOWN==0)
{
Delay_Cycle(150000);
if(DOWN==0)
{
Temp_Mode_1=Temp_Mode_1-0.5;
if(Temp_Mode_1<0)
{
Temp_Mode_1=60;
}
Delay_Cycle(100000);
}
}
//Temp_Value=Temp_Mode_1;
XlcdCursor(2,7);
printf("%2.0lf ", Temp_Mode_1);
}//end while
Temp_Value=Temp_Mode_1; //Save Temp_Mode_1 Value
ClearLCD_2();
XlcdCursor(2,1);
printf("Loading");
Delay_Cycle(300000);
XlcdCursor(2,8);
printf("..");
Delay_Cycle(300000);
XlcdCursor(2,10);
printf("..");
Delay_Cycle(300000);
XlcdCursor(2,12);
printf("..");
Delay_Cycle(300000);
XlcdCursor(2,14);
printf("...");
Delay_Cycle(300000);
ClearLCD_2();
XlcdCursor(2,1);
printf("F:%2.0lf",Temp_Mode_1);
XlcdCursor(2,14);
printf("RUN");
Temp_Mode_1=Temp_Mode_1/0.05859375;
while(!Run)
{
XlcdCursor(2,14);
printf("RUN");
PH LC
Delay_Cycle(200000);
XlcdCursor(2,14);
printf(" ");
Delay_Cycle(200000);
if(BACK==0)
{
Delay_Cycle(500000);
ClearLCD_2();
XlcdCursor(2,1);
printf("F_Ref:");
XlcdCursor(2,7);
printf("%2.0lf",Temp_Mode_1);
goto Mode2_Loop;
}
}
XlcdCursor(2,14);
printf(" ");
XlcdCursor(1,1);
printf("M2 RUNNING...");
XlcdCursor(2,9);
printf("F_Req:%2.0lf",Temp_Value);
goto loop1;
}//end if mode 2
if(Mode==4)
{
ClearLCD();
XlcdCursor(1,1);
printf(" PC_CONTROL ");
XlcdCursor(2,14);
printf("RUN");
while(!Run)
{
if(BACK==0)
{
Delay_Cycle(700000);
goto MODE_STATUS;
}
}
ClearLCD_2();
XlcdCursor(2,1);
printf("M2
RUNNING");
PC_Value=0;
Uart_Setup();
goto loop1;
}//end if mode 4
loop1:
PWMSetup();
while(1)
{
switch(Run)
{
case 1:
PH LC
ADC_Result=ReadADC10(0);
printf("%2.0lf", F_req);
break;
case 2:
ADC_Result=Temp_Mode_1;
XlcdCursor(2,3);
printf("%2.0lf", F_req);
break;
case 3:
if(CHANGE==0)
{
Delay_Cycle(70000);
if(CHANGE==0);
{
Change_Speed=!Change_Speed;
Delay_Cycle(70000);
}
}
if(Change_Speed==1)
{
ADC_Result=Temp_2;
}
else
{
ADC_Result=Temp_1;
}
XlcdCursor(2,3);
printf("%2.0lf", F_req);
break;
case 4:
ADC_Result=PC_Value/0.05859375;
int_F_req=F_req;
delta=F_req-int_F_req;
if(delta>0.5)
{
int_F_req=int_F_req+1;
}
XlcdCursor(2,1);
printf("F:%2.0lf", F_req);
WriteUART1(int_F_req);
break;
}
break;
case 0:
PH LC
Change_Speed=0;
Delay_Cycle(1000000);
PC_Value=0;
PC_Value_Temp=0;
Direction=1;
goto LCD_Loop; //Return to main menu
}
if(F_req==0 && Reset==1)
{
CloseMCPWM(); // Disable PWM module
Reset=0;
// Clear Menu_Flag
Change_Speed=0;
ClearLCD();
XlcdCursor(1,1);
printf("RESET .");
Delay_Cycle(400000);
XlcdCursor(1,8);
printf("..");
Delay_Cycle(400000);
printf("..");
Delay_Cycle(400000);
XlcdCursor(1,12);
printf("..");
Delay_Cycle(400000);
XlcdCursor(1,14);
printf("...");
Delay_Cycle(1000000);
goto Main;
//Return to main menu
}
break;
}
}
}
PH LC
MSComm1.Output = Chr(0)
'send stop signal for PIC to stop motor
MSComm1.PortOpen = False
'Dong cong
End
End Sub
===============================================================================
Private Sub Form_Load()
chuoichay = "LUAN VAN TOT NGHIEP 2006 - 2007
"
'Close Serial Port if it have been already opened
If frmMain.MSComm1.PortOpen = True Then
frmMain.MSComm1.PortOpen = False
End If
frmMain.MSComm1.PortOpen = True
MSComm1.Output = Chr(0)
frmMain.MSComm1.PortOpen = False
'Cau hinh lai Serial Port
frmMain.MSComm1.RThreshold = 1
'Khi nhan 1 ki tu don se phat sinh su kien CommEvent
frmMain.MSComm1.CommPort = 1
'Dung PORT1
frmMain.MSComm1.InputLen = 0
'Doc toan bo buffer
frmMain.MSComm1.Settings = "9600,n,8,1"
frmMain.MSComm1.PortOpen = True
'Mo cong
'Form hien giua man hinh
frmMain.Move (Screen.Width - frmMain.Width) / 2, (Screen.Height - frmMain.Height) / 2
Timer2.Enabled = True
Timer2.Interval = 1000
Label8.Caption = Date
==============================================================================
' Chart SETTING
Strip1.CursorColor = RGB(255, 0, 0)
'Left = (Main.Width - Width) / 2
'Top = (Main.Height - Height) / 2
Xx = Now
For i = 0 To Strip1.Variables - 1
Strip1.VariableID = i
'.1 seconds
Strip1.VariableDeltaX = 1 / 24 / 60 / 60 / 10
'.1 seconds interval
Strip1.VariableLastX = Xx 'Set LastX to current time
Next
Strip1.XTicMode = 1 'Set X Mode to Date/Time Display
'60 seconds
Strip1.XSpan = 1 / 24 / 60 / 60 * 60
'60 seconds of display on plot
End Sub
===============================================================================
Private Sub MSComm1_OnComm()
With frmMain.MSComm1
Select Case .CommEvent
Case comEvReceive
'Nhan du lieu tu vi dieu khien
strtemp = .Input
strdata = Left(strtemp, 1)
datavu = Right(strtemp, 1)
digdata = Asc(strdata)
intdigvu = Asc(datavu)
txt_f_out = digdata
PH LC
PH LC
End If
RunProgressBar.Value = Running + RunProgressBar.Min
End If
End If
End Sub
===============================================================================
Private Sub Timer4_Timer()
If (StsRun = 1) Then
Status = "Running"
End If
If (txt_f_out = 0) Then
Status = "Stopped!!"
End If
If dir = 0 Then
Direction = "Forward"
Else
Direction = "Reverse"
End If
End Sub
===============================================================================
Private Sub Timer5_Timer()
Dim chuoi1, chuoi2 As String
chuoi1 = Left(chuoichay, 1)
chuoi2 = Right(chuoichay, Len(chuoichay) - 1)
frmMain.Caption = chuoi2 + chuoi1
chuoichay = chuoi2 + chuoi1
End Sub
PH LC