You are on page 1of 110

I HC QUC GIA TP H CH MINH

TRNG I HC BCH KHOA

KHOA IN IN T

LUN VN TT NGHIP I HC

IU KHIN NG C KHNG NG B 3 PHA


S DNG VI IU KHIN PIC18F4431
THEO PHNG PHP VECTOR KHNG GIAN

SVTH
MSSV
CBHD
B MN

TP H Ch Minh, 01/2007

: NGUYN HUNH QUANG


: 40202088
: TS. PHAN QUC DNG
: CUNG CP IN

NHN XT CA GIO VIN HNG DN


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Tp H Ch Minh, thng 1 nm 2007
Gio vin hng dn

ii

NHN XT CA GIO VIN PHN BIN


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Tp H Ch Minh, thng 1 nm 2007
Gio vin phn bin

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 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 :
thy L Minh Phng, thy Phan Quc Dng v 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 gi li cm n n tt c nhng ngi bn, nhng ngi anh em ( L
Trung Nam, V Vn V, Tit Vnh Phc..) 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.
Cui cng, ti cm n gia nh, nhng ngi thn, ngi yu (.T.T.N) v c
bit l thn mu cho ti nhng iu kin tt nht hc tp trong sut thi gian
di.

Tp. H Ch Minh, thng 1 nm 2007

iv

MC LC
CHNG 1:
GII THIU V NG C KB V PHNG PHP IU KHIN

2
2

1.1> TNG QUAN V NG C NG B: .........................................................2


1.1.1) Gii thiu: ....................................................................................................2
1.1.2) Cu to: .......................................................................................................2
1.1.3) ng dng:....................................................................................................3
1.2> CC PHNG PHP IU KHIN NG C KB:....................................4

CHNG 2:
GII THIU V BIN TN NGUN P IU KHIN V/f=const

5
5

2.1> BIN TN NGUN P:.....................................................................................5


2.2> PHNG PHP IU KHIN V/f: ..................................................................5
2.2.1) Phng php E/f .........................................................................................5
2.2.2) Phng php V/f .........................................................................................6
2.3> PHNG PHP IU CH SIN PWM: ...........................................................7
2.3.1) Gii thiu: ....................................................................................................7
2.3.2) Cc cng thc tnh ton: .............................................................................9
2.3> PHNG PHP IU CH VECTOR KHNG GIAN ( SVM) ......................10
2.3.1) gii thiu chung: ........................................................................................10
2.3.2) S sp xp cc vector V0 -> V7 trn trc Va; Vb; Vc .........................11
2.3.2) Gii thiu vector Vs : .................................................................................13
uur
2.3.3) Cch tnh ton thi gian to ra vector Vs :...........................................15
2.4> K THUT IU CH VECTOR KHNG GIAN: ..........................................16
2.4.1) Gin ng ngt cc kha to ra Vector Vs trong tng sector:.......16
2.4.2) S tm tt ca qu trnh iu ch : ......................................................19
2.4.3) Tnh ton gc update ca vector Vs theo phng php iu khin V/f:...20

CHNG 3:
GII THIU V PIC Microcontrollers (MCUs)

22
22

3.1>TNG QUAN: ...................................................................................................22


3.1.1> Nhng c im ni bc PIC18F4431: ....................................................24
3.1.2> Nhng c im chnh: ............................................................................25
3.2>TM TT TRC PHN CNG:.......................................................................26
3.2.1> S chn MCU PIC18F4431 :...............................................................26
2.2.3) Chc nng ca tng chn:.......................................................................28
3.3> CC MODULE C BN: ...............................................................................32
3.3.1> Power control PWM module : ...................................................................32
3.3.2> Analog to digital converter module (A/D):................................................48

CHNG 4 :
THIT K PHN CNG

51
51

4.1> YU CU C BN : .......................................................................................51
4.2> S KHI CA H THNG : ....................................................................52
4.3> MCH NG LC : .......................................................................................53
4.3.1) B chnh lu:..............................................................................................53
4.3.2) B nghch lu:............................................................................................54
4.3.3) Mch li ( driver) & cch ly: .......................................................................55
4.2> MCH IU KHIN: .......................................................................................59

4.2.1) S khi mch iu khin: .....................................................................59


4.2.2) Cc tn hiu vo ca mch iu khin: .....................................................59
4.2.3) Tn hiu u ra ca mch iu khin: .......................................................59

CHNG 5:
LP TRNH

60
60

5.1> GII THUT LP TRNH : ..............................................................................60


5.1.1) Chng trnh chnh: ..................................................................................60
5.1.2) Chng trnh ngt: ....................................................................................61
5.2> GII THCH GII THUT : .............................................................................62
5.2.1) Chng trnh chnh: ..................................................................................62
5.2.2) Chng trnh ngt : ...................................................................................62

CHNG 6:
KT QU T C

64
64

6.1> PHN CNG:..................................................................................................64


6.1.1> Mch ng lc: .........................................................................................64
6.1.2> Mch iu khin:.......................................................................................65
6.2> PHN MM GIAO TIP VI NGI S DNG:..........................................66
6.2.2) M t: .........................................................................................................67
6.3> DNG SNG IN P NG RA:...................................................................67
6.4> HNG PHT TRIN: ...................................................................................68
6.4.1) Khc phc nhng khuyt im hin ti: ....................................................68

CHNG 7:
TI LIU THAM KHO
CHNG 8:
PH LC

69
69
70
70

8.1> S MCH (V TRN ORCAD):...............................................................70


8.1.1) S mch cch ly ...................................................................................70
8.1.2 S mch li: ...........................................................................................72
8.1.3) S mch nghch lu : ...........................................................................73
8.1.4) S mch iu khin :............................................................................74
8.2> CHNG TRNH VIT CHO PIC18F4431 : ..................................................76
8.3> CODE PHN MM GIAO TIP NGI S DNG:....................................102

vi

CHNG 1:GII THIU V NG C KB V PHNG PHP IU KHIN

CHNG 1:
GII THIU V NG C KB V PHNG PHP IU KHIN
1.1> TNG QUAN V NG C NG B:
1.1.1) Gii thiu:

ng c in khng ng b ba pha (AC Induction Motor) c s dng


rt ph bin ngy nay vi vai tr cung cp sc ko trong hu ht cc h thng
my cng nghip. Cng sut ca cc ng c khng ng b c th t n
500 kW (tng ng 670 hp) v c thit k tun theo quy chun c th
nn c th thay i d dng cc nh cung cp.
1.1.2) Cu to:

Hnh 1.1: Cu to bn trong ng c KB


1.1.2a) Phn tnh: Stato c cu to gm v my, li st v dy qun
+ V my:
V my c tc dng c nh li st v dy qun, khng dng lm mch dn
t. Thng v my c lm bng gang. i vi my c cng sut tng i
ln ( 1000kW ) thng dng thp tm hn li lm thnh v my. Tu theo cch
lm ngui my m dng v cng khc nhau.
+ li st:
Li st l phn dn t. V t trng i qua li st l t trng quay nn
gim tn hao: li st c lm bng nhng l thp k thut in p li.
+ Dy qun:
Dy qun stator c t vo cc rnh ca li st v c cch in tt vi
li st.

CHNG 1:GII THIU V NG C KB V PHNG PHP IU KHIN

1.1.2b) Phn quay ( roto):


Rotor c 2 loi chnh : rotor kiu dy qun v rotor kiu lng sc.
+ rotor kiu 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 kiu lng sc:
Kt cu loi dy qun ny rt khc vi dy qun stator. Trong mi rnh ca li
st rotor t vo thanh dn bng ng hay nhm di ra khi li st v c
ni tt li hai u bng hai vnh ngn mch bng ng hay nhm lm thnh
mt ci lng m ngi ta quen gi l lng sc
1.12c) Khe h khng kh:
V rotor l mt khi trn nn khe h u. Khe h trong my in khng ng
b rt nh hn ch dng in t ha ly t li v nh vy mi c th lm
cho h s cng sut ca my cao hn.
1.1.3) ng dng:
My in khng ng b l loi my in xoay chiu ch yu dng lm ng c
in( c bit l loi rotor lng sc) c nhiu u im hn so vi ng c DC. Do kt
cu n gin, lm vic chc chn, hiu sut cao, gi thnh h nn ng c khng
ng b l loi my c dng rng ri trong cng nghip, nng nghip , i sng
hng ngy.
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.

CHNG 1:GII THIU V NG C KB V PHNG PHP IU KHIN

1.2> CC PHNG PHP IU KHIN NG C KB:


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.
Cc phng php iu khin ph bin:
iu khin in p stator
iu khin in tr rto
iu khin tn s
iu khin cng sut trt rto

CHNG 2:GII THIU V BIN TN NGUN P IU KHIN V/f=const

CHNG 2:
GII THIU V BIN TN NGUN P IU KHIN V/f=const
2.1> BIN TN NGUN P:
c s dng hu ht trong cc bin tn hin nay. Tc ca ng c khng
ng b t l trc tip vi tn s ngun cung cp. Do , nu thay i tn s ca
ngun cung cp cho ng c th cng s thay i c tc ng b, v tng
ng l tc ca ng c.
Tuy nhin, nu ch thay i tn s m vn gi nguyn bin ngun p cp
cho ng c s lm cho mch t ca ng c b bo ha. iu ny dn n dng t
ha tng, mo dng in p v dng in cung cp cho ng c gy ra tn hao li
t, tn hao ng trong dy qun Stator. Ngc li, nu t thng gim di nh mc
s lm gim moment ca ng c.
V vy, khi gim tn s ngun cung cp cho ng c nh hn tn s nh mc
thng i i vi gim in p cung cp cho ng c. V khi ng c hot ng vi
tn s nh mc th in p ng c c gi khng i v bng nh mc do gii
hn ca cch in ca Stator cng nh ca in p ngun cung cp, moment ca
ng c s b gim.
2.2> PHNG PHP IU KHIN V/f:
2.2.1) Phng php E/f
Ta c cng thc sau:
a=

(2.1)

fm

+ Vi f: tn s hot ng ca ng c,
+ fm: tn s nh mc ca ng c.
Gi s ng c hot ng di tn s nh mc (a<1). T thng ng c c gi
gi tr khng i. Do t thng ca ng c ph thuc vo dng t ha ca ng
c, nn t thng c gi khng i khi dng t ha c gi khng i ti mi
im lm vic ca ng c.
Ta c phng trnh tnh dng t ha ti im lm vic nh mc nh sau:
Im =

Em
1
.
fm 2L m

(2.2)

+ Vi Lm l in cm mch t ha
Ti tn s lm vic f:
Im =

E
1
.
a.fm 2L m

(2.3)

CHNG 2:GII THIU V BIN TN NGUN P IU KHIN V/f=const

T 2 phng trnh trn suy ra iu kin dng in t ha khng i:


E
E E
= Em = m = const
a
f
fm

(2.4)

Nh vy t thng ng c c gi khng i khi t l E/f c gi khng i


(E/f = const).
2.2.2) Phng php V/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.
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 + X1 + X '2

s

(2.5)

V moment cc i ch nh mc:

Mmax

2
Vm
3

.
=
2.b
R 1 R 12 + X1 + X '2

(2.6)

Khi thay cc gi tr nh mc bng gi tr nhn vi t s a (am, aVm, aX),


Ta c c cng thc moment ca ng c tn s f khc nh mc:

R'

Vm2 . 2
3
;(a < 1)
a
s
.
M=
.
2

'
b R1 R2
2
+ + X1 + X '
2
a as

V moment cc i tn s f khc nh mc:

(2.7)

CHNG 2:GII THIU V BIN TN NGUN P IU KHIN V/f=const

Mmax =

3
2.b

Vm
.
2
R
R
1 1 + X1 + X '2
a
a

, a < 1

(2.8)

Da theo cng thc trn ta thy, cc gi tr X1 v X2 ph thuc vo tn s,


trong khi R1 li l hng s. Nh vy, khi hot ng tn s cao, gi tr (X1+X2)>>
R1/a, st p trn R1 rt nh nn gi tr E suy gim rt t dn n t thng c gi
gn nh khng i. Moment cc i ca ng c gn nh khng i.
Tuy nhin, khi hot ng tn s thp th gi tr in tr R1/a s tng i ln
so vi gi tr ca (X1+X2), dn n st p nhiu in tr stator khi moment ti ln.
iu ny lm cho E b gim v dn n suy gim t thng v moment cc i.
b li s suy gim t thng tn s thp. Ta s cung cp thm cho ng
c mt in p Uo cung cp cho ng c t thng nh mc khi f=0. T ta c
quan h nh sau:
U=Uo+K.f
Vi K l mt hng s c chn sao cho gi tr U cp cho ng c bng Um ti
f=fm.
Khi a>1 (f>fm), in p c gi khng i v bng nh mc. Khi ng c
hot ng ch suy gim t thng.

Hnh 2.1: th biu din mi quan h gia moment v in p theo tn s trong


