PDA

View Full Version : Cứu em phần lập trình Mạch PFC!


cuongthinh
02-06-2009, 06:33 PM
http://i634.photobucket.com/albums/uu70/cuongthinh/PFCBoostconverter.jpg
Em đang làm mạch này mà lập trình mãi nó vẫn không chạy cho. Một tuần nữa em phải bảo vệ tốt nghiệp về cái này rồi mà kô tìm ra lỗi ở đâu! Mong các cao thủ giúp em với?
Chân PWM ra của em đã có xung ra nhưng kô đúng theo ý muốn em cũng kô hiểu tại sao nữa, hic

Chương trình của em đây:
#include <p30f4011.h>
#include <dsp.h>
#include <math.h>

_FOSC(CSW_FSCM_OFF & FRC_PLL16);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_OFF & MCLR_EN);
_FGS(CODE_PROT_OFF);

//------------------------------------------------------------------------------
//Cac hang so cua chuong trinh (gia tri tuc thoi dung trong chuong trinh)

#define Fcy 32000000 //Tan so thuc thi lenh
#define Fpwm 40000 //Tan so PWM = 40 kHz
#define vOutmax Q15(0.9)
#define vOutmin Q15(0.1)
#define iOutmax Q15(0.9)
#define iOutmin Q15(0.1)

//Cac prototype cho cac chuong trinh con
void Init_PORTS(void);
void Init_MCPWM(void);
void Init_ADC10(void);
void CalciPI( fractional iInRef, fractional iInMeas);
void CalcvPI( fractional vInRef, fractional vInMeas);
void InitiPI(void);
void InitvPI(void);

//Cac bien toan cuc
fractional Vo,Vac,Iac,Vcom,vPI,Iref,Vavg;
fractional iSum, iExc, iErr;
fractional vSum, vExc, vErr;
fractional iU, iOut, vU, vOut;
int n,m,k;
unsigned int duty;
//------------------------------------------------------------------------------
//Chuong trinh chinh
int main(void) {

void InitvPI();
void InitvPI();
Init_PORTS(); //Khoi tao cac cong I/O
Init_MCPWM(); //Khoi tao module PWM
Init_ADC10();
while(1) Nop();
}

//Chuong trinh con khoi tao cac cong I/O, de xuat cac tin hieu PWM, va doc tin
//hieu dieu chinh cua bien tro tai AN0
void Init_PORTS(void) {
LATE = 0; //Xoa thanh ghi chot cac tin hieu PWM
TRISE = 0; //Tin hieu PWM nam tai RE0
TRISB = 0x0007; //RB0 den RB2 la ngo vao, cac chan RB khac la ngo ra
}

//Chuong trinh con khoi tao module chuyen doi A/D
// AN0 phan hoi Vac, AN1 phan hoi Iac, AN2 phan hoi Vo
void Init_ADC10(void) {
ADPCFG = 0b1111111111111000; // RB0,RB1,RB2 = analog input
ADCON1 = 0b0000001001101100; // SIMSAM bit = 1 implies ...
// simultaneous sampling
// ASAM = 1 for auto sample after convert
// SSRC = 011 for PWM trigger
// integer output
ADCSSL=0x0007; // Lan luot quét ANO, AN1, AN2 kéet qua lan luot luu vao ADCBUF0->2
ADCON3 = 0x0302; // Auto Sampling 3 Tad, Tad = internal 2 Tcy
ADCON2 = 0b0000010000001000; // CHPS= 00 Convert CHO
// SMPI = 0010 for interrupt after 3 converts
// CSCNA=1 scan input
ADCHS=0;
_ADIF = 0; //Xoa co ngat ADC
_ADIE = 1; //Cho phep ngat ADC
_ASAM = 1; //Khoi dong che do tu dong lay mau
ADCON1bits.ADON = 1; // turn ADC ON
}

//Chuong trinh con khoi tao module PWM
void Init_MCPWM(void) {
PTPER = Fcy/Fpwm-1; //Dat thanh ghi chu ky voi tan so PWM = 40 kHz
SEVTCMP = PTPER;
PWMCON1 = 0x070F; //Chi dung cac chan PxL, mot cach doc lap
OVDCON = 0xFF00; //Khong dung overdrive
PDC1 = 200; //Khoi tao PWM1, 2, va 3 la 25%
PWMCON2 = 0x0F00; //Postscale = 1:10
PTCON = 0x8000; //Kich hoat module PWM
}

