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 : NGUYN HUNH QUANG


MSSV : 40202088
CBHD : TS. PHAN QUC DNG
B MN : CUNG CP IN

TP H Ch Minh, 01/2007

i
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: 2
GII THIU V NG C KB V PHNG PHP IU KHIN 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: 5
GII THIU V BIN TN NGUN P IU KHIN V/f=const 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: 22
GII THIU V PIC Microcontrollers (MCUs) 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 : 51
THIT K PHN CNG 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

v
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: 60
LP TRNH 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: 64
KT QU T C 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: 69
TI LIU THAM KHO 69
CHNG 8: 70
PH LC 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.

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

3
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

4
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:
f
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:


Em 1
Im = . (2.2)
fm 2L m

+ Vi Lm l in cm mch t ha

Ti tn s lm vic f:
E 1
Im = . (2.3)
a.fm 2L m

5
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:


2 R'
Vm . 2
3 s
M= . (2.5)
b 2

( )
'
R 1 + R 2 + X1 + X '2
2

s

V moment cc i ch nh mc:

2

3 Vm
Mmax = . (2.6)
2.b
(
R 1 R 12 + X1 + X '2 )
2

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.s ;(a < 1)
M= . (2.7)
b R1 R2 2

( )
'
+ + X1 + X '
2

a as 2

V moment cc i tn s f khc nh mc:

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



3 Vm2
Mmax = . , a < 1 (2.8)
2.b R 2
R
(
1 1 + X1 + X '2
a
)
2

a
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

7
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
Vcontrol > Vtri th VAO = (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:

8
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:


UDC
USIN(1) = ma.
2 (2.10)
Trong ma l t s gia bin sng sin mu v bin sng mang cn gi
l t s iu bin.
USINsmp
ma = (2.11)
Ucarry

9
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 Trng thi ca cc in p pha in p dy


in kha
p Q1 Q3 Q5 Van Vbn Vcn Vab Vbc Vca
V0 0 0 0 0 0 0 0 0 0
V1 1 0 0 2/3 -1/3 -1/3 1 0 -1
V2 1 1 0 1/3 1/3 -2/3 0 1 -1
V3 0 1 0 -1/3 2/3 -1/3 -1 1 0
V4 0 1 1 -2/3 1/3 1/3 -1 0 1
V5 0 0 1 -1/3 -1/3 2/3 0 -1 1
V6 1 0 1 1/3 -2/3 1/3 1 -1 0
V7 1 1 1 0 0 0 0 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

Ra
S1 S3 S5
a b c
N
Rb Rc
S0 S2 S4

-VDC/2 -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
r ngt
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 (2.14)
Ts Ts Ts

Ts= TA +TB +T0/7 (2.15)

Ta c t l bin c nh ngha nh sau :


Vs
m= (2.16)
2
Vdc
3
+ 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

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

2
T2 = Ts . m.sin ( ) (2.17)
3
T07 = Ts T1 T2

=> 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

uur uur uur uur Vdc


Hay Vs = VA = VB = VC =
3

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

2
T2 = Ts . m.sin ( )
3
T07 = Ts T1 T2 (2.18)


Trong :
Vs
+ m= l t s iu bin
2
Vdc
3
+ Ts l chu k iu rng xung

+ l gc lch gia VA v VB

19
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:
60
min = () (2.19)
n
2) Ti tn s t f => ( T=1/f):

Vector Vs quay 360 trong thi gian T


Vector Vs quay ? trong thi gian TPWM

TPWM
'= 360
=> T () : gc update ca vector Vs (2.20)

3) Xy dng ' = 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
1 n
=> K = .360. .f
f PWM 60

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