phng php iu khin V/f=const.

2.3> PHNG PHP IU CH SIN PWM:


2.3.1) Gii thiu:
to ra mt in p xoay chiu bng phng php SIN PWM, ta s dng
mt tn hiu xung tam gic tn s cao em so snh vi mt in p sin chun c tn

CHNG 2:GII THIU V BIN TN NGUN P IU KHIN V/f=const

s f. Nu em xung iu khin ny cp cho mt b bin tn mt pha th ng ra s


thu c mt dng in p dng iu rng xung c tn s bng vi tn s ngun sin
mu v bin hi bc nht ph thuc vo ngun in mt chiu cung cp v t s
gia bin sng sin mu v sng mang. Tn s sng mang phi ln hn tn s
ca sng sin mu. Sau y l hnh v miu t nguyn l ca phng php iu rng
sin mt pha:

Hnh 2.2: nguyn l ca phng php iu rng SIN mt pha


Khi:

Vdc
(2.9)
2
V
Vcontrol < Vtri th VAO = dc
2
Nh vy, to ra ngun in 3 pha dng iu rng xung, ta cn c ngun sin
3 pha mu v gin kch ng ca 3 pha s c biu din nh hnh v di y:
Vcontrol > Vtri th VAO =

CHNG 2:GII THIU V BIN TN NGUN P IU KHIN V/f=const

Hnh 2.3: nguyn l ca phng php iu rng SIN 3 pha v dng sng in p ng
ra
2.3.2) Cc cng thc tnh ton:
Ta cn tnh c bin hi bc nht ca in p ng ra t t s bin gia
sng mang v sng tam gic
Ta c cng thc sau tnh bin ca hi bc nht:
USIN(1) = ma.

UDC
2

(2.10)
Trong ma l t s gia bin sng sin mu v bin sng mang cn gi
l t s iu bin.
ma =

USINsmp

(2.11)

Ucarry

CHNG 2:GII THIU V BIN TN NGUN P IU KHIN V/f=const

2.3> PHNG PHP IU CH VECTOR KHNG GIAN ( SVM)


2.3.1) gii thiu chung:
Sau y l s nguyn l ca b bin tn s dng 6 kha transitor cng sut :

S0

S2

S4

Hnh 2.4: S nguyn l b nghch lu 3 pha


i vi phng php iu rng xung vector khng gian, b nghch lu c
xem nh l mt khi duy nht vi 8 trng thi ng ngt ring bit t 0 n 7.

10

CHNG 2:GII THIU V BIN TN NGUN P IU KHIN V/f=const

Hnh 2.5: Trng thi ng ngt cc kha bn nghch lu

Bng tm tt :
Vector
in
p
V0
V1
V2
V3
V4
V5
V6
V7

Trng thi ca cc
kha
Q1
Q3
Q5
0
0
0
1
0
0
1
1
0
0
1
0
0
1
1
0
0
1
1
0
1
1
1
1

in p pha
Van
0
2/3
1/3
-1/3
-2/3
-1/3
1/3
0

Vbn
0
-1/3
1/3
2/3
1/3
-1/3
-2/3
0

in p dy
Vcn
0
-1/3
-2/3
-1/3
1/3
2/3
1/3
0

Vab
0
1
0
-1
-1
0
1
0

Vbc
0
0
1
1
0
-1
-1
0

Vca
0
-1
-1
0
1
1
0
0

Ghi ch: ln in p phi nhn vi VDC


2.3.2) S sp xp cc vector V0 -> V7 trn trc Va; Vb; Vc
i vi ngun p ba pha cn bng, ta lun c phng trnh sau:
ua (t ) + ub (t ) + uc (t ) = 0
(2.12)
V bt k ba hm s no tha mn phng trnh trn u c th chuyn sang
h ta 2 chiu vung gc. Ta c th biu din phng trnh trn di dng 3
vector gm: [ua 0 0]T trng vi trc x, vector [0 ub 0]T lch mt gc 120o v vector [0
0 uc]T lch mt gc 240o so vi trc x nh hnh sau y.

Hnh 2.6: Biu din vector khng gian trong h ta x-y

11

CHNG 2:GII THIU V BIN TN NGUN P IU KHIN V/f=const

T ta xy dng c phng trnh ca vector khng gian trong h ta


phc nh sau

u (t ) =

2
ua + ub .e j (2 / 3) + uc .e j (2 / 3) )
(
3

(2.13)

+ Ta xt trng hp b nghch lu trng thi u V1 :


+VDC/2

+VDC/2

S1
a

Ra

S5

S3
b

c
N

S0

S2

Rb

S4

-VDC/2

Rc

-VDC/2

Ra

Rb

Rc

Hnh 2.7: B nghch lu trng thi V1


Ta c: Ra Rb Rc

=> Va= 2/3 Vdc ; Vb=Vc= -1/3 Vdc

uur uur
uur uur uur
Xt trn h ta : trong Vs = V 1 = K * (Va + Vb + Vc) ; K=2/3 l h s
bin hnh
Vb

Hnh 2.8: Vector in p V1 trn ta

12

CHNG 2:GII THIU V BIN TN NGUN P IU KHIN V/f=const

+ Tng t nh vy vi cc vector V2-> V6 , ta c gin sau:

Hnh 2.9: Vector in p V1->V6 trn gin


+ Ngoi ra , chng ta cn 2 trng hp c bit l vector V0 =V7= 0

Hnh 2.10 : V7 & V0


2.3.2) Gii thiu vector Vs :
tng ca vic iu ch vector khng gian l to nn s dch chuyn lin tc
ca vector khng gian tng ng ca vector in p b nghch lu trn qu o
ng trn, tng t nh trng hp ca vector khng gian ca i lng 3 pha
hnh sin to c. Vi s dch chuyn ca u n ca vector khng gian trn qu
o trn cc sng hi bc cao c loi b v bin p ra tr nn tuyn tnh.
Vector tng ng y chnh l vector trung bnh trong thi gian mt chu k ly
mu Ts ca qu trnh iu khin b nghch lu p

13

CHNG 2:GII THIU V BIN TN NGUN P IU KHIN V/f=const

Hnh 2.11: Vector Vs trn h trc

Hnh 2.12: in p 3 pha ng ra trong min thi gian tng ng Hnh 2.11
uur
Vector Vs lin quan n cc trng thi kha transtior trong b bin tn ngun
p VSI ( Voltage Source Inverter). Trong phng php SVM th VSI cuung
ngt
r
tn s rt ln (FPWM). FPWM quyt nh thi gian ly mu Ts cho vector Vs ( Ts=1/
FPWM)
uur
C rt nhiu cch ng ngt cc kha BJT to ra vector Vs t cc vector
uur uur uur uur uur uur uur uur
V 0 ; V1 ; V 2 ; V 3 ; V 4 ; V 5 ; V 6 ; V 7 .

14

CHNG 2:GII THIU V BIN TN NGUN P IU KHIN V/f=const


uur
2.3.3) Cch tnh ton thi gian to ra vector Vs :

Hnh 2.13: Vs sector 1


uur Xt
uur gc
uur 1 phn su u tin ca hnh lc gic c to bi nh ca ba
uur vector
V 0 ; V 1 ; V 2 . Gi s trong khon thi gian Ts , ta cho tc dng vector V 1 trong
uur
uur
khon thi gian TA,vector V 2 trong khon thi gian TB; vector V 0 trong khon thi
gian cn li trong chu k ly mu ( Ts- TA-TB). Vector tng ng c tnh bng
vector trung bnh ca chui tc ng lin tip trn:

uur T uur T uur T uuur


Vs = A V 1 + A V 2 + 0/ 7 V0 / 7
Ts Ts
Ts

(2.14)

Ts= TA +TB +T0/7

(2.15)

Ta c t l bin c nh ngha nh sau :

m=

Vs
2
Vdc
3

(2.16)

+ trong Vs in p (pha) ng ra ca b bin tn (Va, Vb, Vc )

Chiu phng trnh (2.14) ln trc X - Y ; s dng thm phng trnh (2.16) v
t s m (2.15)

15

CHNG 2:GII THIU V BIN TN NGUN P IU KHIN V/f=const

T1 = Ts . 3 m.sin ( / 3 )

m.sin ( )
T2 = Ts .
3

T07 = Ts T1 T2

(2.17)

=> Nh vy trong khon thi gian ly mu Ts, thi gian tn ti ca cc trng


thi TA; TB; T0/7 da vo t s m v gc pha ca vector Vs ( hay ni cch khc l
da vo ln v v tr ca vector Vs trong khng gian)
2.4> K THUT IU CH VECTOR KHNG GIAN:
Thng thng, mt trong nhng tiu chun la chn gin ng kch linh
kin l sao cho gim thiu ti a s ln chuyn mch ca linh kin =>gim tn hao
trong qu trnh ng ngt chng. S ln chuyn mch s t nu ta thc hin trnh t
iu khin sau:

Hnh 2.14: Gin ng ngt linh kin


2.4.1) Gin ng ngt cc kha to ra Vector Vs trong tng sector:
Cc kha cng sut trong tng nhnh ng ngt i nghch nhau. n gin
ha s , ta ch v trng thi ca 3 kha cng sut pha trn. Ba kha cn li c
trng thi i nghch vi 3 kha trn theo tng cp nh sau :
+
S0 S1
+
S2 S3
+
S4 S5
16

CHNG 2:GII THIU V BIN TN NGUN P IU KHIN V/f=const

17

CHNG 2:GII THIU V BIN TN NGUN P IU KHIN V/f=const

Hnh 2.15 : Gin ng ngt cc kha khi Vs sector 1-> 6

18

CHNG 2:GII THIU V BIN TN NGUN P IU KHIN V/f=const

2.4.2) S tm tt ca qu trnh iu ch :

Hnh 2.15: S tm tt ca qu trnh iu ch


Nh vy vector trung bnh ( Vs) c iu khin theo qu o ng trn.
Chiu quay c th thun hay nghch theo chiu kim ng h. ng trn ni tip
hnh lc gic l qu o ca vector ko gian ln nht m phng php iu ch
vector khng gian ca b nghch lu p hai bc c th t c trong phm vi iu
khin tuyn tnh. Bn knh ng trn ny chnh bng bin thnh phn c bn
in p (pha) ti
Hay

uur uur uur uur Vdc


Vs = VA = VB = VC =
3
2

T1 = Ts . 3 m.sin ( / 3 )

m.sin ( )
T2 = Ts .
3

T07 = Ts T1 T2

Trong :
+ m=

Vs
l t s iu bin
2
Vdc
3

+ Ts l chu k iu rng xung

+ l gc lch gia VA v VB

19

(2.18)

CHNG 2:GII THIU V BIN TN NGUN P IU KHIN V/f=const

2.4.3) Tnh ton gc update ca vector Vs theo phng php iu khin V/f:

TP
W
M

TPWM

Hnh 2.16: gc update ca vector Vs


1) u tin ta chia cc sector (mi sector 60 ), thnh n phn bng nhau:
=> Gc chia nh nht trong 1 sector:

min =

60
()
n

(2.19)

2) Ti tn s t f => ( T=1/f):
Vector Vs quay 360 trong thi gian T
Vector Vs quay ? trong thi gian TPWM

=>

'=

3) Xy dng

TPWM
360
T
() : gc update ca vector Vs

(2.20)

' = K * min = update _ angle ( K l s nguyn)

20

CHNG 2:GII THIU V BIN TN NGUN P IU KHIN V/f=const

TPWM
60
360 = K *
T
n
T
n
=> K = PWM * 360 *
T
60
=>

M T=1/f
=> K =

1
f PWM

.360.

n
.f
60

Ta chn TPWM= 5 KHz ; n=512 gi tr trong 1 sector

1
512
.360.
.f
5000
60
=> K = 0.6144 f = step size
=> K =

(2.21)

Ta c tn s f t thay i t 0 -> 60 Hz
=> K= (0 ->36.684 )

Hnh 2.17: Update vector Vs with stepsize


Vy gc ca Vs c tnh bi cng thc sau :
Vector update step size =DEGREE_CONSTANT x required Motor Speed (Hz)
Vecter angle =Vector angle + Update_angle

21

(2.22)

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

CHNG 3:
GII THIU V PIC Microcontrollers (MCUs)
3.1>TNG QUAN:

H vi iu khin PIC v dsPIC do hng


ch to v sn xut vi
cng ngh hin i, ph hp cho cc ng dng n gin cho n phc tp. c bit
ngoi ngn ng lp trnh assembler nh cc MCU khc, ngi dng c th lp trnh
PIC trn ngn ng C quen thuc thng qua cc phn mm h tr ( PIC18C ; CCS C
; .)
Gm cc h nh sau:
8 bit:
+
PIC10
+
PIC12
+
PIC16
+
PIC18
16 bit:
+
PIC24F
+
PIC24H
+
dsPIC30
+
dsPIC33

22

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)