void CalciPI( fractional iInRef, fractional iInMeas)
{ iErr = iInRef - iInMeas;
iU = iSum + Q15(8.174) * iErr; //kpz = 8.174 = 0.00025 fraction
if( iU > iOutmax ) iOut = iOutmax;
else {
if( iU < iOutmin ) iOut = iOutmin;
else iOut = iU ;
}
iSum = iSum + Q15(4.266)*iErr; //kiz = 4.266 = 0.00013 fraction
}

void CalcvPI( fractional vInRef, fractional vInMeas)
{ vErr = vInRef - vInMeas;
vU = vSum + Q15(49.36) * vErr; //kpz = 49.36 = 0.0015 fraction
if( vU > vOutmax ) vOut = vOutmax;
else {
if( vU < vOutmin ) vOut = vOutmin;
else vOut = vU ;
}
vSum = vSum + Q15(48.0)*vErr; //kiz = 48 = 0.001465 fraction
}

void InitvPI(void)
{
vSum = 0;
vOut = 0;
}

void InitiPI(void)
{
iSum = 0;
iOut = 0;
n = 0;
k = 0;
}


//Trinh phuc vu ngat cho ADC

void __attribute__((__interrupt__ , auto_psv)) _ADCInterrupt(void)
{
Vac = ADCBUF0; //4kHz
Vavg = Vavg + Vac;
if (k=40) { Vcom = Q15(1)/(Vavg*Vavg); k = 0; }
else (k++);
if (n=40) Vo = ADCBUF2; // tao bien dem de duoc Vac voi tan so 100Hz (ADC trich mau voi tan so 4kHz)
else (n++) ;
CalcvPI(Q15(1),Vo); // V_refer = 1V , Tinh toan khau PI ap
vPI = vOut; // Tin hieu ra khau PI ap
Iref = vPI*Vcom*Vac*Q15(2.4); //Voi km=2.4
Iac = ADCBUF1; // Iac voi tan so 4kHz (ADC trich mau voi tan so 4kHz)
CalciPI(Iref,Iac); // Tinh toan Pi dong
// dai luon tham chieu la Iref
// Tin hieu phan hoi la Iac
PDC1 = (unsigned int)((iOut*32768)*2*PTPER); ;// Update thanh ghi chu ki nhiem vu
_ADIF = 0;

}

tungnh
03-06-2009, 12:23 AM
http://i634.photobucket.com/albums/uu70/cuongthinh/PFCBoostconverter.jpg
Em đang làm mạch này mà lập trình mãi nó vẫn không chạy cho. Một tuần nữa em phải bảo vệ tốt nghiệp về cái này rồi mà kô tìm ra lỗi ở đâu! Mong các cao thủ giúp em với?
Chân PWM ra của em đã có xung ra nhưng kô đúng theo ý muốn em cũng kô hiểu tại sao nữa, hic

Chương trình của em đây:
#include <p30f4011.h>
#include <dsp.h>
#include <math.h>

_FOSC(CSW_FSCM_OFF & FRC_PLL16);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_OFF & MCLR_EN);
_FGS(CODE_PROT_OFF);

//------------------------------------------------------------------------------
//Cac hang so cua chuong trinh (gia tri tuc thoi dung trong chuong trinh)

#define Fcy 32000000 //Tan so thuc thi lenh
#define Fpwm 40000 //Tan so PWM = 40 kHz
#define vOutmax Q15(0.9)
#define vOutmin Q15(0.1)
#define iOutmax Q15(0.9)
#define iOutmin Q15(0.1)

//Cac prototype cho cac chuong trinh con
void Init_PORTS(void);
void Init_MCPWM(void);
void Init_ADC10(void);
void CalciPI( fractional iInRef, fractional iInMeas);
void CalcvPI( fractional vInRef, fractional vInMeas);
void InitiPI(void);
void InitvPI(void);