1 512
=> K = .360. .f
5000 60
=> K = 0.6144 f = step size (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


(2.22)

21
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 :

Cc thng s n v ng c u / sao
Pm Cng sut nh mc (KW) 1.5
Vm in p nh mc (Vac) 380/220
Im Dng in nh mc (A) 5.9/3.4
cos H s cng sut 0.81
RPM Vn tc ( vng /pht) 1420

51
CHNG 4 : THIT K PHN CNG

4.2> S KHI CA H THNG :

B chnh lu B nghch lu 3 phase


AC AC motor
source +

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
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 :

2 2 *Vpha
VDC = 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

R35 R42 + C7
H1
110 110 0.1uF H2
J8 R33 220 U10 H3
1 1 8 L1
2 Vin1+ VCC L2
3 2 7 L3
4
0 Vin1- Vout1
5 3 6
6 Vin2- Vout2
7 4 5
Vin2+ GND
R34 220 HCPL2631
0
5V_1

5V_2

+ C8
R43 R44
0.1uF
R37 220 U11 110 110
1 8
Vin1+ VCC
2 7
0 Vin1- Vout1
3 6
Vin2- Vout2
4 5
Vin2+ GND
R38 220 HCPL2631

5V_1

5V_2

+ C9

0.1uF
R36 R45
R40 220 U12
1 8 110 110
Vin1+ VCC
2 7
0 Vin1- Vout1
3 6
Vin2- Vout2
4 5
Vin2+ GND
R41 220 HCPL2631

70
CHNG 8: PH LC

5V_1

U3 LM7805C
1 3

GND
IN OUT
D15 D17

+ 1
LED

2
J5
C11
1 2 3
2 C12 100uF C13 C16
470uF 10uF
104 R1
6V_AC 4 -
BRIDGE_3A 330

15V

U4 LM7815C

1 3

GND
IN OUT
D16 D18
+ 1

LED

2
J6
C10
1 2 3 C14 C15 C17
2 470uF 100uF 10uF 104

R2
4 -

12V_AC BRIDGE_3A 1k

5V_2

U5 LM7805C
1 3
GND

IN OUT
D19 D20
+ 1

LED
2

J7
C18
1 2 3
2 C19 100uF C20 C21
470uF 10uF
104 R3
4 -

6V_AC BRIDGE_3A 330

71
CHNG 8: PH LC

8.1.2 S mch li:


15V
J1
D3 DIODE XUNG OUTPUTS
HO1 1
VS1 2
D2 DIODE XUNG HO2 3
VS2 4
HO3 5
D1 DIODE XUNG VS3 6
LO1 7
LO2 8
LO3 9
COM 10
1 28
H1 R26 100 2 VCC VB1 R20
H2 R27 100 3 HIN1 U1 27 + C1 HO1
H3 R28 100 4 HIN2 HO1 1uF
HIN3 100 VS1
26
L1 R29 100 5 VS1
L2 R30 100 6 LIN1
L3 R31 100 7 LIN2 24
LIN3 VB2 R21
FAULT 8 23 + C2 HO2
ENABLE 10 FAULT HO2 1uF
EN 100 VS2
22
VS2

20
15V VB3 R22
19 + C3 HO3
HO3 1uF
100 VS3
15V + C6 18
VS3
10uF
25
17 25
R32 21 17 16 R23 100 LO1
21 LO1
100
15 R24 100 LO2
11 LO2
RCIN 14 R25 100 LO3
ITRIP 9 LO3
+ C4 ITRIP
.1uF 12 13 COM
VSS COM
C5
ITRIP
+
10uF
IR2136
15V 12V
RVAR1 J3
CONTROL
1 ENABLE RVAR2
PR 1R 5W 2 FAULT ENABLE
COM 3 ITRIP
4
5

72
CHNG 8: PH LC

8.1.3) S mch nghch lu :

F1
VDC

FUSE

2
Q1 Q3 Q5
H1 1 H2 1 H3 1

3
R1 R2 R3
10K 10K 10K
J1
S1 S2 S3
J2 P1 1
P2 2
VDC 1 P3 3
COM 2
P1
MOTOR
J3CON2 P2

H1 1 P3
S1 2
H2 3
S2 4
H3 5
S3 6
L1 7
L2 8
L3 9
2

2
COM 10
Q4 Q6 Q2
L1 1 L2 1 L3 1
CON10
3

3
R4 R5 R6
10K 10K 10K

COM

VDC

D1 D3

