7.1.4.2. Đi n áp dây VAC.
Hình 7.11: Dạng sóng điện áp dây ở tốc độ 2500 rpm.
7.1.4.3. Dòng đi n pha mA.
Hình 7.12: Dạng sóng dòng điện ở tốc độ 2500 rpm.
7.2. Nhận xét.
Đi n áp dây:tín hiệu điện áp đẹp hơn khi tốc độ cao hơn.
Đi n áp pha: tín hiệu điện áp pha đúng với lý thuyết của bộ nghịch lưu 3 pha 2 bậc, tốc độ càng cao thì dạng tín hiệu đẹp hơn.
Dòng đi n stator:dòng điện có dạng hình Sine, lệch nhau 1200 .
Ta thấy ở vận tốc cao (2500 rpm) thì dạng sóng của dòng điện và điện áp bị méo dạng, không còn đúng với lý thuyết. Điều này có thể giải thích là do quá điều chế.
Chương 8 K T LU N
8.1. K t luận
Sau khi chạy mô hình, học viên có một số nhận xét như sau:
Tín hiệu dòng điện stator, điện áp dây, điện áp pha đúng với dạng của bộ nghịch lưu 3 pha 2 bậc.
Tín hiệu của dòng Isd, Isq và tốc độ (File quay phim) đã chứng minh được đây là phương pháp điều khiển định hướng tựa từ thông - FOC.
Tuy nhiên chất lượng các dạng tín hiệu cònthấp.
8.2. Các vấn đềđã th c hi n.
Nghiên cứu thành công lý thuyết điều khiển động cơ theo phương pháp FOC.
Xây dựng giải thuật lập trình điều khiển tốc độ động cơ KĐB theo phương pháp
FOC.
Tìm hiểu cấu trúc của DSP TMS320F2812.
Áp dụng lý thuyết điều khiển FOC vào lập trình thử nghiệm trên mô hình. Mô hình chạy thử với điện áp 310 VDC ở ngõ vào.
8.3. Các vấn đề còn t n t i.
Mô hình mới chỉ chạy thử nghiệm với điện áp còn thấp (310 VDC), nên tốc độ của động cơ chưa đạt đến định mức (đồng thời dòng Isd đặt không được cao, khoảng 0.3). Do đó khả năng mang tải của động cơ còn hạn chế.
Chất lượng tín hiệu dòng stator chưa thật tốt, cần hiệu chỉnh lại các thông số Kp, Ki cho phù hợp.
8.4. Hướng phát triển.
Chạy với điện áp vào là 537 VDC để mô hình đạt được tốc độ định mức.
Lập trình giao tiếp với máy tính để hiển thị các thông số: tốc độ, dòng điện, điện
áp, đặt tốc độ trên máy tính.
Lập trình điều khiển động cơ không đồng bộ theo phương pháp FOC ước lượng tốc độ bằng cách không dùng Encoder.
TÀI LI U THAM KH O
[1]. Texas Instruments, Field Orientated Control of Three phase AC-motors, (BPRA073), December 1997.
[2]. Texas Instruments, DSP Solution for Permanent Magnet Synchronous Motor, (BPRA044), November 1996.
[3]. Texas Instruments, Clarke & Park Transforms on the TMS320C2xx, (BPRA048), November 1996.
[4]. Texas Instruments, Digital Motor Control Software Library (SPRU485A), August 2001, Revised October 2003.
[5]. Nguyễn Văn Nhờ, Điện tử công suất 1, NXB Đại học Quốc gia TP. Hồ
Chí Minh, 2002.
[6]. Nguyễn Văn Nhờ, Cơ sở truyền động điện, NXB Đại học Quốc gia TP. Hồ Chí Minh, 2003.
[7]. Phan Quốc Dũng –Tô Hữu Phúc, Truyền động điện, NXB Đại học Quốc gia TP. Hồ Chí Minh, 2003.
[8]. Nguyễn Hữu Phúc, Kỹ thuật điện 2 (Máy điện quay), NXB Đại học Quốc gia TP. Hồ Chí Minh, 2003.
[9]. Nguyễn Phùng Quang, Điều khiển tự động truyền động điện xoay chiều ba pha, NXB Giáo dục, 1998.
[10]. Nguyễn Thị Phương Hà – Huỳnh Thái Hoàng, Lý thuyết điều khiển tự động, NXB Đại học Quốc gia TP. Hồ Chí Minh, 2005.
PH L C
#include "DSP281x_Device.h" #include "DSP281x_Examples.h" #include "math.h"
// Khai bao Prototype cho cac chuong trinh con
void Gpio_select(void); // Thiet lap trang thai cho cac chan ngoai vi. void SpeedUpRevA(void); // Thiet lap tang toc RAM.
void InitSystem(void); // Thiet lap tan so cac xung nhip dung trong DSP. void init_eva(void); // Thiet lap cac bo quan ly su kien A.
void Space_vector(void); // Dieu che vector khong gian.
int Sin(float); // Tinh Sin bang cach tra bang.
int Cos(float); // Tinh Cos bang cach tra bang.
void InitAdc(void); // Khoi dong ADC.
void init_adc(void); // Thiet lap ADC.
void read_adc(void); // Doc va xu ly tin hieu ADC.
void read_encoder(void); // Doc xung encoder va tinh toan toc do.
interrupt void cpu_timer0_isr(void); // Doc hoi tiep, tinh toan dieu khien dong co.
// Thong so dong co
#define Lm 0.384 // Dien cam magnetic (H).
#define Rr 9.3 // Dien tro cuon roto (Om).
#define Lr 0.4 // Dien cam cuon roto Lr=Lh+Lr_1(H).
#define Rs 13.5 // Dien tro cuon stator (Om).
#define Ls 0.42 // Dien cam cuon stator Ls=Lh+Ls_1(H).
#define In 2.1 // Dong dien dinh muc (A).
#define Vn 400.0 // Dien ap dinh muc (VAC).
#define p 1.0 // So doi cuc.
#define Ndm 2885 // Toc do dinh muc (rpm).
#define ADC_max 4095.0 // Gia tri ADC toi da
#define n_ref_max 2800.0 // Tan so dat toi da
#define Imax 2.5 // Dong dien cuc dai do duoc (A)
#define Kp_s 0.01 // He so Kp hieu chinh Isq_ref
#define Ki_s 0.007 // He so Ki hieu chinh Isq_ref
#define KP_VD 50.0 // He so Kp hieu chinh Vd
#define KI_VD 2000.0 // He so Ki hieu chinh Vd
#define KP_VQ 50.0 // He so Kp hieu chinh Vq
#define KI_VQ 2000.0 // He so Ki hieu chinh Vq
#define ISQMAX_DSP 1.7 // Gia tri chan Isq_ref
#define VDC 310.0 // Dien ap tu
#define pi 3.141593 // Gia tri hang so Pi
#define T_PWM 3750.0 // Chu ki dong ngat ung voi 5 kHz
#define Tx 250.0 // Chu ky tinh toan, lay mau du lieu , don vi uS
#define SO_XUNG_1VONG 4000.0 // Gia tri tran cua timer dem xung encoder
// Khai bao bien
float VEDMAX=VDC*0.577; // Gia tri chan tren cua Vd
float VEDMIN=-VDC*0.577; // Gia tri chan duoi cua Vd
float VEQMAX=VDC*0.577; // Gia tri chan tren cua Vq
float VEQMIN=-VDC*0.577; // Gia tri chan duoi cua Vq
float Speed_RPM = 0 ,Speed_REF = 0, Speed_RPM0=0; // Van toc rotor
int ADC0=0,ADC1=0,ADC2=0; // Gia tri ADC
float Ia=0, Ib=0; // Dong dien 3 pha
float Is_alpha=0, Is_beta=0, ISD=0, ISQ=0; // Dong dien he truc tinh va xoay
float ISQREF_DSP=0; // Dong Isq_ref
float ISDREF_DSP=0.3; // Dong Isd_ref
float VEDREF=0, VEQREF=0; // Dien ap stator he truc xoay
float ws=0; // Tan so goc cua tu thong (rad/s)
float Teta_cm_new=0, Teta_cm_old=0; // Goc cua tu thong rotor
// Cac he so trong khau PI
float E1SN=0, e= 0; // Khau PI cua toc do
float EP1ID=0, h= 0; // Khau PI cua ISDREF
float EP1IQ=0, i= 0; // Khau PI cua ISQREF
float l= 2*pi*p/60; // Doi don vi rpm(Co)-->rad/s(Dien)
// Include cac chuong trinh con #include "sin_table.h" #include "init_ev.h" #include "space_vector.h" #include "sin_cos.h" #include "encoder.h" #include "adc.h"
/////////////////////////////////////// CHUONG TRINH CHINH //////////////////////////////////////////////// void main(void)
{
InitSystem(); // Thiet lap he thong watchdog, tan so cac xung nhip
SpeedUpRevA(); // Thiet lap tang toc RAM
InitPieCtrl(); // Thiet lap bo ngat mo rong PIE
InitPieVectTable(); // Thiet lap bang ngat mo rong PIE
IER = 0x0001; // Cho phep duong ngat INT1
IFR = 0x0000; // Xoa cac co ngat
init_eva(); // Thiet lap trang thai bo quan ly su kien A
InitAdc(); // Khoi dong ADC
init_adc(); // Thiet lap trang thai bo ADC
Gpio_select(); // Thiet lap trang thai cac chan ngoai vi
EALLOW; // Lenh bao ve (bat dau)
PieVectTable.TINT0 = &cpu_timer0_isr; // Xac dinh vi tri chuong trinh ngat
InitCpuTimers(); // Thiet lap trang thai Cpu timer
ConfigCpuTimer(&CpuTimer0, 150, (Tx)); // Cau hinh: tan so xung la 150 Mhz
EvaRegs.COMCONA.bit.FCOMPOE=1; // PWM1->6 output enable
while(1) {
unsigned int giatri, donvi, chuc, tram, ngan, a, b;
a= Speed_REF;
b= Speed_RPM;
if (GpioDataRegs.GPBDAT.bit.GPIOB8==1) // chon gia tri hien thi
giatri= a; else giatri= b; donvi=giatri%10; ngan=giatri/1000; tram=giatri/100-ngan*10; chuc=giatri/10-tram*10-ngan*100;
GpioDataRegs.GPBDAT.all=donvi; // xuat ra port B gia tri don vi GpioDataRegs.GPFDAT.all=0x1;
DELAY_US(5000L);
GpioDataRegs.GPBDAT.all=chuc; // xuat ra port B gia tri chuc GpioDataRegs.GPFDAT.all=0x2;
DELAY_US(5000L);
GpioDataRegs.GPBDAT.all=tram; // xuat ra port B gia tri tram GpioDataRegs.GPFDAT.all=0x4;
DELAY_US(5000L);
GpioDataRegs.GPBDAT.all=ngan; // xuat ra port B gia tri ngan GpioDataRegs.GPFDAT.all=0x8;
DELAY_US(5000L); }
}
///////KET THUC CHUONG TRINH CHINH, BAT CHUONG TRINH NGAT //////// interrupt void cpu_timer0_isr(void)
{
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Xac nhan da vao ngat
read_encoder(); // Doc xung encoder va tinh toan toc do
read_adc(); // Doc va xu ly tin hieu ADC
// Tinh toan Isq
Speed_REF = ADC2 * n_ref_max/ADC_max; // Doc toc do tu bien tro
E1SN = Speed_REF - Speed_RPM; // PI Isq_ref dung cho FOC
e += E1SN*Ki_s*Tx/1000000; ISQREF_DSP = e + Kp_s*E1SN; if(ISQREF_DSP>ISQMAX_DSP) ISQREF_DSP=ISQMAX_DSP; else if(ISQREF_DSP<-ISQMAX_DSP)ISQREF_DSP=-ISQMAX_DSP; // Doc ADC Ib=(ADC0-2033)*0.00365; Ia=(ADC1-2033)*0.00341;
// Chuyen doi (abc --> alpha, beta) Is_alpha = Ia;
Is_beta = (Ia + 2*Ib)*0.57735;
// Chuyen truc tu (alpha, beta --> d,q)
ISD=Is_alpha*Cos(Teta_cm_old)*0.001+Is_beta*Sin(Teta_cm_old)*0.001; ISQ=-Is_alpha*Sin(Teta_cm_old)*0.001+Is_beta*Cos(Teta_cm_old)*0.001;
// Uoc luong goc tu thong
ws = Speed_RPM*l + ISQREF_DSP/ISDREF_DSP/Tr; // ws=w_rotor+w_slip
Teta_cm_new = Teta_cm_old + ws*Tx/1000000;
else if Teta_cm_old = Teta_cm_new;
// Tinh toan Vsd
EP1ID = ISDREF_DSP - ISD;
if (flag_VEDREF) h += EP1ID*KI_VD*Tx/1000000; VEDREF = h + KP_VD*EP1ID;
if(VEDREF >= VEDMAX) VEDREF = VEDMAX; else if(VEDREF <= VEDMIN) VEDREF = VEDMIN;
// Tinh toan Vsq
EP1IQ = ISQREF_DSP - ISQ;
if (flag_VEQREF) i += EP1IQ*KI_VQ*Tx/1000000; VEQREF = i + KP_VQ*EP1IQ;
if(VEQREF >= VEQMAX) VEQREF = VEQMAX; else if(VEQREF <= VEQMIN) VEQREF = VEQMIN;
// Chuyen truc tu (d,q -->alpha, beta )
VALFA_REF=-VEQREF*Sin(Teta_cm_new)*0.001+VEDREF*Cos(Teta_cm_new)*0.001; VBETA_REF=VEQREF*Cos(Teta_cm_new)*0.001+VEDREF* Sin(Teta_cm_new)*0.001;
// Thuc hien SVPWM Space_vector(); }