Ty theo cc ng dng c th m ngi dng c th chn ra Chip ph hp (
theo hng dn ca nh sn xut ti trang ch ca microchip ). Trong
PIC18F4431 l IC chuyn dng iu khin ng c 3 pha theo ngh ca ca
Microchip

23

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

3.1.1> Nhng c im ni bc PIC18F4431:


14 bit Power Control PWM module:
+ C n 4 knh ( mi knh gm 1 cp xung i nghch)
+ Thi gian dead time linh hot
+ update tng duty cycle => ng ra PWM p ng nhanh
+.
Motion Feedback Module:
+ C 3 knh capture c lp:
- cc ch hot ng linh hot cho vic o c rng xung
- Module h tr Hall Sensor
- Special event trigger cho cc module khc
+ Quadrature Encorder interface:
- 2 pha vo v 1 ng vo index t encorder
- h tr o c vn tc
High speed, 200Ksps 10-bit A/D Converter:
+ C 9 knh A/D
+ 2 knh ly mu tc thi
+ Ly mu lin tc:1 ; 2 hay 4 knh c la chn
+ .
Flexible Oscillator Structure:
+ 4 ch thch anh ( h tr n 40 MHz)
+ 2 ngun xung lock ngoi ln n 40 MHz
+ Ch thch anh ni :
- C 8 tn s ngi dng c th la chn : t 31Khz -> 8 MHz
- OSCTUNE c th b cho s lch tn s (?)
+..
Peripheral Highlights:
+ Chu dng cao : sink/source ( 25mA/25ma)
+ 3 ngun ngt ngoi
+ 2 module Capture / Compare / PWM (CCP)
- Capture 16 bit, phn gii ti a 6.25 ns ( TCY/6)
- Compare 16 bit, phn gii ti a 100 ns ( TCY)
- PWM output: phn gii t 1 -> 10 bt
+ Module USART:
- H tr RS-485, RS-232 v LIN1.2
- Auto weak-up on start bit
- Auto-Bound detect
+ RS-232 s dng khi dao ng ni ( ko cn thch anh ngoi)
24

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

3.1.2> Nhng c im chnh:


+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

L CPU s dng tp lnh RISC v c tc x l cao , cng sut thp nh


s dng cng ngh CMOS FLASH/EEPROM.
Tp lnh c 75 lnh .
Mt chu k lnh bng 4 chu k xung . S dng b dao ng 40 Mhz th chu k
lnh l 0,1 us .
Tn s b dao ng cho php ti 40Mhz.
8K x 14 word b nh FLASH lp trnh.
768 byte b nh RAM , trong b nh EEPROM ln n 256 byte.
Trang b ti 34 ngt vi 8 cp ngt
5 port I / O.
Trang b 3 b nh thi: 2 b 8 bit,1 b 16 bit.
2 module Capture/Compare/PWM.
B chuyn i 10 bit ADC vi tc 5-10us.
Cng serial ng b vi ch SPI(Master) v I2C (Master/Slave) thc hin
bng phn cng .
Ch chuyn nhn ng b/bt ng b vi 9 bit a ch kim tra.
Cng song song (PSP) 8bit .
Cc ch nh a ch:trc tip , gin tip , v tng i.
Cho php c/ghi b nh chng trnh .
C ch bo v m lp trnh .
Ch SLEEP(tm ngh) tit kim in nng .
Cho php chn la ch dao ng ( ni , ngoi ).
2 chn cho php g ri hot ng ca vi iu khin.
Lp trnh thng qua cng serial vi in th ch 5 V.
Tm in th hot ng rng: t 2 n 5.5V. Dng cp khong 25mA.
c sn xut vi nhiu loi khc nhau cho cng 1 m vi iu khin , tu
thuc vo s tnh nng c trang b thm . Cc kiu cm:PDIP(40
chn), PLCC v QFP (cng 44 chn).

25

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)


3.2>TM TT TRC PHN CNG:
3.2.1> S chn MCU PIC18F4431 :

3.2.2> S cc khi chc nng :

26

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

27

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)


2.2.3) Chc nng ca tng chn:
a)_PORT A:
+ L port I/O . C tt c 6 chn, t RA0 n RA5.Trong RA2 v RA3 c th
dng tip nhn in p Vref+ v Vref-.
+ RA4 cn l ng vo xung clock cho Timer0. RA5 c th lm chn chn slave
cho port serial ng b.
b)_PORT B:
+ L port I/O ,c th c lp trnh bi phn mm lm chc nng ko ln
cho tt c ng vo.
+ RB0 c th lm chn ngt ngoi.
+ RB3 c th lm ng vo lp trnh in th thp.
+ Cc chn cn li c th lm ng vo ngt trn chn,lp trnh vi xung v d
liu serial.
c)_PORT C:
+ L port I/O, c 8 chn:
+ RC0 dng lm ng ra b dao ng Timer1 hoc ng vo xung timer1.
+ RC1 ,RC2 c cng 3 chc nng: lm ng ra PWM / chn Compare( so
snh) / chn capture (ly mu).RC1 cn l ng vo b dao ng Timer1.
+ RC3 l ng vo xung tun t ng b/ hoc ra (vi ch SPI v I2C).
+ RC4 lm chn nhn data (ch SPI) hay data I/O (ch I2C).
+ RC5 c th xut data SPI ( ch SPI).
+ RC6 c th lm chn pht bt ng b (USART) hoc xung ng b.
d)_PORT D:
+ L port I/O ,c th lm port slave song song khi giao tip vi 1 bus vi x l.
e)_PORT E:
_Port I/O ny thng dng iu khin chn/c/ghi cho port slave song song.
f)_Cc chn khc:
+ Chn 13(OSC1/CLKIN) tip nhn xung ngoi cho b dao ng thch anh
bn trong.
+ Chn 14(OSC2/CLKOUT) lm ng ra b dao ng thch anh. ch
RC,chn ny c tn s bng ca OSC1.
+ Chn 1 : lm ng vo reset .
+ Chn 12, 31 l ni t Vss.Chn 11, 32 l chn cp ngun Vdd.

28

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

M t cc I/O trch t datasheet :

29

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

30

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

31

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)


3.3> CC MODULE C BN:
3.3.1> Power control PWM module :
Power Control PWM module n gin l to ra nhiu xung ng b c rng
thay i c ( PWM : Pulse Width Modulation ). Cc ng ra PWM ng dng trong
iu khin ng c v cc ng dng chuyn i cng sut . Module PWM ny h tr
iu khin cc ng dng sau :
+ ng c KB 1 pha v 3 pha
+
Swithched Reluctance Motor
+ ng c DC khng chi than
+ UPS ( Uninterruptible Power Suppliers)
+
Mutiple DC Brush motor
Cc thng s c bn ca module PWM:
+ C 8 ng I/O PWM vi 4 duty cycle khc nhau
+ phn gii 14 bit da trn PWM periode
+ Thi gian dead time c th lp trnh ( ng dng trong trng PWM i
nghch => chng trng dn )
+ Ngt h tr update khng i( asymmertrical update ) xng trong ch
canh gia ( center aligned mode)

32

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

S khi ca module PWM

33

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

Trong module PWM c 4 b to duty cycle ring bit, chng c nh s t 0 -> 3.


Module ny c 8 ng ra, c nh s t 0->7. Trong ch i nghch cc pin
chn pin l l 1 cp. VD: PWM0 s i nghch vi PWM1; PWM2 s i nghch vi
PWM3; .

34

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)


B to dead time s chn 1 khon off gia lc xung PWM ca pin ny ang cnh
xung v xung PWM ca chn i nghch ang ang cnh ln ( trong 1 cp chn
i nghch). iu ny ngn chn trng dn => cc kha cng sut c bo v
3.3.1a) Cc thanh ghi iu khin:
Hot ng ca module PWM c iu khin thng qua 22 thanh ghi khc
nhau. 8 trong s c dng iu chnh cc thng s ca module:
+
PWM timer control register 0 ( PTCON0)
+
PWM timer control register 1 ( PTCON1)
+ PWM control register 0 ( PWCON0)
+ PWM control register 1 ( PWCON1)
+
Dead time control register (DTCON)
+ Output overide register(OVDCOND)
+ Output state register (OVDCONS)
+ Fault configrration register (FLTCONFIG)
7 cp ( 14 thanh ghi) cn li : hiu chnh thng s c bit:
+ PWM time base registers (PTMRH and PTMRL)
+ PWM periode registers (PTPERH and PTPERL)
+
PWM special event compare register ( SEVTCMPH and
SEVTCMPL)
+ PWM duty cycle #0 register ( PDC0H and PDC0L)
+ PWM duty cycle #1 register ( PDC1H and PDC1L)
+ PWM duty cycle #2 register ( PDC2H and PDC2L)
+ PWM duty cycle #3 register ( PDC3H and PDC3L)
Nhng cp thanh ghi trn u double buffers
3.3.1b) Cc module chc nng:
PWM module h tr nhiu ch hot ng ph hp cho yu cu iu khin
ng c. PWM module c tng hp t cc khi chc nng sau:
+ PWM Time Base
+ PWM Time Base Interrrupts
+
PWM Period
+ PWM Duty Cycle
+
Dead Time Generators
+
PWM Output Overrides
+ PWM Fault Inputs
+
PWM Special Event Trigger

35

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)


3.3.1c) PWM Time Base:
PWM time base c cung cp 12 bit timer vi chc nng prescaler and postcaler.
S khi n gin ca PWM time base c trnh by trong hnh 17-4. PWM time
base c hiu chnh thng qua 2 thanh ghi PTCON0 v PTCON1. Time base c
enabled hay disabled bi set hay clear bit PTEN trong thanh ghi PTCON1 . Ch ,
cp thanh ghi PTMR ( PTMRH:PTMRL) s khng b clear khi bit PTEN b clear trong
phn mm !!!

PWM time base c 4 ch hot ng nh sau


+
Free running mode => edge aligned PWM
+
Single shot mode => center aligned PWM
+
Continous Up/Down count mode => support electronically commtated motors
+
Continous Up/Down count mode with interrupts for double updates
4 ch trn c la chn thng qua bit PTMOD1:PTMOD0 trong thanh ghi
PTCON0.

36

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

37

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

38

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)


3.3.1d) PWM Time Base Interrrupts:
PWM timer to ra interrupts da trn ch hot ng c la chn bi
nhng bit PTMOD<1:0> v nhng bit postscaler<3:0>
Interrupts trong ch FREE RUNNING:
PWM time base ch time base ( PTMOD<1:0>=00 ), s kin interrupts xy ra
khi gi tr trong thanh ghi PTPER bng gi tr ca thanh ghi PTMR. Gi tr ca thanh
ghi PTMR s c c a v zero ngay xung clock sau .
S dng postscaler ln hn 1:1 s gim tn s ca cc s kin interrupts .

39

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

Interrupts trong ch SINGLE SHOT:


Khi bit PTMOD<1:0>=01 =>PWM time base ch single shot. S kin interrupts
xy ra khi gi tr trong thanh ghi PTPER bng gi tr ca thanh ghi PTMR. Gi tr ca
thanh ghi PTMR s c c a v zero ngay xung clock sau .
Nhng bit postscaler ko c tc dng g khi timer ch ny.

40

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

Interrupts trong ch COUNTINOUS UP/DOWN COUTING:


Khi bit PTMOD<1:0>=10 =>PWM time base ch countinous up/down counting.
S kin interrupts xy ra khi gi tr trong thanh ghi PTMR bng zero, v PWM time
base bt u m ln .
Nhng bit la chn postscaler c th s dng trong ch ny ca timer lm
gim tn s ca s kin interrupts .

41

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

Interrupts trong ch DOUBLE UPDATE:


Ch ny ch c trong Up/Down Counting mode ( PTMOD<1:0>=11 ). S kin
interrupts xy ra mi khi gi tr thanh ghi PTMR tng ng vi zero hay khi gi tr
thanh ghi PTMR trng vi gi tr thanh ghi PTPER.
Ch double update cung cp cho ngi dng thm 2 chc nng trong ch
center-align mode:
+ Bandwidth c ln gp i v PWM duty cycle c update 2 ln
trong mi chu k (periode)
+ C th to ra c dng sng PWM center-align khng i xng, iu
ny rt hu dng trong vic hn ch ti a s mo dng ca dng
sng ng ra trong 1 s ng dng iu khin ng c

42

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

3.3.1e) PWM Period :


PWM periode c nh ngha bi cp thanh ghi PTPER ( PTPERH v
PTPERL). PWM periode c phn gii 12 bit. PTPER l cp thanh ghi double
buffered s dng set ch m ca PWM time base.
Ni dung ca PTPER buffer c np vo thanh ghi PTPER cc thi im
sau:
+
+

Free running mode v Single shot modes: thanh ghi PTMR c a v


zero sau khi trng gi tr vi thanh ghi PTPER
Up/down counting mode: khi PTMR bng zero. Gi tr c lu trong
PTPER buffer t ng np vo thanh ghi PTPER khi PWM time base c
disabled ( PTEN=0)

