ค
Thesis Title DSP-BasedMaximum Power Point Tracking for Grid Connected
Inverter
Thesis Credits 12
Candidate Mr. Sinchai Sae-tang
Thesis Advisor Dr. Cherdchai Prapanavarat
Program Master of Engineering
Field of Study Electrical Engineering
Department Electrical Engineering
Faculty Engineering
B.E. 2546
Abstract
This thesis proposes an algorithm that converts dc current from PV cells to ac current
which will be injected to a grid. Due to the nonlinear characteristic of PV cells, the
system must include an algorithm to track the maximum power point (MPP) at any
atmospheric conditions. The algorithm used in this thesis is the incremental
conductance method. The output of the MPPT controller is used to control the duty
cycle of a boost converter so that maximum power is obtained from the PV cells at all
times. The sinusoidal output current which is in-phase with the grid voltage is
synthesized by a hysteresis control which generates the controlling signal for inverter
switches. The controller compares the reference sinusoidal signal with the actual current
which is injected to the grid. The reference sinusoidal signal is the product of the signal
which corresponds with the maximum power available from the PV cells at that time
and the sinusoidal voltage synthesized from the mains. The system is controlled by an
ADMC331 DSP chip. The experimental results show that the maximum power point of
PV cells was closely tracked under slow and fast changing of solar radiation. The
generated sinusoidal current is in-phase with the grid voltage. The efficiency of the
maximum power point tracking circuit is 99.26 percent on average and the total
efficiency of the system is 84.45 percent.
Keywords : PV Cell / Maximum Power Point Tracking / Grid Connected System
ฑ
ประมวลศัพทและคํายอ
ADC = analogto digital converter
ALU = arithmetic and logic unit
DSP = digital signal processor
MAC = multiplier/accumulator
PIO = digital I/O port pin
PWM = pulse width modulation
RAM = random access memory
ROM = read only memory
SPORT = serial port
6
3. ซิลิกอนแบบอะมอรฟส (AmorphousSi cells) จะมีประสิทธิภาพ 8-13 เปอรเซ็นต และสามารถ
ตอบสนองตอแสงไดดีในชวงความยาวคลื่นสั้นของแสงอาทิตย
รูปที่ 2.2 วงจรสมมูลของเซลลแสงอาทิตย
รูปที่ 2.3 กราฟคุณลักษณะของเซลลแสงอาทิตย
จากโครงสรางของเซลลแสงอาทิตยสามารถนํามาเขียนเปนวงจรสมมูลในรูปของแหลงจายกระแสตอ
ขนานกับไดโอด และไดกราฟคุณลักษณะของเซลลแสงอาทิตยดังรูปที่ 2.2 และ 2.3 จากกราฟกระแส-
แรงดันจะพบวามีจุดที่สําคัญ 2 จุดคือแรงดันขณะเปดวงจร (VOC) และกระแสลัดวงจร (ISC) โดยขณะที่
เกิดการลัดวงจรของเซลลแสงอาทิตยกระแสที่สรางขึ้นไดจะไหลผานวงจรภายนอก สวนขณะเปด
วงจรของเซลลแสงอาทิตยกระแสที่สรางขึ้นไดจะไหลผานไดโอดที่ตอขนานภายในเซลล จากวงจร
สมมูลสามารถเขียนสมการความสัมพันธของกระแสและแรงดันอยางงายเมื่อละคาความตานทาน
ขนาน (Rsh) และคาความตานทานอนุกรม (Rs) ไดดังสมการ (2.1), (2.2) และ (2.3) [3]
( )⎡ ⎤= − −
⎢ ⎥⎣ ⎦
P Ph P r
S
qV
I N I N I exp 1AKTN (2.1)
( )⎡ ⎤⎡ ⎤= −
⎢ ⎥⎢ ⎥⎣ ⎦ ⎣ ⎦
3
G
r rr
r r
qET 1 1I I expT kA T T (2.2)
( )⎡ ⎤= + −⎣ ⎦Ph SCR i r
SI I k T T 100 (2.3)
จากสมการ (2.1), (2.2), (2.3) และวงจรสมมูลในรูปที่ 2.2 พบวาคุณลักษณะของเซลลแสงอาทิตยจะ
ขึ้นอยูกับการเปลี่ยนแปลงของอุณหภูมิ ปริมาณแสงที่ตกกระทบบนเซลลแสงอาทิตย และโหลดที่ตอ
Rs
Rsh RoIPh V
+
-
I
ISC
IMAX
I/P
VMAX
PMAX
VOC
V
10
กําลังไฟฟามากกวาจุดที่ 2 แตนอยกวาจุดที่5 ซึ่งเปนจุดที่ใหกําลังไฟฟาสูงสุดของปริมาณ S3 ระบบก็
จะปรับเพิ่มแรงดันขึ้นอีกทําใหจุดการทํางานเบี่ยงเบนไปจากจุดจายกําลังสูงสุดทําใหไมสามารถดึง
กําลังสูงสุดมาใชได สวนการที่ระบบจะสามารถกลับมาหาจุดจายกําลังสูงสุดไดอยางถูกตองอีกครั้งจะ
เกิดขึ้นก็ตอเมื่อปริมาณแสงมีการเปลี่ยนแปลงชาลง หรือเขาสูสภาวะคงตัว
2.2.3 วิธีเพิ่มคาความนํา (Incremental Conductance: IncCond) [3]
จากกราฟกําลังไฟฟา-แรงดันของเซลลแสงอาทิตยในรูปที่ 2.8 จะไดความสัมพันธของอัตราการ
เปลี่ยนแปลงกําลังไฟฟาตออัตราการเปลี่ยนแปลงแรงดันเปน
รูปที่ 2.8 กราฟกําลังไฟฟา-แรงดันของเซลลแสงอาทิตย
- ถา >dP 0dV แสดงวาจุดทํางานอยูทางดานซายของจุดจายกําลังสูงสุด
- ถา =dP 0dV แสดงวาจุดทํางานอยูที่จุดจายกําลังสูงสุด
- ถา <dP 0dV แสดงวาจุดทํางานอยูทางดานขวาของจุดจายกําลังสูงสุด
ดังนั้นถาเราจัด dP
dV ใหมใหอยูในรูปของกระแส และแรงดันจะไดสมการเปน
( )
=
d VIdP
dV dV
= +dP dV dII VdV dV dV
= +dP dII VdV dV (2.5)
ดังนั้นที่จุดจายกําลังสูงสุดจะไดคาเปน
+ =dII 0V dV (2.6)
P
VMAX
PMAX
Voc
V
dP
dV
dP
0
dV
>
dP
0
dV
<
26.
11
โดย I
V คือคาความนําของเซลลแสงอาทิตยและ dI
dV คือคาอัตราการเปลี่ยนแปลงความนํา ซึ่งถา
ผลรวมของสมการ (2.6) มีคาเปนบวกแสดงวาระบบกําลังทํางานทางดานซายของจุดจายกําลังสูงสุด
ตัวระบบก็จะปรับคาแรงดันเพิ่มขึ้น แตถาผลรวมมีคาเปนลบแสดงวาระบบทํางานอยูทางดานขวาของ
จุดจายกําลังสูงสุดระบบก็จะปรับลดคาแรงดันลง และถาผลรวมมีคาเทากับศูนยแสดงวาระบบทํางาน
ที่จุดจายกําลังสูงสุดระบบก็จะคงแรงดันเดิมนั้นไว
วิธีนี้จะสามารถหาจุดจายกําลังสูงสุดไดแมจะเกิดการเปลี่ยนแปลงปริมาณแสงอยางรวดเร็ว แตก็มี
ขั้นตอนการคํานวณเพิ่มขึ้น
2.2.4 การหาจุดจายกําลังสูงสุดดวยหลักการของระลอกคลื่น (A Ripple-Based Maximum
Power Point Tracking) [4]
จากคุณลักษณะของระบบเชื่อมตอกริดเฟสเดียวดังรูปที่ 2.9 จะทําใหกําลังไฟฟาทางดานไฟสลับมี
ความถี่เปน 2 เทาของความถี่ระบบกริดทําใหเกิดระลอกคลื่นบนแรงดัน และกําลังไฟฟาทางดาน
ไฟตรงจากระลอกคลื่นของทั้ง 2 สัญญาณสามารถนําไปใชหาจุดจายกําลังสูงสุดของเซลลแสงอาทิตย
ไดโดยสัญญาณที่เกิดขึ้นแสดงดังรูปที่ 2.10
รูปที่ 2.9 ระบบเชื่อมตอกริดแบบเฟสเดียว
ในการวิเคราะหการหาจุดจายกําลังสูงสุดดวยระลอกคลื่นแรงดันและกําลังไฟฟาจะพิจารณาเปน
คาบเวลา รูปที่ 2.11 จะแสดงพื้นที่การทํางานของเซลลแสงอาทิตยจะแบงเปนพื้นที่สวน A, B และ C
โดยพื้นที่สวน A จะมีแรงดันต่ํากวาแรงดันที่จุดจายกําลังสูงสุด พื้นที่สวน B จะมีแรงดันใกลกับ
แรงดันที่จุดจายกําลังสูงสุด และพื้นที่สวน C จะมีแรงดันสูงกวาแรงดันที่จุดจายกําลังสูงสุด และเมื่อ
จําลองการทํางานของเซลลแสงอาทิตยใหทํางานจากพื้นที่ C ไปยังพื้นที่ A (ที่เวลา 0 วินาที ถึง 0.6
วินาที) จะไดสัญญาณดังรูปที่ 2.12 ซึ่งพบวา
- ในพื้นที่สวน A ระลอกคลื่นของแรงดัน และกําลังไฟฟามีคาสูงสุดหรือต่ําสุดที่เวลาเดียวกัน
- ในพื้นที่สวน B จะมีระลอกคลื่นกําลังไฟฟาต่ํา และมีความถี่เพิ่มขึ้น
GridS1 S3
S4S2
L
Power
Transformer
PV
Cell VPV
IPV
IL
27.
12
- ในพื้นที่สวน Cที่เวลาเดียวกันระลอกคลื่นของแรงดันจะมีคาสูงสุด (ต่ําสุด) ในขณะที่
ระลอกคลื่นของกําลังไฟฟาจะมีคาต่ําสุด (สูงสุด)
- ระลอกคลื่นของกําลังไฟฟาจะมีคามากขึ้นเมื่อจุดทํางานเคลื่อนที่ออกจากจุดจายกําลังสูงสุด
รูปที่ 2.10 รูปคลื่นสัญญาณที่เกิดขึ้นในระบบเชื่อมตอกริด [4]
รูปที่ 2.11 ยานการทํางานของเซลลแสงอาทิตย [4]
ก) กระแสที่จายเขาระบบกริด
ข) กระแสที่จายจากเซลลแสงอาทิตย และแรงดันตกครอมตัวเก็บ
t (mS)
t (mS)
t (mS)
ค) กําลังไฟฟาที่ไดจากเซลล
t (mS)
28.
13
รูปที่ 2.12 แรงดันตกครอมตัวเก็บประจุและกําลังไฟฟาที่ไดจากเซลลแสงอาทิตย [4]
จากลักษณะดังกลาวสามารถที่จะนําไปใชปรับจุดทํางานใหเขาใกลจุดจายกําลังสูงสุดโดยการเพิ่มหรือ
ลดคาแรงดันอางอิง (Vref) ดวยแรงดันคานอยๆ ซึ่งคาอัตราการเปลี่ยนแปลงแรงดันจะเปนตัว
ตรวจสอบเสนทางของจุดทํางานวาวิ่งเขาหรือวิ่งออกจากจุดจายกําลังสูงสุด สวนคาอัตราการ
เปลี่ยนแปลงกําลังไฟฟาจะเปนตัวบอกพื้นที่ของจุดทํางานวาอยูในพื้นที่สวนใด (A, B หรือ C) จากรูป
ที่ 2.12 เมื่อเปรียบเทียบคา P1n และ P2n พบวา P1n มีคามากกวา P2n แสดงวาจุดทํางานอยูในพื้นที่ A และ
เมื่อเปรียบเทียบคา V2O และ V2n พบวา V2O มีคามากกวา V2n แสดงวาเสนทางการเดินของจุดทํางานวิ่ง
ไปทางซายของกราฟกําลังไฟฟา-แรงดันของเซลลแสงอาทิตย สรุปไดวาขณะนี้จุดทํางานอยูในพื้นที่
A และกําลังวิ่งออกจากจุดจายกําลังสูงสุด ดังนั้นจะตองเพิ่มคาแรงดันอางอิงเพื่อไปควบคุมใหจุด
ทํางานวิ่งเขาหาจุดจายกําลังสูงสุด โดยคาตัวแปรตางๆคือ (ดูรูปที่ 2.10 ประกอบ)
P1n คือ คากําลังไฟฟาที่ไดในชวงที่ระลอกคลื่นแรงดันมีคาสูงสุดที่คาบเวลาปจจุบัน
P2n คือ คากําลังไฟฟาที่ไดในชวงที่ระลอกคลื่นแรงดันมีคาต่ําสุดที่คาบเวลาปจจุบัน
V2O คือ คาระลอกคลื่นแรงดันต่ําสุดที่คาบเวลากอน
V2n คือ คาระลอกคลื่นแรงดันต่ําสุดที่คาบเวลาปจจุบัน
แตถาจุดทํางานอยูในพื้นที่ B แรงดันอางอิงที่ใชจะแทนดวยแรงดันเฉลี่ย (Vmean)
+
= 1n 2n
mean
V V
V 2 (2.7)
ขั้นตอนการควบคุมการหาจุดจายกําลังสูงสุดแสดงดังตารางที่ 2 .1
15
แบบคือแบบกระแสตอเนื่อง และแบบกระแสไมตอเนื่อง ในที่นี้จะกลาวถึงเฉพาะการทํางานในโหมด
กระแสตอเนื่องที่ใชในงานวิจัยซึ่งมีรูปคลื่นการทํางานดังรูปที่ 2.15 และมีขั้นตอนการทํางาน 2 โหมด
คือ
รูปที่ 2.14 วงจรตัวแปลงผันแบบทบระดับ
รูปที่ 2.15 รูปคลื่นการทํางานของวงจรแปลงผันแบบทบระดับ
โหมดที่ 1 ชวงเวลา ontt0 ≤<
โหมดที่ 1 จะเริ่มจากการที่สวิตช SB ตอวงจรที่เวลา t = 0 ถึงเวลา t = ton ในขณะที่ไดโอด D จะไดรับ
แรงดันไบอัสกลับทําใหไมนํากระแส ซึ่งมีวงจรสมมูลดังรูปที่ 2.16 ก) กระแสที่ไหลผานตัวเหนี่ยวนํา
จะเพิ่มขึ้นอยางเปนเชิงเสนจาก I1 ถึง I2 โดยแรงดันตกครอมตัวเหนี่ยวนําแสดงดังสมการ (2.8) และ
ในชวงนี้ตัวเก็บประจุจะเปนตัวจายกระแสใหกับโหลด ซึ่งตัวเก็บประจุจะตองมีคามากพอที่จะจาย
กระแสใหโหลดไดในชวงเวลา ton โดยกระแสเฉลี่ยของตัวเก็บประจุจะเทากับกระแสเฉลี่ยของโหลด
t
t
t
t
t
t
VSB(t)
Va
IL(t)
iD(t)
iC(t)
vc(t)
io(t)
Va
Ia
Ia
I2 -Ia
I1 -Ia
I2
I1
I2
I1
IL
DTP TP TP+DTP
I
vc
0
ton
LOADVs
Lc
Cc
SB
D
IC
IL(t)
io(t)
+
-
Va
+
-
VSB(t)
iC(t)
Ia
iD(t)
31.
16
− ∆= =21
S C C
on on
I I IV L Lt t (2.8)
∆
= C
on
S
L I
t V (2.9)
พลังงานที่เก็บในตัวเหนี่ยวนํามีคาเทากับ
( )= ∆ 21E L I2
= 2 2
S on
1 V t2L (2.10)
โหมดที่ 2 ชวงเวลา < ≤on Pt t T
ในโหมดนี้สวิตช SB จะตัดวงจรที่เวลา t = ton ซึ่งมีวงจรสมมูลดังรูปที่ 2.16 ข) กระแสที่เกิดขึ้นจะไหล
ผานตัวเหนี่ยวนํา ไดโอด ตัวเก็บประจุ และโหลด โดยกระแสที่ไหลผานตัวเหนี่ยวนําจะลดลงอยาง
เปนเชิงเสนจาก I2 สู I1 จนกระทั่งสวิตช SB ตอวงจรอีกครั้งในวัฎจักรการทํางานถัดไป
รูปที่ 2.16 วงจรสมมูลของตัวแปลงผันแบบทบระดับ
สําหรับแรงดันตกครอมตัวเหนี่ยวนําแสดงดังสมการ (2.11) ในโหมดนี้กระแสจากแหลงจายจะชารต
ประจุใหกับตัวเก็บประจุ
− ∆− = =2 1
a S C C
off off
I I IV V L Lt t (2.11)
Lc IL(t)
LOADVs CC
IC
io(t)
+
-
Va
iC(t)
Ia
vc(t)
+
-
ก) โหมดที่ 1
LOADVs
Lc
Cc
D
IC
IL(t)
io(t)
+
-
Va
iC(t)
Ia
iD(t)
vc(t)
+
-
ข) โหมดที่ 2
32.
17
∆
= −
C
off
a S
LI
t V V (2.12)
ในชวงสภาวะคงตัวกระแสกระเพื่อมของตัวเหนี่ยวนําในชวง ton และ toff จะมีคาเทากันดังนั้นจาก
สมการ (2.9) และ (2.12) จะได
( )−
∆ = = a S offS on
C C
V V tV t
I L L (2.13)
แทนคา =on Pt DT และ ( )= −off Pt 1 D T ในสมการ (2.13) จะได
( )( )= − −S P a S PV DT V V 1 D T
( )= − − +a P S P S PV 1 D T V T V DT (2.14)
เมื่อจัดรูปสมการ 2.14 จะไดความสัมพันธของแรงดันอินพุต และแรงดันเอาตพุตเปน
= −
S
a
V
V 1 D (2.15)
จากกฎทรงพลังงานจะไดวากําลังอินพุตเทากับกําลังเอาตพุตดังนั้นจะไดความสัมพันธของกระแส
อินพุต และกระแสเอาตพุตเปน
= −
a
in
I
I 1 D (2.16)
จากสมการ (2.15) และ (2.16) จะเห็นวาคาของแรงดัน และกระแสเอาตพุตจะมีความสัมพันธกับ
วัฎจักรการทํางานของสวิตช โดยที่คาบการทํางานของสวิตชหาไดจาก
= = +P on off
S
1T t tf
( )
∆
=
−
C a
S a S
L V I
V V V
(2.17)
แทนคาสมการ (2.15) ในสมการ (2.17) จะไดความสัมพันธของคากระแสกระเพื่อมของตัวเหนี่ยวนํา
∆ = S
S
V D
I f L (2.18)
พิจารณาที่ตัวเก็บประจุในสภาวะคงตัวผลคูณของกระแสดิสชารตประจุกับชวงเวลาที่สวิตชทํางาน จะ
เทากับผลคูณของกระแสชารตประจุกับชวงเวลาที่สวิตชไมทํางาน ดังนั้นการหาแรงดันกระเพื่อมของ
ตัวเก็บประจุจึงพิจารณาจากชวงสวิตชทํางานโดยกระแสเฉลี่ยของตัวเก็บประจุจะเทากับกระแสเฉลี่ย
ของโหลดดังนี้
∆ = − = ∫
ton
c c c a
C
0
1v v v (0) I dtC
∆ = a on
c
C
I t
v C (2.19)
จากสมการ (2.15) เราสามารถจัดใหอยูในรูปของคา ton ไดดังนี้
33.
18
= =− −−
S S P S P
P P on
V V T V T
1 D T DT T t (2.20)
−
= − =S P a S
on P
a S a
V T V V
t T V f V (2.21)
แทนสมการ (2.15) และ (2.21) ในสมการ (2.19) จะไดความสัมพันธของแรงดันกระเพื่อมของตัวเก็บ
ประจุเปน
( )−
∆ = =a a S a
c
a S C S C
I V V I D
v V f C f C (2.22)
จากสมการ (2.22) พบวาคาแรงดันกระเพื่อมเอาตพุตสามารถลดไดโดยการเพิ่มความถี่ในการสวิตช
และการเพิ่มขนาดของตัวเก็บประจุ
2.5 อินเวอรเตอร
อินเวอรเตอรจะทําหนาที่เปนตัวเชื่อมตอระหวางเซลลแสงอาทิตยกับระบบกริดโดยจะแปลงไฟ
กระแสตรงที่เกิดจากเซลลแสงอาทิตยไปเปนไฟกระแสสลับจายเขาระบบกริด สําหรับอินเวอรเตอรที่
ใชในการเชื่อมตอกับระบบกริดจะมี 2 ชนิดคือ
1. อินเวอรเตอรแบบแหลงจายแรงดัน (Voltage-Source Inverter: VSI) จะมีตัวเก็บประจุตอขนานกับ
แหลงจายแรงดันกระแสตรง
2. อินเวอรเตอรแบบแหลงจายกระแส (Current-Source Inverter: CSI) จะมีตัวเหนี่ยวนําตออนุกรม
กับแหลงจายแรงดันกระแสตรง
อินเวอรเตอรที่นิยมนํามาใชงานกับเซลลแสงอาทิตยจะเปนอินเวอรเตอรแบบแหลงจายแรงดัน
ถึงแมวาตัวเซลลแสงอาทิตยจะทําตัวเปนแหลงจายกระแสก็ตาม ดังนั้นในที่นี้จะกลาวถึงเฉพาะ
อินเวอรเตอรแบบแหลงจายแรงดันซึ่งการควบคุมการทํางานของอินเวอรเตอรจะมีอยู 2 แบบคือการ
ควบคุมดวยแรงดัน (Voltage-Control Inverter:VCI) และการควบคุมดวยกระแส (Current-Control
Inverter:CCI) ดังแสดงในรูปที่ 2.17 ก) และ 2.17 ข) โดยวิธีการควบคุมแรงดันจะควบคุมการจาย
กําลังไฟฟาของเซลลแสงอาทิตยเขาสูระบบกริดดวยมุมเฟส (δ) ระหวางแรงดันของอินเวอรเตอรกับ
แรงดันกริด ซึ่งจะทําใหแรงดันของอินเวอรเตอรตามแรงดันกริด สวนหลักการควบคุมดวยกระแสจะ
เปนการควบคุมใหกระแสจายเขากับระบบกริดมีมุมเฟสเดียวกับแรงดันของระบบกริด
24
( )( )−
=
CONSTPWM CRST
NOM
0.9*I T T
C 1.1*3.5 (2.27)
โดย ICONST คือ คากระแสจากแหลงจายกระแสภายในตัว DSP มีคาเทากับ 13.5 µA
TCRST คือ เวลาการทํางานของสัญญาณ PWMSYNC
รูปที่ 2.22 การอานคาสัญญาณอนาล็อก
T P W M -
T C R S T
C O M P A R A T O R
O U T P U T
V V IL
tV IL
T C R S T
V C
V C M A X
P W M S Y N C
V 1
t
26
รูปที่ 3.2 แบบจําลองระบบเชื่อมตอกริด
3.1.1แบบจําลองเซลลแสงอาทิตย
การจําลองคุณลักษณะของเซลลแสงอาทิตยจะใชสมการ (2.1), (2.2) และ (2.3) จากสมการพบวามี
คาตัวแปรที่ไมทราบคาคือคา Ideality Factor (A) คากระแสอิ่มตัวยอนกลับ (Ir) และกระแสอิ่มตัว
ยอนกลับที่อุณหภูมิอางอิง (Irr) การหาคาตัวแปรเหลานี้จะใชสมการไดโอดในสมการ (3.1) และขอมูล
ของเซลลแสงอาทิตยคือคากระแสลัดวงจร (ISC) แรงดันขณะเปดวงจร (VOC) แรงดันและกระแสที่จุด
จายกําลังสูงสุด (VMAX, IMAX) โดยคาที่ใชจะเปนคาตอเซลล จากวงจรสมมูลของเซลลแสงอาทิตยพบวา
ในขณะที่เซลลแสงอาทิตยเปดวงจรปริมาณกระแสที่เซลลแสงอาทิตยสรางขึ้นทั้งหมดจะไหลผานตัว
ไดโอดดังสมการ (3.2)
( )⎡ ⎤= −
⎢ ⎥⎣ ⎦D r
qV
I I exp 1AKT (3.1)
( )⎡ ⎤= −
⎢ ⎥⎣ ⎦
OC
SC r
qV
I I exp 1AKT (3.2)
ที่จุดจายกําลังสูงสุดกระแสที่ผานไดโอดคือ = −D SC MAXI I I จะไดสมการไดโอดเปน
( )⎡ ⎤= −
⎢ ⎥⎣ ⎦
MAX
D r
qV
I I exp 1AKT (3.3)
จากสมการ (3.3) จัดสมการใหมไดเปน
power
z
1
IL
ILoad
Vc
Solar Cell
Signal
Saw -Tooth
<=
2.5
I
V
Vr
Vr2
MPPT
ICON
Igrid
trig1
trig2
trig3
trig4
Inv Control
Igrid
V
Trig1
Trig2
Trig3
Trig4
Igrid
Grid
0.48
Gain
Vi
VTrig
V+
I1
Boost
42.
27
( )
=
+
MAX
D r
r
qV1A KT I I
ln I
(3.4)
แทนสมการ (3.4) ในสมการ (3.2) จะได
( )
( )
−
+ − =
VOC OC1 VMAX
MAX
V
V
r D r SCI I I I 0 (3.5)
จากนั้นใชวิธีลองผิดลองถูก (Trial & Error) โดยการแทนคา Ir เพื่อแกสมการ (3.5) เมื่อไดคา Ir นํา
กลับไปแทนในสมการ (2.2) และ (3.4) เพื่อหาคากระแสอิ่มตัวยอนกลับที่อุณหภูมิอางอิงและคา
Ideality Factor ตามลําดับ จากแบบจําลองที่ไดนํามาพล็อตกราฟกระแส-แรงดันของเซลลแสงอาทิตย
รุน MSX-30L เทียบกับขอมูลกราฟกระแส-แรงดันของเซลลแสงอาทิตยจากผูผลิตดังรูปที่ 3.3
รูปที่ 3.3 กราฟกระแส-แรงดันของเซลลแสงอาทิตยรุน MSX-30L
3.1.2 แบบจําลองตัวแปลงผันแบบทบระดับ
ตัวแปลงผันแบบทบระดับจะใชสําหรับเพิ่มระดับแรงดันไฟตรงของเซลลแสงอาทิตยที่จายเขา
อินเวอรเตอร และใชเปนตัวปรับหาจุดจายกําลังสูงสุดของเซลลแสงอาทิตยดวยการปรับวัฏจักรการ
ทํางานของสวิตช เพื่อปรับคาความตานทานของระบบที่มองจากตัวเซลลแสงอาทิตยใหใกลคาความ
ตานทานที่เหมาะสม (Optimum Resistance: ROpt) สําหรับการจายกําลังสูงสุด ณ เวลาใดๆ โดยตัว
แปลงผันแบบทบระดับนี้จะทํางานในโหมดกระแสตอเนื่อง จากสมการ (2.15) และ (2.16) จะได
ความสัมพันธของความตานทานที่เหมาะสมกับความตานทานเอาตพุตเปน
( )= − 2
Opt OR R 1 D (3.6)
0 2 4 6 8 10 12 14 16 18 20 22 24
0
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
1.8
2
2.2
Current(A)
Voltage (V)
I-V Charasteristics
T = 0°C
T = 75°C
T = 25°C
T = 50°C
ก) ผลจากแบบจําลองเซลลแสงอาทิตย ข) กราฟจากผูผลิต
43.
28
โดยถาสมมติใหการทํางานของอินเวอรเตอรมีลักษณะเปนความตานทาน (RO) ดังนั้นเมื่อปรับวัฎจักร
การทํางานของสวิตชตัวแปลงผันแบบทบระดับจะพบวาเมื่อเพิ่มวัฎจักรการทํางานจะทําใหคาOptR มี
คานอยลงเมื่อเทียบสภาวะกอนทําใหเซลลแสงอาทิตยจายกระแสมากขึ้น (จุดทํางานจะเคลื่อนที่ไป
ทางซายของกราฟกระแส-แรงดันของเซลลแสงอาทิตย) แตถาลดวัฎจักรการทํางานลงจะทําใหคา
OptR มีคามากกวาสภาวะเดิมทําใหเซลลแสงอาทิตยจายกระแสลดลง (จุดทํางานจะเคลื่อนที่ไป
ทางขวาของกราฟกระแส-แรงดันของเซลลแสงอาทิตย) แบบจําลองของตัวแปลงผันแบบทบระดับจะ
ใชทูลในชุดระบบไฟฟากําลังของโปรแกรม MATLAB/SIMULINK ดังรูปที่ 3.4
รูปที่ 3.4 แบบจําลองตัวแปลงผันแบบทบระดับ
3.1.3 แบบจําลองอินเวอรเตอร
อินเวอรเตอรจะใชสําหรับแปลงไฟฟากระแสตรงเปนไฟฟากระแสสลับ แบบจําลองแสดงดังรูปที่ 3.5
ในการจําลองการทํางานจะสั่งใหสวิตชทํางานเปนคูโดยในชวงแรงดันบวกสวิตช S1, S4 ทํางาน สวน
ในชวงแรงดันลบสวิตช S2, S3 ทํางาน เพื่อสรางกระแสรูปคลื่นไซนจายเขาระบบกริด
รูปที่ 3.5 แบบจําลองอินเวอรเตอรเฟสเดียวแบบเชื่อมตอกริด
2
I1
1
V+
d
g
s
m
a
k
m
+
i
-
V
+
-
2
VTrig
1
Vi
1
Igrid
d
g
s
m
d
g
s
m
d
g
s
m
d
g
s
m
+
i
-
5
Trig4
4
Trig3
3
Trig2
2
Trig1
1
V
S1
S2
S3
S4
44.
29
3.1.4 การควบคุมการทํางาน
การควบคุมการทํางานมี 2สวนคือ สวนการหาจุดจายกําลังงานสูงสุดจะใชวิธีเพิ่มคาความนําใน
บทที่ 2 โดยถาคาของ + dII
V dV มีคาเปนบวกระบบจะเพิ่มแรงดันอางอิง แตถามีคาเปนลบระบบจะลด
แรงดันอางอิงลง แลวนําคาแรงดันอางอิงไปเปรียบเทียบกับสัญญาณพีดับบลิวเอ็มเพื่อปรับวัฎจักรการ
ทํางานของสวิตชตัวแปลงผันแบบทบระดับในการตามหาจุดจายกําลังสูงสุดของเซลลแสงอาทิตย
สวนที่สองจะเปนสวนการสรางกระแสรูปคลื่นไซนจายเขาระบบกริด ซึ่งจะใชการควบคุมแบบ
ฮีสเตอริซีสควบคุมการทํางานของอินเวอรเตอรเฟสเดียว ดังรูปที่ 3.6 ซึ่งกระแสอางอิง (Iref) จะสราง
จากผลคูณของกระแสควบคุม (ICON) ที่ไดจากสวนหาจุดจายกําลังสูงสุดกับรูปคลื่นไซนอางอิงขนาด
1 หนวยของแรงดันกริด โดยกระแสควบคุมที่ใชในการจําลองนี้จะมีคาเทากับ 0.48 เทาของกระแสที่
จุดจายกําลังสูงสุดเพื่อใหระบบสามารถจายกําลังสูงสุดได
รูปที่ 3.6 การควบคุมการสรางกระแสรูปคลื่นไซน
3.1.5 ผลการจําลองระบบเชื่อมตอกริด
พารามิเตอรที่ใชในแบบจําลองประกอบดวย
- เซลลแสงอาทิตย MSX-30L ขนาด 28.3 W แรงดันขณะเปดวงจร 20.8 V กระแสลัดวงจร
1.82 A แรงดันที่จุดจายกําลังสูงสุด 17.2 V และกระแสที่จุดจายกําลังสูงสุด 1.65 A ที่ปริมาณ
แสง 1 kW/m2
อุณหภูมิ 298 เคลวิน
- ตัวเก็บประจุสําหรับกรองระลอกคลื่นแรงดัน (CS) ขนาด 4,700µF
- ตัวแปลงผันแบบทบระดับประกอบดวยตัวเหนี่ยวนําขนาด (LC) 10 mH ตัวเก็บประจุขนาด
(CC) 470µF
- ตัวเหนี่ยวนําของอินเวอรเตอรขนาด (L) 2 mH
- แหลงจายไฟกระแสสลับ 38.89 V 50 Hz
4
trig4
3
trig3
2
trig2
1
trig1
Relay1
> NOT
AND
AND
0
|u|
|u|
2
Igrid
1
ICON
35
3.2.4.1 การแปลงคาสัญญาณอนาล็อกเปนคาสัญญาณดิจิตอล
เนื่องจากตัวแปลงสัญญาณอนาล็อกเปนสัญญาณดิจิตอลของชิป DSPจะอานคาจากตัวนับ (Counter)
ขนาด 12 บิต แตในการคํานวณจะใชการคํานวณแบบ 16 บิต ดังนั้นสามารถแปลงขอมูล 12 บิตเปน
16 บิตโดยใชวิธีคํานวณแบบ 2 จุด (2-point calibration) ดังรูปที่ 3.12 โดยวิธีนี้จะใหตัวแปลงสัญญาณ
อนาล็อกเปนสัญญาณดิจิตอลอานคาแรงดันคงที่อางอิง 2 คาคือ Vref1 และ Vref2 ซึ่ง Vref1 จะเปน
แรงดันคงที่จากตัวบอรดประมวลผล สวนคา Vref2 จะมีคาเปนครึ่งหนึ่งของแรงดัน Vref1 โดยการตอ
ตัวตานทานภายนอกเพื่อแบงแรงดัน Vref1 อานคาแรงดันอางอิงทั้งสองคาจากโปรแกรมดีบักเกอร
เพื่อคํานวณหาคา Y∆
∆ = −Y Reference1 Reference2 (3.7)
สวนคา X∆ หาไดจาก
∆ = −X Ref1 Ref2 (3.8)
โดยที่
( )
( )
−
=
−
15Vref1 Vmin
Ref1 *2
Vmax Vmin
(3.9)
( )
( )
−
=
−
15Vref2 Vmin
Ref2 *2
Vmax Vmin
(3.10)
โดยคา Vmin และ Vmax คือคาแรงดันต่ําสุด และคาแรงดันสูงสุดในชวงใชงานของตัวแปลงสัญญาณ
อนาล็อกเปนสัญญาณดิจิตอล (ในที่นี้ใช Vmin = 0.3 V และ Vmax = 3.5 V) จากสมการ (3.7) และ
(3.8) สามารถนํามาหาคาความชัน และออฟเซ็ทของตัวแปลงสัญญาณอนาล็อกเปนสัญญาณดิจิตอล
ดังนี้
∆=
∆
YADCSLOPE
X
(3.11)
= −ADCOffset Reference2 ADCSLOPE*Ref2 (3.12)
รูปที่ 3.12 การแปลงคาสัญญาณดิจิตอลดวยวิธีการแบบ 2 จุด
R e f e r e n c e 1
R e f e r e n c e 2
A D C r e a d in g
A D C - o f f s e t
R e f 1R e f 2
Y∆
X∆
D e s ir e d A D C
r e a d in g
40
3.2.5.3 LEM LTA50P/SP1
LTA50P/SP1เปนอุปกรณวัดกระแสโดยใชหลักการของ Hall Effect ดังแสดงในรูปที่ 3.17 ความ
ผิดพลาดในการวัดสัญญาณนอยกวา ±1% โดยคากระแสเอาตพุตจะเปนสัดสวนโดยตรงกับ
คากระแสอินพุตมีคาเทากับ 1 mA/A ดังนั้นตอตัวตานทาน (RM) 100 Ω เพื่อใชเปลี่ยนคากระแสเปนคา
แรงดัน ในที่นี้จะใชวัดสัญญาณกระแสที่จายเขากริด
รูปที่ 3.17 การวัดสัญญาณของ LTA50P/SP1
3.2.6 วงจรยกระดับแรงดัน (Level Shifter Circuit)
เนื่องจากตัวแปลงสัญญาณอนาล็อกเปนสัญญาณดิจิตอลของ ADMC 331 และ MAX196 จะมีชวงของ
แรงดันที่ใชสําหรับอานคาสัญญาณอนาล็อก ดังนั้นจึงตองมีวงจรยกระดับแรงดันเพื่อปรับคาแรงดัน
ของตัววัดสัญญาณอนาล็อกใหอยูในชวงที่ตัวแปลงสัญญาณอนาล็อกเปนสัญญาณดิจิตอลสามารถ
อานคาได โดยวงจรยกระดับแรงดันจะสรางจากตัวขยายสัญญาณ (Op-Amp) เบอร LM324N ดังวงจร
ในรูปที่ 3.18 ซึ่งจะประกอบดวยวงจรขยายแบบรวมสัญญาณ และวงจรขยายแบบกลับเฟส
รูปที่ 3.18 วงจรขยายและยกระดับแรงดัน
+
-
+
-
V I N
V O U T
+ 1 5 V
S u m m in g
A m p
In v e r tin g
A m p
5 k Ω
5 k Ω
1 0 k Ω
1 0 k Ω
1 0 k Ω
5 k Ω
2 .5 k Ω
1 0 k Ω
LTA50P/SP1
+ 15 V
- 15 V
0 V
RM
VSENSE
From
Inverter
To
Grid System
56.
41
รูปที่ 3.19 วงจรขับสวิตช
3.2.7วงจรขับ (Gate Drive Circuit)
วงจรขับที่ใชในวิทยานิพนธนี้จะใชไอซี TLP250 เปนไอซีที่แยกสวนของสัญญาณขับกับสวนที่ใชขับ
สวิตชสามารถทํางานที่ความถี่สูงสุด 25 kHz ดังวงจรในรูปที่ 3.19 ในสวนของสัญญาณขับจะรับ
สัญญาณขนาด 5 V มาจากตัวประมวลผลสัญญาณดิจิตอลตอผานตัวตานทานขนาด 1 kΩ เพื่อจํากัด
กระแสเขา TLP250 ในสวนที่ใชขับสวิตชจะตอแหลงจายแรงดันภายนอกขนาด +20 V ผานขา
คอลเล็กเตอรของทรานซิสเตอร Tr1 ที่ขาอิมิตเตอรของทรานซิสเตอร Tr1 จะตอตัวตานทานขนาด
50 Ω เขากับขาเกตของไอจีบีที (หรือมอสเฟต) เพื่อกําหนดชวงเวลาตอวงจร (Turn on time) และ
ชวงเวลาตัดวงจร (Turn off time) ของไอจีบีที และตอซีเนอรไดโอดเขาที่ขาอีมิเตอรของไอจีบีทีเพื่อ
สรางแรงดัน-5 V ในชวงตัดวงจรของสวิตชเพื่อชวยใหสวิตชหยุดทํางานเร็วขึ้น
เมื่อไดรับสัญญาณขับทรานซิสเตอร Tr1 จะตอวงจรเพื่อจายแรงดันเขาขาเกตกับขาอีมิเตอรของ
ไอจีบีทีโดยแรงดันตกครอมขาเกตและอีมิเตอรจะเปน
= −GE CC ZV V V (3.20)
เมื่อไมมีสัญญาณขับสวิตชทรานซิสเตอร Tr2 จะตอวงจรทําใหแรงดันตกครอมขาเกตและอีมิเตอรมีคา
เทากับ
= −GE ZV V (3.21)
ในวิทยานิพนธนี้จะใช TLP250 จํานวน 5 ตัว สําหรับขับสวิตชของตัวแปลงผันแบบทบระดับ และ
สวิตชของอินเวอรเตอรดังรูปที่ 3.20 จากรูปจะพบวาสวิตชของตัวแปลงผันแบบทบระดับ (SB) และ
สวิตชดานลาง 2 ตัวของอินเวอรเตอร (S2 และ S4) มีการเชื่อมตอกันทางไฟฟาดังนั้นสามารถใช
แหลงจายไฟ (VCC1) และกราวดจากแหลงจายเดียวกัน สวนสวิตช S1 กับ S3 ไมมีการเชื่อมตอกันโดย
ตรงที่ขั้วอิมิตเตอร ดังนั้นจะตองใชแหลงจายไฟและกราวดคนละสวนกัน
RG = 50 Ω C = 0.1 µF
C1 = 4.7 µF 25 V
ZD 5.1 V VCC = 20V
VG
C1
+
-
RG
+ VccTLP 250
G E
Tr1
Tr2
ZD
C
Ω1k
Ω5k
เอกสารอางอิง
1. Langridge, D.,Lawrance, W. and Wichert, B., 1994, “High Efficiency Solar Water
Pumping System Using BDC Motor”, 12th European Photovoltaic Solar Energy
Conference, pp. 227-230.
2. Hua, C., Lin, J. and Shen, C., 1998, “Implementation of a DSP-Controlled Photovoltaic
System with Peak Power Tracking”, IEEE Transactions on Industrial Electronics,
Vol. 45, pp. 99-107.
3. Hussein, K.H. and Muta, I., 1995, “Maximum Photovoltaic Power Tracking: an Algorithm
for Rapidly Changing Atmospheric Conditions”, IEE Proceedings on Generation,
Transmission, and Distribution, Vol. 142, No. 1, pp. 59-64.
4. Martina, C. and Hartmut, H., 1998 “A Ripple-Based Maximum Power Point Tracking
Algorithm for a Single-Phase, Grid-Connected Photovoltaic System”, Solar Energy,
Vol. 63, No. 5, pp. 277-282.
5. Hohm, D.P. and Ropp, M.E., 2000, “Comparative Study of Maximum Power Point
Tracking Algorithm Using an Experimental, Programmable, Maximum Power Point
Tracking Test Bed”, Photovoltaic Specialists Conference, 2000. Conference Record of
the Twenty-Eighth IEEE, 15-22 September 2000, pp. 1699-1702.
6. Muhammad, H.R., 2001, Power Electronics Handbook, Academic Press, California,
pp. 539-562.
7. Premrudeepreechacharn, S. and Poapornsawan, T., 2000 “Fuzzy Logic Control of
Predictive Current Control for Grid-Connected Single Phase Inverter”, Proceeding of
IEEE 28th
Photovoltaic Specialist Conference, pp. 1715-1718.
79.
64
8. Daniel, M.M.,1988, DC-DC Switching Regulator Analysis, McGraw-Hill, New York,
pp. 5-45.
9. Simon, S.A., 1995, Power Switching Converters, Marcel Dekker, New York, pp. 27-37.
10. Analog Devices, 1995, “ADSP-2100 Family User’s Manual”, Computer Product
Division, 3rd
ed., pp. (15-23)-(15-106).
11. โคทม อารียา, 2544, อิเล็กทรอนิกสกําลัง 2, ซีเอ็ดยูเคชั่น, กรุงเทพฯ, หนา 91-92.
68
{*******************************************************************************
* Program ofMaximum Power Point Tracking for Grid Connected Inverter *
*******************************************************************************}
.MODULE/RAM/SEG=USER_PM1/ABS=0x30 Main_Program;
{*******************************************************************************
* Include General System Parameters and Libraties *
*******************************************************************************}
#include <main.h>;
#include <pwm331.h>;
#include <mathfun.h>;
{*******************************************************************************
* Local Variables Defined in this Module *
*******************************************************************************}
.VAR/DM/RAM/SEG=USER_DM Vin;
.VAR/DM/RAM/SEG=USER_DM Iin;
.VAR/DM/RAM/SEG=USER_DM Vgrid;
.VAR/DM/RAM/SEG=USER_DM Igrid;
.VAR/DM/RAM/SEG=USER_DM Vp;
.VAR/DM/RAM/SEG=USER_DM Ip;
.VAR/DM/RAM/SEG=USER_DM dV;
.VAR/DM/RAM/SEG=USER_DM dI;
.VAR/DM/RAM/SEG=USER_DM diff;
.VAR/DM/RAM/SEG=USER_DM duty;
.VAR/DM/RAM/SEG=USER_DM adc1slope;
.VAR/DM/RAM/SEG=USER_DM adc2slope;
.VAR/DM/RAM/SEG=USER_DM adc1offset;
.VAR/DM/RAM/SEG=USER_DM adc2offset;
.VAR/DM/RAM/SEG=USER_DM Iinit;
.VAR/DM/RAM/SEG=USER_DM count;
.VAR/DM/RAM/SEG=USER_DM Imag;
.VAR/DM/RAM/SEG=USER_DM Iref;
.VAR/DM/RAM/SEG=USER_DM Ierr;
84.
69
.VAR/DM/RAM/SEG=USER_DM status;
.VAR/DM/RAM/SEG=USER_DM Init_hys;
.VAR/DM/RAM/SEG=USER_DMhys_band;
.VAR/DM/RAM/SEG=USER_DM dacs;
.INIT Vp : 0x0000;
.INIT Ip : 0x0000;
.INIT duty : 0x3336; {70% duty cycle}
.INIT adc1slope : 0x1d5c;
.INIT adc2slope : 0x1d5c;
.INIT adc1offset : 0x6c2;
.INIT adc2offset : 0x06b2;
.INIT count : 0;
.INIT Init_hys : 0x7fff; {Initial inverter switch to ON State}
.INIT hys_band : 0x64; { = 0.006 A}
.INIT dacs :1;
.INIT Iref : 0x0;
.INIT Iref1 : 0x0;
{---------------------------------------- Start Program ----------------------------------------------}
Startup:
ICNTL = 0x00;
PWM_Init(PWMSYNC_ISR, PWMTRIP_ISR); {Initial PWM}
IFC = 0x80; { Clear any pending IRQ2 inter. }
ay0 = 0x200; { unmask irq2 interrupts. }
ar = IMASK;
ar = ar or ay0;
IMASK = ar; { IRQ2 ints fully enabled here }
ar = 0x00b0;
dm(modectrl) = ar;
call DAC_Init; {Initial Digital to Analog chip}
ax0=0;
dm(PWMCHA)=ax0;
dm(PWMCHB)=ax0;
85.
70
dm(PWMCHC)=ax0;
Main:
Jump Main; {Waitfor interrupt to occur}
rts;
{--------------------------------- Duty cycle of Boost Converter --------------------------------------------}
.MACRO MPPT_Duty_update(%0);
sr0 = DM(PWMTM);
sr = LSHIFT sr0 by -1 (LO);
mr = 0; mr1= sr0; my0 = %0; mr = mr + sr0 * my0 (SS); dm(PWMCHA) = mr1;
.ENDMACRO;
{----------------------------------------------- Division --------------------------------------------------------}
div: AX1=AY1,AF=AX0-AY1;
AR=ABS AX0;
test_2: {Division by -1}
if NOT AV JUMP test_3;
AR = -AY1; {Return -x }
RTS;
test_3: {x=y therefore return 1}
AF=PASS AF;
if NE JUMP test_4;
AR=0x7FFF;
ASTAT=0x0;
RTS;
test_4:
AX1=AY1,AR=ABS AX0;
AF=ABS AX1;
AF=AF-AR;
if LT JUMP do_div;
AR=0x7FFF;
AF=PASS AY1;
if LT AR= NOT AR; {return - infinity}
86.
71
AF=PASS AX0;
if LTAR= NOT AR; {return - * - infinity}
ASTAT=0x4; {Division Overflow}
RTS;
do_div:
DIVS AY1,AX0;
CNTR=15;
do do_div01 until ce;
do_div01: DIVQ AX0;
AR= pass AY0;
if LT AR= AR+1;
RTS;
.MACRO Division(%0,%1,%2); { input = (ay1.ay0)/ax0, output = ar}
ay1 = %0; {The numerator must less than denomirator}
ay0 = %1;
ax0 = %2;
call div;
.ENDMACRO;
{------------------------------------------- band gap of Zero ---------------------------------------------------}
.MACRO Check_Zero(%0); {check band of zero }
ar = %0; af = pass ar;
ar = abs ar; ay0 = 0x2;
ar = ar-ay0;
if LE af = pass 0;
ar = pass af;
.ENDMACRO;
{-------------------------------------- Drive signal of Inverter -----------------------------------------------}
.MACRO Inv_duty_update(%0,%1);
sr0 = DM(PWMTM);
sr = LSHIFT sr0 by -1 (LO);
mr =0; mr1= sr0; my0 = %0; mr= mr + sr0 * my0 (SS); dm(PWMCHB) = mr1;
mr =0; mr1= sr0; my0 = %1; mr= mr + sr0 * my0 (SS); dm(PWMCHC) = mr1;
87.
72
.ENDMACRO;
{---------------------------------------------- Hysteresis --------------------------------------------------------}
check_hys:
ar= pass ay0;
if GT jump C_Pos;
if LT jump C_Neg;
if EQ ar = pass -32768;
ay0 = 0x8000;
Inv_duty_update(ar,ay0);
rts;
C_Pos: ar = 0x8;
dm(pwmseg) = ar; {off BL of PWM}
ar = ax0;
Inv_duty_update(ar,ay0);
rts;
C_Neg: ar = 0x4;
dm(pwmseg) = ar; {off BH of PWM}
ar = not ax0;
Inv_duty_update(ar,ay0);
rts;
.MACRO Hysteresis_update(%0,%1);
ax0 = %0; {hys duty update}
ay0 = %1; {check cycle of sinusoidal (+or -)}
call check_hys;
.ENDMACRO;
{------------------------- DAC Output for TLV5168AI in Slow Mode Coversion -------------------------}
DAC_Init:
Clear_Bit_DM(sport0_ctrl_reg, 14);
Write_DM(sport0_sclkdiv, 32); {sets serial clock frequency}
{ Configuration: Internally generated serial clock :ISCLK =1
Transmit frame sync required : TFSR =1
Alternate framing mode : TFSW =1
88.
73
Transmit frame syncactive LOW : INVTFS=1
Data format right just., 0 filled : DTYPE =b#00
Word length 16 bits : SLEN =0xf }
ar = dm(sport0_ctrl_reg);
ay0 = b#0100101000001111;
ar = ar or ay0;
ay0 = b#1111111111001111;
ar = ar and ay0;
dm(sport0_ctrl_reg) = ar;
{ Configuration: Use Registers I1, L1 and M1 for autobuffering
TIREG =b#001
TMREG =b#01 }
ar = dm(sport0_Autobuf_ctrl);
ay0 = b#0000001010000010;
ar = ar or ay0;
ay0 = b#1111001011111101;
ar = ar and ay0;
dm(sport0_Autobuf_ctrl)=ar; {sets autobuffer registers }
ifc = 0x0020; {clear pending transmit interrupts}
Set_Bit_DM(SYSCNTL, 12); {enable SPORT0}
rts;
{--------------------------------------------- DAC OUTPUT ---------------------------------------------------}
Toggles:
mr2=dm(dacs);
ar=TGLBIT 0 of mr2;
dm(dacs)=ar;
rts;
DAC_OUT:{ Input = mr0(Signal1); mr1(Signal2); mr2(DAC Selector)}
af=pass mr0;
ar=mr2-1; if EQ af=pass mr1;
ar=pass af; ax1=ar;
89.
74
af=pass -0x8000;
ar=mr2-1; ifEQ af=pass 0x1000;
ar = ax1;
sr = lshift ar by -3 (hi);
ar= sr1 or af;
tx0=ar;
rts;
.MACRO Output(%0,%1,%2);
mr0=dm(%0); mr1=dm(%1); mr2=dm(%2);
CALL DAC_OUT;
.ENDMACRO;
{----------------------------------------------- MAX196 ADC --------------------------------------------------}
ADC_READ : { Input : ay0(Channel)……Output : ar(D Value) }
ar = 0x70; dm(PIODIR1) = ar;
ar = 0xFF; dm(PIODIR0) = ar;
ar = 0x48; ar = ar or ay0; dm(PIODATA0) = ar;
ar = 0x20; dm(PIODATA1) = ar;
ar = 0x70; dm(PIODATA1) = ar;
WaitADC : ax0 = dm(PIODATA1);
ar = TSTBIT 7 of ax0;
if NE Jump WaitADC;
ar = 0; dm(PIODIR0) = ar;
ar = 0x40; dm(PIODATA1) = ar;
ar = 3;
DLAY : ar = ar-1; if GT Jump DLAY;
ar = dm(PIODATA1); sr = Lshift ar by 8(hi);
ay1 = dm(PIODATA0); ar = sr1 or ay1;
ay1 = 0xFFF; ar = ar and ay1;
ax0 = 0x70; dm(PIODATA1) = ax0;
sr = Ashift ar by 4(hi); ar = sr1; { Expanded Variable to 16-bit Full Scale }
rts;
.MACRO ADCREAD(%0,%1); { Output : dm(%1)=ar;}
90.
75
ay0=%0;
CALL ADC_READ;
dm(%1)=ar;
.ENDMACRO;
{*******************************************************************************
* PWMInterrupt Service Routine *
*******************************************************************************}
PWMSYNC_ISR:
Call Toggles;
AX1 = 2;
I0=0x2000;{Adc address} I1=0x3800; {Data mem}
I2=0x380A;{Adcslope} I3=0x380E; {Adcoffset}
M0=1;L0=0;
adc_read1: {read data from adc of ADMC331}
ena ar_sat;
ax0 = dm(I0,M0);
ay0 = dm(I3,M0);
ar = ax0-ay0;
my0 = dm(I2,M0);
mr = ar*my0 (rnd);
sr = Lshift mr1 by 3 (HI);
ar = sr1;
check_min:
if AC jump check_max;
ar = 0x0000;
jump Keep;
check_max:
af = ar-0x7fff;
if LT jump keep;
ar = 0x7fff;
91.
76
Keep: dm(I1,M0) =ar;
ar = ax1-1;
ax1 = ar;
if GT jump adc_read1;
dis ar_sat;
ar = dm(Iin);
dm(Iinit) = ar;
ADCREAD(0,Vgrid); {read data from MAX196}
ADCREAD(1,Igrid);
{*******************************************************************************
* Maximum Power Point Tracking *
*******************************************************************************}
Mppt: ax0 = dm(count); { }
af = pass ax0; { }
if EQ jump aaa; { }
ay0 = 1; { run MPPT every Time = 2.5 ms }
ar = ax0-ay0; { }
dm(count) = ar; { }
jump cal_Iref; { }
aaa: mx1 = dm(Iin);
mr = 0; my0 = 0x2d8; { change Ibase to Vbase}
mr = mx1*my0 (rnd); { Ibase = 2 A, Vbase = 90V}
ax1 = mr1;
dm(Iin) = ax1;
ay1 = dm(Ip);
ar = ax1-ay1; {dI = Iin-Ip}
dm(dI) = ar;
dm(Ip) = ax1;
ax0 = dm(Vin);
ay0 = dm(Vp);
92.
77
ar = ax0-ay0;{dV = Vin-Vp}
dm(dV) = ar;
dm(Vp) = ax0;
Check_Zero(ar);
if EQ jump check_I; {if dV = 0 then check dI}
ay1 = dm(dI);
Division(ay1,0x0000,ar); {calculate dI/dV}
dm(diff) = ar;
ar = dm(Vin);
ay1 = dm(Iin);
Division(ay1,0x0000,ar); {calculate I/V}
ay0 = dm(diff);
ar = ar+ay0; {calculate I/V+dI/dV}
Check_Zero(ar);
if EQ jump end_mppt;
if GT jump sub;
if LT jump add;
check_I:
ax0 = dm(dI);
ar = pass ax0;
Check_Zero(ar);
if EQ jump end_mppt;
if GT jump sub;
if LT jump add;
sub: ax0 = dm(duty); {decrese duty ratio for increasing solar voltage}
ay0 = 655; {step of duty cycle = 0.01}
ar = ax0-ay0;
dm(duty) = ar;
jump end_mppt;
add: ax0 = dm(duty); {Increse duty ratio for decreasing solar voltage}
ay0 = 655;
ar = ax0+ay0;
93.
78
dm(duty) = ar;
jumpend_mppt;
end_mppt:
ar = dm(duty);
af = pass ar;
if GT jump Positive;
if LT jump Negative;
if EQ jump Zero;
Positive:
ay0 = 0x599d; {Max duty = 85%}
ar = ar - ay0;
if GT af = pass ay0;
ar = pass af;
jump Zero;
Negative:
ay1 = 0x999a; {Min duty = 5%}
ar = ar - ay1;
if LT af = pass -32768;
ar = pass af;
Zero: dm(duty) = ar;
MPPT_Duty_update(ar);
ax0 = 50;
dm(count) = ax0; { count for 2.5 ms}
{*******************************************************************************
* HYSTERESIS CONTROL *
*******************************************************************************}
STATE:
my0 = 0x77c2; {scale Ipv for Imag}
ar = dm(Iinit);
mr = 0;
mr = ar*my0 (rnd);
94.
79
dm(Imag) = mr1;
ax0= dm(Vgrid); {check the curve that is on cycle + or cycle -}
ar = pass ax0;
if GT jump C_positive; { If it's a zero set the status to 0 }
if LT jump C_negative;
if EQ jump middle;
C_positive: {build Iref }
ax1 = 0x7fff;
dm(status) = ax1;
mr = 0;
my0 = dm(Imag);
mr = ar*my0 (rnd);
dm(Iref) = mr1;
jump HYS;
C_negative:
ax1 = 0x8000;
dm(status) = ax1;
ar = abs ar;
if av ar = pass 32766;
mr = 0;
my0 = dm(Imag);
mr = ar*my0 (rnd);
dm(Iref) = mr1;
jump HYS;
middle: ax1 = 0x0000;
dm(status) = ax1;
ay1 = 0x7fff;
dm(Iref) = ay1;
HYS: ar = dm(Init_hys); {status of previous Hysteresis }
af = pass ar;
ax0 = dm(Igrid);
ar = pass ax0;
95.
80
if LT ar= abs ar;
new_I: dm(Vgp) = ar;
ay1 = ar;
ax1 = dm(Iref);
ar = ax1-ay1;
dm(Ierr) = ar; {Ierr = Iref – Igrid}
ay0 = dm(hys_band);
ax0 =ar;
ar = ax0-ay0;
if GE af = pass 32766; { if Ierr is greater than upper hys_band, switch on}
ar = ax0+ay0;
if LE af = pass -32768; { if Ierr is less than lower hys_band, switch off}
ar = pass af;
dm(Init_hys) = ar;
ay0 = dm(status);
Hysteresis_update(ar,ay0);
Output(Iref,Vgp,dacs); {showing data pass TLV5168AI DAC}
RTI;
{*******************************************************************************
* PWM Trip Interrupt Service Routine *
*******************************************************************************}
PWMTRIP_ISR:
nop;
rti;
.endmod;