//Cac bien toan cuc
fractional Vo,Vac,Iac,Vcom,vPI,Iref,Vavg;
fractional iSum, iExc, iErr;
fractional vSum, vExc, vErr;
fractional iU, iOut, vU, vOut;
int n,m,k;
unsigned int duty;
//------------------------------------------------------------------------------
//Chuong trinh chinh
int main(void) {

void InitvPI();
void InitvPI();
Init_PORTS(); //Khoi tao cac cong I/O
Init_MCPWM(); //Khoi tao module PWM
Init_ADC10();
while(1) Nop();
}

//Chuong trinh con khoi tao cac cong I/O, de xuat cac tin hieu PWM, va doc tin
//hieu dieu chinh cua bien tro tai AN0
void Init_PORTS(void) {
LATE = 0; //Xoa thanh ghi chot cac tin hieu PWM
TRISE = 0; //Tin hieu PWM nam tai RE0
TRISB = 0x0007; //RB0 den RB2 la ngo vao, cac chan RB khac la ngo ra
}

//Chuong trinh con khoi tao module chuyen doi A/D
// AN0 phan hoi Vac, AN1 phan hoi Iac, AN2 phan hoi Vo
void Init_ADC10(void) {
ADPCFG = 0b1111111111111000; // RB0,RB1,RB2 = analog input
ADCON1 = 0b0000001001101100; // SIMSAM bit = 1 implies ...
// simultaneous sampling
// ASAM = 1 for auto sample after convert
// SSRC = 011 for PWM trigger
// integer output
ADCSSL=0x0007; // Lan luot quét ANO, AN1, AN2 kéet qua lan luot luu vao ADCBUF0->2
ADCON3 = 0x0302; // Auto Sampling 3 Tad, Tad = internal 2 Tcy
ADCON2 = 0b0000010000001000; // CHPS= 00 Convert CHO
// SMPI = 0010 for interrupt after 3 converts
// CSCNA=1 scan input
ADCHS=0;
_ADIF = 0; //Xoa co ngat ADC
_ADIE = 1; //Cho phep ngat ADC
_ASAM = 1; //Khoi dong che do tu dong lay mau
ADCON1bits.ADON = 1; // turn ADC ON
}

//Chuong trinh con khoi tao module PWM
void Init_MCPWM(void) {
PTPER = Fcy/Fpwm-1; //Dat thanh ghi chu ky voi tan so PWM = 40 kHz
SEVTCMP = PTPER;
PWMCON1 = 0x070F; //Chi dung cac chan PxL, mot cach doc lap
OVDCON = 0xFF00; //Khong dung overdrive
PDC1 = 200; //Khoi tao PWM1, 2, va 3 la 25%
PWMCON2 = 0x0F00; //Postscale = 1:10
PTCON = 0x8000; //Kich hoat module PWM
}

void CalciPI( fractional iInRef, fractional iInMeas)
{ iErr = iInRef - iInMeas;
iU = iSum + Q15(8.174) * iErr; //kpz = 8.174 = 0.00025 fraction
if( iU > iOutmax ) iOut = iOutmax;
else {
if( iU < iOutmin ) iOut = iOutmin;
else iOut = iU ;
}
iSum = iSum + Q15(4.266)*iErr; //kiz = 4.266 = 0.00013 fraction
}

void CalcvPI( fractional vInRef, fractional vInMeas)
{ vErr = vInRef - vInMeas;
vU = vSum + Q15(49.36) * vErr; //kpz = 49.36 = 0.0015 fraction
if( vU > vOutmax ) vOut = vOutmax;
else {
if( vU < vOutmin ) vOut = vOutmin;
else vOut = vU ;
}
vSum = vSum + Q15(48.0)*vErr; //kiz = 48 = 0.001465 fraction
}

void InitvPI(void)
{
vSum = 0;
vOut = 0;
}

void InitiPI(void)
{
iSum = 0;
iOut = 0;
n = 0;
k = 0;
}


//Trinh phuc vu ngat cho ADC