43

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)


3.3.1f) PWM duty cycle:
PWM duty cycle c xc nh bi cc thanh ghi PDCx ( PDCxH v PDCxL).
C tng cng 4 cp thanh ghi PWM duty cycle cho 4 cp xung PWM.
+ PDC0 (PDC0L v PDC0H)
+ PDC1 (PDC1L v PDC1H)
+ PDC2 (PDC2L v PDC2H)
+ PDC3 (PDC3L v PDC3H)
Gi tr trong mi thanh ghi xc nh khon thi gian m ng ra PWM tch
cc.
Trong ch Edge-aligned, PWM periode bt u ti Q1 v kt thc khi thanh
ghi duty cycle trng vi gi tr PTMR.

Duty cycle register buffer:


4 thanh ghi PWM duty cycle u c double buffered. Mi duty cycle block, u c
thanh ghi duty clycle buffer m c th truy xut bi ngi dng. Thang ghi duty cycle
buffer th hai s gi gi tr so snh vi PWM periode hin ti.
Trong ch edge-aligned PWM output, gi tr duty cycle mi s c update mi
khi gi tr thai thanh ghi PTMR v PTPER trng nhau. Sau PTMR s c reset
nh trong hnh 17-12. Ni dung ca duty cycle buffer s t ng cp nht vo thanh
ghi duty cycle khi PWM time base b disable ( PTEN=0)

44

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

Khi PWM time base ch Up/Down couting, gi tr duty cycle mi s c


update khi gi tr thanh ghi PTMR bng zero v PWM time base bt u m ln. Ni
dung ca duty cycle buffer s t ng cp nht vo thanh ghi duty cycle khi PWM
time base b disable ( PTEN=0). Hnh 17-13 trnh by gin thi gian khi duty cycle
c update ch Up/Down counting . Trong ch ny PWM periode phi
c sn sng np v tnh ton trc PWM duty cycle mi trc khi cc thay
i c hiu lc.

Khi PWM time base ch Up/Down couting vi double update mode, gi tr


duty cycle mi s c update khi gi tr thanh ghi PTMR bng zero v khi gi tr hai
thanh ghi PTMR v PTPER trng nhau. Ni dung ca duty cycle buffer s t ng
c np vo thanh ghi duty cycle khi mt trong hai iu kin trn xy ra.

45

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

3.3.1g) B to thi gian dead time:


Trong b bin tn , khi cc xung PWM ch i nghch iu khin cc
kha cng sut pha cao; pha thp trong cng 1 nhnh, phi chn 1 khon thi gian
dead time. Khon thi gian dead time lm cho ng ra PWM i nghch u
trng thi khng tc ng trong 1 khon thi gian ngn=> trnh trng dn khi kha
ny ang ON , kha kia ang OFF
Mi cp xung PWM i nghch u c mt counter 6 bit m xung, chn
khon dead time vo xung PWM. Mi b to dead time c b pht hin cnh ln v
cnh xung c kt ni vi b so snh duty cycle. Dead time c np vo timer
khi pht hin PWM cnh ln hay cnh xung. Ty vo xung PWM ang cnh ln
hay cnh xung, m 1 khon thi gian chuyn tip c lm tr cho n khi timer
m v zero.

46

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

Thanh ghi DTCON:

47

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)

Bng tm tt cc thanh ghi c lin quan ca POWER CONTROL PWM MODULE :

3.3.2> Analog to digital converter module (A/D):


B A/D c 5 ng vo cho PIC 28 chn v 8 cho cc PIC khc . Tn hiu analog
c ly mu v gi bi t in , sau a vo b chuyn i . B ny to ra 1 kt
qu s tng ng . Gi tr ny l 1 s 10 bit.
B A /D c ng vo so snh p cao v thp ,v c th la chn thng qua kt
hp Vdd , Vss , RA2 hay RA3. B A/D c im c bit l c th hot ng trong khi
vi iu khin trng thi SLEEP . lm c iu ny , xung clock A/D phi c
nhn t b dao ng RC ni ca b A/D.

48

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)


Module A/D c 9 thanh ghi :
+ A/D Result High Register (ADRESH)
+ A/D Result Low Register (ADRESL)
+ A/D Control Register0 (ADCON0)
+ A/D Control Register1 (ADCON1)
+ A/D Control Register2 (ADCON2)
+ A/D Control Register3 (ADCON3)
+ A/D chennel Select Register (ADCHS)
+ Analog I/O Select Register 0 ( ANSEL0)
+ Analog I/O Select Register 1 ( ANSEL1)
S khi b A/D :

49

CHNG 3: GII THIU V PIC Microcontrollers (MCUs)


Cc bc sau lm vic vi b A/D :
1_Thit lp b A/D :
+ Thit lp cc chn analog / so snh p v I/O s ( ADCON1 ) .
+ Chn knh ng vo A/D (ADCONO).
+ Chn xung clock b A/D ( ADCONO).
+ Kch hot A/D ( ADCONO ).
2_Thit lp ngt A/D nu s dng
+ xo bit ADIF.
+ Set bit ADIE.
+ set bit PEIE
+ set bit GIE
3_Ch thi gian p ng cn thit.
4_Bt u chuyn i : set bit ADCONO<2>.
5_Ch chuyn i A/D hon thnh bng cch hi vng bit ADCONO<2> c b
xo cha hay ch ngt A/D
6_c kt qu t cp thanh ghi ADRESH : ADRESL , xo bit ADIF nu cn .
7_Lp li t bc 1 hay 2 nu c yu cu. Thi gian chuyn i A/D mi bit gi
l TAD .
Mt khong ch ti thiu 2TAD c yu cu trc khi ln p ng k tip bt u.

Cc thanh ghi ADRESH : ADRESL cha 10 bit kt qu ca chuyn i A/D .


Khi s chuyn i A/D hon tt , kt qu a vo cp thanh ghi ny , bit ADCON0
<2> b xo v c ngt ADIF c set. Cp thanh ghi ny rng 16 bit . Do nu bit
ADFM =1 :ly 10 bit bean phi v ADFM = 0 th ly 10 bit bn tri , cc bit cn li
bng 0. Nu A/D b v hiu , cc thanh ghi ny c th dng nh 2 thanh ghi a mc
ch

50

CHNG 4 : THIT K PHN CNG

CHNG 4 :
THIT K PHN CNG
4.1> YU CU C BN :
Thit k b bin tn truyn thng ( 6 kha) ba pha iu khin ng c KB 1.5 kW
Thng s tiu biu ca ng c 1.5 kW ( 2 HP) tn s 50 Hz nh sau :
Pm
Vm
Im
cos
RPM

Cc thng s
Cng sut nh mc
in p nh mc
Dng in nh mc
H s cng sut
Vn tc

n v
(KW)
(Vac)
(A)
( vng /pht)

51

ng c u / sao
1.5
380/220
5.9/3.4
0.81
1420

CHNG 4 : THIT K PHN CNG

4.2> S KHI CA H THNG :


B chnh lu
AC
source

B nghch lu

+
VDC
-

Mch li

Cch ly
Tn hiu
xung kch

Bin tr
Nt n

PIC

LEDs
RS 232

Hnh 4.1: S khi ca h thng

52

3 phase
AC motor

CHNG 4 : THIT K PHN CNG

4.3> MCH NG LC :
4.3.1) B chnh lu:
Yu cu:

in p VDC u ra ca b chnh lu:

uur uur uur V


+Trong phng php SVPWM th : VA = VB = VC = DC
3
+ ng c vn hnh ch nh mc ( ) => tr bin
V pha = (380 * 2) / 3
uuuuur
=> VDC 3* V pha 540(V )

+ ng c vn hnh ch nh mc ( ) tr bin
V pha = (220 * 2) / 3
uuuuur
=>VDC 3 * V pha 311(V )

Tr tc thi ca VDC c nn tng i phng


Gn nh , gi thnh r

=> Ta s dng phng php chnh lu cu vi 6 diode ( c th chnh lu 1 pha ,


hay 3 pha )

Tr trung bnh in p u ra khi chnh lu cu 3 pha (khng iu khin):


3 6 *Vpha
VDC =
cos 515 (V) VDC yu cu ( C ch u sao)

+Vpha : tr hiu dng p pha ngun (220 VAC)


+ = 0 : b chnh lu khng iu khin

53

CHNG 4 : THIT K PHN CNG

9 Ghi ch:
Trong iu kin thc t, nu ch c ngun 1 pha thc hin chnh lu th in
p VDC sau chnh lu :

VDC =

2 2 *Vpha

cos 200(V ) => ng c s khng th vn hnh ht nh

mc c hai ch

4.3.2) B nghch lu:

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 transitor nh trc y. V vy cch s dng
loi linh kin ny lm cho vic iu khin tr nn d dng hn.

Thng thng MOSFET c s dng vi cc ng dng i hi tc cao,


tuy nhin MOSFET khng c kh nng chu dng in cao. Trong khi IGBT thch
hp vi cc ng dng tc thp, tuy nhin IGBT c kh nng chu c dng
in cao. V vy tu vo c im ca ng dng m c s la chn linh kin ph
hp.
Cc yu cu chnh t ra cho linh kin s dng lm b nghch lu :

in p VDS ( Mosfet) hay VCE ( IGBT) > VDC

Dng in qua linh kin > dng nh mc ca ng c 10A nhit hot


ng

Chu c tn s ng ngt cao

54

CHNG 4 : THIT K PHN CNG

=> IRFP460P c la chn : tha mn cc yu t trn, c th mua d dng


v gi thnh r !

4.3.3) Mch li ( driver) & cch ly:


a) Mch li :
C hai phng n chnh li MOSFET hay IGBT :
+
Bin p xung
+
IC li
Trong cc phng n c bin p xung, 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 ta nn s dng loi high voltage
bootstrap diver ICs.
Trong : IR2136 l loi IC chuyn dng li MOSFET v IGBT ca hng IR
- International Rectifier. IC ny c 3 knh output c lp (mi knh gm high side and
low side) dng cho cc ng dng 3 pha.

55

CHNG 4 : THIT K PHN CNG

56

CHNG 4 : THIT K PHN CNG

b) mch cch ly:


Cc mch pht ra tnh hiu iu khin mch cng sut dng bn dn phi
c cch ly v in. iu ny c th thc hin bng opto hoc bng bin p xung.

+ Bin p xung :
Gm mt cun dy s cp v c th nhiu cun th cp. Vi nhiu cun dy
pha th cp, ta c th kch ng nhiu transistor mc ni tip hoc song song.
Bin p xung cn c cm khng tn nh v p ng nhanh. Trong 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.

+ Opto :
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.

=> ta la chn phng n dng OPTO. Yu cu t ra i vi opto l phi chu


c tn s ng ngt kh cao (>5KHz) m in p xung ng ra ko b mo dng.
Trong , HCPL-2630 l optocouplers ca hng fairchild c tn s ng ngt ln
tha mn yu cu trn.

57

CHNG 4 : THIT K PHN CNG

58

CHNG 4 : THIT K PHN CNG

4.2> MCH IU KHIN:


4.2.1) S khi mch iu khin:

4.2.2) Cc tn hiu vo ca mch iu khin:


Nt n iu khin ng c:
+
RUN
+
STOP
+
F/R
+
Bin tr iu chnh tc
Nt n iu khin LCD:
+
MODE
+
UP
+
DOWN
+
LEFT
+
RIGHT
+
SELECT
Tn hiu hi tip: (*)
+
Dng in ca ng c
+
in p ng c
+
Tc ng c
+
Nhit ca kha BJT
Tn hiu iu khin t PC
4.2.3) Tn hiu u ra ca mch iu khin:
+
6 xung PWM iu khin b nghch lu
+
Hin th trng thi hot ng ca mch thng qua n LED
+
Hin th cc thng s iu khin bng LCD
+
Xut tn hiu cho PC
Ghi ch: (*) => s pht trin sau

59

CHNG 5: LP TRNH

CHNG 5:
LP TRNH
5.1> GII THUT LP TRNH :
5.1.1) Chng trnh chnh:

60

CHNG 5: LP TRNH

5.1.2) Chng trnh ngt:

Ghi ch: PTIF


+ interrupt flag bit
+ bin ny c set ln 1 khi gi tr PTMR=0 v m ln ( trong ch center
aligned )

61

CHNG 5: LP TRNH

5.2> GII THCH GII THUT :


5.2.1) Chng trnh chnh:
(1) Chng trnh bt u khi cp ngun cho PIC
(2) Xc lp cc thng s ban u :
+
I/O pin
+
A/D module
+
Timer
+
Power Contrl PWM module
+
Interrupts event
(3) X l nt n RUN
(4) Trng thi IDLE: hin th LED bo trng thi idle, ng thi qua li phn (3)
kim tra xem nt RUN c c n hay khng
(5) c gi tr f yu cu t bin tr (mode 1) ; LCD (mode 2) hoc PC (mode 3)
(6) Khi tn s f yu cu thay i: tnh ton cc bin s Vref, stepsize. Hai thng
s ny dng update cc gi tr v ln v bc nhy ca vector Vs khi
chng trnh ngt PWM xy ra. Vref dng tnh ton t s iu bin m =
Vref/Vdc. Stepsize xc nh gc update ca vector Vs
(7) Kim tra xem button no c n ( STOP , F/R) => x l button c
n
+
+
+