J4
2
1 C1
C

AC_VOLTAGE
D2 D4

COM

73
CHNG 8: PH LC

8.1.4) S mch iu khin :

8.1.4.a) Phn chnh:

CON6N
VCC 1 MCRL
VCC VCC 1 2
2 3 VCC
3 4 PGD
C_Vcc1 C_Vcc2 4 5 PGC
104 5 6
104 6
ZENNER U16_1 Programing conector

PORTB_1 PORTB_PWM
PORTA_1 MCRL 1 40 PGD 8
MCRL RB7/PGD 8 7
R_RESET_SW 6 RA0 2 39 PGC 7 PWM5 6 7
6 5 RA1 3 RA0/AN0 RB6/PGC 38 PWM4 6 7 6
5 4 RA2 RA1/AN1 RB5/PWM4 6 PWM4 5
1K 4 37 PWM5 5 PWM3 4 5
3 MCRL 4 3 RA3 5 RA2/AN2 RB4/PWM5 36 PWM3 4 5 4
3 2 RA4 RA3/AN3 RB3/PWM3 4 PWM2 3
6 35 PWM2 3 PWM1 2 3
2 1 RA5 7 RA4/AN4 RB2/PWM2 34 PWM1 2 3 2
1 RA5/AN5 RB1/PWM1 2 PWM0 1
33 PWM0 1 1
SW_RESET RUN 8 RB0/PWM0 1
FR 9 RE0/AN6 PORTB_1
RE1/AN7 PORTB_PWM
STOP 10 VCC
RE2/AN8 32
1 VCC 11 Vdd 31
12 Vdd Vss
Vss
OSC1 13 PORTD_1
OSC2 14 OSC1/RA7 30 D7 8
OSC2/RA8 RD7/PWM7 29 D6 7 8
1 MODE 15 RD6/PWM6 28 D5 6 7
1 2 ENTER 16 RC0 RD5/PWM4 27 D4 5 6
2 3 UP 17 RC1/CCP2 RD4 22 D3 4 5
3 4 DOWN 18 RC2/CCP1 RD3/SCK 21 D2 3 4
C4 22P OSC1 4 5 LEFT 23 RC3/INT0 RD2/SDI 20 D1 2 3
5 6 RIGHT 24 RC4/SDA RD1/SDO 19 D0 1 2
6 7RC6 25 RC5/SCK RD0 1
Y2 20MHZ 7 RD6/TX/CK
8RC7 26
C3 22P OSC2 8 RC7/RX/DT PORTD_1
PORTC_1 PIC18F4431 SW_DIP
D7 LED8
D6 LED7
D5 LED6
D4 LED5
D3 LED4
D2 LED3
D1 LED2
D0 LED1

SW DIP-8

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

74
CHNG 8: PH LC

VCC

3
U18

D7
D6
D5
D4
2

D2
D1
D0
10k
VCC

1
16
15

14
13
12
11
10
9
8
7

6
5
4

3
2
1
Lam+

DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0

Vee
E

RS
Lamp-

VCC
GND
R/W
U17

LCD

VCC

16
U10
C_C3

VCC
1 2
C_1 C+ V+ C_cocuc C_C4
6 C_cocuc
1UF 3 V-
C1- 9
4 R2OUT
C2+ 7
1UF C_C2 5 T2OUT
U7
C2- 10 5
T2IN 9
8 4
C_C5 R2IN 8
C_cocuc RS3 3
RS2 14 11 RC6 7
T1OUT T1IN RS2 2
6
RS3 13 12 RC7 1
GND

R1IN R1OUT
COM9NS
MAX232
15

BUTTON

VCC VCC VCC VCC

R_RUNSW C_FRSW R_FRSW C_STOPSW R_STOPSW C_MODESW R_MODESW


4k7 104 4k7 104 4k7 104 4k7

RUN 3 FR 3 STOP MODE


3 3

SW_RUN SW_FR SW_STOP SW_MODE

1 1 1 1

VCC VCC VCC


VCC

