Professional Documents
Culture Documents
20232_ĐAMH_CaoMinhDuong_20212735
20232_ĐAMH_CaoMinhDuong_20212735
ĐỒ ÁN 1
ĐIỀU KHIỂN DỰ BÁO MẠCH VÒNG CHO CÔNG SUẤT CHO BỘ
CHỈNH LƯU SỬ DỤNG NGÔN NGỮ C
HÀ NỘI, 6/2024
Lời cảm ơn
Lời đầu tiên chúng em xin gửi lời cảm ơn chân thành tới thầy Nguyễn Duy Long.
Trong quá trình học tập và tìm hiểu môn Đồ án I, chúng em đã nhận được rất
nhiều sự quan tâm, giúp đỡ hướng dẫn tâm huyết và tận tình của thầy. Thầy đã
giúp chúng em có thêm nhiều kiến thức bổ ích để có thể hoàn thành đề tài
“ĐIỀU KHIỂN DỰ BÁO MẠCH VÒNG CHO CÔNG SUẤT CHO BỘ
CHỈNH LƯU SỬ DỤNG NGÔN NGỮ C”
Qua đồ án này , em đã có cơ hội áp dụng những kiến thức đã học vào việc thiết
kế một mạch điện tử công suất thực tế , đồng thời biết cách mô phỏng mạch để
kiểm tra khả năng đáp ứng của mạch với các yêu cầu kỹ thuật . Tuy nhiên , bên
cạnh những kết quả đã đạt được , em cũng nhận thấy còn nhiều thiếu sót cần
được khắc phục như chưa thuần thục với phần mềm mô phỏng , chưa biết cách
lựa chọn thiết bị phù hợp và việc chưa sử dụng thuần thục ngôn ngữ lập trình C.
Em rất mong nhận được sự đánh giá và góp ý từ thầy để có thể hoàn thiện đồ án
một cách tốt nhất.
MỤC LỤC
Hình 1.1 mô tả bộ chỉnh lưu tích cực gồm nguồn xoay chiều ba pha, cuộn
kháng lọc RL, mạch chỉnh lưu cầu ba pha với 6 IGBT, tụ điện C và tải một chiều.
Với 6 van IGBT, 𝑆𝑥 và 𝑠̅𝑥 thay phiên nhau đóng mở, tạo ra 3 cụm điều
khiển S1, S2 và S3 có lần lượt 2 trường hợp, tổng ta sẽ có được 8 trường hợp
khác nhau:
1, nếu S1 on và S̅1 off
𝑆1 = {
0, nếu S1 off và S̅1 on
1, nếu S2 on và S̅2 off
𝑆2 = {
0, nếu S2 off và S̅2 on
1, nếu S3 on và S̅3 off
𝑆3 = {
0, nếu S3 off và S̅3 on
1
Từ đó với một thông số đầu vào, ta sẽ có được 8 trường hợp cho công suất
đầu ra và từ đó có thể chọn được trường hợp có được công suất tốt nhất theo giá
trị đặt.
1.2 Phương pháp điều khiển công suất dự báo trực tiếp
Các phương pháp điều khiển bộ chỉnh lưu có thể được phân loại như: Điều
khiển hướng điện áp(VOC), điều khiển công suất trực tiếp(DPC). Phương pháp
điều khiển dự báo công suất trực tiếp được trình bày trong bản báo cáo này để
điều khiển bộ chỉnh lưu. [1]
Hình trên thể hiện bộ điều khiển được lập trình để điều khiển các trạng
thái đóng cắt từng van của bộ chỉnh lưu AFE, từ đó tính ra được 8 trường hợp
như đã nêu ở trên.
Cũng theo hình trên, trong số lượng hữu hạn các trạng thái đóng cắt của các van,
ta xem xét đánh giá ảnh hưởng của từng trạng thái đối với dòng điện qua tải và
công suất đầu vào, trạng thái nào phù hợp với yêu cầu bài toán đặt ra sẽ được lựa
chọn và tiến hành đóng cắt cho trạng thái chuyển mạch tiếp theo.
2
CHƯƠNG 2. PHƯƠNG PHÁP THỰC HIỆN
thu được dạng rời rạc hóa (2.1) trong thời gian lấy mẫu Ts.
Việc rời rạc hóa được thực hiện bằng cách lấy đạo hàm gần đúng như sự chênh
𝑑𝒊𝑠 𝒊𝑠 (𝑘+1)−𝒊𝑠(𝑘)
≈ (2.7)
𝑑𝑡 𝑇𝑠
3
Phương pháp rời rạc hóa này được chọn vì tính đơn giản. Tuy nhiên, có thể sử
dụng một phương pháp khác chính xác hơn, nhưng đối với tần số lấy mẫu nhanh,
hệ số của các mô hình thời gian rời rạc gần như giống nhau.
Xem xét các vectơ điện áp đầu vào và dòng điện theo tọa độ trực giao, đầu
vào tức thời được dự đoán là hoạt động và công suất phản kháng có thể được
biểu thị bằng phương trình
Đối với thời gian lấy mẫu nhỏ, có thể giả định
𝒗𝑠 (𝑘 + 1) = 𝒗𝑠 (𝑘 ) (2.10)
Tuy nhiên, nếu thời gian lấy mẫu không đủ nhỏ để xem xét hằng số điện áp lưới
giữa hai khoảng thời gian lấy mẫu, 𝒗𝑠 (𝑘 + 1) có thể được tính bằng cách bù góc
của vectơ điện áp trong một thời gian lấy mẫu
𝒗𝑠 (𝑘 + 1) = 𝒗𝑠 (𝑘 )ejΔθ (2.11)
(với Δθ=ωTs ) là góc dịch của vector điện áp lưới trong khoảng lấy mẫu và ω là
tốc độ góc của điện áp lưới.
Để điều chỉnh điện áp liên kết DC, một bộ điều khiển PI được sử dụng.
Các đầu ra của PI tương ứng với công suất cần thiết để bù lỗi điện áp liên kết dc.
Biến này đã được chỉ định là tham chiếu công suất hoạt động Pin.
[2]Khi triển khai bộ điều khiển dự đoán trong hệ thống thực, cần phải xem
xét một số vấn đề liên quan đến thời gian tính toán. Như đã trình bày ở (2.6),
4
is(k+1) được tính bằng giá trị của dòng điện đo được is(k) và điện áp is(k+1). Bây
giờ giả sử rằng điện áp đã chọn sẽ được áp dụng ngay lập tức (k+1), cần phải dự
đoán hành vi của dòng điện cho đến thời điểm (k+2) . Bằng cách dịch biểu thức
𝑅𝑆 𝑇𝑆 𝑇𝑆
𝒊𝑠 (𝑘 + 2) = (1 − ) 𝒊𝑠 (𝑘 + 1) + [𝒗𝑠 (𝑘 + 1) − 𝒗𝑎𝑓𝑒 (𝑘 + 1)] (2.12)
𝐿𝑆 𝐿𝑆
𝒗𝑠 (𝑘 + 2) = 𝒗𝑠 (𝑘 + 1)ejΔθ (2.13)
𝒊𝑠 (𝑘 + 2) sẽ thay đổi phụ thuộc vào việc thay đổi giá trị 𝒗𝑎𝑓𝑒 (𝑘 + 1) vì giá trị
của các tham số còn lại đã được cố định. Việc điều khiển giá trị của 𝒗𝑎𝑓𝑒 (𝑘 + 1)
sẽ trực tiếp điều khiển được giá trị của dòng điện cũng như giá trị của công suất
theo giá trị mong muốn.
Đối với bộ chỉnh lưu, công suất đầu vào tác dụng và phản kháng được
điều khiển, do đó hàm chi phí đánh giá sai số trong công suất đầu vào.
Dòng điện đầu vào 𝒊𝑠 (𝑘 ) được đo và dòng điện tương lai 𝒊𝑠 (𝑘 + 1) được
tính toán bằng cách sử dụng điện áp chuyển đổi được áp dụng 𝒗𝑎𝑓𝑒 (𝑘 ). Dự đoán
về dòng điện trong tương lai 𝒊𝑠 (𝑘 + 2) được tạo ra cho mỗi 1 trong 7 vector điện
áp có thể do AFE tạo ra. Những dự đoán này được sử dụng để tính toán công suất
tác dụng và phản kháng đầu vào trong tương lai, 𝑃𝑖𝑛 (𝑘 + 2) và 𝑄𝑖𝑛 (𝑘 + 2) , sử
dụng (2.8) và (2.9) đã đi trước một bước về thời gian.
Mỗi dự đoán và được đánh giá bởi hàm chi phí 𝑔𝑎𝑓𝑒 .
Hàm chi phí 𝑔𝑎𝑓𝑒 tóm tắt hành vi mong muốn của chỉnh lưu: giảm thiểu công
suất phản kháng 𝑄𝑖𝑛 và kiểm soát hoạt động công suất 𝑃𝑖𝑛 bằng giá trị tham chiếu
Pin*.
∗
𝑔𝑎𝑓𝑒 = |𝑄𝑖𝑛 (𝑘 + 2)| + |𝑃𝑖𝑛 − 𝑃𝑖𝑛 (𝑘 + 2)| (2.16)
5
Bộ điều khiển công suất tích cực có mục đích là đạt được công suất đầu ra
gần nhất với giá trị tham chiếu và ta có thể thay đổi điện áp liên kết một
chiều. Đối với mỗi vectơ điện áp 𝒗𝑎𝑓𝑒 (𝑘 + 1) khác nhau ta sẽ thu được giá trị
khác nhau của hàm chi phí 𝑔𝐴𝐹𝐸 . Với vecto điện áp cho ra kết quả nhỏ nhất của
hàm chi phí, giảm thiểu được những sai nhiễu của công suất đầu vào sẽ được
chọn cho thời gian lấy mẫu tiếp theo.
6
CHƯƠNG 3. MÔ PHỎNG VÀ KẾT QUẢ
Với ngôn ngữ lập trình C, ta nạp code sau vào mô hình:
#include <Stdlib.h>
#include <String.h>
#include <math.h>
#define Ts 30.0e-6
7
#define pi 3.14159265359
#define f0 50.0
float theta;
int vector_opt =0;
int S1_OP=0,S2_OP=0,S3_OP=0,S4_OP=0,S5_OP=0,S6_OP=0;
float IA=0.0, IB=0.0, IC=0.0;
int k =1;
float I_AL[4] = 0,0,0,0, I_BE[4] = 0,0,0,0;
float V_AFE_AL[3] = 0,0,0, V_AFE_BE[3] = 0,0,0;
float VS_AL[3] = 0,0,0, VS_BE[3] = 0,0,0;
float S_AL=0.0, S_BE=0.0;
float EA=0.0, EB=0.0, EC = 0.0;
float Jmin=0.0, Jc=0.0;
int j=0;
float time=0.0;
float Preal =0.0, Qreal =0.0;
float P_next2 =0.0, Q_next2 =0.0;
float P_REF =900, Q_REF=0.0;
float L = 10e-2, R =0.1;
float Vdc = 0.0;
float Ipeak = 5.0;
float Vdcref = 400;
nt INV[8][3] =
{
{0,0,0},
{1,0,0},
{1,1,0},
{0,1,0},
{0,1,1},
{0,0,1},
{1,0,1},
{1,1,1}
};
void VECTOR_APPLY(int x)
8
{
S1_OP=INV[x][0];
S3_OP=INV[x][1];
S5_OP=INV[x][2];
S2_OP=1-S1_OP;
S4_OP=1-S3_OP;
S6_OP=1-S5_OP;
}
void ABC2ALBE(float *x_al, float *x_be, float xa, float xb, float xc)
{
*x_al = 2.0/3.0*(xa - 0.5 * xb - 0.5* xc );
*x_be = 1/(sqrt(3.0)) * (xb - xc);
}
float costfunction(float P_next2, float Q_next2, float P_ref, float Q_ref)
{
float sum=0;
sum = (P_next2-P_ref)*(P_next2-P_ref) + (Q_next2-Q_ref)*(Q_next2-Q_ref);
return sum;
}
float PI_V_outlast1 = 0.0; float PI_V_elast1 = 0.0;
float Kpvp = 3, Kivp = 300;
float PI(float error, float *PI_elast1, float *PI_outlast1, float Kp, float Ki, float T)
{
float PI_out;
PI_out = *PI_outlast1 + (Kp+Ki*T*0.5)*error + (Ki*T*0.5-Kp) * *PI_elast1;
*PI_elast1 = error;
*PI_outlast1 = PI_out;
return PI_out;
}
VECTOR_APPLY(vector_opt);
IA = Ia[0];
IB = Ib[0];
IC = Ic[0];
EA = Ea[0];
9
EB = Eb[0];
EC = Ec[0];
Vdc = vdc[0];
ABC2ALBE(&I_AL[k], &I_BE[k], IA, IB, IC);
ABC2ALBE(&VS_AL[k], &VS_BE[k], EA, EB, EC);
P_REF = PI(Vdcref - Vdc , &PI_V_elast1, &PI_V_outlast1, Kpvp, Kivp, Ts);
ABC2ALBE(&S_AL, &S_BE, INV[vector_opt][0], INV[vector_opt][1],
INV[vector_opt][2]);
V_AFE_AL[k] = S_AL *Vdc;
V_AFE_BE[k] = S_BE *Vdc;
I_AL[k+1] = (1-R*Ts/L)* I_AL[k] + Ts/L*(VS_AL[k] - V_AFE_AL[k]);
I_BE[k+1] = (1-R*Ts/L)* I_BE[k] + Ts/L*(VS_BE[k] - V_AFE_BE[k]);
Preal = VS_AL[k] * I_AL[k] + VS_BE[k] * I_BE[k];
Qreal = VS_BE[k] * I_AL[k] - VS_AL[k] * I_BE[k];
Jmin = 1e30;
for(j=0; j<7; j++)
{
ABC2ALBE(&S_AL, &S_BE, INV[j][0], INV[j][1], INV[j][2]);
V_AFE_AL[k+1] = S_AL * Vdc;
V_AFE_BE[k+1] = S_BE * Vdc;
I_AL[k+2] =(1-R*Ts/L)* I_AL[k+1] + Ts/L*(VS_AL[k] -V_AFE_AL[k+1]);
I_BE[k+2] =(1-R*Ts/L)* I_BE[k+1] + Ts/L*(VS_BE[k] -V_AFE_BE[k+1]);
P_next2 = VS_AL[k] * I_AL[k+2] + VS_BE[k] * I_BE[k+2];
Q_next2 = VS_BE[k] * I_AL[k+2] - VS_AL[k] * I_BE[k+2];
Jc = costfunction(P_next2, Q_next2, P_REF, Q_REF);
if(Jc < Jmin)
{
Jmin = Jc;
vector_opt = j;
}
}
time = time + Ts;
if(time>0.4) Vdcref=300;
if(time>0.7) Vdcref=700;
10
Với các tham số được chọn khi thiết lập chương trình là: R = 0.1Ω, L = 10−2 𝐻,
C = 470µF Vs = 150V/50Hz, Ts = 30µs và các thông số của bộ điều khiển PI
tương ứng K pvp = 3, Kivp = 300.
Các thông số như P đặt và Q đặt được so sánh với giá trị mô phỏng sẽ
được biểu diễn qua màn hình scope bằng cách đưa các giá trị vào như sau
11
3.3 Kết quả mô phỏng
Hình trên là kết quả khi mô phỏng bằng Matlab simulink trong thời gian 1
giây với các giá trị Vdc vào thay đổi tại 0,4s và 0,7s. Ta thấy thuật toán điều
khiển cho thấy sự thay đổi nhanh chóng của P và Q khi thay đổi Vdc, và sự
chênh lệch giữa giá trị mô phỏng và giá trị đặt là không đáng kể. Sự sai khác nhỏ
xảy ra do việc xấp xỉ và miền thời gian rời rạc theo từng chu kì lấy mẫu.
12
CHƯƠNG 4. KẾT LUẬN
Điều khiển dự báo công suất cho bộ chỉnh lưu sử dụng ngôn ngữ lập trình C
vô cùng đơn giản, dễ thực hiện nhưng là một kỹ thuật quan trọng trong các hệ
thống điện tử công suất, đặc biệt là trong các ứng dụng đòi hỏi hiệu suất cao và
khả năng đáp ứng nhanh. Đồ án này đã chứng minh tính khả thi của việc áp dụng
kỹ thuật điều khiển dự báo công suất cho bộ chỉnh lưu bằng ngôn ngữ lập trình C
từ đó tiếp tục cải tiến và mở rộng ứng dụng của kĩ thuật này nói riêng và ứng
dụng của cả lĩnh vực điện tử công suất nói chung vào các hệ thống điện trong
công nghiệp cũng như trong cuộc sống hằng ngày
13
TÀI LIỆU THAM KHẢO
14