STOP button: => set cc duty cycle v zero => qua li v tr (4) : IDLE
F/R button: => gi hm RAM_DOWN gim tc ng c v zero => o chiu
quay vector Vs => gi hm RAM_UP tng tc ng c n tn s t
..

5.2.2) Chng trnh ngt :


(1) Khi c ngt c set ln 1, sao lu trng thi ca vi iu khin
(2) Gc ca vector Vs = gi tr gc ban u + gc update ( bc nhy). ln
ca vector Vs c xc nh trn tn s t (=> t s iu bin m)
(3)

C tng cng 6 sector. Mi sector 60 c chia thnh 512 phn bng


nhau. Khi vector Vs qut ht sector hin ti ( stepsize > 512), chuyn sang Vs
sector mi => (4)

(4) Vs chuyn sang sector mi v reset gi tr stepsize. ( stepsize = stepsize


512 ). Hnh trnh by c th vn ny.

62

CHNG 5: LP TRNH

(5) V (6) reset gi tr ca sector khi Vs qua ht 1 vng.


(7) xc nh thi gian TA, TB, T0/2 v (Ts - T0/2)
(8) Np cc gi tr trn vo thanh ghi PWM duty cycle

63

CHNG 6: KT QU T C

CHNG 6:
KT QU T C
6.1> PHN CNG:
6.1.1> Mch ng lc:

Hnh 6.1: Mch ng lc


+ u im:
Mch ng lc vn hnh n nh ng c 2 HP ( u ; khng ti ) tt c
cc ch iu khin thng thng( RUN, STOP, o chiu, thay i tc
..).
+ Khuyt im:
- Nhit cc kha cng sut kh cao ( 70-80 C)
- Cha c khu hi tip dng ,hi tip tc , hi tip nhit kha cng
sut

64

CHNG 6: KT QU T C
+ Gii php khc phc:
- Nhit cc kha cng sut kh cao => thay th cc kha cng sut bng
loi cht lng tt, p ng tt hn .
- Pht trin thm khu hi tip dng => ngn chn qu dng ng c
- Pht trin khu hi tip tc => iu khin vng kn ng c
- Pht trin khu hi tip nhit ca kha cng sut => ngn chn hin

tng qu nhit

6.1.2> Mch iu khin:

Hnh 6.2: Mch iu khin

u im:
Mch iu khin c kh nng p ng cc yu cu iu khin ng c trong
thc t:
+

Cc buttons iu khin ng c: RUN, STOP, o chiu, bin tr hiu


chnh tc

Cc buttons iu khin LCD: set cc thng s ci t (thi gian tng tc,


gim tc.)

LCD : hin th trng thi hot ng ca ng c

giao tip vi PC: nhn gi tr tc t t PC, hin th trng thi hot


ng ca motor ln my tnh

65

CHNG 6: KT QU T C

6.2> PHN MM GIAO TIP VI NGI S DNG:

]
Hnh 6.3: phn mm iu khin

Hnh 6.4: phn mm iu khin ( lc ng c hot ng)

66

CHNG 6: KT QU T C

6.2.2) M t:
Phn mm iu khin c vit trn ngn ng Visiual Basic 6.0
Phn mm giao tip vi vi x l PIC18F thng qua cng COM ( chun RS232)
Cc nt iu khin:
RUN / SEND: Khi ng ng c / gi tn s yu cu n vi x l
+
STOP: dng ng c
+
CHANGE: o chiu ng c
+
Cc hin th v nhp liu:
f request: nhp liu tn s t bn phm
+
f out: hin th gi tr tn s ng ra
+
V out: hin th dng in p ng ra ( V/f = const)
+
Status: hin th trng thi ng c ( RUNNING , STOP)
+
Direction: hin th chiu quay ca ng c ( thun ; nghch )
+

6.3> DNG SNG IN P NG RA:

Hnh 6.5: in p pha ng ra ( ti R)

67

CHNG 6: KT QU T C

Hnh 6.6: in p pha ng ra ( ti R)

Hnh 6.7: in p dy ng ra ( ti ng c)

6.4> HNG PHT TRIN:


6.4.1) Khc phc nhng khuyt im hin ti:
+ Phn cng: cp ti phn 6.1.1 trang 63
+ Phn mm ( giao tip ngi s dng v PIC18F):
Pht trin thm phn ci t cc thng s ( PID cho u khin vng kn)
+ Phng php iu khin:
iu khin vng kn

68

CHNG 7: TI LIU THAM KHO

CHNG 7:

TI LIU THAM KHO


[1] Ts. Phan Quc Dng ,Truyn ng in
[2] Ts. Nguyn Vn Nh, in t cng sut 1
[3] Jon Buroughs, AN900: Controlling 3 phase induction motors using the
PIC18F4431, Microchip Techology Inc
[4] Rakesh Parekh, AN955:V/f Control of 3 phase induction motor using
space vecter modulation, Microchip Techology Inc
[5] Prof. Ali Keyhani, Pulse-Width Modulation (PWM) Techniques lecture 25,
Department of Electrical and Computer EngineeringThe Ohio State University
[6] PIC18F4431 datasheet
[7] CCSC User Manual
[8] Flex LCD Driver Aministrator of CCS Forum
[9]

69

CHNG 8: PH LC

CHNG 8:

PH LC
8.1> S MCH (V TRN ORCAD):
8.1.1) S mch cch ly
5V_1

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

220

U12
1
2

3
4
R41

220

Vin1+ VCC
Vin1- Vout1
Vin2- Vout2
Vin2+ GND

8
7
6
5

HCPL2631

70

R36

R45

110

110

0.1uF

H1
H2
H3
L1
L2
L3

CHNG 8: PH LC

5V_1

J5

6V_AC

D15

OUT

3
D17
LED

C11
C12
470uF

100uF

C13
10uF

C16
104

4 -

1
2

IN

+ 1

LM7805C
GND

U3

BRIDGE_3A

R1
330

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

IN

OUT

3
D20
LED
C18

C19
470uF

100uF

C20
10uF

C21
104

4 -

1
2

D19

LM7805C

+ 1

GND

U5

BRIDGE_3A

71

R3
330

CHNG 8: PH LC

8.1.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

72

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

CHNG 8: PH LC

8.1.3) S mch nghch lu :

R2
10K

S1

2
Q3

R1
10K

H2

H3

R3
10K

S2

Q5

1
3

Q1

H1

FUSE

F1

VDC

J1

S3
P1
P2
P3

J2
1
2

P1

CON10

R4
10K

Q6

L2

1
R5
10K

COM

VDC
D1

D3

J4
2
1
AC_VOLTAGE

C1
C
D2

D4
COM

73

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

L3

Q2
1
R6
10K

VDC
COM

1
2
3

CHNG 8: PH LC

8.1.4) S mch iu khin :


8.1.4.a) Phn chnh:

VCC

VCC

C_Vcc1

C_Vcc2

104
ZENNER

104

U16_1

3 MCRL

SW_RESET

PORTA_1 MCRL
6 RA0
6 5 RA1
5 4 RA2
4 3 RA3
3 2 RA4
2 1 RA5
1
RUN
FR
STOP

22P

C3

Y2
22P

1
2
3
4
5
6
7
8
9
10

VCC 11
12
OSC1
OSC2

C4

MCRL
VCC
PGD
PGC

Programing conector

R_RESET_SW
1K

CON6N
1
1 2
2 3
3 4
4 5
5 6
6

VCC

OSC1
20MHZ
OSC2

1
2
3
4
5
6
7
8

1 MODE
2 ENTER
3 UP
4 DOWN
5 LEFT
6 RIGHT
7RC6
8RC7

PORTC_1

13
14
15
16
17
18
23
24
25
26

MCRL
RA0/AN0
RA1/AN1
RA2/AN2
RA3/AN3
RA4/AN4
RA5/AN5

RB7/PGD
RB6/PGC
RB5/PWM4
RB4/PWM5
RB3/PWM3
RB2/PWM2
RB1/PWM1
RB0/PWM0

RE0/AN6
RE1/AN7
RE2/AN8

40
39
38
37
36
35
34
33

PWM4
PWM5
PWM3
PWM2
PWM1
PWM0

PGD 8
PGC 7
6
5
4
3
2
1

PORTB_1
8
7
6
5
4
3
2
1

PORTB_PWM
7
PWM5 6
PWM4 5
PWM3 4
PWM2 3
PWM1 2
PWM0 1

PORTB_1
Vdd
Vss

Vdd
Vss
OSC1/RA7
OSC2/RA8
RC0
RC1/CCP2
RC2/CCP1
RC3/INT0
RC4/SDA
RC5/SCK
RD6/TX/CK
RC7/RX/DT

RD7/PWM7
RD6/PWM6
RD5/PWM4
RD4
RD3/SCK
RD2/SDI
RD1/SDO
RD0

32
31

PORTB_PWM

VCC

30
29
28
27
22
21
20
19

PIC18F4431

D7 8
D6 7
D5 6
D4 5
D3 4
D2 3
D1 2
D0 1

PORTD_1
8
7
6
5
4
3
2
1
PORTD_1

SW_DIP
LED8
LED7
LED6
LED5
LED4
LED3
LED2
LED1

D7
D6
D5
D4
D3
D2
D1
D0

SW DIP-8

8.1.4.b) Phn hin th v giao tip my tnh nt n:

74

7
6
5
4
3
2
1

CHNG 8: PH LC

VCC

D2
D1
D0

D7
D6
D5
D4

U18
2

10k

3
2
1

E
R/W
RS

Vee
VCC
GND

6
5
4

14
13
12
11
10
9
8
7
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0

Lam+
Lamp-

16
15

VCC

U17
LCD

16

VCC

C+

1UF

C_C2

T2IN
R2IN

RS3

13

T1IN

T1OUT
GND

14

R1IN
MAX232

R1OUT

10

11

RC6

12

RC7

RS3

RS2

U7
9
8
7
6

COM9NS

15

C_C5
C_cocuc
RS2

C_C4
C_cocuc

T2OUT

C2-

C_cocuc

R2OUT

C2+

C_C3

V+
V-

C1-

4
1UF

VCC

U10
1

C_1

BUTTON

VCC

VCC

R_RUNSW
4k7

C_FRSW

VCC

VCC

R_UPSW
4k7

UP

SW_UP

C_MODESW

STOP

4k7

DOWN

SW_DOWN

75

4k7

SW_STOP

MODE

SW_MODE

VCC

VCC

R_DOWNSW

R_MODESW

104

C_DOWNSW
104

4k7

SW_FR

VCC

R_STOPSW

104

FR

104

C_STOPSW

4k7

SW_RUN

C_UPSW

R_FRSW

104

RUN

VCC

C_LEFTSW

R_LEFTSW
4k7

104

LEFT

SW_LEFT

C_RIGHTSW

R_RIGHTSW
4k7

104

RIGHT

SW_RIGHT

CHNG 8: PH LC

8.2> CHNG TRNH VIT CHO PIC18F4431 :