C_UPSW R_UPSW C_DOWNSW 4k7 C_RIGHTSW R_RIGHTSW


C_LEFTSW R_LEFTSW
104 4k7 R_DOWNSW 104 4k7
104 104 4k7

3 UP DOWN RIGHT
3 3 LEFT 3

SW_UP SW_DOWN SW_RIGHT


SW_LEFT

1 1 1
1

75
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 RUN PIN_C0 //all BUTTON is active LOW


#define FR PIN_E0
#define STOP PIN_E1

#define MENU PIN_E2 // back to previous level in MENU


#define OK PIN_C1
#define UP PIN_C2
#define DOWN PIN_C3
#define BACK PIN_C4
#define NEXT PIN_C5

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

signed long Vs_angle; //long=int16


long update_angle;

long M,Vref,Vdc=311;
long TS=2000,TA,TB,Tz; //TS=PTPER*4

77
CHNG 8: PH LC

// Fpwm=5Khz=> PTPER=500;
// real TS is PTPER*0.2uS, when Fosc=20M )
//Tz= T0/2
unsigned int temp_int=0,sector,adc,count_timer1_interupt;
int 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; //required motor speed in Hz {adc=0-


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

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); //RA0 as input ( AD converter)
set_tris_b(0b11000000); //PWM0=>PWM5 as output
//PWM6,PWM7 as input
set_tris_c(0b11111111); //portC as BUTTON input
set_tris_d(0b00000000); //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 //INT_PWM will be enable after run button is


pressed !

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; //0.6144=Tpwm*360*n/60 ; n=512


update_angle=temp_float; //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(); //1
lcd_init(); // this subrotine in flex_LCD.C file
PWM_MODULE_INIT(); //2
INTERRUPTS_INIT(); //3
ADC_INIT(); //4
TIMER_INIT(); //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) //6Hz is
minimum frequency for motor can RUN
{T_ramp_up=20;}
}

lcd_gotoxy(13,1); //print new value of f1


printf(lcd_putc,"%2.0d",T_ramp_up);

if(!input(NEXT)) // 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) //6Hz is
minimum frequency for motor can RUN
{T_ramp_down=20;}
}

lcd_gotoxy(13,0); //print new value of f1


printf(lcd_putc,"%2.0d",T_ramp_down);

if(!input(NEXT)) // 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; //default value for 1st Vs; direction=1
update_angle=0;
sector=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) // direction display


{ case 1:
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; //restore f_req


RAM_UP_SPEED();

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: //lable for MODE
button is pressed => stop motor
//disable_interrupts(INT_TIMER1); //stop reading A/D
disable_update_freq=1;

89
CHNG 8: PH LC

f_req=0;
RAM_DOWN_SPEED();

first_run_flag=1; //prepare for RAM_UP if


RUN button is pressed next time

//enable_interrupts(INT_TIMER1); //enable reading A/D


disable_update_freq=0;
disable_interrupts(INT_PWMTB); // it'll enable later when
run button is pressed

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) //6Hz is
minimum frequency for motor can RUN
{T_ramp_up=20;}
}

lcd_gotoxy(13,1); //print new value of f1


printf(lcd_putc,"%2.0d",T_ramp_up);

if(!input(NEXT)) // 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) //6Hz is
minimum frequency for motor can RUN
{T_ramp_down=20;}
}

lcd_gotoxy(13,0); //print new value of f1


printf(lcd_putc,"%2.0d",T_ramp_down);

if(!input(NEXT)) // 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," "); //clear screen
lcd_gotoxy(1,0);
printf(lcd_putc," ");
lcd_gotoxy(1,1);
printf(lcd_putc,"M2 f1 ->"); //clear screen
lcd_gotoxy(1,0);
printf(lcd_putc,"Au ?? "); // ?? wil be cleard when value update

eeprom_check=read_eeprom(0x00);
if(eeprom_check!=100) //100 is default set for
eeprom_check
{ defaul_value_in_EEPROM(); //load default value
}

f1_select:
//f1=read_eeprom(0x10); //read f_req2 value in eeprom
f1=30;

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;
}
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) //6Hz is minimum
frequency for motor can RUN
{f1=60;}
}