void __attribute__((__interrupt__ , auto_psv)) _ADCInterrupt(void)
{
Vac = ADCBUF0; //4kHz
Vavg = Vavg + Vac;
if (k=40) { Vcom = Q15(1)/(Vavg*Vavg); k = 0; }
else (k++);
if (n=40) Vo = ADCBUF2; // tao bien dem de duoc Vac voi tan so 100Hz (ADC trich mau voi tan so 4kHz)
else (n++) ;
CalcvPI(Q15(1),Vo); // V_refer = 1V , Tinh toan khau PI ap
vPI = vOut; // Tin hieu ra khau PI ap
Iref = vPI*Vcom*Vac*Q15(2.4); //Voi km=2.4
Iac = ADCBUF1; // Iac voi tan so 4kHz (ADC trich mau voi tan so 4kHz)
CalciPI(Iref,Iac); // Tinh toan Pi dong
// dai luon tham chieu la Iref
// Tin hieu phan hoi la Iac
PDC1 = (unsigned int)((iOut*32768)*2*PTPER); ;// Update thanh ghi chu ki nhiem vu
_ADIF = 0;

}

Phần cứng của PFC cũng rất quan trọng, phần cúng phải đúng thì bạn mới nói tới chuyện phần mềm,bạn post mạch nên xem nào
Về phần code của bạn, bạn nên đọc lại phần ADC , bạn chọn AN0-AN2 như vậy là không đúng, để thực hiện việc quét kênh bạn phải chọn các kênh CH0,CH1,CH2,CH3, như vậy bạn đã chưa chọn các kênh cho tín hiệu, tôi khuyên bạn nên xem application note về PFC sau: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en531747
Nó thực sự có ích với bạn đó, từ cách tính hàm PI, không phải ngẫu nhiên mà họ lại viết bằng ASM, họ viết như vậy để tiết kiệm thời gian tính toán lại , code ASM không có gì khó hiẻu cả,trong hàm PFC.s và hàm PI.s hầu như bạn không phải thay đổi gì cả, bạn nên đọc phần nhúng ASM va C như thế nào là được, cốt nhất là bạn phải hiểu bản chất của vấn đề. Tôi đã làm PFC này rồi và lấy nguyên 2 file PFC.s và PI.s và chỉnh sửa lại code một chút cho đúng phần cứng kết quả chạy khá ổn.

cuongthinh
03-06-2009, 08:10 AM
Mạch cứng của em đây:
http://i634.photobucket.com/albums/uu70/cuongthinh/DK.jpg
http://i634.photobucket.com/albums/uu70/cuongthinh/LUC.jpg

Em đã đọc code mẫu của nó rồi, vấn đề là em chưa hiẻu đc bộ thông số này:

.equ pfcMaxDuty, 320 ; Saturate the maximum duty cycle value
.equ voltMinRef, 200 ; Corresponds to 40V reference
.equ pfcVoltKp, 30000 ; Kp for voltage compensator
.equ pfcVoltKi, 1600 ; Ki for voltage compensator
.equ pfcVoltKc, 107 ; Kc for voltage compensator
.equ pfcVoltOutMax, 32767 ; Maximum Value for VPI output
.equ pfcVoltOutMin, 0 ; Minimum Value for VPI output
.equ VdcRef, 28736 ; Vdc Output Reference corresponds to 400 volt
.equ pfcCurrKp, 1200 ; Kp for current compensator
.equ pfcCurrKi, 7000 ; Ki for current compensator
.equ pfcCurrKc, 50 ; Kc for current compensator
.equ pfcCurrOutMax, 32767 ; Maximum Value for IPI output
.equ pfcCurrOutMin, 800 ; Minimum Value for IPI output
.equ MinimumVavg,3000 ; Minimum Value of Vavg
.equ DutyScalingFactor, 100 ; Scaling Factor for PWM Duty Cycle
.equ AdcConvFactor, 0x8000 ; Factor for scaling the ADC Results
.equ SoftStartIncrement, 10 ;Softstart count to slowly rise the DC Bus Voltage
.equ Km1, 2 ; Scaling constant
.equ Km2, 1 ; Scaling constant

Trong đó có nhiều thông số em hiểu nhưng có nhiều cái thì chịu

cuongthinh
03-06-2009, 03:58 PM
He, hỏi xin thì ngại quá nhưng nếu anh tungnh ra tay hải hà có thể cho em tham khảo phần code của anh đc kô? 4 ngày nữa em phải bảo vệ rồi mà chưa có mạch, gấp lắm rồi!

tungnh
03-06-2009, 05:59 PM
He, hỏi xin thì ngại quá nhưng nếu anh tungnh ra tay hải hà có thể cho em tham khảo phần code của anh đc kô? 4 ngày nữa em phải bảo vệ rồi mà chưa có mạch, gấp lắm rồi!

