0
Tải bản đầy đủ (.pdf) (92 trang)

Phân tích khảo sát phương pháp điều chế độ rộng xung SPWM

Một phần của tài liệu TÌM HIỂU VÀ THIẾT KẾ BỘ BIẾN TẦN 3 PHA (Trang 71 -92 )

Để tạo ra điện áp xoay chiều bằng phương pháp SPWM, ta sử dụng một tín hiệu xung tam giác vtri (gọi là sóng mang) đem so sánh với một tín hiệu sin chuẩn vc(gọi là tín hiệu điều khiển). Nếu đem xung điều khiển này cấp cho bộ nghich lưu một pha, thì ở ngõ ra sẽ thu được dạng xung điện áp mà thành phần điều hòa cơ bản có tần số bằng tần số tín hiệu điều khiển vc và biên độ phụ thuộc vào nguồn điện một chiều cấp cho bộ nghịch lưu và tỷ số giữa biên độ sóng sin mẫu và biên độ sóng mang. Tần số sóng mang lớn hơn rất nhiều tần số tín hiệu điều khiển. Hình 3-3 miêu tả nguyên lý của của phương pháp điều chế SPWM một pha:

Hình 2-1: Nguyên lý điều chế SPWM một pha

Khi:

vc < ttri , VA0 = -Vdc/2

Đối với nghịch lưu áp ba pha có sơ đồ như hình 3-4. Để tạo ra điện áp sin ba pha dạng điều rộng xung, ta cần ba tín hiệu sin mẫu.

Hình 2-2: Nghịch lưu áp ba pha

Hình 2-3: Nguyên lý điều chế SPWM ba pha

Hệ số điều chế biên độ ma được định nghĩa là tỷ số giữa biên độ của tín hiệu điều khiển với biên độ của sóng mang:

c a tri V m V  (2-1) ma - hệ số điều biến

Vc - biên độ sóng điều khiển Vtri - biên độ sóng mang

Trong vùng tuyến tính (0 < ma < 1), biên độ của thành phần sin cơ bản VA01 (điện áp pha) trong dạng sóng đầu ra tỷ lệ với hệ số điều biến theo công thức:

dc A01 a V m V 2  (2-2)

Đối với điện áp dây là:

dc

AB1 a

V m 3V

2

 (2-3)

Như vậy trong phương pháp này biên độ điện áp dây đầu ra bộ nghịch lưu chỉ có thể đạt 86,67% điện áp một chiều đầu vào trong vùng tuyến tính (0 < ma < 1).

Hệ số điều chế tỷ số mf là tỷ số giữa tần số sóng mang và tần số tín hiệu điều khiển: tri f c f m f  (2-4) mf - hệ số điều chế tỷ số ftri - tần số sóng mang, bằng tần số PWM fc - tấn số tín hiệu điều khiển

Giá trị của mf được chọn sao cho nên có giá trị dương và lẻ. Nếu mf là một giá trị không nguyên thì trong dạng sóng đầu ra sẽ có các thành phần điều hòa phụ (subharmonic). Nếu mf không phải là một số lẻ, trong dạng sóng đầu ra sẽ tồn tại thành phần một chiều và các hài bậc chẵn. Giá trị của mf nên là bội số của 3 đối nghịch lưu áp ba pha vì trong điện áp dây đầu ra sẽ triệt tiêu các hài bậc chẵn và hài là bội số của ba.

Như vậy, nếu điện áp một chiều đầu vào không đổi, để điều chỉnh biên độ và tần số của điện áp đầu ra ta chỉ việc điều chỉnh biên độ và tần số của tín hiệu sin chuẩn

vc. Đặc trưng cơ bản của phương pháp này là thành phần sóng điều hòa của điện áp

ra. Muốn giảm các sóng điều hòa bậc cao cần phải tăng tần số sóng mang hay tần số PWM. Tuy nhiên càng tăng tần số PWM thì tổn hao chuyển mạch lại tăng lên.

2. Phương pháp điều chế tín hiệu Sin PWM ba pha theo luật U/f=const sử

dụng PSoC

Để tạo tín hiệu sin PWM ba pha, em sử dụng ba bộ PWMDB 8 bit kết hợp với một bộ Timer 16 bit có trong PSoC.

PWMDB là một module bao gồm một bộ điều chế độ rộng xung PWM 8 hoặc 16 bit kết hợp với một bộ DB 8bit có chức năng tạo dải an toàn. Bộ PWM tạo xung có biên độ và chu kỳ có thể lập trình được. Xung này sau đó được đưa đến bộ DB.