Chng trnh sau y c vit trn ngn ng CCS
////////////////////////////////////////////////////////////////////////////////////////////////
// MODE 1: R_VAR => dieu khien = RUN , FR, STOP button va` R_VAR
//
MODE 2: AUTO
//
1) nhap gia tri f1 (freq1)
//
2) nhap gia tri f2 (freq2)
//
3) nhap gia tri T ramp_up
//
4) nhap gia tri T ramp_down
//
=>dieu khien = RUN , FR, STOP button va` mode 2 toc do ( thong
button //thay doi toc do= "^" key)
//
MODE 3: PC control
//////////////////////////////////////////////////////////////////////////////////////////////////////
#include<18F4431.h>
//Header file in project manager of MPLAB
#device *=16 adc=8 HIGH_INTS=TRUE
#fuses
HS,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP
#use delay (clock=20000000)
//use delay function
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
#include<flex_LCD.C>

// Other files in project manager of MPLAB

//PTPER*4*sqrt(3)*SIN {data[0] -> data[511] }


int16 const
data[512]={
0,
7,
14, 21, 28, 35, 43, 50, 57, 64,
71, 78, 85, 92, 99, 106, 114, 121, 128, 135,
142, 149, 156, 163, 170, 177, 184, 192, 199, 206,
213, 220, 227, 234, 241, 248, 255, 262, 269, 277,
284, 291, 298, 305, 312, 319, 326, 333, 340, 347,
354, 361, 368, 376, 383, 390, 397, 404, 411, 418,
425, 432, 439, 446, 453, 460, 467, 474, 481, 488,
495, 502, 509, 516, 523, 530, 537, 544, 551, 558,
565, 572, 579, 586, 593, 600, 607, 614, 621, 628,
635, 642, 649, 656, 663, 670, 677, 684, 691, 698,
705, 712, 719, 726, 733, 740, 747, 754, 760, 767,
774, 781, 788, 795, 802, 809, 816, 823, 830, 836,
843, 850, 857, 864, 871, 878, 885, 891, 898, 905,
912, 919, 926, 933, 939, 946, 953, 960, 967, 973,
980, 987, 994, 1001,1007,1014,1021,1028,1035,1041,
1048,1055,1062,1068,1075,1082,1089,1095,1102,1109,
1116,1122,1129,1136,1142,1149,1156,1163,1169,1176,
1183,1189,1196,1203,1209,1216,1223,1229,1236,1242,
1249,1256,1262,1269,1275,1282,1289,1295,1302,1308,
1315,1322,1328,1335,1341,1348,1354,1361,1367,1374,
1380,1387,1393,1400,1406,1413,1419,1426,1432,1439,
1445,1452,1458,1465,1471,1477,1484,1490,1497,1503,
1509,1516,1522,1529,1535,1541,1548,1554,1560,1567,

76

CHNG 8: PH LC

1573,1579,1586,1592,1598,1605,1611,1617,1623,1630,
1636,1642,1648,1655,1661,1667,1673,1680,1686,1692,
1698,1704,1710,1717,1723,1729,1735,1741,1747,1754,
1760,1766,1772,1778,1784,1790,1796,1802,1808,1814,
1820,1826,1832,1839,1845,1851,1857,1863,1868,1874,
1880,1886,1892,1898,1904,1910,1916,1922,1928,1934,
1940,1946,1951,1957,1963,1969,1975,1981,1986,1992,
1998,2004,2010,2015,2021,2027,2033,2038,2044,2050,
2056,2061,2067,2073,2078,2084,2090,2095,2101,2107,
2112,2118,2124,2129,2135,2140,2146,2151,2157,2163,
2168,2174,2179,2185,2190,2196,2201,2207,2212,2218,
2223,2228,2234,2239,2245,2250,2256,2261,2266,2272,
2277,2282,2288,2293,22982304,2309,2314,2320,2325,
2330,2335,2341,2346,2351,2356,2361,2367,2372,2377,
2382,2387,2392,2398,2403,2408,2413,2418,2423,2428,
2433,2438,2443,2448,2453,2458,2463,2468,2473,2478,
2483,2488,2493,2498,2503,2508,2513,2518,2522,2527,
2532,2537,2542,2547,2551,2556,2561,2566,2571,2575,
2580, 2585,2589,2594,2599,2604,2608,2613,2618,2622,
2627,2631,2636,2641,2645,2650,2654,2659,2664,2668,
2673,2677,2682,2686,2691,2695,2699,2704,2708,2713,
2717,2722,2726,2730,2735,2739,2743,2748,2752,2756,
2761,2765,2769,2773,2778,2782,2786,2790,2795,2799,
2803,2807,2811,2815,2820,28242828,2832,2836,2840,
2844,2848,2852,2856,2860,2864,28682872,2876,2880,
2884,2888,2892,2896,2900,2903,2907,2911,2915,2919,
2923,2927,2930,2934,2938,2942,2945,2949,2953,2957,
2960,2964,2968,2971,2975,2978,2982,2986,2989,2993,
2996,3000
};
#define
#define
#define

RUN
FR
STOP

PIN_C0
PIN_E0
PIN_E1

//all BUTTON is active LOW

#define
#define
#define
#define
#define
#define

MENU
OK
UP
DOWN
BACK
NEXT

PIN_E2
PIN_C1
PIN_C2
PIN_C3
PIN_C4
PIN_C5

// back to previous level in MENU

//--------------------------------------------------------caculation varible
float
f_float=0,temp_float=0;
signed long
long

Vs_angle;
//long=int16
update_angle;

long
long

M,Vref,Vdc=311;
TS=2000,TA,TB,Tz;

//TS=PTPER*4

77

CHNG 8: PH LC

unsigned int
int

// Fpwm=5Khz=> PTPER=500;
// real TS is PTPER*0.2uS, when Fosc=20M )
//Tz= T0/2
temp_int=0,sector,adc,count_timer1_interupt;
f,f_req;

int1

first_run_flag,direction_flag;

//-------------------------------------------------------- varible in MODEs


int
mode_select=1;
int
return_2_mode_select;
int
f1,f2;
int
T_ramp_up=10,T_ramp_down=5,T_ramp_up_ms=50,T_ramp_down_ms=25;
//default value
int
eeprom_check;
int1
f_select=0;
//as defaultf_select=0 => f1 ; f_select=1 => f2( use in
mode2)
//--------------------------------------------------------TEMP varible
int32
count=0,interrupt_number=0;
int1

disable_update_freq=0;

//1= active

#INT_PWMTB HIGH //It will generate code to save and restore the machine state,
and will clear the interrupt flag
void PWM_INTERRUPT()
//caculating base on "Vref" and "stepsize"
{
interrupt_number=interrupt_number+1;
TB=data[Vs_angle];
//data=PTPER*4*sqrt(3)*SIN ;
// at 1st RUN: n=0
TA=data[511-Vs_angle];
M=Vref*16/Vdc;
// mutiply 16=> will shift right 4 bit later
TA=TA*M;
TB=TB*M;
TA=(TA>>4)&0x0FFF;
//4TA
TB=(TB>>4)&0x0FFF;
//4TB
Tz=(TS-TA-TB)/2;
//TS=4TS
if(direction_flag==1)
//FORWARD direction//
{
Vs_angle=Vs_angle+update_angle;
if(Vs_angle>511)
{
Vs_angle=Vs_angle-511;
sector=sector+1;
if(sector>6)
//sector (1)->(6)
{
sector=1;
}
}
}

78

CHNG 8: PH LC

else
//REVERSE direction//
{
Vs_angle=Vs_angle-update_angle; //n<0 => overflow to value (2^16)"negative value" if n is unsigned int
if(Vs_angle<0)
{
Vs_angle=Vs_angle+511;
sector=sector-1;
if(sector==0) //sector (1)->(6)
{
sector=6;
}
}
}
switch (sector)
{
case 1:
set_power_pwm0_duty(TS-Tz);
set_power_pwm2_duty(Tz+TB);
set_power_pwm4_duty(Tz);
break;
case 2: set_power_pwm0_duty(TA+Tz);
set_power_pwm2_duty(TS-Tz);
set_power_pwm4_duty(Tz);
break;
case 3: set_power_pwm0_duty(Tz);
set_power_pwm2_duty(TS-Tz);
set_power_pwm4_duty(Tz+TB);
break;
case 4: set_power_pwm0_duty(Tz);
set_power_pwm2_duty(Tz+TA);
set_power_pwm4_duty(TS-Tz);
break;
case 5:
set_power_pwm0_duty(Tz+TB);
set_power_pwm2_duty(Tz);
set_power_pwm4_duty(TS-Tz);
break;
case 6:
set_power_pwm0_duty(TS-Tz);
set_power_pwm2_duty(Tz);
set_power_pwm4_duty(Tz+TA);
break;
}
}
#INT_TIMER1
void READ_AD_RESULT()
//With an internal clock at 20mhz and with the
T1_DIV_BY_8 mode, the timer will increment every 1.6us. It will overflow every
104.8576ms.
{
if(count_timer1_interupt==10) //
1s
{
adc=read_adc();

79

CHNG 8: PH LC

f_req=adc/4;
255 => f_req=1-60 (Hz)}
if(f_req>60)
{f_req=60;}

//required motor speed in Hz {adc=0-

count_timer1_interupt=1;
}
if(disable_update_freq==1)
{count_timer1_interupt=9;}
else
{count_timer1_interupt=count_timer1_interupt+1;}
}
void PORTS_INIT()
//1
{
set_tris_a(0b00000001);
set_tris_b(0b11000000);
set_tris_c(0b11111111);
set_tris_d(0b00000000);

//RA0 as input ( AD converter)


//PWM0=>PWM5 as output
//PWM6,PWM7 as input
//portC as BUTTON input
//portD as output for display led

}
void PWM_MODULE_INIT()
//2
{
setup_power_pwm_pins(PWM_COMPLEMENTARY,PWM_COMPLEMENTAR
Y,PWM_COMPLEMENTARY,PWM_OFF );
//module 0(PWM0,PWM1) = COMPLEMENTARY
//module 1(PWM2,PWM3) = COMPLEMENTARY
//module 2(PWM4,PWM5) = COMPLEMENTARY
//module 3(PWM6,PWM7) = OFF
setup_power_pwm(PWM_CLOCK_DIV_4|PWM_UP_DOWN|PWM_DEAD_CL
OCK_DIV_4,1,0,500,0,1,10);
// 1) mode:PWM_CLOCK_DIV_4; PWM_UP_DOWN;
PWM_DEAD_CLOCK_DIV_4,
// 2) postscale:1
// 3) time_base:=> first value of timebase
// 4) period:chu ky` xung 6 PWM =500 =>200uS
// 5) compare:0
// 6) compare_postscale:1
// 7) dead_time:10 => Tdeatime=10*0.2=2uS
set_power_pwm0_duty(0);
set_power_pwm2_duty(0);
set_power_pwm4_duty(0);
}
void INTERRUPTS_INIT() //3
pressed !

//INT_PWM will be enable after run button is

80

CHNG 8: PH LC

{
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
}
void ADC_INIT()
//4
{
setup_adc_ports(sAN0);
//AN0 as analog INPUT
setup_adc(ADC_CLOCK_DIV_32);
set_adc_channel(0);
delay_us(10);
}
void TIMER_INIT()
//5
{
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
set_timer1(62500);
//All timers count up. When a timer
reaches the maximum value it will flip over to 0 and continue counting (254, 255, 0, 1,
2...)
//62500*1.6 us =0.1s
}
void PARAs_CAL()
{
f_float=f;
temp_float=f_float*3;
Vref=temp_float;
//Vref(Vphase; motor in deltal mode) at f
frequency to maintain V/f=cont=(220*sqrt(2)/sqrt(3))/60=3
temp_float=0.6144*f_float;
update_angle=temp_float;

//0.6144=Tpwm*360*n/60 ; n=512
//stepsize is INTERGER after this line

}
void RAM_DOWN_SPEED()
{
while(f>f_req)
{
f=f-1;
PARAs_CAL();
delay_ms(T_ramp_down_ms);
// 0.05s/Hz
if(f<f_req)
{
f=f_req;
//f=f_req when ram speed finished !
}
switch(mode_select)
{
case 1:
lcd_gotoxy(4,0);
printf(lcd_putc,"%2.0d",f_req);

81

CHNG 8: PH LC

lcd_gotoxy(10,0);
printf(lcd_putc,"%2.0d",f);
break;
case 2:
lcd_gotoxy(10,0);
printf(lcd_putc,"%2.0d",f);
break;
case 3:
fputc(f); //send value of f for PC
lcd_gotoxy(4,0);
printf(lcd_putc,"%2.0d",f_req);
lcd_gotoxy(10,0);
printf(lcd_putc,"%2.0d",f);
break;
}//end switch
}
}
void RAM_UP_SPEED()
{
while(f<f_req)
{
f=f+1;
PARAs_CAL();
delay_ms(T_ramp_up_ms);
// 0.1s/Hz
if(f>f_req)
{
f=f_req;
//f=f_req when ram speed finished !
}
switch(mode_select)
{
case 1:
lcd_gotoxy(4,0);
printf(lcd_putc,"%2.0d",f_req);
lcd_gotoxy(10,0);
printf(lcd_putc,"%2.0d",f);
break;
case 2:
lcd_gotoxy(10,0);
printf(lcd_putc,"%2.0d",f);
break;
case 3:
fputc(f); //send value of f for PC
lcd_gotoxy(4,0);
printf(lcd_putc,"%2.0d",f_req);
lcd_gotoxy(10,0);
printf(lcd_putc,"%2.0d",f);
break;
}//end switch

82

CHNG 8: PH LC

}
}
void defaul_value_in_EEPROM()
//use in MODE2: AUTO ; P18F has 256 bytes
eeprom which address from 0x00 -> 0xFF
{
write_eeprom(0X00,100); //temp_eeprom for checking at 1st reading
write_eeprom(0X10,30); //f1
write_eeprom(0X20,60); //f2
write_eeprom(0X03,6);
//T_ramp_up
write_eeprom(0x04,3);
//T_ramp_down
}
/////////////////////////////////////////////////////////////////////
void MAIN ()
{
PORTS_INIT();
lcd_init();
PWM_MODULE_INIT();
INTERRUPTS_INIT();
ADC_INIT();
TIMER_INIT();

//1
// this subrotine in flex_LCD.C file
//2
//3
//4
//5

MODE_SELECT:
return_2_mode_select=0;
//return_2_mode_select=0 as default
;return_2_mode_select=1 when mode button is pressed
switch (mode_select)
{
case 1:
lcd_gotoxy(1,1);
printf(lcd_putc,"< M1:Read_AD >");
lcd_gotoxy(1,0);
printf(lcd_putc,"
ok");
while( 1)
{
if(!input(OK))
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
goto MODE_R_VAR;
}
if(!input(NEXT))
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
mode_select=2;
goto MODE_SELECT;
}

83

CHNG 8: PH LC

if(!input(BACK))
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
mode_select=3;
goto MODE_SELECT;
}
}
break;
case 2:
lcd_gotoxy(1,1);
printf(lcd_putc,"< M2:Set freq >");
lcd_gotoxy(1,0);
printf(lcd_putc,"
ok");
while( 1)
{
if(!input(OK))
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
goto MODE_AUTO;
}
if(!input(NEXT))
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
mode_select=3;
goto MODE_SELECT;
}
if(!input(BACK))
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
mode_select=1;
goto MODE_SELECT;
}
}
break;
case 3:
lcd_gotoxy(1,1);
printf(lcd_putc,"< M3:COMPUTER >");
lcd_gotoxy(1,0);
printf(lcd_putc,"
ok");
while( 1)
{
if(!input(OK))
{
output_bit(PIN_D3,1);
delay_ms(200);

84

CHNG 8: PH LC

output_bit(PIN_D3,0);
goto MODE_COMPUTER;
}
if(!input(NEXT))
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
mode_select=1;
goto MODE_SELECT;
}
if(!input(BACK))
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
mode_select=2;
goto MODE_SELECT;
}
}
break;
}
//==================================================
//
MODE_R_VAR
//==================================================
MODE_R_VAR:
lcd_gotoxy(1,1);
printf(lcd_putc,"T ramp up :?? s"); //clear screen
lcd_gotoxy(1,0);
printf(lcd_putc,"
");
//clear screen
T_RAMP_UP_MODE1:
while(1)
{
if(!input(OK))
// OK button is pressed?
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
goto NEXT_MODE1;
}
if(!input(UP))
// UP button is pressed?
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
T_ramp_up=T_ramp_up+1;
if(T_ramp_up>20)
{T_ramp_up=5;}
}
if(!input(DOWN))
// DOWN button is
pressed?