.equ pfcMaxDuty, 320 ; Saturate the maximum duty cycle value
.equ voltMinRef, 200 ; Corresponds to 40V reference
.equ pfcVoltKp, 30000 ; Kp for voltage compensator
.equ pfcVoltKi, 1600 ; Ki for voltage compensator
.equ pfcVoltKc, 107 ; Kc for voltage compensator
.equ pfcVoltOutMax, 32767 ; Maximum Value for VPI output
.equ pfcVoltOutMin, 0 ; Minimum Value for VPI output
.equ VdcRef, 28736 ; Vdc Output Reference corresponds to 400 volt
.equ pfcCurrKp, 1200 ; Kp for current compensator
.equ pfcCurrKi, 7000 ; Ki for current compensator
.equ pfcCurrKc, 50 ; Kc for current compensator
.equ pfcCurrOutMax, 32767 ; Maximum Value for IPI output
.equ pfcCurrOutMin, 800 ; Minimum Value for IPI output
.equ MinimumVavg,3000 ; Minimum Value of Vavg
.equ DutyScalingFactor, 100 ; Scaling Factor for PWM Duty Cycle
.equ AdcConvFactor, 0x8000 ; Factor for scaling the ADC Results
.equ SoftStartIncrement, 10 ;Softstart count to slowly rise the DC Bus Voltage
.equ Km1, 2 ; Scaling constant
.equ Km2, 1 ; Scaling constant

Những biến này đã được giải thích trong phần code rồi, bạn đọc là hiểu thôi.
Bạn đọc code của tôi rồi chỉnh sủa cho đúng, những cái gì không cần thiết như bàn phím, LCD bạn có thể bỏ.Chúc bạn tai qua nạn khỏi.

cuongthinh
03-06-2009, 08:02 PM
Em cảm ơn anh nhé. Có j em chưa hiểu em hỏi anh trả lời giúp em nhé. Sau vụ này Anh bố trí dành cho em một buổi anh em mình đi uống cafe anh nhé.
Em đọc qua code của anh rồi, Có phải anh dùng
+ AN2 để phàn hồi dòng Iac
+ AN3 để phản hồi áp sau chỉnh lưu Vac
+ AN4 để phản hồi áp ra

Các ngắt ngoài anh dùng làm gì thế ạ?
Anh có thể cho em phần kết nối mạch cứng của anh để em dễ đối chiếu với cái của em đc kô ạ? chỉ cần phần chính thôi, các phần như bàn phím, LCD hay uart thì kô cần ạ.

các hệ số phản hồi anh lấy bằng bao nhiêu? Điện áp vào cực đại tại các chân ADC của anh là bao nhiêu a?

cuongthinh
04-06-2009, 06:23 PM
Anh tungnh ơi, Em về đọc file của anh có nhiều thông số khó hiểu quá. Em chỉ làm mạch PFC với điện áp đầu vào là 12V thôi. Anh làm rồi có kinh nghiệm chỉnh sửa rồi truyền lại cho em ít. Em ngồi cả ngà chỉnh mấy cái Kp, Ki mà mạch vần chưa ổn định được. Giúp em với. Anh chỉ cho em cần chỉnh những thông số nào nhé

tungnh
05-06-2009, 12:58 AM
Anh tungnh ơi, Em về đọc file của anh có nhiều thông số khó hiểu quá. Em chỉ làm mạch PFC với điện áp đầu vào là 12V thôi. Anh làm rồi có kinh nghiệm chỉnh sửa rồi truyền lại cho em ít. Em ngồi cả ngà chỉnh mấy cái Kp, Ki mà mạch vần chưa ổn định được. Giúp em với. Anh chỉ cho em cần chỉnh những thông số nào nhé
Mạch lực của tôi cũng gióng của bạn thôi,tôi ráp bằng tay. Cái này tôi làm cũng lâu rồi nên không nhớ lắm, nhưng điên áp đưa váo các chân AN0,AN3,AN4 <=1. Bạn tính toán hệ số cho đúng.
Ngắt ngoài dùng ứng dụng bàn phím. Việc chỉnh hệ số kp,ki gian lan lắm. Tùy thuộc vào thông số phần cứng nữa. Tôi dùng phím( LCD hiển thị), để tăng giảm các thông số như kp,ki,v_reference,vv....Dùng 1 động cơ nối vào đầu ra đê test dòng.Dùng dao động kí để quan sát xung PWM. Để biết khi nào thì ổn thì bạn phải chắc lý thuyết. Ví không trực tiếp bảo bạn được nên cũng khó đó, chúc bạn may mắn.