Chức năng tạo dải an toàn sẽ tạo ra trên cả hai đầu ra chính và đầu ra phụ của khối. Chức năng này sinh ra xung nhịp không gối lên nhau. Hai pha xung nhịp đó không bao giờ ở mức cao trong cùng một thời điểm và khoảng thời gian ở giữa hai pha đó gọi là dải an toàn. Độ rộng của dải an toàn được xác định bởi giá trị đặt trước của thanh ghi. Trong trường hợp này, nguồn xung nhịp cấp cho bộ tạo giải an toàn DB là một PWM, hai đầu ra của bộ DB Phase1 và Phase2 là hai PWM đảm bảo không gối lên nhau. Một tín hiệu tích cực trên đầu vào ‘Kill’ sẽ khóa cả hai đầu ra này ngay lập tức.

Module PWM được cấu hình sử dụng một hay hai khối số để tạo ra một bộ PWM 8 bit hay PWM 16 bit. Ở đây em sử dụng ba bộ PWMDB 8 bit. Việc sử dụng PWMDB 16 bit cũng tương tự. Mỗi bộ PWMDB 8 bit có hai đầu ra phase1 và

phase2, hai đầu ra này là hai tín hiệu cấp cho hai van trong cùng một kênh của bộ nghịch lưu áp ba pha.

Cách hoạt động của module PWMDB 8, 16 bit cũng như bộ Timer 16 bit có thể tham khảo trong datasheet của các module này trong phần phụ lục. Ở đây, em chỉ trình bày các chức năng chính phục vụ cho việc điều chế sin PWM ba pha.

Bộ PWM 8 có ba thanh ghi chính sau:

- Thanh ghi đếm (Counter Register), giá trị của nó được ký hiệu là c(i)

- Thanh ghi chu kỳ (Period Register), giá trị của nó ký hiệu là p(i)

- Thanh ghi so sánh (Compare Register), hay còn gọi là thanh ghi độ rộng xung (PulseWidth Register), giá trị của nó được ký hiệ là w(i)

Trong đó I ký hiệu cho chu kỳ PWM thứ i. Nếu chỉ viết c,p,w thì có nghĩa là đang đến chu kỳ bất kỳ.

Giá trị trong thanh ghi đếm giảm dần từ giá trị trong thanh ghi chu kỳ mỗi khi có sườn lên của xung nhịp đầu vào. Khi đạt giá trị tới hạn, giá trị của thanh ghi đếm được nạp lại giá trị trong thanh ghi chu kỳ. Quá trình đó cứ lặp đi lặp lại liên tục (khi có tín hiệu cho phép và bắt đầu chạy của bộ đếm). Giá trị trong thanh ghi chu kỳ gọi là giá trị chu kỳ (PeriodeValue), giá trị này có thể lập trình để thay đổi được.

Trong mỗi chu kỳ, giá trị trong thanh ghi đếm được so sánh với giá trị trong thanh ghi so sánh. Khi giá trị trong thanh ghi đếm nhỏ hơn (less than) hoặc nhỏ hơn hoặc bằng (less than or equal) giá trị trong thanh ghi so sánh, đầu ra được đặt lên cao, ngược lại đầu ra sẽ có mức thấp. Đầu ra của bộ PWM sẽ luôn giữ ở mức cao (HIGH) nếu thiết lập để giá trị thanh ghi so sánh lớn hơn giá trị thanh ghi chu kỳ (w > p), và luôn giữ ở mức thấp nếu giá trị thanh ghi so sánh bằng 0 (w = 0).

Trong thiết kế này, ta sử dụng phép so sánh nhỏ hơn (less than) do đó công thức tính độ rộng xung PWM đầu ra như sau:

d w P 1

(2-5)

d - độ rộng xung (duty cylce) w - giá trị trong thanh ghi so sánh P - giá trị trong thanh thi chu kỳ

Tần số băm xung được xác định như sau: clk pwm f f P 1   (2-6) fpwm - tần số băm xung

fclk - tần số xung nhịp đầu vào

Tần số xung nhịp đầu vào được sử dụng cho cả bộ PWM và DB cũng như cho cả ba bộ PWMDB. Hình () minh họa một xung PWM với các thông số được thiết lập như sau:

- P = 3

- W = 0,1,2,3,4 - fclk = 100kHz

Hình 2-4: Giản đồ miêu tả hoạt động của bộ PWM khi thay đổi giá trị thanh ghi so

sánh

Việc chọn tần số băm xung là sự lựa chọn dung hòa giữa nhiều yếu tố. Tần số băm xung lớn nghĩa là tần số chuyển mạch của các van công suất (hay các khóa điện tử) trong bộ nghịch lưu lớn dẫn đến tăng tổn hao do chuyển mạch nhưng lại làm giảm các điều hòa bậc cao trong dạng sóng dòng điện do đó làm giảm tổn hao chung trong động cơ. Mạch từ của động cơ, ứng với tần số của điện áp, có các tổn hao từ lớn và gây tiếng ồn. Việc chuyển mạch nhanh của các linh kiện cũng gây tiếng ồn lớn. Ngoài ra tốc độ băm xung cũng phụ thuộc vào khả năng đáp ứng của các khâu cách ly, khâu mạch kích và khẳ năng đóng cắt của van. Trong chương trình này, em cấu hình như sau, fclk = 4/3MHz, P = 255, do đó tần số băm xung là:

3 pwm 4 / 3.10 kHz 5, 2kHz 255 1 f    (2-7)

Một điểm cần lưu ý là khi một giá trị mới được ghi vào thanh ghi chu kỳ, nó sẽ có tác dụng sau khi thanh ghi đếm đã đếm về 0 và sẽ nạp lại giá trị mới từ thanh ghi chu kỳ. Trong khi đó, việc ghi vào thanh ghi so sánh, sẽ có tác dụng ngay lập tức.

Xung PWM từ bộ PWM đưa đến bộ tạo dải an toàn DB. Đầu ra Phase1 và Phase2 tạo ra hai tín hiệu PWM điều khiển hai van công suất trên cùng một kênh qua tầng cách ly và tầng mạch kích. Do các van trong bộ nghịch lưu là cac IGBT (các van này yêu cầu thời gian đóng lâu hơn thời gian mở) nên để tránh trùng dẫn phải tạo ra một khoảng trễ giữa thời điểm mở khóa này và đóng khóa kia. Thời gian trễ này được tính theo giá trị trong thanh ghi trễ DeadTime (DeadTime Register) như sau:

Ttrễ = (Giá trị trong thanh ghi trễ +1)*Tclk (2-8) Ttrễ - thời gian trễ

Trong chương trình này, em cấu hình như sau: fclk = 4/3MHz nên Tclk = 1/fclk = 0,75µs, giá trị thanh ghi trễ là 2, và do đó Ttrễ = 3.0,75 = 2,25µs.

Hoạt động của bộ PWMDB có thể được giải thích qua giản đồ thời gian sau:

Hình 2-5: Giản đồ thời gian miêu tả hoạt động bộ PWMDB8

Để tạo ra tín hiệu sin, giá trị độ rộng xung (PulseWitdhValue) được điều chế theo một hàm sin. Để giải quyết bài toán này, em sử dụng một bộ Timer16 và một bảng sin.

Bảng sin này chứa các giá trị từ 0 đến 2π. Một câu hỏi đặt ra ở đây là bao nhiêu giá trị trong bảng sin là hợp lý. Không có một câu trả lời chính xác cho câu hỏi này. Quá ít giát trị sẽ làm cho dạng dòng điện trong đầu ra bộ nghịch lưu có dạng bậc thang, làm tổn hao trong động cơ tăng lên. Nếu quá nhiều điểm sẽ làm tốn bộ nhớ của MCU. Ta có thể áp dụng luật sau để xác định số giá trị trong bảng sin:

pwm (max )

modulation (max ) f

N f (2-9)

N - số giá trị trong bảng sin

fpwm(max) - tần số băm xung lớn nhất

fmodulation(max) - tần số điều chế lớn nhất mong muốn

Tần số băm xung em chọn là 5,2kHz, tần số đầu ra lớn nhất là 50Hz. Áp dụng công thức trên, N = 100. Ở đây em chọn N = 255. Bảng sin này có thể tạo ra bằng cách sử dụng chương trình Exel trong gói Microsoft Office.

Một biến con trỏ được sử dụng để chỉ đến một giá trị trong bảng sin. Các giá trị trong bảng sin được đọc ra theo mỗi chu kỳ ngắt được xác định bởi Timer16. Các giá trị này được biến đổi để phù hợp với tần số đầu ra nhằm đảm bảo luật U/f=const, sau đó được ghi vào thanh ghi so sánh của bộ PWM.

Để đi hết một bảng sin cần 255 chu kỳ ngắt Timer. Như vậy chu kỳ và do dó, tần số đầu ra sẽ phụ thuộc vào khoảng thời gian giữa hai lần ngắt. Có thể tính tần số đầu ra theo công thức sau:

a out ng t 1 (N 1)T f =  (2-10)

fout - tần số sóng sin đầu ra N - số giá trị trong bảng sin Tngat - chu kỳ ngắt của Timer

Chu kỳ ngắt được xác định theo giá trị trong thanh ghi chu kỳ (Period Register) của bộ Timer theo công thức sau:

ngat Tclk.(PeriodValu 1

T  e ) (2-11)

PeriodValue - giá trị thanh ghi chu kỳ của bộ Timer16

Tclk - chu kỳ xung nhịp đầu vào, Tclk = 1/fclk với fclk là tần số xung nhịp đầu vào bộ Timer16.

Để điều chỉnh tần số đầu ra, ta điều chỉnh giá trị của thanh ghi chu kỳ của bộ Timer16 theo công thức sau:

clk out Pe f 1 (N 1) riodVa e f lu    (2-12)

Với cấu hình đã chọn: fclk = 4/3MHz, N=255 ta có công thức tính giá trị thanh ghi chu kỳ của bộ Timer16 theo tần số điều khiển fcontrol (fcontrol ≡ fout) như sau:

control 52 PeriodVal 08

f

ue 1 (2-12)

Để giữ cho từ thông và momen cực đại trên trục động cơ không đổi khi điều chỉnh tốc độ động cơ theo tần số ta phải đảm bảo tỷ số U1/f1 là không đổi. Mà biên độ của sóng sin đầu ra tỷ lệ với độ rộng xung. Độ rộng xung đạt giá trị lớn nhất tại đỉnh của hình sin. Khi chạy ở tần số định mức (50Hz), điện áp đầu ra đạt giá trị định mức là 220V (giá trị hiệu dụng), giá trị đỉnh sẽ là 310V, tức là bằng giá trị dương của điện áp một chiều. Khi đó ma = 1, độ rộng xung lớn nhất là 100% tại đỉnh của hình sin. Để thay đổi biên độ của điện áp đầu ra, ta sẽ thay đổi độ rộng xung tại mỗi chu kỳ PWM sao tỷ số U/f là không đổi bằng giá trị này ở định mức (U1dm/f1dm = 220/50 ≈ 4,4). Cụ thể, sau khi có được giá trị tần số điều khiển, ta tính được chu kỳ ngắt để xác định giá trị thanh ghi chu kỳ của bộ timer. Một hàm udateU_f nằm trong vòng lặp chính được sử dụng để tính lại các giá trị trong bảng sin sao cho biên độ đầu ra tương ứng với tần số điều khiển. Trong mỗi chu kỳ ngắt, giá trị thanh ghi so sánh trong bộ PWM sẽ được truy xuất từ bảng sin (đã được tính lại theo giá trị của tần số điều khiển) bởi biến con trỏ, sau đó biên con trỏ được tăng lên để chỉ đến giá trị mới trong bảng sin. Khi biến con trỏ này đạt đến giá trị tới hạn, sẽ được nạp

Để tạo ra tín hiệu ba pha ta cần ba biến con trỏ lệch nhau 120o, ta sử dụng ba biến con trỏ tương ứng với ba bộ PWMDB. Giá trị của ba biến con trỏ này lệc nhau 120o.

Lưu đồ thuật toán: Chương trình chính

Vòng lặp chính

Khởi tạo hệ thống bao gồm, khởi tạo 3 bộ PWMDB8, khởi tạo Timer16, khởi tạo ngắt.

Hàm udateU_f:

Chương trình con tinhsin()

PHỤ LỤC

Code chương trình điều khiển

Chương trình chính main.c

//--- // C main line

//---

#include <m8c.h> // part specific constants and macros

#include "PSoCAPI.h" // PSoC API definitions for all User Modules #include "ports.h"

#include "dieuche.h"

//#define PULSEWIDTH 127

//#define MAXPWM PULSEWIDTH-7 unsigned int nhay;

int Fset=60; // Tan so dat

unsigned char ku=150;

unsigned char

overload=0, // Qua tai overcurrent=0; // Qua dong unsigned char state=0;

void lock() {

Port0_4(1); }

{

Port0_4(0); }

#pragma interrupt_handler overcurrent_ISR

void overcurrent_ISR() // qua dong 75%: Cat cong suat hoan toan. {

lock(); }

#pragma interrupt_handler overload_ISR

void overload_ISR() // qua dong 50%: Giam cong suat. {

lock(); }

void nhayled()

{ unsigned char led; if(++nhay>100) nhay=0; led=(nhay>50); Port2_0(led); } void main() { PRT0DR=0xFF;

M8C_EnableGInt; // enable all interrups, nescessery M8C_EnableIntMask(INT_MSK0 , INT_MSK0_ACOLUMN_0); M8C_EnableIntMask(INT_MSK0 , INT_MSK0_ACOLUMN_2);

PWMDB8_1_WritePeriod(255); PWMDB8_1_WritePulseWidth(0); PWMDB8_1_WriteDeadTime(2); PWMDB8_2_WritePeriod(255); PWMDB8_2_WritePulseWidth(0); PWMDB8_2_WriteDeadTime(2); PWMDB8_3_WritePeriod(255); PWMDB8_3_WritePulseWidth(0); PWMDB8_3_WriteDeadTime(2); Timer16_1_EnableInt(); Timer16_1_WritePeriod(500);

Timer16_1_Start(); // start timer

PWMDB8_1_Start(); PWMDB8_2_Start();


Một phần của tài liệu TÌM HIỂU VÀ THIẾT KẾ BỘ BIẾN TẦN 3 PHA (Trang 71 -92 )

×