93
CHNG 8: PH LC

lcd_gotoxy(4,0); //print new value of f1


printf(lcd_putc,"%d",f1);

if(!input(NEXT)) // OK button is pressed?


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

write_eeprom(0X10,f1); //save the value of f1


in eeprom for using when POWER ON next time
goto f2_SLECT;

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," "); //clear screen
lcd_gotoxy(1,0);
printf(lcd_putc," ");
lcd_gotoxy(1,1);
printf(lcd_putc,"M2 f2 "); //clear screen
lcd_gotoxy(1,0);
printf(lcd_putc,"Au ?? ok"); // ?? wil be cleard when value update

//f2=read_eeprom(0x20); //read frep2 value in eeprom


f2=60;

while(1)
{
if(!input(UP)) // 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) //6Hz is minimum frequency for
motor can RUN
{f2=60;}
}

lcd_gotoxy(4,0); //print new value of f1


printf(lcd_putc,"%d",f2);

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; //default value for 1st Vs; direction=1
update_angle=0;
sector=1;

//count_timer1_interupt=10; => different from MODE1: we don't need to


interupt timer to get AD result
//--------------------------------------------------------------------------

lcd_gotoxy(1,1); // AVAILABLE to RUN


screen IN mode 2 AUTO
printf(lcd_putc," ");
lcd_gotoxy(1,0);
printf(lcd_putc," ");

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); //print value of f1


printf(lcd_putc,"%2.0d",f1);

lcd_gotoxy(7,0); //print value of f1


printf(lcd_putc,"%2.0d",f2);

switch(direction_flag) // direction display


{ case 1:
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; //restore f_req


RAM_UP_SPEED();

}//------------------------------------------------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: //lable for
MODE button is pressed => stop motor
disable_interrupts(INT_TIMER1); //stop reading A/D
f_req=0;
RAM_DOWN_SPEED();

first_run_flag=1; //prepare for


RAM_UP if RUN button is pressed next time

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)) //change freq = f2


(f1) as muplti speed mode ( mode2)
{ output_bit(PIN_D3,1);
delay_ms(200);
output_bit(PIN_D3,0);
f_select=f_select+1; //complement bit
f_select
if(f_select==0)
{ f_req=f1;}
else
{ f_req=f2;}

RAM_UP_SPEED(); // RAM_SPEED
to reach the new request frequency
RAM_DOWN_SPEED();

}
}//end while(first_run=0)

}//while(1)
//==================================================

98
CHNG 8: PH LC

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

MODE_COMPUTER:

disable_interrupts(INT_TIMER1); //disable reading AD from R_VAR


disable_interrupts(INT_PWMTB);

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) //6Hz is
minimum frequency for motor can RUN
{T_ramp_up=20;}
}

lcd_gotoxy(13,1); //print new value of f1


printf(lcd_putc,"%2.0d",T_ramp_up);

if(!input(NEXT)) // 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) //6Hz is
minimum frequency for motor can RUN
{T_ramp_down=20;}
}

lcd_gotoxy(13,0); //print new value of f1


printf(lcd_putc,"%2.0d",T_ramp_down);

if(!input(NEXT)) // 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"); //clear screen
lcd_gotoxy(1,0);
printf(lcd_putc,"PC ?? ?? ? "); // ?? 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) //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; //restore f_req
RAM_UP_SPEED();

RAM_UP_SPEED(); //ram up speed at 1st RUN and then .......


RAM_DOWN_SPEED();

goto loop_mode3;

}//main

8.3> CODE PHN MM GIAO TIP NGI S DNG:

Option Explicit

Dim Y As Double 'varible in chart drawing


Dim Xx As Double
Dim i As Double
Dim dir_flag As Integer

Dim strtemp As String 'varible ONCOMM event


Dim strdata As String
Dim datavu As String
Dim j As String

Dim intdigvu As Integer


Dim digdata 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) 'send the request 70 as Change_direction_code to


PIC

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 'Dong cong


End Sub

105

You might also like