cuongthinh
05-06-2009, 08:00 AM
Vâng em cảm ơn anh. Em cũng dùng dao đông kí nhưng em dùng để quan sát dòng điện đầu vào. có mấy thông số này em chưa hiểu, cách tính nó thế nào:

int VdcR_c = 300,kpV_c = 100,kiV_c = 10,kpI_c = 10,kiI_c = 10,pfcMaxDuty_c = 10;
.equ voltMinRef, 200; Corresponds to 40V reference
.equ pfcCurrOutMax, 32767 ; Maximum Value for IPI output
.equ pfcCurrOutMin, 800 ; Minimum Value for IPI output
.equ MinimumVavg,3000 ; Minimum Value of Vavg
.equ DutyScalingFactor, 100 ; Scaling Factor for PWM Duty Cycle
.equ AdcConvFactor, 0x8000 ; Factor for scaling the ADC Results


.equ PI_qdSumL,0
.equ PI_qdSumH,2
.equ PI_qKp,4
.equ PI_qKi,6
.equ PI_qKc,8
.equ PI_qOutMax,10
.equ PI_qOutMin,12
.equ PI_qInRef,14
.equ PI_qInMeas,16
.equ PI_qOut,18

.equ NKo,4


Điện áp của em có 12V thôi, kô biết có phải sửa các thông số trên kô (mạch của anh là 220V phải kô ạ?)

cuongthinh
08-06-2009, 09:59 PM
He, mạch của em chạy ngon rồi. em dùng lại hai file PFC.s và PI.s của nó. Chương trình của anh tungnh cho em em đã thử nhưng kô hiểu sao kô có xung ra. Dù sao cũng cảm ơn anh nhiều lắm. Em mới học lập trình cho dsPIC con gà lắm, post bài lên diễn đàn có mỗi anh tungnh nhiệt tình giúp đỡ. Bây giờ Em lại có cách khác để thực hiện hai khâu PI, dùng C hẳn hoi mà chương trình chạy vẫn nhanh.

vodanh_bk
08-06-2009, 11:12 PM
He, mạch của em chạy ngon rồi. em dùng lại hai file PFC.s và PI.s của nó. Chương trình của anh tungnh cho em em đã thử nhưng kô hiểu sao kô có xung ra. Dù sao cũng cảm ơn anh nhiều lắm. Em mới học lập trình cho dsPIC con gà lắm, post bài lên diễn đàn có mỗi anh tungnh nhiệt tình giúp đỡ. Bây giờ Em lại có cách khác để thực hiện hai khâu PI, dùng C hẳn hoi mà chương trình chạy vẫn nhanh.

Chúc mừng bạn Toàn nhé. Bạn đã giải quyết được bài toàn điều khiển PFC cả phần lập trình lẫn phần lực thì không ai có thể nói bạn là gà được. Bảo vệ tốt nghiệp ngon lành nhé.

thaithien
09-06-2009, 02:09 AM
Anh cuongthinh cho xin phần code của anh có được không ?Cả phần mô phỏng nữa đi.
Email của em:ngththien@gmail.com
Cảm ơn anh nhiều !!!!

tungnh
09-06-2009, 04:40 PM
He, mạch của em chạy ngon rồi. em dùng lại hai file PFC.s và PI.s của nó. Chương trình của anh tungnh cho em em đã thử nhưng kô hiểu sao kô có xung ra. Dù sao cũng cảm ơn anh nhiều lắm. Em mới học lập trình cho dsPIC con gà lắm, post bài lên diễn đàn có mỗi anh tungnh nhiệt tình giúp đỡ. Bây giờ Em lại có cách khác để thực hiện hai khâu PI, dùng C hẳn hoi mà chương trình chạy vẫn nhanh.
Hi Thì tôi đã bảo bạn rồi 2 file PFC.s và PI.s là hai file chuẩn , chỉ việc xơi thôi, Chúc mừng bạn nhé. Chúc bạn bảo vệ thật tốt.