85

CHNG 8: PH LC

output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
T_ramp_up=T_ramp_up-1;
if(T_ramp_up<5)
minimum frequency for motor can RUN
{T_ramp_up=20;}
}
lcd_gotoxy(13,1);
printf(lcd_putc,"%2.0d",T_ramp_up);
if(!input(NEXT))
{

//6Hz is

//print new value of f1

// OK button is pressed?
output_bit(PIN_D3,1);
delay_ms(500);
output_bit(PIN_D3,0);

T_ramp_up_ms=T_ramp_up*5;
goto T_RAMP_DOWN_MODE1;
}
if(!input(MENU))
{

output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
goto MODE_SELECT;
//return to MAIN menu (motor is
running => user press stop BUTTON => want to return to main menu)
}
}//end while T ramp up mode1:
T_RAMP_DOWN_MODE1:
lcd_gotoxy(1,0);
printf(lcd_putc,"T ramp down:?? s");
while(1)
{
if(!input(UP))
{

// UP button is pressed?
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
T_ramp_down=T_ramp_down+1;
if(T_ramp_down>20)
{T_ramp_down=5;}

}
if(!input(DOWN))

// DOWN button is

pressed?
{

output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);

86

CHNG 8: PH LC

T_ramp_down=T_ramp_down-1;
if(T_ramp_down<3)
minimum frequency for motor can RUN
{T_ramp_down=20;}
}
lcd_gotoxy(13,0);
printf(lcd_putc,"%2.0d",T_ramp_down);
if(!input(NEXT))
{

//6Hz is

//print new value of f1

// OK button is pressed?
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);

T_ramp_down_ms=T_ramp_down*5;
goto NEXT_MODE1;
}
if(!input(MENU))
{

output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
goto MODE_SELECT;
//return to MAIN menu (motor is
running => user press stop BUTTON => want to return to main menu)
}
}//end while T ramp down mode1:
NEXT_MODE1:
MODE_R_VAR_return_from_stop_button:
lcd_gotoxy(1,1);
printf(lcd_putc,"M1 freq READY "); //clear screen
lcd_gotoxy(1,0);
printf(lcd_putc,"Rv ?? 2 RUN "); // ?? wil be cleard when value update

//----------------- DEFAULT VALUE -----------------------------------------first_run_flag=1;


direction_flag=1;
f=0,f_req=0;
Vs_angle=0;
update_angle=0;
sector=1;

//default value for 1st Vs; direction=1

count_timer1_interupt=10;
// get 1st value of A/D
//-------------------------------------------------------------------------while (1) //MAIN of MODE 1

87

CHNG 8: PH LC

{
lcd_gotoxy(4,0);
printf(lcd_putc,"%2.0d",f_req); //int_timer1 is enable as default to read AD
result =>f_req
if(return_2_mode_select==1)
//return_2_mode_select=0 as default
;return_2_mode_select=1 when mode button is pressed
{
goto MODE_SELECT;
//return to MODE select
}
if(!input(MENU))
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
goto MODE_SELECT;
//return to MAIN menu (motor is
running => user press stop BUTTON => want to return to main menu)
}
//RUN Button is pressed ? ---------------------------------------------------if(!input(RUN))
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
enable_interrupts(INT_PWMTB);//int_PWM must be enable after RUN
button is pressed to prevent HIGH CURRENT ( don't know why it is, just seen it in
testing if int_PWM enable b4 run button is pressed !!!)
lcd_gotoxy(1,1);
printf(lcd_putc,"
");
//clear screen
lcd_gotoxy(1,0);
printf(lcd_putc,"
");
lcd_gotoxy(1,1);
printf(lcd_putc,"M1 freq fo DIR");
//clear screen
lcd_gotoxy(1,0);
printf(lcd_putc,"AD ?? ?? ? ");
// ?? wil be cleard when value update
switch(direction_flag)
{
case 1:

// direction display

lcd_gotoxy(15,0);
printf(lcd_putc,"F");
break;
case 0:
lcd_gotoxy(15,0);
printf(lcd_putc,"R");
break;
}
if(first_run_flag==1) //RAM UP SPEED at 1st RUN
{
RAM_UP_SPEED();

88

CHNG 8: PH LC

first_run_flag=0;

//disable RUN button when motor is

RUNNING
}
}
//end if(!PIN_E0)
//------------------------------------------------END of "RUN Button is pressed ?"
while (first_run_flag==0)
{
RAM_UP_SPEED();
RAM_DOWN_SPEED();
if(!input(FR))//FR Button is pressed ? --------------------------------------------------{

output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
disable_interrupts(INT_TIMER1);

//stop reading A/D

temp_int=f_req;
//save current f_req
f_req=0;
RAM_DOWN_SPEED();
direction_flag=direction_flag+1; //complement
direction_flag=direction_flag+1
switch(direction_flag)
//change direction display
{
case 1:
lcd_gotoxy(15,0);
printf(lcd_putc,"F");
break;
case 0:
lcd_gotoxy(15,0);
printf(lcd_putc,"R");
break;
}
f_req=temp_int;
RAM_UP_SPEED();

//restore f_req

enable_interrupts(INT_TIMER1);
//enable reading A/D
}//------------------------------------------------END of "FR Button is pressed
?"
if(!input(STOP))
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
STOP_MOTOR_MODE1:
button is pressed => stop motor
//disable_interrupts(INT_TIMER1);
disable_update_freq=1;

89

//lable for MODE


//stop reading A/D

CHNG 8: PH LC

f_req=0;
RAM_DOWN_SPEED();
first_run_flag=1;
RUN button is pressed next time

//prepare for RAM_UP if

//enable_interrupts(INT_TIMER1);
disable_update_freq=0;
disable_interrupts(INT_PWMTB);
run button is pressed

//enable reading A/D


// it'll enable later when

goto MODE_R_VAR_return_from_stop_button;

//return to

current mode
}
if(!input(MENU))
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
return_2_mode_select=1;
goto STOP_MOTOR_MODE1;
}
}//end while(first_run=0)
}//while(1)
//==================================================
//
END of MODE R_VAR
//
//==================================================
//==================================================
//
MODE AUTO
//
//==================================================
MODE_AUTO:
lcd_gotoxy(1,1);
printf(lcd_putc,"T ramp up :?? s"); //clear screen
lcd_gotoxy(1,0);
printf(lcd_putc,"
");
//clear screen
T_RAMP_UP_MODE2:
while(1)
{
if(!input(OK))
// OK button is pressed?
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
goto NEXT_MODE2;
}

90

CHNG 8: PH LC

if(!input(UP))
{

// UP button is pressed?
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
T_ramp_up=T_ramp_up+1;
if(T_ramp_up>20)
{T_ramp_up=5;}

}
if(!input(DOWN))

// DOWN button is

pressed?
{

output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
T_ramp_up=T_ramp_up-1;
if(T_ramp_up<5)
minimum frequency for motor can RUN
{T_ramp_up=20;}
}
lcd_gotoxy(13,1);
printf(lcd_putc,"%2.0d",T_ramp_up);
if(!input(NEXT))
{

//6Hz is

//print new value of f1

// OK button is pressed?
output_bit(PIN_D3,1);
delay_ms(500);
output_bit(PIN_D3,0);

T_ramp_up_ms=T_ramp_up*5;
goto T_RAMP_DOWN_MODE3;
}
if(!input(MENU))
{

output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
goto MODE_SELECT;
//return to MAIN menu (motor is
running => user press stop BUTTON => want to return to main menu)
}
}//end while T ramp up mode3:
T_RAMP_DOWN_MODE2:
lcd_gotoxy(1,0);
printf(lcd_putc,"T ramp down:?? s");
while(1)
{
if(!input(UP))
{

// UP button is pressed?
output_bit(PIN_D3,1);
delay_ms(200);

91

CHNG 8: PH LC

output_bit(PIN_D3,0);
T_ramp_down=T_ramp_down+1;
if(T_ramp_down>20)
{T_ramp_down=5;}
}
if(!input(DOWN))

// DOWN button is

pressed?
{

output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
T_ramp_down=T_ramp_down-1;
if(T_ramp_down<3)
minimum frequency for motor can RUN
{T_ramp_down=20;}
}
lcd_gotoxy(13,0);
printf(lcd_putc,"%2.0d",T_ramp_down);
if(!input(NEXT))
{

//6Hz is

//print new value of f1

// OK button is pressed?
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);

T_ramp_down_ms=T_ramp_down*5;
goto NEXT_MODE2 ;
}
if(!input(MENU))
{

output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
goto MODE_SELECT;
//return to MAIN menu (motor is
running => user press stop BUTTON => want to return to main menu)
}
}//end while T ramp down mode2:
NEXT_MODE2:
MODE_AUTO_return_from_stop_button:
if(return_2_mode_select==1)
//return_2_mode_select=0 as default
;return_2_mode_select=1 when mode button is pressed
{
goto MODE_SELECT;
//return to MODE select
}
disable_interrupts(INT_TIMER1);

//disable reading AD from R_VAR

92

CHNG 8: PH LC

lcd_gotoxy(1,1);
printf(lcd_putc,"
lcd_gotoxy(1,0);
printf(lcd_putc,"
lcd_gotoxy(1,1);
printf(lcd_putc,"M2 f1
lcd_gotoxy(1,0);
printf(lcd_putc,"Au ??

");

//clear screen

");
->"); //clear screen
"); // ?? wil be cleard when value update

eeprom_check=read_eeprom(0x00);
if(eeprom_check!=100)
eeprom_check
{
defaul_value_in_EEPROM();
}
f1_select:
//f1=read_eeprom(0x10);
f1=30;
while(1)
{
if(!input(OK))
{

//100 is default set for


//load default value

//read f_req2 value in eeprom

// OK button is pressed?
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);

goto NEXT_MODE2;
}
if(!input(UP))
// UP button is pressed?
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
f1=f1+1;
if(f1>60)
{f1=6;}
}
if(!input(DOWN))
// DOWN button is
pressed?
{

output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);

f1=f1-1;
if(f1<6)
frequency for motor can RUN
{f1=60;}
}

//6Hz is minimum

93

CHNG 8: PH LC

lcd_gotoxy(4,0);
printf(lcd_putc,"%d",f1);
if(!input(NEXT))
{

//print new value of f1

// OK button is pressed?
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);

write_eeprom(0X10,f1);
in eeprom for using when POWER ON next time
goto f2_SLECT;

//save the value of f1

}
if(!input(MENU))
{

output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
goto MODE_SELECT;
//return to MAIN menu (motor is
running => user press stop BUTTON => want to return to main menu)
}
}//end while f1_select:
f2_SLECT:
lcd_gotoxy(1,1);
printf(lcd_putc,"
lcd_gotoxy(1,0);
printf(lcd_putc,"
lcd_gotoxy(1,1);
printf(lcd_putc,"M2 f2
lcd_gotoxy(1,0);
printf(lcd_putc,"Au ??

");

//clear screen

");
"); //clear screen
ok"); // ?? wil be cleard when value update

//f2=read_eeprom(0x20);
f2=60;
while(1)
{
if(!input(UP))
{

//read frep2 value in eeprom

// UP button is pressed?
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);

f2=f2+1;
if(f2>60)
{f2=6;}
}
if(!input(DOWN))

// DOWN button is

pressed?

94

CHNG 8: PH LC

output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);

f2=f2-1;
if(f2<6)
motor can RUN
{f2=60;}
}

//6Hz is minimum frequency for

lcd_gotoxy(4,0);
printf(lcd_putc,"%d",f2);

//print new value of f1

if(!input(OK))
{

// OK button is pressed?
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
write_eeprom(0X20,f2);
goto NEXT_DEFAULT_VALUE_MODE3;
}
if(!input(MENU))
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
goto MODE_SELECT;
//return to MAIN menu (motor is
running => user press stop BUTTON => want to return to main menu)
}
}//end while f2_select:

NEXT_DEFAULT_VALUE_MODE3:
//----------------- DEFAULT VALUE -----------------------------------------first_run_flag=1;
direction_flag=1;
f=0,f_req=0;
Vs_angle=0;
update_angle=0;
sector=1;

//default value for 1st Vs; direction=1

//count_timer1_interupt=10;
=> different from MODE1: we don't need to
interupt timer to get AD result
//-------------------------------------------------------------------------lcd_gotoxy(1,1);
screen IN mode 2 AUTO
printf(lcd_putc,"
lcd_gotoxy(1,0);
printf(lcd_putc,"

// AVAILABLE to RUN
");
");

95

CHNG 8: PH LC

lcd_gotoxy(1,1);
printf(lcd_putc,"M1 f1 f2 READY ");
lcd_gotoxy(1,0);
printf(lcd_putc,"Au ?? ?? 2 RUN "); // ?? wil be cleard when value update
lcd_gotoxy(4,0);
printf(lcd_putc,"%2.0d",f1);
lcd_gotoxy(7,0);
//print value of f1
printf(lcd_putc,"%2.0d",f2);

while (1) //MAIN of MODE 2


{
if(!input(MENU))
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
goto MODE_SELECT;
//return to MAIN menu (motor is
running => user press stop BUTTON => want to return to main menu)
}
//RUN Button is pressed ? ---------------------------------------------------if(!input(RUN))
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
enable_interrupts(INT_PWMTB);//int_PWM must be enable after
RUN button is pressed to prevent HIGH CURRENT ( don't know why it is, just seen it
in testing if int_PWM enable b4 run button is pressed !!!)
lcd_gotoxy(1,1);
printf(lcd_putc,"
");
//clear screen
lcd_gotoxy(1,0);
printf(lcd_putc,"
");
lcd_gotoxy(1,1);
printf(lcd_putc,"M2 f1 f2 fo DIR");
//clear screen
lcd_gotoxy(1,0);
printf(lcd_putc,"Au ?? ?? ?? ? ");
// ?? wil be cleard when value
update
lcd_gotoxy(4,0);
printf(lcd_putc,"%2.0d",f1);

//print value of f1

lcd_gotoxy(7,0);
printf(lcd_putc,"%2.0d",f2);

//print value of f1

switch(direction_flag)
{
case 1:

// direction display
lcd_gotoxy(15,0);

96

CHNG 8: PH LC

printf(lcd_putc,"F");
break;
case 0:
lcd_gotoxy(15,0);
printf(lcd_putc,"R");
break;
}
if(first_run_flag==1) //RAM UP SPEED at 1st RUN
{
f_req=f1;
//as defauflt of MODE2
RAM_UP_SPEED();
first_run_flag=0;
//disable RUN button when motor is
RUNNING
}
}//------------------------------------------------END of "RUN Button is pressed ?"
while (first_run_flag==0)
{
if(!input(FR))//FR Button is pressed ? --------------------------------------------------{

output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
temp_int=f_req;
//save current f_req
f_req=0;
RAM_DOWN_SPEED();
direction_flag=direction_flag+1; //complement
direction_flag=direction_flag+1
switch(direction_flag)
//change direction display
{
case 1:
lcd_gotoxy(15,0);
printf(lcd_putc,"F");
break;
case 0:
lcd_gotoxy(15,0);
printf(lcd_putc,"R");
break;
}
f_req=temp_int;
RAM_UP_SPEED();

//restore f_req

}//------------------------------------------------END of "FR Button is pressed


?"
if(!input(STOP))
{
output_bit(PIN_D3,1);

97

CHNG 8: PH LC

delay_ms(200);
output_bit(PIN_D3,0);
STOP_MOTOR_MODE2:
MODE button is pressed => stop motor
disable_interrupts(INT_TIMER1);
f_req=0;
RAM_DOWN_SPEED();
first_run_flag=1;
RAM_UP if RUN button is pressed next time

//lable for
//stop reading A/D

//prepare for

disable_interrupts(INT_PWMTB);
// it'll enable later
when run button is pressed
enable_interrupts(INT_TIMER1);
//enable reading A/D
goto MODE_AUTO_return_from_stop_button;
//return to current mode
}
if(!input(MENU))
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
return_2_mode_select=1;
goto STOP_MOTOR_MODE2;
}
if(!input(NEXT))
(f1) as muplti speed mode ( mode2)
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
f_select=f_select+1;
f_select
if(f_select==0)
{
f_req=f1;}
else
{ f_req=f2;}

//change freq = f2

//complement bit

RAM_UP_SPEED();
to reach the new request frequency
RAM_DOWN_SPEED();
}
}//end while(first_run=0)
}//while(1)
//==================================================

98

// RAM_SPEED

CHNG 8: PH LC

//
MODE COMPUTER
//==================================================

//

MODE_COMPUTER:
disable_interrupts(INT_TIMER1);
disable_interrupts(INT_PWMTB);

//disable reading AD from R_VAR

lcd_gotoxy(1,1);
printf(lcd_putc,"T ramp up :?? s"); //clear screen
lcd_gotoxy(1,0);
printf(lcd_putc,"
");
//clear screen
T_RAMP_UP_MODE3:
while(1)
{
if(!input(OK))
// OK button is pressed?
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
goto NEXT_MODE3;
}
if(!input(UP))
// UP button is pressed?
{
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
T_ramp_up=T_ramp_up+1;
if(T_ramp_up>20)
{T_ramp_up=5;}
}
if(!input(DOWN))
// DOWN button is
pressed?
{

output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
T_ramp_up=T_ramp_up-1;
if(T_ramp_up<5)
minimum frequency for motor can RUN
{T_ramp_up=20;}
}
lcd_gotoxy(13,1);
printf(lcd_putc,"%2.0d",T_ramp_up);
if(!input(NEXT))
{

//6Hz is

//print new value of f1

// OK button is pressed?
output_bit(PIN_D3,1);
delay_ms(500);
output_bit(PIN_D3,0);

99

CHNG 8: PH LC

T_ramp_up_ms=T_ramp_up*5;
goto T_RAMP_DOWN_MODE3;
}
if(!input(MENU))
{

output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
goto MODE_SELECT;
//return to MAIN menu (motor is
running => user press stop BUTTON => want to return to main menu)
}
}//end while T ramp up mode3:
T_RAMP_DOWN_MODE3:
lcd_gotoxy(1,0);
printf(lcd_putc,"T ramp down:?? s");
while(1)
{
if(!input(UP))
{

// UP button is pressed?
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
T_ramp_down=T_ramp_down+1;
if(T_ramp_down>20)
{T_ramp_down=5;}

}
if(!input(DOWN))

// DOWN button is

pressed?
{

output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
T_ramp_down=T_ramp_down-1;
if(T_ramp_down<3)
minimum frequency for motor can RUN
{T_ramp_down=20;}
}
lcd_gotoxy(13,0);
printf(lcd_putc,"%2.0d",T_ramp_down);
if(!input(NEXT))
{

//6Hz is

//print new value of f1

// OK button is pressed?
output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);

T_ramp_down_ms=T_ramp_down*5;
goto NEXT_MODE3 ;
}

100

CHNG 8: PH LC

if(!input(MENU))
{

output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
goto MODE_SELECT;
//return to MAIN menu (motor is
running => user press stop BUTTON => want to return to main menu)
}
}//end while T ramp down mode3:
NEXT_MODE3:
//----------------- DEFAULT VALUE -----------------------------------------first_run_flag=1;
direction_flag=1;
f=0,f_req=0;
Vs_angle=0;
//default value for 1st Vs; direction=1
update_angle=0;
sector=1;
//-------------------------------------------------------------------------lcd_gotoxy(1,1);
printf(lcd_putc,"M3 freq fo DIR");
lcd_gotoxy(1,0);
printf(lcd_putc,"PC ?? ?? ? ");

//clear screen
// ?? wil be cleard when value update

loop_mode3:
f_req=fgetc();
if(first_run_flag==1)
{
enable_interrupts(INT_PWMTB);
first_run_flag=0;
}
if(f_req==0)
//stop button is pressed
{
RAM_DOWN_SPEED();
first_run_flag=1;
disable_interrupts(INT_PWMTB);
}
if(f_req==70)
//Change direction button is pressed
{
temp_int=f;
//save current f_out =
f_req !!!
f_req=0;
RAM_DOWN_SPEED();

101

CHNG 8: PH LC

direction_flag=direction_flag+1; //complement
direction_flag=direction_flag+1
switch(direction_flag)
{
case 1:

//change direction display

lcd_gotoxy(15,0);
printf(lcd_putc,"F");
break;
case 0:
lcd_gotoxy(15,0);
printf(lcd_putc,"R");
break;
}
f_req=temp_int;
RAM_UP_SPEED();

//restore f_req

}
RAM_UP_SPEED();
RAM_DOWN_SPEED();

//ram up speed at 1st RUN and then .......

goto loop_mode3;
}//main

8.3> CODE PHN MM GIAO TIP NGI S DNG:


Option Explicit
Dim Y
Dim Xx
Dim i
Dim dir_flag

As Double
As Double
As Double
As Integer

'varible in chart drawing

Dim strtemp
Dim strdata
Dim datavu
Dim j

As String 'varible ONCOMM event


As String
As String
As String

Dim intdigvu
Dim digdata

As Integer
As Integer

Private Sub Change_direction_button_Click()


If (dir_flag = 0) Then
Text_direction = "FORWARD"

102

CHNG 8: PH LC

dir_flag = 1
Else
Text_direction = "REVERSE"
dir_flag = 0
End If
MSComm1.Output = Chr(70)
PIC

'send the request 70 as Change_direction_code to

End Sub
Private Sub RUN_SEND_button_Click()
j = txt_f_request.Text
'send the request value of frequency to PIC
If (j > 60) Then
MsgBox ("Frequency must be in range from 0 to 60 Hz")
txt_f_request = ""
txt_f_request.SetFocus
Else
MSComm1.Output = Chr(j)
End If
If (RUN_SEND_button.Caption = "RUN") Then
RUN_SEND_button.Caption = "SEND" 'Change caption of RUN button
RUN_SEND_button.BackColor = &H8000000F
Text_motor_status = "RUNNING"
End If
End Sub
Private Sub STOP_button_Click()
MSComm1.Output = Chr(0)

'send the request value of frequency(=0) to PIC

If (RUN_SEND_button.Caption = "SEND") Then


RUN_SEND_button.Caption = "RUN" 'Change caption
RUN_SEND_button.BackColor = &HFF00&
Text_motor_status = "STOP"
End If
End Sub
Private Sub Form_Load()
dir_flag = 1

103

CHNG 8: PH LC

'Dong Serial Port neu no mo


If frmMain.MSComm1.PortOpen = True Then
frmMain.MSComm1.PortOpen = False
End If
'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
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 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
'.5 seconds
Strip1.VariableDeltaX = 1 / 24 / 60 / 60 / 2 '.5 seconds interval
Strip1.VariableLastX = Xx 'Set LastX to current time
Next
Strip1.XTicMode = 1 'Set X Mode to Date/Time Display
'30 seconds
Strip1.XSpan = 1 / 24 / 60 / 60 * 30 '30 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)

104

CHNG 8: PH LC

digdata = Asc(strdata)
intdigvu = Asc(datavu)
'txtFreg = digdata
'txt_f_out = intdigvu

'xuat du lieu ra o txt upload cua

txt_f_out = digdata
txt_u_out = digdata * 3.66 ' V/f=const
End Select
End With
End Sub

Private Sub Timer1_Timer()


Strip1.AddXY 0, Now, Y
Y = digdata

'data will be printed in chart

End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.Output = Chr(0)
'send stop signal for PIC to stop motor
MSComm1.PortOpen = False
End Sub

'Dong cong

105

You might also like