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ệ
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 wP 1 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