91
BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP. HCM KHOA CÔNG NGHỆ ĐIỆN TỬ ĐỒ ÁN TỐT NGHIỆP ĐIỀU KHIỂN ĐỘNG CƠ KHÔNG ĐỒNG BỘ BA PHA SỬ DỤNG VI ĐIỀU KHIỂN DSPIC30F4011 THEO PHƯƠNG PHÁP SPWM Giảng viên hướng dẫn: Th.S TRẦN VĂN HÙNG Sinh viên thực hiện: NGUYỄN ĐĂNG TÍN 09090321 NGÔ KIẾN ĐẠT 09167261 Lớp : DHDT5A TP. Hồ Chí Minh, ngày 20 tháng 12 năm 2013

Bao Cao Tot Nghiep Moi

Embed Size (px)

DESCRIPTION

thiet ke bien tan dieu khien dong co ba pha

Citation preview

Page 1: Bao Cao Tot Nghiep Moi

BỘ CÔNG THƯƠNG

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP. HCM

KHOA CÔNG NGHỆ ĐIỆN TỬ

ĐỒ ÁN TỐT NGHIỆP

ĐIỀU KHIỂN ĐỘNG CƠ KHÔNG ĐỒNG BỘ BA PHA

SỬ DỤNG VI ĐIỀU KHIỂN DSPIC30F4011

THEO PHƯƠNG PHÁP SPWM

Giảng viên hướng dẫn: Th.S TRẦN VĂN HÙNG

Sinh viên thực hiện: NGUYỄN ĐĂNG TÍN 09090321

NGÔ KIẾN ĐẠT 09167261

Lớp : DHDT5A

TP. Hồ Chí Minh, ngày 20 tháng 12 năm 2013

Page 2: Bao Cao Tot Nghiep Moi

BỘ CÔNG THƯƠNG

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP. HCM

KHOA CÔNG NGHỆ ĐIỆN TỬ

ĐỒ ÁN TỐT NGHIỆP

ĐIỀU KHIỂN ĐỘNG CƠ KHÔNG ĐỒNG BỘ BA PHA

SỬ DỤNG VI ĐIỀU KHIỂN DSPIC30F4011

THEO PHƯƠNG PHÁP SPWM

Giảng viên hướng dẫn: Th.S TRẦN VĂN HÙNG

Sinh viên thực hiện: NGUYỄN ĐĂNG TÍN 09090321

NGÔ KIẾN ĐẠT 09167261

Lớp : DHDT5A

TP. Hồ Chí Minh, ngày 20 tháng 12 năm 2013

Page 3: Bao Cao Tot Nghiep Moi

LỜI CAM ĐOAN

Kính thưa các thầy cô trong khoa công nghệ điện tử, em là sinh viên khóa 5

lớp DHDT5A. Sau bốn năm học tập tại trường, được các thầy cô tận tình hướng

dẫn, em đã có được vốn kiến thức chuyên ngành đủ để có thể nhận đề tài đồ án

tốt nghiệp. Em xin cam đoan sẽ cố gắng hoàn thành đề tài, tuân thủ đúng các

hướng dẫn, yêu cầu của giáo viên hướng dẫn để có thể hoàn thành tốt đề tài

cũng như khóa học của mình.Em xin đảm bảo đề tài này do em làm và hoàn

thành. Trong quá trình làm em có tham khảo của một số đề tài đã làm trước đây.

Kèm theo phụ lục bên dưới.

Ngày 20 tháng 12 năm 2013

SINH VIÊN THỰC HIỆN

Nguyễn Đăng Tín

Ngô Kiến Đạt

Page 4: Bao Cao Tot Nghiep Moi

LỜI CẢM ƠN

Trong suốt quá trình học tập tại trường ĐẠI HỌC CÔNG NGHIỆP TP HỒ

CHÍ MINH, em gặp rất nhiều khó khăn trong việc tiếp thu kiến thức chuyên

ngành. Nhưng nhờ có sự chỉ dạy tận tình của các thầy cô trong khoa CÔNG

NGHỆ ĐIỆN TỬ, em đã có thể hoàn thành được chương trình học để hôm nay

có thể làm đề tài ra trường.

Trong quá trình làm đề tài, em xin được cám ơn thầy Trần Văn Hùng đã

hướng dẫn, đưa ra các hướng, phương pháp giúp em kiểm tra, tìm ra nguyên

nhân từ đó khắc phục những vẫn đề khó khăn mà em gặp phải.

Em xin chân thành cám ơn!

Sinh viên thực hiện

Nguyễn Đăng Tín

Ngô Kiến Đạt

Page 5: Bao Cao Tot Nghiep Moi

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

Ngày … tháng … năm 2013

GIÁO VIÊN HƯỚNG DẪN

(Kí và ghi rõ họ tên)

Page 6: Bao Cao Tot Nghiep Moi

NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

Ngày … tháng … năm 2013

GIÁO VIÊN PHẢN BIỆN

(Kí và ghi rõ họ tên)

Page 7: Bao Cao Tot Nghiep Moi

MỤC LỤC

LỜI CAM ĐOAN

LỜI CẢM ƠN

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN

NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN

MỤC LỤC

DANH SÁCH CÁC BẢNG VÀ HÌNH

NỘI DUNG Trang

CHƯƠNG 1 MỞ ĐẦU ....................................................................................... 1

CHƯƠNG 2 CƠ SỞ LÍ THUYẾT .................................................................... 2

2.1 PHƯƠNG PHÁP SINE PULSE WIDTH MODULATION .................. 2

2.1.1 Phương Pháp Điều Rộng Xung SINPWM ....................................... 2

2.1.2 Các công thức tính toán, Cách thức điều khiển ............................... 4

2.1.3 Hiệu Quả của phương pháp điều khiển ............................................ 8

2.2 LÍ THUYẾT ĐIỀU KHIỂN PID ............................................................. 9

2.3 VI ĐIỀU KHIỂN DSPIC30F4011 ......................................................... 11

2.3.1 Tổng quan về vi điều khiển dsPIC30F4011.................................... 11

2.3.2 Ngắt .................................................................................................... 13

2.3.3 Bộ định thời Timer ........................................................................... 13

2.3.4 Bộ chuyển đổi tương tự sang số ADC ............................................. 14

2.3.5 Khối đọc encoder .............................................................................. 15

2.3.6 Khối PWM cho điều khiển động cơ ................................................ 17

2.3.7 Khối giao tiếp nối tiếp UART .......................................................... 18

2.4 VAN CÔNG SUẤT MOSFET ............................................................... 20

2.5 IC CÁCH LY ........................................................................................... 21

2.6 IC LÁI ...................................................................................................... 22

Page 8: Bao Cao Tot Nghiep Moi

2.7 IC MAX232.............................................................................................. 24

2.8 ENCODER............................................................................................... 25

2.9 ĐỘNG CƠ BA PHA ............................................................................... 25

CHƯƠNG 3 NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU ................ 31

3.1 THIẾT KẾ PHẦN CỨNG ...................................................................... 31

3.1.1 Sơ đồ khối của hệ thống ................................................................... 31

3.1.2 Mạch vi điều khiển ........................................................................... 31

3.1.3 Mạch lái và cách ly ........................................................................... 33

3.1.4 Mạch đo dòng điện, mạch chỉnh lưu và nghịch lưu ...................... 34

3.1.5 Mạch giao tiếp máy tính................................................................... 35

3.2 TÍNH TOÁN CÁC THÔNG SỐ…………………………………….. 39

3.2.1Phương pháp điều khiển Sine Pulse Width Modulation. .............. 40

3.2.2 Thuật toán chương trình .................................................................. 40

CHƯƠNG 4 KẾT QUẢ VÀ THẢO LUẬN ................................................... 45

4.1 KẾT QUẢ ................................................................................................ 45

4.2 THẢO LUẬN .......................................................................................... 52

CHƯƠNG 5 KẾT LUẬN VÀ KIẾN NGHỊ ................................................... 49

TÀI LIỆU THAM KHẢO ............................................................................... 50

PHỤ LỤC .......................................................................................................... 51

Page 9: Bao Cao Tot Nghiep Moi

DANH SÁCH CÁC BẢNG VÀ HÌNH

DANH SÁCH CÁC HÌNH ...................................................................... Trang

Bảng 2.1 Nguyên lý của phương pháp điều rộng sin ....................................... 5

Bảng 2.2 Sơ đồ dạng điện áp trên các pha ....................................................... 8

Hình 2.3 Quá trình hoạt động của bộ điều khiển ............................................. 2

Hình 2.4 Sơ đồ kết nối các khoá trong bộ nghịch lưu ..................................... 3

Hình 2.5 Sơ đồ nguyên lí bộ nghịch lưu ba pha .............................................. 4

Hình 2.6 Mô hình hệ thống diều khiển với bộ PID ....................................... 10

Hình 2.7 Sơ đồ chân dsPIC30F4011 ............................................................. 13

Hình 2.8 Sơ đồ khối dsPIC30F4011 .............................................................. 14

Hình 2.9 Sơ đồ khối Timer 1 ......................................................................... 16

Hình 2.10 Sơ đồ khối ADC ........................................................................... 18

Hình 2.11 Sơ đồ khối của QEI....................................................................... 19

Hình 2.12 Sơ đồ khối của khối PWM điều khiển động cơ ............................ 21

Hình 2.13 Sơ đồ khối truyền UART .............................................................. 22

Hình 2.14 Sơ đồ khối nhận UART ................................................................ 23

Hình 2.15 Mosfet IRFP460 ........................................................................... 24

Hình 2.16 Opto HCPL2631 ........................................................................... 25

Hình 2.17 Sơ đồ điều khiển Mosfet ............................................................... 26

Hình 2.18 IC lái IR2102 ................................................................................ 27

Hình 2.19 IC MAX232 .................................................................................. 28

Hình 2.20 Encorder ........................................................................................ 30

Page 10: Bao Cao Tot Nghiep Moi

Hình 2.21 Động cơ 3 pha ............................................................................... 30

Hình 3.1 Sơ đồ khối của hệ thống ................................................................. 31

Hình 3.2 Sơ đồ nguyên lí mạch vi điều khiển ............................................... 33

Hình 3.3 Sơ đồ nguyên lí mạch cách ly và lái ............................................... 35

Hình 3.4 Sơ đồ nguyên lí mạch chỉnh lưu, nghịch lưu, đo dòng điện ........... 37

Hình 3.5 Sơ đồ nguyên lí mạch giao tiếp máy tính ....................................... 38

Hình 3.6 Thuật toán chương trình ................................................................. 43

Hình 4.1 Mô hình phần cứng ......................................................................... 46

Hình 4.2 Giao diện điều khiển trên máy tính ................................................ 47

Page 11: Bao Cao Tot Nghiep Moi

CHƯƠNG 1: MỞ ĐẦU

GVHD: TRẦN VĂN HÙNG 1 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

CHƯƠNG 1

MỞ ĐẦU

Hiện nay, công nghiệp phát triển rất mạnh mẽ, máy móc thay thế cho sức

người. Động cơ là nguồn truyền động phổ biến nhất. Trong các loại động cơ thì

động cơ không đồng bộ ba pha được sử dụng nhiều nhất do cấu tạo đơn giản,

giá thành rẻ, công suất lớn. Nhưng nhược điểm lớn nhất của loại động cơ này là

khó điều khiển. Đứng trước vấn đề này, các kĩ sư luôn muốn tìm ra một phương

pháp có thể điều khiển tối ưu, chi phí chế tạo bộ điều khiển thấp để có thể đưa

động cơ không đồng bộ ba pha ứng dụng rộng hơn nữa, nhất là trong các ứng

dụng mà động cơ này còn bị hạn chế.

Trong các phương pháp điều khiển hiện nay thì phương pháp SINE PULSE

WIDTH MODULATION cho kết quả tốt. Nhưng phương pháp khó thực hiện

hơn các phương pháp khác nên chưa được ứng dụng nhiều ngoài thực tế. Chính

vì lí do này mà em chọn đề tài ĐIỀU KHIỂN ĐỘNG CƠ KHÔNG ĐỒNG BỘ

BA PHA SỬ DỤNG VI ĐIỀU KHIỂN DSPIC30F4011 THEO PHƯƠNG

PHÁP SPWM với mục đích tìm hiểu, nghiên cứu, thiết kế bộ điều khiển theo

phương pháp này. Với sự tìm hiểu ban đầu này và việc sẽ nghiên cứu sâu hơn

sau này có thể đưa phương pháp này ứng dụng nhiều trong thực tiễn.

Page 12: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 2 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

CHƯƠNG 2

CƠ SỞ LÍ THUYẾT

2.1 PHƯƠNG PHÁP SINE PULSE WIDTH MODULATION

2.1.1 ĐIỀU RỘNG XUNG SINE Để tạo ra điện áp xoay chiều bằng phương pháp SinPWM, ta sử dụng một tín hiệu

xung tam giác tần số cao đem so sánh với một điện áp sin chuẩn có tần số f. nếu đem

xung diều khiển này câp cho một bộ biến tần một pha thì ngõ ra sẽ thu được một dạng

điện áp dạng điều rộng xung có tần số bằng tần số nguồn song sin mẫu và biên dộ hài

bậc nhất phụ thuộc vào nguồn điện một chiều cung cấp và tỉ số giữa biên độ song sin

mẫu và song mang. tần số song mang phải lớn hơn tần số song sin mẫu. sau đây là hình

vẽ miêu tả nguyên lý của phương pháp điều rộng xung sin.

Hình 2.1 Nguyên lý của phương pháp điều rộng xung sin.

Page 13: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 3 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Khi : Vcontrol >Vtri thì VAO = ���

Vcontrol <Vtri thì VAO = - ���

Như vậy, để tạo ra nguồn điện ba pha dạng điều rộng xung, ta cần có nguồn sin

ba pha mẫu và giản đồ kích đóng của ba pha sẽ được biểu diễn như hình dưới đây:

Hình 2.2 Sơ đồ dạng điện áp trên các pha

Page 14: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 4 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

2.1.2 Các công thức tính toán phương pháp điều khiển Ta cần tính được biên độ hài bậc nhất của điện áp ngõ ra từ biên độ giữa song

mang và song tam giác.

Công thức tính biên độ hài bậc nhất:

Ut = ma.���

� (1)

Trong đó ma lả tỉ số giữa biên độ sóng sin mẫu mà biên độ song mang – còn gọi là tỉ

số điều biên.

ma = ���

������ (2)

2.3.1.2 Cách thức điều khiển

Sau khi đã nói về phương pháp điều khiển V/f= const và phương pháp điều

khiển bộ nghịch lưu áp the phương pháp điều rộng xung SINPWM, ta có thể đưa ra

một thuật toán điều khiển động cơ theo tần số đặt cho trước như sau.

Do động cơ được điều khiển vòng kín nên đo được tốc độ thực của động cơ, nên

ta hiểu tần số đặt ở đây là tần số nguồn sin điều rộng xung sin cấp cho động cơ.

Trong trường hợp ta muốn cho động cơ ở trạng thái đứng yên chuyển sang chạy ở tần số đặt thì phải thong qua một quá trình khởi động mềm tránh cho động cơ khởi động lập tức đến tốc độ đặt, gây ra dòng điện khởi động lớn làm hỏng động cơ. tần số nguồn cung cấp sẽ tăng từ giá trị 0(đứng yên). thời gian khởi động này có thay đổi theo công suất của từng động cơ. Đối với động cơ có công suất lớn thời gian khởi động lâu hơn động cơ có công suất lớn. thời gian khởi động của đông cợ thong thường được chọn từ 5 tới 10giây.

Sau khi tần số nguồn đã đạt tới giá trị yêu cầu lúc đầu sẽ giữ nguyên giá trị đó. Trong quá trình động cơ đang chạy ổn định mà có một nhu cầu thay đổi tần số thì cũng có một quá trình chuyển đổi tần số từng bước thay vì nhảy ngay lập tức đến giá trị tần số yêu cầu mới.

Khi muốn thay đổi chiều của động cơ cần phải đưa tần số động cơ về đủ nhỏ rồi sau đó mới thực hiện chuyển đổi ngay( thay đổi thứ tự nguồn pha cung cấp cho động cơ)- tránh hiện tượng moment xoắn có thể làm gãy trục động cơ và tăng dòng đột ngột.

Page 15: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 5 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Khi muốn dừng động cơ thì phải hạ tần số từ giá trị hiện tại về giá trị 0. thời gian hãm này phụ thuộc vào quán tính quay của động cơ. Khi muốn hãm phanh có thể dung các phương pháp hãm như phương pháp hãm động năng – có dung điện trở thắng.

Như vậy ta có thể hình dung quá trính hoạt động của bộ điều khiển như sau:

Hình 2.3 Quá trình hoạt động của bộ điều khiển.

Đoạn 1 ứng với khởi động động cơ - tần số tăng từ 0 tới giá trị đặt sau khoảng thời

gian khởi động (Tramp ).

Đoạn 2 ứng với việc thay đổi tần số khi động cơ đang chạy ổn định.

Đoạn 3 ứng với chiều chuyển đội động cơ - được chia làm 2 giai đoạn. đoạn 3a ứng

với giảm tần số về 0. cuối đoạn 3a sẽ thay đổi thứ tự pha nguồn cung cấp cho động cơ.

đoạn 3b ứng với tăng tần số lên đến giá trị mới.

Đoạn 4 ứng với ngừng động cơ. tần số cho động cơ được giảm dần từ giá trị đặt về 0

sau khoảng thời gian dừng( Tramp ).

2.3.1.3 Quy trình tính toán

Tần số sóng mang trong MCU 4011 là

PTPER = Fcy/(Fpwm*prescale*2)-1 (1)

Page 16: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 6 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Trong đó PTPER là giá trị cần nạp vào thanh ghi để có được tần số song mang

mong muốn.

Fcy = ����

� (2)

Với Fosc là tần số thạch anh đưa vào vi điều khiển.

Trong phần này với tần số thạch anh đưa vào vi điều khiển là 10Mhz, cộng với chế

độ nhân tần số PLL=8, ta có tần số thực đưa vào vi điều khiển là 20Mhz. thời gin tính

toán của một chu kì lệnh là 0.05 micro giây.

Ứng với các giá trị tính toán trên, để tạo ra một song mang có tần số 5kHz. Giá trị

cần nạp vào thanh ghi PTPER là 1999.

sóng điều khiển( Udk ) được tạo ra bằng cách lập một bảng sin có giá trị từ 0 tới

tượng trưng cho một chu kì song điều khiển dạng sin. Như đã biết, song điều

khiển mang thong tin về độ lớn giá trị hiệu dụng và tần số song hài cơ bản của điện áp

ngõ ra, vì vậy khi biên độ và tần số của song diều khiển thay đổi thì ta có điện áp và tần

số ngõ ra cũng thay đội theo.

Tần số của song điều khiển thay đổi tuỳ thuộc vào tần số di chuyển của con trỏ

trong bảng sin. nếu tần số của song điều khiển càng lớn thì số bước nhảy của song điều

khiển di chuyển của con trỏ di chuyển trong bảng sin trong một chu kì song điều khiển

càng ít và ngược lại. Quan hệ giữa số bước nhảy của con trỏ trong bảng sin và tần số

của song điều khiển được xác định theo công thức sau:

K = �

�� �� (3)

Trong đó αmin là độ phân giải của bảng sin( với bảng sin gồm có 720 giá trị thỉ độ

phân giải của bảng sin là 0.5 đô/giá trị).

α= ��� � ∗���

���� (4)

Là góc nhảy của con trỏ trong bảng sin sau một chu kì PWM.

từ công thức 1 và 2 ta có:

Page 17: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 7 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Ut = ���

������∗���

� (3)

Trong đó Udc =440V ứng với trường hợp tỉ số điều chế ma=1 và động cơ hoạt động

ở chế độ định mức.

Khi động cơ hoạt động ở chế độ định mức:

���

��� = 3.667 (Udm = 220V, fdm = 60Hz) (4)

từ 3 và 4 ta có:

freq =0.03*Udk (5)

giá trị của tần số đặt vào động cơ từ biến trở được thông qua bộ chuyển đổi ADC

10bits theo công thức:

freq =ADC_Result*60/1024. (6)

dựa vào tần số yêu cầu đầu vào ta có thể tính biên độ của song điều khiển đễ giữ cho tỉ

số V/f không đổi.

thời gian tăng tốc và giảm tốc của động cơ được tính toán dừa vào chu kì PWM,kể từ

khi có sự thay đổi về tần số đặt, sau mỗi chu kì PWM, giá trị tần số hiện tại sẽ cộng

them vào hoặc trừ ra một giá trị cho tới khi bằng với giá trị của tần số đặt mới.

Giá trị cộng vào hoặc trừ ra được tính theo công thức sau:

∆ = (60*TPWM)/t (7)

Trong đó t(s) là thời gin tăng tốc hoặc giảm tốc của động cơ.

để đảm bảo sự chuyển mạch diễn ra đúng, tại một thời điểm trên một nhánh chỉ có một

khoá bán dẫn trong trạng thái dẫn, một khoảng thời gian nghỉ( dead time) cần được

thêm vào khoảng giữa hai khoá, với tần số thạch anh đưa vào vi điều khiển lá 10Mhz,

tần số song mang là 5Khz, khoảng thời gian nghỉ từ 1 tới 25miligiây, ở đây khoảng

thời gian chọn là 2mili giây.

Page 18: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 8 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

2.1.3 Hiệu quả phương pháp điều khiển

Đối với phương pháp điều chế SINPWM, tại thời điểm mà một trong hai khoá trên

cùng một nhánh ở trạng thái ON thì biểu thức điện áp giữa một pha và điểm trung tín

ảo (O) có dạng như sau:

Hình 2.4 Sơ đồ kết nối các khoá trong bộ nghịch lưu.

VAO = ���

2 *(m*sin(α))

VBO = ���

2 *(m*sin(α+

2�

3)) (7a)

VCO = ���

2 *(m*sin(α+

4�

3))

Điện áp giữa hai pha đươc tính toán:

VAB = VAO – VBO = √3

2*VDC*m*sin(α+

6)

VBO = √3

2 *VDC*m*sin(α+

5�

6) (7b)

VCO = √3

2 *VDC*m*sin(α+

3�

2))

Page 19: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 9 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

từ công thức 7a với 7b trên ta thấy giá trị điện áp lớn nhất giữa hai pha đạt

được giữa hai vùng tuyến tính khi m=1.

Giá trị điện áp lớn nhất là Vline_to_line_max =√�

�*VDC (8)

vậy với phương pháp này, điện áp bộ nghịch lưu cung cấp chỉ dược sử dụng tối

đa 86,67% trong vùng diều khiển tuyến tính.

2.2 LÍ THUYẾT ĐIỀU KHIỂN PID

PID là chữ viết tắt của ba thành phần cơ bản có trong bộ điều khiển: khuếch đại tỉ lệ

(P), tích phân (I) và vi phân (D). PID được ví như một tập thể hoàn hảo gồm ba cá

nhân với ba tính cách khác nhau:

Phục tùng và thực hiện chính xác nhiệm vụ được giao (tỉ lệ).

Làm việc và có tích lũy kinh nghiệm để hoàn thành tốt nhiệm vụ được giao (tích

phân).

Luôn có sáng kiến, phản ứng nhanh nhạy với sự thay đổi trong quá trình thực

hiện nhiệm vụ (vi phân).

Hình 2.5 Mô hình hệ thống diều khiển với bộ PID

Page 20: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 10 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Biểu thức toán học của bộ điều khiển PID có dạng (tham khảo [2]):

U(t) = K�e(t) + K� ∫ e(t)d(t)�

�+ K�

��(�)

�(�) (2.13)

Hàm truyền đạt của bộ điều khiển PID (tham khảo [2]):

G�(s) = K� +��

�+ K�s (2.14)

Chất lượng của hệ thống phụ thuộc vào các tham số KP, KI, KD. Muốn hệ thống có

chất lượng như mong muốn cần phải phân tích đối tượng rồi trên cở sở đó chọn tham

số cho phù hợp. Một số phương pháp thường được sử dụng để chọn tham số PID:

Phương pháp Ziegler-Nichols.

Phương pháp tối ưu mô dun, phương pháp tối ưu đối xứng.

Phương pháp thực nghiệm.

Trong nhiều trường hợp không cần xác định cả ba tham số cho bộ điều khiển. Nếu bản thân đối tượng đã có thành phần tích phân trong bộ điều khiển, ta không cần phải thêm khâu tích phân mới triệt tiêu được sai lệch tĩnh, tức chỉ cần dùng bộ điều khiển PD là đủ. Nếu tín hiệu trong hệ thống thay đổi tương đối chậm và bản thân bộ điều khiển không cần phải phản ứng thật nhanh với sự thay đổi của sai lệch e(t) thì ta chỉ cần sử dụng bộ điều khiển PI.

Khâu điều chỉnh tỉ lệ P có nhiệm vụ làm giảm sai lệch e(t), tăng tính tác động nhanh của hệ thống. Nhược điểm của khâu này là luôn tồn tại sai số ở chế độ xác lập.

Khâu điều chỉnh tích phân I triệt tiêu được sai lệch tĩnh nhưng vẫn ảnh hưởng đến quá trình quá độ, dễ gây mất ổn định hệ thống. Vì vậy, bộ điều khiển tích phân không được dùng đơn lẻ.

Khâu điều chỉnh vi phân D cải thiện khả năng quá độ của hệ thống, đáp ứng được tốc độ thay đổi của sai số e(t). Nó có thể tạo ra một sự sửa chữa đáng kể trước khi biên độ của sai lệch điều khiển e(t) trở nên lớn. Tác động vi phân có ích trong hệ thống kiểm tra khi có tín hiệu vào đột biến hoặc thay đổi phụ tải. Khâu vi phân dễ bị ảnh hưởng bởi nhiễu.

Trong các hệ động cơ, ta thường dùng bộ điều khiển PI. Nó giảm bớt ảnh hưởng của nhiễu loạn, tăng hệ số khuếch đại hệ thống ở vùng tần số thấp nhằm giảm bớt sai số ở chế độ xác lập mà không làm thay đổi đặc tính ở miền tần số cao.

Page 21: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 11 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

2.3 VI ĐIỀU KHIỂN DSPIC30F4011

2.3.1 Tổng quan về vi điều khiển dsPIC30F4011

DSPIC30F4011 là một chíp xử lí mạnh với bộ xử lí 16 bit. Tốc độ xử lí có thể lên

tới 30 triệu lệnh một giây, có thể thực hiện chức năng của một bộ xử lí tín hiệu số.

DsPIC còn được trang bị bộ nhớ flash, bộ nhớ EEPROM và các ngoại vi hiệu năng cao

và rất đa dạng các thư viện phần mềm cho phép thực hiện các giải thuật nhúng với hiệu

suất cao trong một khoảng thời gian ngắn. Vì vậy, dsPIC được ứng dụng rộng rãi trong

các ứng dụng xử lí tín hiệu số, đo lường và điều khiển tự động.

Một số đặt điểm của dsPIC30F4011:

Bộ nhớ chương trình 48K.

Bộ nhớ RAM 2 Kbytes

Bộ nhớ EEPROM 1Kbyte Xung clock ngoài tối đa lên tới 40MHz. 30 nguồn ngắt. 5 timer 16 bit có thể ghép thành timer 32 bit Chế độ bắt giữ, so sánh, điều rộng xung 16 bit. Giao tiếp SPI, I2C, UART, CAN. 6 kênh phát PWM chuyên dùng điều khiển động cơ. Module QEI chuyên đọc encoder. ADC 10 bit tốc độ cao.

Page 22: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 12 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Hình 2.6Sơ đồ chân dsPIC30F4011

Hình 2.7 Sơ đồ khối dsPIC30F4011

Page 23: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 13 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

2.3.2 Ngắt Dspic30f4011 có 30 nguồn ngắt. Bảng vecto ngắt được đặt gần bộ nhớ chương trình

tại địa chỉ 0x000004. Bộ điều khiển ngắt điều khiển các ngắt. Thiết lập các ngắt thông

qua các thanh ghi đặc biệt sau:

IFS0<15:0>, IFS1<15:0>, IFS2<15:0> : chứa tất cả các cờ ngắt. Cờ ngắt

được bật lên bởi ngoại vi của vi điều khiển hoặc tín hiệu từ bên ngoài và

được xóa bằng phần mềm.

IEC0<15:0>, IEC1<15:0>, IEC2<15:0>: chứa tất cả các bit điều khiển cho

phép ngắt. Các bit này được sử dụng để bật các ngắt riêng biệt từ các thiết bị

ngoại vi hay tín hiệu từ bên ngoài.

IPC0<15:0>... IPC11<7:0> : thiết lập các ngắt ưu tiên thông qua 12 thanh

ghi.

IPL<3:0>: các mức độ ưu tiên được lưu trữ trong các bit IPL. IPL<3> nằm

trong thanh ghi CORCON, IPL<2:0> nằm trong thanh ghi trạng thái.

INTCON1<15:0>, INTCON2<15:0>: điều khiển ngắt toàn cục. INTCON1

bao gồm các bit cờ điều khiển các ngắt khi có lỗi xử lí. INTCON2 điều khiển

các tín hiệu yêu cầu ngắt ngoại vi và việc sử dụng bảng chuyển đổi các vecto

ngắt.

Tất cả các nguồn ngắt có thể được người dùng gán cho một trong 7 cấp độ ưu tiên

thông qua các thanh ghi IPCx. Nếu bit NSTDIS (INTCON1 <15>) được thiết lập, tất cả

các ngắt đều bị cấm.

2.3.3 Bộ định thời Timer

Trong vi điều khiển dsPIC40F4011 có tới năm bộ định thời (Timer) 16-bit. Trong

đó các Timer có thể hoạt động riêng biệt, riêng hai Timer 2, 3 và hai Timer 4, 5 có thể

kết hợp với nhau để trở thành một Timer 32 bit.

Timer 1 có thể hoạt động với nguồn tạo dao động tần số thấp 32KHz, và chế độ

không đồng bộ với nguồn tạo dao động ngoài. Đặc điểm riêng biệt của Timer 1 đó là

có thể dùng trong các ứng dụng thời gian thực. Timer 1 có thể hoạt động trong ba chế

độ:

Timer 16-bit: trong chế độ này, timer sẽ tăng sau mỗi chu kỳ lệnh đến khi giá trị của timer bằng giá trị của thanh ghi chu kỳ PR1 (Period Register) th. sẽ reset về ‘0’ và tiếp tục đếm.

Page 24: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 14 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Counter đồng bộ 16-bit: trong chế độ này, timer sẽ tăng ở mỗi sườn lên của của xung nhịp ngoài mà được đồng bộ với pha của các xung nhịp trong. Timer tăng đến giá trị nằm trong thanh ghi PR1 thì dừng và reset timer về ‘0’ rồi tiếp tục đếm lên.

Counter không đồng bộ 16-bit: khi hoạt động trong chế độ này, timer sẽ tăng dần sau mỗi sườn lên của xung nhịp bên ngoài tác động vào. Timer sẽ tăng dần đến khi giá trị của nó bằng thanh ghi PR1 th. bị reset về ‘0’ rồi lại tiếp tục đếm lên.

Hình 2.8 Sơ đồ khối Timer 1

2.3.4 Bộ chuyển đổi tương tự sang số ADC Vi điều khiển dsPIC30F4011 cung cấp bộ chuyể đổi tương tự số 10 bit với 10 kênh

ngõ vào. Điện thế chuẩn có thể là nguồn cung cấp (Vdd/Vss) hoặc mức điện thế của

các chân VREF+/VREF- . bộ ADC có 6 thanh ghi

Ba thanh ghi điều khiển: ADCON1, ADCON2, ADCON3 điều khiển hoạt động

của ADC.

Thanh ghi lựa chọn kên vào để biến đổi ADCSH.

Thanh ghi cấu hình ngõ vào là tương tự hay số ADPCFG.

Thanh ghi lựa chọn quét ADCSSL.

DsPIC cũng có thể lấy mẫu đồng thời 2 kênh hoặc 4 kênh cùng lúc, lấy mẫu tuần

tự, thời gian lấy mẫu và chuyển đổi có thể thiết lập trước, có thể kích chuyển đổi bằng

Page 25: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 15 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

một sự kiên do ngoại vi khác tạo ra. Kết quả chuyển đổi được lưu trong bộ đệm gồm

16 thanh ghi ADCBUF0 đến ADCBUFF.

Các bước tiến hành chuyển đổi ADC:

Cấu hình chân là ngõ vào tương tự, chọn điện áp chuẩn.

Chọn kênh cần chuyển đổi, chọn xung nhịp chuyển đổi

Bật ADC hoạt động.

Xóa cờ ngắt, chọn mức ưu tiên ngắt cho ADC.

Bắt đầu lấy mẫu, đợi kết thúc lấy mẫu và bắt đầu chuyển đổi

Đọc kết quả từ bộ đệm.

Hình 2.9 Sơ đồ khối ADC

2.3.5 Khối đọc encoder Khối đọc encoder có các đặc điểm:

Có 3 ngõ vào cho pha A, pha B và xung index.

Page 26: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 16 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Có thể hoạt động như bộ đếm xung lên xuống 16 bit.

Xác định được hướng đếm.

Chế độ tăng độ phân giải x2, x4 cho encoder.

Chân vào có bộ lọc nhiễu.

Có thể hoạt động ở chế độ đếm hay định thời của timer 16 bit.

Cho phép ngắt.

MAXCNT là thanh ghi giá trị đếm tối đa.

POSCNT là thanh ghi giá trị đếm.

QEICON là thanh ghi điều khiển

Hình 2.10 Sơ đồ khối của QEI

Page 27: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 17 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

2.3.6 Khối PWM cho điều khiển động cơ DsPIC30F4011 có 6 chân phát PWM với 3 cặp tương ứng chuyên dùng cho điều

khiển động cơ với các đặc điểm:

6 chân phát PWM với 3 bộ tạo chu kì.

Độ phân giải 16 bit.

Chế độ tạo xung tự do: thanh ghi đếm được đếm lên bằng giá trị trong PTPER

thì PTMR bị reset về 0, sau đó tiếp tục đếm lên nếu PTEN còn bật.

Chế tạo đơn xung : cũng giống như chế độ tạo xung tự do chỉ khác ở chỗ khi

PTMR bằng PTPER thì bit PTEN sẽ bị xóa bằng phần cứng để ngăn bộ tao

xung hoạt động tiếp.

Chế độ tạo xung canh giữa (đếm lên xuống): thanh ghi sẽ đếm lên khi bằng giá

trị trong PTPER thì sẽ đảo hướng đếm bằng cách đảo bit PTDIR. Ngắt khi thanh

ghi PTMR trở về 0.

Chế độ tạo xung canh giữa cập nhật kép: ngắt xảy ra khi PTMR bằng không

cũng như PTMR = PTPER. Chế độ này giúp cập nhật độ rộng xung trong chu kì

kép cũng như tạo ra dạng sóng không đều khi canh giữa phù hợp với một số ứng

dụng điều khiển.

Các chân phát PWM có thể hoạt động độc lập hay giao hoán nhau.

Có thanh ghi tạo thời gian chết DTCON, tránh trùng dẫn khi tạo xung kích bộ

nghịch lưu.

Có thể áp đặt giá trị logic ngõ ra thông qua thanh ghi OVDCON.

Có thể tạo sự kiện kích chuyển đổi ADC.

Công thức tính chu kì:

Trong chế độ tạo xung tự do hoặc đơn xung (xem [4]):

TPWM = Tcy*(PTPER+1)*PTMR Prescale value (2.15)

Trong chế độ canh giữa (xem [4]):

TPWM = 2*Tcy*(PTPER+1)*PTMR Prescale value (2.16)

Page 28: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 18 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Hình 2.11 Sơ đồ khối của khối PWM điều khiển động cơ

2.3.7 Khối giao tiếp nối tiếp UART Khối UART của dsPIC30F4011 có những đặc điểm sau:

Truyền song công, giao tiếp 9 hoặc 8 bit dữ liệu.

Trong chế độ 8 bit dữ liệu có các tùy chọn bit chẵn, bit lẻ hoặc không sử dụng

bit chẵn lẻ.

Một hoặc hai stop bit.

Page 29: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 19 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Bộ tạo tốc độ baud 16 bit có chia tỉ lệ trước, tốc độ baud từ 38 bps tới 1,875

Mbps với tần số hệ thống 30MHz.

Có 4 bộ đệm dữ liệu nhận và 4 bộ đệm dữ liệu truyền.

Chế độ kiểm tra, phát hiện bit chẵn lẻ, tràn bộ đệm.

Ngắt truyển, ngắt nhận dữ liệu.

Công thứ tính tốc độ baud:

tô� cđôBaud = F��/(16 ∗(BRG + 1)) (2.17)

Hình 2.12 Sơ đồ khối truyền UART

Page 30: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 20 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Hình 2.13 Sơ đồ khối nhận UART

2.4 VAN CÔNG SUẤT MOSFET Có hai lựa chọn chính cho việc sử dụng van đóng ngắt trong điều khiển động cơ đó

là Mosfet và IGBT. Cả hai loại này đều được điều khiển bằng áp, nghĩa là việc dẫn và

ngưng dẫn của linh kiện được điều khiển bằng một nguồn áp thay vì dòng điện trong

các bộ nghịch lưu sử dụng. Mosfet sử dụng ở các ứng dụng đòi hỏi tốc độ cao, tuy

nhiên Mosfet không có khả năng chịu dòng điện cao. IGBT thích hợp với các ứng dụng

ở tốc độ thấp, nhưng IGBT có khả năng chịu được dòng điện cao. IGBT có tần số đóng

ngắt thấp hơn Mosfet nên tồn hỏa đóng ngắt cũng nhiều hơn.

Yêu cầu đặt ra cho linh kiện sử dụng làm bộ nghịch lưu:

Page 31: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 21 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Điện áp VDS (Mosfet) hay VCE (IGBT) >> VDC/2

Dòng diện qua linh kiện lớn hơn dòng định mức của động cơ ≈10A ở nhiệt độ

hoạt động.

Chịu được tần số đóng ngắt cao.

Mosfet IRFP460 phù hợp với những yêu cầu trên, giá thành lại rẻ và dễ tìm mua

trên thị trường nên được chọn sử dụng trong ứng dụng này

Hình 2.14 Mosfet IRFP460

2.5 IC CÁCH LY Các mạch phát ra tín hiệu để điều khiển mạch công suất dùng bán dẫn phải được

cách ly về điện. Điều này có thể thực hiện bằng opto hoặc biến áp xung.

Biến áp xung: gồm một cuộn sơ cấp và có thể có nhiều cuộn thứ cấp. Với nhiều

cuộn dây phía thứ cấp, ta có thể kích đóng nhiều transistor mắc nối tiếp hoặc

song song. Biến áp xung cần có cảm kháng tản nhỏ và đáp ứng nhanh. Trong

trường hợp xung điều khiển có tác động kéo dài hoặc tần số thấp, biến áp xung

sớm đạt trạng thái bão hòa và ngõ ra sẽ không phù hợp với yêu cầu điều khiển.

Opto: gồm nguồn phát hồng ngoại bằng diot (IR – LED) và mạch thu dùng

phototransistor. Do đó, opto thỏa mãn yêu cầu về điện, đồng thời đáp ứng tốt

hơn biến áp xung.

Trong ứng dụng này,ta dùng opto HCPL2631của hãng Fairchild có đáp ứng tần số

lên tới 10MHz, thỏa mãn yêu cầu ứng dụng.

Page 32: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 22 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Hình 2.15 Opto HCPL2631

2.6 IC LÁI

Các mạch điều khiển động cơ dùng mạch nghịch lưu đều cần dùng tới mạch lái để

điều khiển đóng ngắt Mosfet hay IGBT. Có hai thành phần cơ bản trong điều khiển

đóng ngắt linh kiện công suất là điều khiển van phía cao (high side – Q1) và van phía

thấp (low side – Q2).

Hình 2.16 Sơ đồ điều khiển Mosfet

Trong mạch nghịch lưu Q1 và Q2 luôn ở trạng thái làm việc đối nghịch nhau. Khi

Q1 mở thì Q2 đóng và ngược lại. Khi Q1 đang ở trạng thái OFF chuyển sang trạng thái

Page 33: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 23 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

ON => chân S (MOSFET) hay chân E (IGBT) của Q1 chuyển từ ground sang điện áp

cao ( high voltage rail). Do đó muốn kích Q1 tiếp tục ON thì phải tạo điện áp kích

VGS1 có giá trị VGS1= VSQ1 + ΔV.Trong khi đó tín hiệu ra của vi xử lý điều khiển

đóng ngắt các khóa chỉ có giá trị điện áp +5V (so với ground). Nên cần phải có mạch

lái để tạo trôi áp và cách ly trong việc đóng ngắt phía cao Q1. Tuy nhiên đối với Q2 thì

chân S được nối ground , do đó điện áp kích VGS2 chỉ cần có giá trị ΔV. Do đó việc

đóng ngắt khóa low side (Q2) được điều khiển dễ dàng hơn. ΔV là giá trị điện áp cần

thiết để kích Q1 hay Q2 dẫn. Đối với MOSFET và IGBT ΔV có giá trị từ 10 đến 15

(V).

Trong ứng dụng này, ta dùng IC lái loại sử dụng tụ bootstrap để lái phía cao. Trong

suốt thời gian ON của Q2 chân S của Q1 có điện thế là ground. Điều này cho phép tụ

Cboot được nạp (thông qua diode D1) đến giá trị VBIAS. Khi Q2 được kích OFF và

Q1 được kích ON thì điện áp chân S của Q1 bắt đầu tăng lên. Tụ Cboot lúc này đóng

vai trò của nguồn phân cực, cung cấp dòng để lái phía cao Q1.

Nhược điểm của mạch lái loại này là thời gian trì hoãn giữa tín hiệu điều khiển và

tín hiệu đóng ngắt lớn từ 500ns đến 1us, nhưng trong ứng dung này thì thời gian trì

hoãn này không ảnh hưởng. Một trong các IC lái là IR2102 với 2 ngõ vào và hai ngõ ra

tương ứng cho một cặp mosfet ở một pha.

Hình 2.17 IC lái IR2102

Page 34: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 24 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

2.7 IC MAX232 Vi mạch MAX 232 của hãng MAXIM là một vi mạch chuyên dùng trong giao diện

nối tiếp với máy tính. Chúng có nhiệm vụ chuyển đổi mức TTL ở lối vào thành mức

+10V hoặc –10V ở phía truyền và các mức +3…+15V hoặc -3…-15V thành mức TTL

ở phía nhận.

Hình 2.18 IC MAX232

Vi mạch MAX 232 có hai bộ đệm và hai bộ nhận. Đường dẫn điều khiển lối vào

CTS, điều khiển việc xuất ra dữ liệu ở cổng nối tiếp khi cần thiết, được nối với chân 9

của vi mạch MAX 232. Còn chân RST (chân 10 của vi mạch MAX ) nối với đường

dẫn bắt tay để điều khiển quá trình nhận. Thường thì các đường dẫn bắt tay được nối

với cổng nối tiếp qua các cầu nối, để khi không dùng đến nữa có thể hở mạch các cầu

này. Cách truyền dữ liệu đơn giản nhất là chỉ dùng ba đường dẫn TxD, RxD và GND

(mass).

Mức điện áp logic của RS-232C là khoảng điện áp giữa +15V và –15V. Các đường

dữ liệu sử dụng mức logic âm: logic 1 có điện thế giữa –5V và –15V, logic 0 có điện

thế giữa +5V và +15V. tuy nhiên các đường điền khiển (ngoại trừ đường TDATA và

RDATA) sử dụng logic dương: gía trị TRUE = +5V đến +15V và FALSE =-5V đến –

15.

Ở chuẩn giao tiếp này, giữa ngõ ra bộ kích phát và ngõ vào bộ thu có mức nhiễu

được giới hạn là 2V. Do vậy ngưỡng lớn nhất của ngõ vào là ±3V trái lại mức ± 5V là

ngưỡng nhỏ nhất với ngõ ra. Ngõ ra bộ kích phát khi không tải có điện áp là ± 25V.

Page 35: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 25 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

2.8 ENCODER

Để điều khiển được tốc độ, ta cần có một thiết bị đo tốc độ quay của động cơ.

Encoder là thiết bị đo tốc độ hay vị trí theo nguyên lí đếm vạch xung thường được sử

dụng. Đo tốc độ bằng encoder đơn giản hơn các phương pháp khác. Khi kết hợp với

dsPIC thì lại càng đơn giản hơn nữa khi dsPIC có khối chuyên dùng để đọc encoder và

có thể tăng độ phân giải của encoder lên gấp 2 hoặc gấp 4 lần. Encoder được sử dụng

trong ứng dụng này có độ phân giải 100 xung/vòng, điện áp cung cấp 5V, hai kênh ra

QA và QB.

Hình 2.19 Encorder

2.9 ĐỘNG CƠ BA PHA

Trong ứng dụng này, ta dùng động cơ 3 pha công suất nhỏ. Đó là loại 5IK90GU-

SW, công suất 90W, điện áp cung cấp 220V-50Hz, tốc độ danh định 1300 vòng/phút.

Page 36: Bao Cao Tot Nghiep Moi

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

GVHD: Trần Văn Hùng 26 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Hình 2.20 Động cơ 3 pha

Page 37: Bao Cao Tot Nghiep Moi

CHƯƠNG 3: NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU

GVHD: Trần Văn Hùng 31 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

CHƯƠNG 3

NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU

3.1 THIẾT KẾ PHẦN CỨNG

3.1.1 Sơ đồ khối của hệ thống

Hình 3.1 Sơ đồ khối của hệ thống

3.1.2 Mạch vi điều khiển

Mạch vi điều khiển có thể coi là trung tâm của hệ thống. Tại đây, vi điều khiển đọc

các giá trị đo, biến đổi, tính toán, điều chỉnh và xuất ra tín hiệu đóng ngắt các van công

suất tạo dòng điện điều khiển động cơ.

Page 38: Bao Cao Tot Nghiep Moi

CHƯƠNG 3: NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU

GVHD: Trần Văn Hùng 32 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Mạch vi điều khiển được thiết kế riêng, tất cả các chân được nối ra các port nối bus

nhằm tăng tính linh hoạt cho vi điều khiển khi muốn thay đổi kết nối. Mạch được cung

cấp điện áp 5V từ bên bộ nguồn bên ngoài. Vi điều khiển hoạt động với tần số thạch

anh 20MHz, có nút reset và diot chống dòng ngược.

Vi điều khiển được kết nối port như sau:

PORTE: chân ra của 6 kênh phát PWM, sẽ nối với đầu vào mạch cách ly và lái.

RD0,RD1,RD2,RD3,RB6,RB7,RB8: kết nối với LCD.

PORTB, chân RC13, RC14, RB0,RB1,RB2 RB3: kết nối với bàn phím ma trận.

Chân RB4, RB5: kết nối 2 kênh A, B của encoder.

Chân RF4, RF5 kết nối giao tiếp máy tính.

Page 39: Bao Cao Tot Nghiep Moi

CHƯƠNG 3: NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU

GVHD: Trần Văn Hùng 33 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Hình 3.2 Sơ đồ nguyên lí mạch vi điều khiển

3.1.3 Mạch lái và cách ly

Mạch lái và cách ly giúp cách li giữa vi điều khiển với phần điện áp cao của mạch

nghịch lưu, đồng thời tạo ra mức điện áp cao đủ để kích mosefet phía thấp và phía cao.

Mạch cách ly và lái là phần trung gian kết nối vi điều khiển với mạch nghịch lưu,

có liên quan trực tiếp với nhau nên được thiết kế chung một mạch.

Mạch gồm 3 IC cách ly HCPL2631 hoạt động với điện áp 5V, đầu vào là tín hiệu

PWM từ 6 kênh phát vi điều khiển, đầu ra có điện trở kéo lên 10K tạo mức logic cho

ngõ vào IC lái. IC lái hoạt động với điện áp 15V, giá trị tu bootstrap là 4.7uF đủ lớn để

duy trì xung kích trong 200us để kích dẫn van công suất phía cao.

Page 40: Bao Cao Tot Nghiep Moi

CHƯƠNG 3: NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU

GVHD: Trần Văn Hùng 34 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Hình 3.3 Sơ đồ nguyên lí mạch cách ly và lái

3.1.4 Mạch đo dòng điện, mạch chỉnh lưu và nghịch lưu

Ba mạch này được thiết kế chung với nhau do cùng thực hiện chung một chức năng

là biến điện AC một pha sang AC ba pha cho động cơ và trả về giá trị dòng điện đo

được cho vi điều khiển.

Đầu vào của mạch là tín hiệu kích từ IC lái, đầu ra nối với 3 đầu dây của động cơ.

Mosfet có thể rất nóng trong lúc làm việc nên phải có thêm tản nhiệt kèm theo. Nó

cũng rất nhạy cảm với dòng điện cao nên cần mắc thêm diot ngoài bảo vệ dù bên trong

linh kiện đã có sẵn diot bảo vệ, tránh tường hợp trùng dẫn làm chết nhiều Mosfet khi

thuật toán có sai sót.

Page 41: Bao Cao Tot Nghiep Moi

CHƯƠNG 3: NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU

GVHD: Trần Văn Hùng 35 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Hình 3.4 Sơ đồ nguyên lí mạch chỉnh lưu, nghịch lưu, đo dòng điện

3.1.5 Mạch giao tiếp máy tính Để truyền dữ nhận dữ liệu nối tiếp từ PIC với máy tính qua cổng COM, ta cần có

mạch chuyển đổi từ mức TTL sang mức điện áp cổng COM (±12V). Mạch giao tiếp

nối tiếp với máy tình dùng IC MAX232. Mạch rất đơn giản, MAX232 là IC chuyên

dùng nên không cần thêm linh kiện nhiều, chỉ cần 4 tụ hóa dùng để hỗ trợ IC chuyển

mức tín hiệu. Chân TXD, RXD của pic nối vào chân T1IN, R1OUT (hoặc T2IN,

R2OUT) của MAX232. Chân TXD, RXD của máy tính nối với chân T1OUT, R1INT

(hoặc T2OUT, R2INT) của MAX232.

Trong chế độ giao tiếp với máy tính, ta thiết lập chế độ truyền dữ liệu nối tiếp bất

đồng bộ. Tốc độ baud mặc định là 9600, truyền 8 bit, không có parity bit, bit stop bằng

1.

Page 42: Bao Cao Tot Nghiep Moi

CHƯƠNG 3: NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU

GVHD: Trần Văn Hùng 36 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Hình 3.5 Sơ đồ nguyên lí mạch giao tiếp máy tính

3.2 TÍNH TOÁN CÁC THÔNG SỐ

3.1.1 PHƯƠNG PHÁP ĐIỀU KHIỂN SINE PULSE WIDTH MODULATION

1. Kỹ thuật SinPWM

SinPWM là một kỹ thuật nghịch lưu bằng cách điều rỗng xung PWM kích mạch

công suất MOSFET tạo ra tín hiệu AC gần sin (Pure Sine Inverters). Mức logic của

xung PWM được quyết định bởi việc so sánh một sóng tam giác (sóng mang) và một

sóng sin chuẩn (sóng điều khiển). Tần số sóng mang càng lớn thì tín hiệu AC dạng sine

thu được càng “pure”.

Page 43: Bao Cao Tot Nghiep Moi

CHƯƠNG 3: NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU

GVHD: Trần Văn Hùng 37 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Hình 3.6 Sơ đồ dạng song Sine Pulse Width Modulation

Khi giá trị sóng mang nhỏ hơn sóng điều khiển, PWM ở mức thấp (inactive),

khi giá trị sóng mang lớn hơn sóng điều khiển, PWM ở mức cao (active). Tín hiệu

PWM thu được sẽ là SinPWM:

Hình 3.7 Tín hiệu thu được

Page 44: Bao Cao Tot Nghiep Moi

CHƯƠNG 3: NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU

GVHD: Trần Văn Hùng 38 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Áp dụng vào vi xử lý dsPIC30F4011 ta có module PWM khi hoạt động ở chế độ

Up/Down Count Mode with Double Updates có giá trị bộ đếm (PTMR) tăng/giảm

tuyến tính nên tạo thành một dạng sóng digital tam giác.

Hình 3.7 Giá trị đầu ra PWM

Mức logic của ngõ ra phụ thuộc vào giá trị của thanh ghi PDCx, nếu PDCx nhỏ

hơn PTMR thì ngõ ra tích cực, ngược lại thì ngõ ra thụ động. Căn cứ vào nguyên lý

làm việc này, nếu giá trị PDCx có dạng sin digital thì ngõ ra PWM sẽ là SinPWM.

Với thạch anh 7.3728 MHz, tỷ lệ nhân x16 ta có:

Tốc số thực hiện lệnh: Fcy = (7.3728 x 16)/4 = 29.4912 MHz.

Chu kỳ lệnh: Tcy = 1/Fcy = 33.9 ns.

Đặt bộ đếm PWM có chu kỳ xung clock = ¼ Tcy, giá trị cực đại của bộ đếm là

2000 (PTMR = 2000). Khi đó tần số sóng mang là:

Fm = �

(����∗�∗���)∗� =

����∗�∗��.���∗�= 3686.4 Hz ≈ 3.7 kHz

Tín hiệu điều khiển dạng digital sin được tạo ra bằng cách cập nhật giá trị (lấy

mẫu) từ bảng sin tính sẵn (bảng sin 720 giá trị). Việc cập nhật được thực hiện thông

qua một ngắt Timer với giá trị Timer (PRx) được tính là:

Page 45: Bao Cao Tot Nghiep Moi

CHƯƠNG 3: NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU

GVHD: Trần Văn Hùng 39 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

PRx = Fcy / (720/số bước nhảy trong bảng sin) / tần số đặt.

Việc lựa chọn bước nhảy phải làm sao cho tín hiệu sin càng nhuyễn càng tốt và

việc ngắt Timer không được ảnh hưởng đến chương trình chính. Do đó, số bước nhảy

được chọn như sau:

Bảng 2: Mối lien hệ giữa tần số và bước nhảy

Tần số sóng sin Số bước nhảy 1~25 Hz 1

26~50 Hz 2 51~75 Hz 3

76~100 Hz 4 101~125 Hz 5 126~150 Hz 6 151~200 Hz 8

2. Lý thuyết PID

Điều khiển PID là dựa trên sai số e giữa giá trị đặt SP (set point) và giá trị đo PV

(process variable) để tính toán ra giá trị điều khiển u(t)

�(�) = �� �� +1

��� ��� +

����

���

Do hệ thống điều khiển số nên ta có dt là khoảng thời gian giữa 2 lần lấy mẫu, hay

nói cách khác là chu kỳ lấy mẫu (tS). Khi đó ta có các giá trị tại thời điểm lấy mẫu là

u(k), e(k),… và giá trị trước đó sẽ là u(k-1),e(k-1),....

Phương trình điều khiển sẽ trở thành:

�(�) = ���(�) +����

���(�) + �(� − 1)

2�

���

�� + ������[�(�) − �(� − 1)]

Đặt ��(�) = ���(�)

��(�) =��

��∑ �

�(�)��(���)

���

��� ��

��(�) = ����

��[�(�) − �(� − 1)] = −��

��

��[��(�) − ��(� − 1)]

Page 46: Bao Cao Tot Nghiep Moi

CHƯƠNG 3: NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU

GVHD: Trần Văn Hùng 40 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Ta có �(�) = ��(�) + ��(�) + ��(�)

3. Encoder

Gọi A (vòng/phút) là tốc độ trục động cơ.

Với bộ truyền động tỷ lệ 1:25, tốc độ ngõ ra là A/25 (vòng/phút).

Bánh răng ngõ ra là 22 răng, bánh răng encoder là 15 răng, tốc độ encoder sẽ là

(A/25)*(22/15) = A*22/375 vòng/phút.

Encoder có độ phân giải 500 xung/vòng, tỷ lệ nhân xung của vi xử lý bằng 4 suy

ra vi xử lý nhận được A*352/3 (xung/phút) hay A*88/45 (xung/giây).

Như vậy, nếu đặt chu kỳ lấy mẫu bằng 45/88 = 0.511364s thì số xung nhận

được trong một chu kỳ chính là tốc độ của trục động cơ.

3.2.2 Thuật toán chương trình

Thuật toán menu

Page 47: Bao Cao Tot Nghiep Moi

CHƯƠNG 3: NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU

GVHD: Trần Văn Hùng 41 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Giải thích: trên màn hình LCD lựa chọn 4 chế độ.

- Chế độ 1: khi nhấn phím 1 lựa chọn nhập từ bàn phím, tần số hay tốc độ

chọn từ bàn phím.

- Chế độ 2: khi nhấn phím 2 lựa chọn chế độ biến trở, cài đặt từ biến trở.

- Chế độ 3: khi nhấn phím 3 chọn chế độ giao tiếp máy tính, điều khiển

động cơ từ giao diện.

- Chế độ 4: khi nhấn phím 4 chuyển sang chế độ JOG, chế độ cài thời gian

chạy cho động cơ.

Thuật toán chế độ lựa chọn 1.

Giải thích hoạt động: thiết lập tần số trên LCD. Tiếp theo nhấn phím A sẽ

trở về màn hình chính. Sau đó nhấn phím D động cơ chạy, nếu muốn dừng động

cơ thì nhấn tiếp phím D, còn nếu nhấn phím D sai thì ta nhấn phím * để lựa chọn

lại cho đúng.

Page 48: Bao Cao Tot Nghiep Moi

CHƯƠNG 3: NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU

GVHD: Trần Văn Hùng 42 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Thuật toán lựa chọn chế độ 2.

- Ta lấy mẫu ADC 60 lần, sau đó cộng trung bình các giá trị ADC, sau đó

chuyển ra tần số (ADC/5)

- Hiển thị giá trị ADC lên màn hình LCD.

- Nhấn phím D cập nhật tần số và chạy động cơ.

Page 49: Bao Cao Tot Nghiep Moi

CHƯƠNG 3: NỘI DUNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU

GVHD: Trần Văn Hùng 43 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Thuật toán lựa chọn chế độ 3.

Page 50: Bao Cao Tot Nghiep Moi

CHƯƠNG 4: KẾT QUẢ VÀ THẢO LUẬN

GVHD: Trần Văn Hùng 45 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

CHƯƠNG 4

KẾT QUẢ VÀ THẢO LUẬN

4.1 KẾT QUẢ

Sau thời gian tìm hiểu, nghiên cứu, làm mạch, mô hình đã hoàn thành và hoạt động

đạt yêu cầu. Tốc độ đặt và tốc độ đo được hiển thị trên LCD. Giá trị đặt được được

nhập từ bàn phím ma trận để tạo sự linh hoạt, có thể thay đổi giá trị đặt một cách nhanh

chóng không cẩn phải kết nối máy tính. Nhập giá trị từ bàn phím như sau:

Ở chế độ thường, tất cả các phím không có tác dụng trừ phím MENU. Nhấn

phím MENU sẽ đưa màn hình vào chế độ cài đặt.

Trong chế độ cài đặt, nhấn phím 0 đến 9 để nhập giá trị và ENT để cập nhật

giá trị và thoát ra chế độ thường. Nhấn phím UP sẽ trở lại chế độ thường, tốc

độ đặt không thay đổi. Nhấn phím MENU sẽ xóa giá trị vừa nhập vào để

nhập lại giá trị khác.

Mô hình cũng có khả năng kết nối với máy tính thông qua mạch giao tiếp nối tiếp dùng

RS232.

Giao diện máy tính cho phép nhập tốc độ đặt, hiển thị tốc độ đo.

Giao diện máy tính cũng cho phép thay đổi hệ số Kp, Kd, điều mà bàn phím ma

trận không làm được.

Có nhiều tùy chọn thông số giao tiếp, kết nối như chọn tốc độ baud, cổng com,

bit chẵn lẻ, stop bit.

Có đồ thị ghi lại giá trị đo theo thời gian, thông qua đó có thể khảo sát, đánh giá

chất lượng điều khiển của hệ thống.

Trong chương trình này, cổng com kết nối là COM8, tốc độ baud 9600, 1 Stop

bit, 8 bit dữ liệu, không dùng bit chẵn lẻ.

Tuy nhiên, do lần đầu tiên làm đề về động cơ ba pha nên không tránh khỏi một số

hạn chế về phần cứng làm cho mô hình hoạt động chưa được tốt. Ngoài dãy tốc độ này

động cơ không còn ổn định.

Page 51: Bao Cao Tot Nghiep Moi

CHƯƠNG 4: KẾT QUẢ VÀ THẢO LUẬN

GVHD: Trần Văn Hùng 46 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Hình 4.1 Mô hình phần cứng

Dạng sóng đầu ra:

Page 52: Bao Cao Tot Nghiep Moi

CHƯƠNG 4: KẾT QUẢ VÀ THẢO LUẬN

GVHD: Trần Văn Hùng 47 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Dạng sóng đầu ra nối hình sao, điện áp dây:

Page 53: Bao Cao Tot Nghiep Moi

CHƯƠNG 4: KẾT QUẢ VÀ THẢO LUẬN

GVHD: Trần Văn Hùng 48 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Page 54: Bao Cao Tot Nghiep Moi

CHƯƠNG 4: KẾT QUẢ VÀ THẢO LUẬN

GVHD: Trần Văn Hùng 49 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Dạng sóng đầu ra đấu dạng tam giác:

Page 55: Bao Cao Tot Nghiep Moi

CHƯƠNG 4: KẾT QUẢ VÀ THẢO LUẬN

GVHD: Trần Văn Hùng 50 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Hình 4.2 Giao diện điều khiển trên máy tính

Đặt tốc độ 1300:

Ban đầu độ vọt lố cao nhưng sau đó tốc độ đã về gần tốc độ đặt, sai lệch nhỏ.

Page 56: Bao Cao Tot Nghiep Moi

CHƯƠNG 4: KẾT QUẢ VÀ THẢO LUẬN

GVHD: Trần Văn Hùng 51 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Đặt tốc độ 1650, màn hình giao tiếp như dưới:

Đặt tốc độ 1700 màn hình như dưới:

Page 57: Bao Cao Tot Nghiep Moi

CHƯƠNG 4: KẾT QUẢ VÀ THẢO LUẬN

GVHD: Trần Văn Hùng 52 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

4.2 THẢO LUẬN

Một số hạn chế về mặt phần cứng có thể nói đến là độ phân giải của cảm biến đo

dòng điện và encoder thấp.

Encoder sử dụng có độ phân giải 500 xung/vòng. Khối QEI của dspic nâng

độ phân giải lên 4 lần chỉ đạt 2000 xung/vòng. Nếu thời gian lấy mẫu nhỏ,

cỡ vài mili giây thì sai số có thể lên đến vài chục vòng/phút cho một xung.

Thục tế, đối với điều khiển động cơ này thì encoder phải có độ phân giải trên

1000 xung/vòng. Nhưng loại encoder này rất đắt và khó tìm mua.

Động cơ ba pha khi khởi động trực tiếp thì dòng ban đầu lớn từ 5-7 lần dòng

danh định.

Giao diện máy tính về cơ bản có thể cài đặt, thay đổi các thông số cần thiết, nhưng

tốc độ lấy mẫu vẽ đồ thị còn thấp nên đồ thị không rõ nét ở giai đoạn quá độ.

Page 58: Bao Cao Tot Nghiep Moi

CHƯƠNG 5: KẾT LUẬN VÀ KIẾN NGHỊ

GVHD: TRẦN VĂN HÙNG 49 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

CHƯƠNG 5

KẾT LUẬN VÀ KIẾN NGHỊ

Mô hình đã hoàn thành nhưng vẫn còn nhiều vấn đề chưa tốt cần phải sửa đổi nếu

muốn phát triển và hoàn thiện.

Về phần cứng, cần thay thế bằng encoder và cảm biến có độ phân giải cao hơn.

Về giao tiếp nên bổ sung, thiết kế lại giao diện cho đẹp hơn, tìm cách khắc phục

hiện tượng không đồng bộ truyền các thồng số khác nhau để có thể tăng tốc độ

đọc gởi dữ liệu để có thể điều khiển tốt hơn và đồ thị được rõ nét hơn.

Tuy vậy, mô hình này cũng là cơ sở, bước đầu, làm nền tảng cho việc hoàn thiện và

phát triển sau này.

Page 59: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 50 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

TÀI LIỆU THAM KHẢO

1. Sách Truyền động điện thông minh của thầy Nguyễn Phùng Quang, Nhà xuất

bản khoa học và kĩ thuật Hà Nội – 2004.

2. Giáo trình Lý thuyết điều khiển tự động của Ths. Trần Thị Hoàng Oanh trường

Đại học Công Nghiệp TP. Hồ Chí Minh

3. Tài liệu Using the dsPIC30F for Vector Control of an ACIM của hãng

Microchip.

4. Datasheet của dsPIC30F4011.

5. Tài liệu dsPIC30F Family Reference Manual của hãng Microchip.

6. Datasheet của mosfet IRFP460.

7. Datasheet của IC cách ly HCPL2631.

8. Datasheet của IC lái IR2102.

9. Datasheet của cảm biến đo dòng điện ACS712.

Page 60: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 51 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

PHỤ LỤC

CHƯƠNG TRÌNH TRÊN VI ĐIỀU KHIỂN

/**********************************************************

********************

**********************************************************

********************/

#include "p30F4011.h"

#include "delay.h"

#include "lcd.h"

#include "uart.h"

//-----------------------------------------------------------------------------

//Configuration bits

_FOSC(CSW_FSCM_OFF & XT_PLL16);

_FWDT(WDT_OFF);

_FBORPOR(PBOR_ON & BORV27 & PWRT_16 &

PWMxL_ACT_LO & PWMxH_ACT_LO & MCLR_EN);

_FGS(CODE_PROT_OFF);

//-----------------------------------------------------------------------------

//Program Specific Constants

#define FCY 29491200 //Instruction cycle rate (Osc x PLL / 4)

//-----------------------------------------------------------------------------

//Khai bao chuong trinh con

void period();

unsigned char ALL_ROWS(); //Phat hien co phim

nhan.

unsigned char kbd_getc(); //Ham lay ma phim.

unsigned int read_adc();

void adc_init();

void update();

void QEI_init();

void get_speed();

void pid_freq();

//-----------------------------------------------------------------------------

// Global variants using in subroutine

Page 61: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 52 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

unsigned char kbd_down = 0; // Bien chi thi da co nhan hay

chua co nhan phim lan nao (Mac dinh = FALSE).

unsigned char last_key; // Bien chua ma phim duoc nhan o

lan nhan sau cung (Mac dinh = NULL).

//-----------------------------------------------------------------------------

//Global variables

const char KEYS[4][4] = { {'1','2','3','A'}, //

{31H 32H 33H 41H}

{'4','5','6','B'},

// {34H 35H 36H 42H}

{'7','8','9','C'},

// {37H 38H 39H 43H}

{'*','0','#','D'} };

// {2AH 30H 23H 44H}

float Kp = 20, Ki = 8, Kd = 0, Up =0, Ui = 0, Ud = 0, freq = 60,

pc_freq = 0;

unsigned int pot_freq, key_freq,jog_freq;

int error[2] = {0,0};

int sum_error = 0, delta_error = 0;

int speed = 0,set_speed = 0, mea_speed = 0;

unsigned char mode = 1,tmr1_flag = 0, uart_flag = 0, chieuquay = 0,

byte_num = 0;

unsigned char pc_data[4] = {"0000"};

unsigned char tran_data[4] = {"0000"};

unsigned int locus = 0, locus_a = 0, locus_b = 0, locus_c = 0, step = 3;

//Position in sine table of each phase.

const float sine[720] = {0.00000, 0.00873, 0.01745, 0.02618, 0.03490,

0.04362, 0.05234, 0.06105, 0.06976, 0.07846, 0.08716, 0.09585,

0.10453, 0.11320, 0.12187,

0.13053, 0.13917, 0.14781, 0.15643, 0.16505, 0.17365, 0.18224,

0.19081, 0.19937,

0.20791, 0.21644, 0.22495,

0.23345, 0.24192, 0.25038, 0.25882, 0.26724, 0.27564, 0.28402,

0.29237, 0.30071,

Page 62: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 53 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

0.30902, 0.31730, 0.32557,

0.33381, 0.34202, 0.35021, 0.35837, 0.36650, 0.37461, 0.38268,

0.39073, 0.39875,

0.40674, 0.41469, 0.42262,

0.43051, 0.43837, 0.44620, 0.45399, 0.46175, 0.46947, 0.47716,

0.48481, 0.49242,

0.50000, 0.50754, 0.51504,

0.52250, 0.52992, 0.53730, 0.54464, 0.55194, 0.55919, 0.56641,

0.57358, 0.58070,

0.58779, 0.59482, 0.60182,

0.60876, 0.61566, 0.62251, 0.62932, 0.63608, 0.64279, 0.64945,

0.65606, 0.66262,

0.66913, 0.67559, 0.68200,

0.68835, 0.69466, 0.70091, 0.70711, 0.71325, 0.71934, 0.72537,

0.73135, 0.73728,

0.74314, 0.74896, 0.75471,

0.76041, 0.76604, 0.77162, 0.77715, 0.78261, 0.78801, 0.79335,

0.79864, 0.80386,

0.80902, 0.81412, 0.81915,

0.82413, 0.82904, 0.83389, 0.83867, 0.84339, 0.84805, 0.85264,

0.85717, 0.86163,

0.86603, 0.87036, 0.87462,

0.87882, 0.88295, 0.88701, 0.89101, 0.89493, 0.89879, 0.90259,

0.90631, 0.90996,

0.91355, 0.91706, 0.92050,

0.92388, 0.92718, 0.93042, 0.93358, 0.93667, 0.93969, 0.94264,

0.94552, 0.94832,

0.95106, 0.95372, 0.95630,

0.95882, 0.96126, 0.96363, 0.96593, 0.96815, 0.97030, 0.97237,

0.97437, 0.97630,

0.97815, 0.97992, 0.98163,

0.98325, 0.98481, 0.98629, 0.98769, 0.98902, 0.99027, 0.99144,

0.99255, 0.99357,

Page 63: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 54 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

0.99452, 0.99540, 0.99619,

0.99692, 0.99756, 0.99813, 0.99863, 0.99905, 0.99939, 0.99966,

0.99985, 0.99996,

1.00000, 0.99996, 0.99985,

0.99966, 0.99939, 0.99905, 0.99863, 0.99813, 0.99756, 0.99692,

0.99619, 0.99540,

0.99452, 0.99357, 0.99255,

0.99144, 0.99027, 0.98902, 0.98769, 0.98629, 0.98481, 0.98325,

0.98163, 0.97992,

0.97815, 0.97630, 0.97437,

0.97237, 0.97030, 0.96815, 0.96593, 0.96363, 0.96126, 0.95882,

0.95630, 0.95372,

0.95106, 0.94832, 0.94552,

0.94264, 0.93969, 0.93667, 0.93358, 0.93042, 0.92718, 0.92388,

0.92050, 0.91706,

0.91355, 0.90996, 0.90631,

0.90259, 0.89879, 0.89493, 0.89101, 0.88701, 0.88295, 0.87882,

0.87462, 0.87036,

0.86603, 0.86163, 0.85717,

0.85264, 0.84805, 0.84339, 0.83867, 0.83389, 0.82904, 0.82413,

0.81915, 0.81412,

0.80902, 0.80386, 0.79864,

0.79335, 0.78801, 0.78261, 0.77715, 0.77162, 0.76604, 0.76041,

0.75471, 0.74896,

0.74314, 0.73728, 0.73135,

0.72537, 0.71934, 0.71325, 0.70711, 0.70091, 0.69466, 0.68835,

0.68200, 0.67559,

0.66913, 0.66262, 0.65606,

0.64945, 0.64279, 0.63608, 0.62932, 0.62251, 0.61566, 0.60876,

0.60182, 0.59482,

0.58779, 0.58070, 0.57358,

0.56641, 0.55919, 0.55194, 0.54464, 0.53730, 0.52992, 0.52250,

0.51504, 0.50754,

Page 64: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 55 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

0.50000, 0.49242, 0.48481,

0.47716, 0.46947, 0.46175, 0.45399, 0.44620, 0.43837, 0.43051,

0.42262, 0.41469,

0.40674, 0.39875, 0.39073,

0.38268, 0.37461, 0.36650, 0.35837, 0.35021, 0.34202, 0.33381,

0.32557, 0.31730,

0.30902, 0.30071, 0.29237,

0.28402, 0.27564, 0.26724, 0.25882, 0.25038, 0.24192, 0.23345,

0.22495, 0.21644,

0.20791, 0.19937, 0.19081,

0.18224, 0.17365, 0.16505, 0.15643, 0.14781, 0.13917, 0.13053,

0.12187, 0.11320,

0.10453, 0.09585, 0.08716,

0.07846, 0.06976, 0.06105, 0.05234, 0.04362, 0.03490, 0.02618,

0.01745, 0.00873,

0.00000, -0.00873, -0.01745, -

0.02618, -0.03490, -0.04362, -0.05234, -0.06105, -0.06976, -0.07846, -

0.08716, -0.09585,

-0.10453, -0.11320, -0.12187,

-0.13053, -0.13917, -0.14781, -0.15643, -0.16505, -0.17365, -0.18224, -

0.19081, -0.19937,

-0.20791, -0.21644, -0.22495,

-0.23345, -0.24192, -0.25038, -0.25882, -0.26724, -0.27564, -0.28402, -

0.29237, -0.30071,

-0.30902, -0.31730, -0.32557,

-0.33381, -0.34202, -0.35021, -0.35837, -0.36650, -0.37461, -0.38268, -

0.39073, -0.39875,

-0.40674, -0.41469, -0.42262,

-0.43051, -0.43837, -0.44620, -0.45399, -0.46175, -0.46947, -0.47716, -

0.48481, -0.49242,

-0.50000, -0.50754, -0.51504,

-0.52250, -0.52992, -0.53730, -0.54464, -0.55194, -0.55919, -0.56641, -

0.57358, -0.58070,

Page 65: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 56 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

-0.58779, -0.59482, -0.60182,

-0.60876, -0.61566, -0.62251, -0.62932, -0.63608, -0.64279, -0.64945, -

0.65606, -0.66262,

-0.66913, -0.67559, -0.68200,

-0.68835, -0.69466, -0.70091, -0.70711, -0.71325, -0.71934, -0.72537, -

0.73135, -0.73728,

-0.74314, -0.74896, -0.75471,

-0.76041, -0.76604, -0.77162, -0.77715, -0.78261, -0.78801, -0.79335, -

0.79864, -0.80386,

-0.80902, -0.81412, -0.81915,

-0.82413, -0.82904, -0.83389, -0.83867, -0.84339, -0.84805, -0.85264, -

0.85717, -0.86163,

-0.86603, -0.87036, -0.87462,

-0.87882, -0.88295, -0.88701, -0.89101, -0.89493, -0.89879, -0.90259, -

0.90631, -0.90996,

-0.91355, -0.91706, -0.92050,

-0.92388, -0.92718, -0.93042, -0.93358, -0.93667, -0.93969, -0.94264, -

0.94552, -0.94832,

-0.95106, -0.95372, -0.95630,

-0.95882, -0.96126, -0.96363, -0.96593, -0.96815, -0.97030, -0.97237, -

0.97437, -0.97630,

-0.97815, -0.97992, -0.98163,

-0.98325, -0.98481, -0.98629, -0.98769, -0.98902, -0.99027, -0.99144, -

0.99255, -0.99357,

-0.99452, -0.99540, -0.99619,

-0.99692, -0.99756, -0.99813, -0.99863, -0.99905, -0.99939, -0.99966, -

0.99985, -0.99996,

-1.00000, -0.99996, -0.99985,

-0.99966, -0.99939, -0.99905, -0.99863, -0.99813, -0.99756, -0.99692, -

0.99619, -0.99540,

-0.99452, -0.99357, -0.99255,

-0.99144, -0.99027, -0.98902, -0.98769, -0.98629, -0.98481, -0.98325, -

0.98163, -0.97992,

Page 66: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 57 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

-0.97815, -0.97630, -0.97437,

-0.97237, -0.97030, -0.96815, -0.96593, -0.96363, -0.96126, -0.95882, -

0.95630, -0.95372,

-0.95106, -0.94832, -0.94552,

-0.94264, -0.93969, -0.93667, -0.93358, -0.93042, -0.92718, -0.92388, -

0.92050, -0.91706,

-0.91355, -0.90996, -0.90631,

-0.90259, -0.89879, -0.89493, -0.89101, -0.88701, -0.88295, -0.87882, -

0.87462, -0.87036,

-0.86603, -0.86163, -0.85717,

-0.85264, -0.84805, -0.84339, -0.83867, -0.83389, -0.82904, -0.82413, -

0.81915, -0.81412,

-0.80902, -0.80386, -0.79864,

-0.79335, -0.78801, -0.78261, -0.77715, -0.77162, -0.76604, -0.76041, -

0.75471, -0.74896,

-0.74314, -0.73728, -0.73135,

-0.72537, -0.71934, -0.71325, -0.70711, -0.70091, -0.69466, -0.68835, -

0.68200, -0.67559,

-0.66913, -0.66262, -0.65606,

-0.64945, -0.64279, -0.63608, -0.62932, -0.62251, -0.61566, -0.60876, -

0.60182, -0.59482,

-0.58779, -0.58070, -0.57358,

-0.56641, -0.55919, -0.55194, -0.54464, -0.53730, -0.52992, -0.52250, -

0.51504, -0.50754,

-0.50000, -0.49242, -0.48481,

-0.47716, -0.46947, -0.46175, -0.45399, -0.44620, -0.43837, -0.43051, -

0.42262, -0.41469,

-0.40674, -0.39875, -0.39073,

-0.38268, -0.37461, -0.36650, -0.35837, -0.35021, -0.34202, -0.33381, -

0.32557, -0.31730,

-0.30902, -0.30071, -0.29237,

-0.28402, -0.27564, -0.26724, -0.25882, -0.25038, -0.24192, -0.23345, -

0.22495, -0.21644,

Page 67: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 58 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

-0.20791, -0.19937, -0.19081,

-0.18224, -0.17365, -0.16505, -0.15643, -0.14781, -0.13917, -0.13053, -

0.12187, -0.11320,

-0.10453, -0.09585, -0.08716,

-0.07846, -0.06976, -0.06105, -0.05234, -0.04362, -0.03490, -0.02618, -

0.01745, -0.00873

}; // Sine table with 720

values.

//==================================================

===========================

//Main routine

//Set up LEDs and timer, wait for timer periods, and flash one of the

two LEDs

int main(void)

{

unsigned char key = 0,key_change = 0;

unsigned int a,adc_value;

adc_init();

QEI_init();

UART1_init();

// Thiet lap PWM tan so 5kHz.

OVDCON = 0x00ff; //Tat che do PWM va ngo ra tich cuc (muc

thap)

PTCON = 0x0000; //Turn off PWM and clear settings

PTPER = 2100; //Tan so song mang = 1.8kHz + HIN pulsewidth >

1us + deadtime.

PWMCON1 = 0x00ff; //Che do bo tro & ngo ra PWM.

DTCON1 = 0x006B; //Deadtime = 88 Tcy = 3us

PDC1 = 0xffff; //Xoa duty cycle phase A => Ngo ra

PWM1H tich cuc muc thap.

PDC2 = 0xffff; //Xoa duty cycle phase B => Ngo ra

PWM2H tich cuc muc thap.

PDC3 = 0xffff; //Xoa duty cycle phase C => Ngo ra

PWM3H tich cuc muc thap.

// Dieu khien ngoai vi ban dau.

Page 68: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 59 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

TRISBbits.TRISB1 = 0; //Relay

TRISBbits.TRISB2 = 0; //BUZZ

LATBbits.LATB1 = 0;

lcd_init();

kbd_init();

__delay_ms(1000);

// Thiet lap Timer 2 de update gia tri PWM.

IEC0 = 0x0048; //Enalble Timer1 & Timer 2 interrupt request

T2CON = 0; //Turn off Timer2 and clear settings

TMR2 = 0; //Start Timer2 at zero

PR2 = FCY/240/freq; //Set period register value for 1/240/60 second

(60 Hz)

T2CON = 0x8000; //Turn on Timer2 with 1:1 prescaler.

//Thiet lap Timer 1 de lay toc do tra ve tu encoder.

T1CON = 0;

TMR1 = 0;

PR1 = 0xE61D; //Set thoi gian timer1 sao cho so xung tra ve = so

vong/phut.

T1CON = 0x8030; //Turn on Timer1 with 1:256 prescaler.

PTCON = 0x8007;

// Hien thi LCD

lcd_puts(" Welcome ");

lcd_gotoxy(0,1);

lcd_puts("Bien tan SinPWM ");

__delay_ms(1000);

//--------------- Che do ban phim ------------------------

MODE1:

lcd_putc('\f');

lcd_puts("Tan so: Hz");

lcd_gotoxy(12,0);

lcd_putd(freq);

if(key_change == 1)

{

lcd_gotoxy(0,1);

lcd_puts("Nhan D de update");

Page 69: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 60 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

}

while(1)

{

key = kbd_getc();

if(key == 'D')

{

key_change = 0;

lcd_gotoxy(0,1);

lcd_puts("Toc do: rpm");

lcd_gotoxy(11,1);

lcd_putd(speed);

OVDCON = 0xffff; //ngo ra PWM dieu khien boi

module PWM.

update();

while(1)

{

if(tmr1_flag == 1) //Neu gia tri speed dc

cap nhat.

{

lcd_gotoxy(11,1);

lcd_putd(speed);

tmr1_flag =0;

}

__delay_ms(10); //Chong doi ban

phim.

switch (kbd_getc())

{

case 'D': //Nhan nut D

ngung bien tan.

OVDCON = 0x00ff; //Ngo ra dieu

khien boi POUTx o muc tich cuc (1).

goto MODE1; //Tro ve

man hinh ban dau cua che do KEY.

break;

case '*':

Page 70: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 61 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

key_change = 1;

goto MODE1_1; //Truong hop

muon thay doi tan so.

break;

default:

break;

}

}

}

MODE1_1:

if(key == '*')

{

key_freq = 0;

lcd_putc('\f');

lcd_puts(" Nhap tan so: ");

lcd_gotoxy(0,1);

lcd_puts(" Hz ");

while(key != 'C')

{

key = kbd_getc();

if (key != 'A' && key != 'B' && key != 'C' &&

key != 'D' && key != '*' && key != '\0')

{

if(key == '#')

key_freq /= 10;

else

key_freq = key_freq*10 + (key - 48);

if(key_freq > 200)

key_freq /= 10;

lcd_gotoxy(7,1);

lcd_putc(' ');

lcd_putc(' ');

lcd_putd(key_freq);

}

}

Page 71: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 62 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

if(key_freq != 0)

freq = key_freq;

goto MODE1;

}

if(key == 'A')

goto MENU;

}

//--------------------- Menu chinh ------------------------

MENU:

lcd_putc('\f');

lcd_puts("KEY POT COM JOG ");

lcd_gotoxy(0,1);

lcd_puts(" 1 2 3 4 ");

while (1)

{

switch(kbd_getc())

{

case 'A':

lcd_putc('\f');

lcd_puts("Time.Set PID ");

lcd_gotoxy(0,1);

lcd_puts(" 5 6 ");

while(1)

{

switch(kbd_getc())

{

case 'A':

goto MENU;

break;

/*case '2':

mode = 2;

goto MODE2;

break;

case '3':

Page 72: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 63 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

mode = 3;

goto MODE3;

break;*/

default:

break;

}

}

break;

case '1':

mode =1;

goto MODE1;

break;

case '2':

mode = 2;

goto MODE2;

break;

case '3':

mode = 3;

goto MODE3;

break;

case '4':

mode = 4;

goto MODE4;

break;

default:

break;

}

}

//------------------------ Che do su dung bien tro ------------------------------

MODE2:

adc_value = 0;

lcd_putc('\f');

lcd_puts("Gia tri adc: ");

lcd_gotoxy(0,1);

Page 73: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 64 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

lcd_puts("Nhan [D] de chay");

while (1)

{

for(a =0;a<60;a++) //Doc adc 60 lan => vua du cong lai trong 1

bien 16 bit.

adc_value += read_adc();

adc_value /= 61; //Chia 61 vi tinh luon gia tri cu con luu.

lcd_gotoxy(15,0);

lcd_putd(adc_value);

key = kbd_getc();

if(key == 'A')

goto MENU;

if(key == 'D')

{

lcd_putc('\f');

lcd_puts("Tan so: Hz");

lcd_gotoxy(0,1);

lcd_puts("Toc do: rpm");

OVDCON = 0xffff; //Bat PWM.

while(kbd_getc() != 'D') //Nhan nut D de dung lai.

{

for(a = 0;a<60;a++)

adc_value += read_adc();

adc_value /= 61;

pot_freq = adc_value/5; //Do phan giai adc la

1024, tan so max la 200 => lay gan dung = adc/5.

if(pot_freq < 1) //Gioi han lai tan so tu

1 den 200

pot_freq = 1;

else if(pot_freq > 200)

pot_freq = 200;

if(pot_freq != freq)

{

freq = pot_freq;

update();

Page 74: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 65 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

}

if(tmr1_flag == 1) //Neu gia tri speed dc

cap nhat.

{

lcd_gotoxy(11,1);

lcd_putd(speed);

tmr1_flag =0;

}

lcd_gotoxy(12,0);

lcd_putd(freq);

}

OVDCON = 0x00ff; //Tat PWM.

lcd_putc('\f');

lcd_puts("Gia tri adc: ");

lcd_gotoxy(0,1);

lcd_puts("Nhan [D] de chay");

}

} //Lap lai mode 2.

//------------------------- Che do JOG ----------------------------------------

MODE4:

lcd_putc('\f');

lcd_puts("Chay che do JOG ");

lcd_gotoxy(0,1);

lcd_puts(" STOP ");

while(1)

{

key = kbd_getc();

if(key == 'A')

goto MENU;

if(key == 'D')

{

lcd_gotoxy(0,1);

lcd_puts(" RUN ");

jog_freq = freq;

Page 75: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 66 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

freq = 10;

update(); //Cap nhat tan so 10 Hz

OVDCON = 0xffff; //Chay PWM

__delay_ms(1000);

key = '\0'; //Xoa key quet lai.

freq = jog_freq;

OVDCON = 0x00ff; //Tat PWM

lcd_gotoxy(0,1);

lcd_puts(" STOP ");

}

}

//-------------------------- Che do giao tiep may tinh------------------------

MODE3:

lcd_putc('\f');

lcd_puts("Ket noi den PC");

lcd_gotoxy(0,1);

lcd_puts("Nhan D de chay");

set_speed = 1500;

Kp = 1;

Ki = 0.5;

Kd = 0;

while(1)

{

key = kbd_getc();

if(key == 'A')

{

goto MENU;

}

if(key == 'D')

{

lcd_putc('\f');

lcd_puts("Tan so: Hz");

lcd_gotoxy(0,1);

lcd_puts("Nhan D de dung");

Page 76: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 67 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

__delay_ms(100);

IEC0|= 0x0200; //U1RX Interrupt enable.

while(kbd_getc() != 'D')

{

if(tmr1_flag == 1)

{

tmr1_flag == 0;

mea_speed = speed;

pid_freq();

freq = pc_freq;

lcd_gotoxy(12,0);

lcd_putf(freq);

// update();

// OVDCON = 0xffff;

for(a=0;a<4;a++)

{

tran_data[3-a] = mea_speed%10

+48;

mea_speed/=10;

}

//if(uart_flag == 1)

putsUART1(tran_data);

}

}

IEC0 &= 0xfdff;

OVDCON = 0x00ff;

goto MODE3;

}

}

} //End of main()

//==================================================

===========================

//Error traps

Page 77: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 68 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

//-----------------------------------------------------------------------------

//Oscillator Fail Error trap routine

void _ISR _OscillatorFail(void)

{

LATBbits.LATB2 = 1; //Turn LED D4 on

while(1); //Wait forever

}

//-----------------------------------------------------------------------------

//Address Error trap routine

void _ISR _AddressError(void)

{

LATBbits.LATB3 = 1; //Turn LED D4 on

while(1); //Wait forever

}

//-----------------------------------------------------------------------------

//Stack Error trap routine

void _ISR _StackError(void)

{

LATBbits.LATB4 = 1; //Turn LED D4 on

while(1); //Wait forever

}

//-----------------------------------------------------------------------------

//Math (Arithmetic) Error trap routine

void _ISR _MathError(void)

{

LATBbits.LATB5 = 1; //Turn LED D4 on

while(1); //Wait forever

}

//-----------------------------------------------------------------------------

//Interrupts subroutine

void __attribute__((__interrupt__, auto_psv)) _T2Interrupt (void)

{

IFS0bits.T2IF = 0; // Clear timer 2 interrupt flag

locus = locus + step;

if(locus > 719)

Page 78: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 69 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

locus = 0;

period();

}

void __attribute__((__interrupt__)) _T1Interrupt (void)

{

IFS0bits.T1IF = 0; // Clear timer 1 interrupt flag

get_speed();

tmr1_flag = 1;

POSCNT = 0;

}

void __attribute__((__interrupt__)) _U1RXInterrupt(void)

{

IFS0bits.U1RXIF = 0;

// Read the receive buffer till atleast one or more character

can be read

while(DataRdyUART1())

{

pc_data[byte_num] = U1RXREG;//ReadUART1(); //

Nhan chuoi thong tin (gom 5 byte) tu UART.

byte_num++; // Tang bien dem so

luong byte da nhan trong chuoi.

if (byte_num>3) // Kiem tra so byte du lieu nhan

duoc.

{

uart_flag = 1;

byte_num = 0; // Dat lai so thu byte trong

chuoi (tong so byte trong chuoi la 5).

}

}

}

/*void __attribute__((__interrupt__, auto_psv)) _T3Interrupt (void)

{

IFS0bits.T3IF = 0; // Clear timer 3 interrupt flag

Page 79: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 70 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

display = pdc1_value;

for(i = 15;i>=12;i--)

{

lcd_gotoxy(i,1);

lcd_putc(number[display%10]);

display = display/10;

}

}*/

//------------------------------------------------------------------------------

//Subroutines

void period()

{

locus_a = locus;

locus_b = locus+240;

locus_c = locus+480;

if(locus_b > 719)

locus_b -= 720;

if(locus_c > 719)

locus_c -= 720;

PDC1 = (unsigned int)1050 + 1000*sine[locus_a];

PDC2 = (unsigned int)1050 + 1000*sine[locus_b];

PDC3 = (unsigned int)1050 + 1000*sine[locus_c];

}

// ***************************************************

// Ten CTC: ALL_ROWS(void).

// Thong so dau vao:

// Thong so dau ra: Tra ve gia tri LOW(0) neu khong nhan phim.

// Tra ve gia tri HIGH(1) neu co nhan

phim.

// Cong dung: Kiem tra co nhan hay khong nhan phim.

// ***************************************************

unsigned char ALL_ROWS() // Ham kiem tra co nhan hay khong

nhan phim.

Page 80: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 71 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

{ // Tra ve gia tri

LOW(0) neu khong nhan phim va gia tri HIGH(1) neu co nhan

phim.

// Khai bao bien.

// Dinh nghia ham.

if(row0 && row1 && row2 && row3) // Kiem tra muc

logic cua cac hang ban phim.

// Neu tat ca cac hang deu co muc HIGH ->

khong nhan phim.

return(0); // Tra ve ket qua la LOW(0) neu khong co

phim nhan.

else

return(1); // Tra ve ket qua la HIGH(1) neu co phim

nhan.

}

// ***************************************************

// Ten CTC: kbd_getc().

// Thong so dau vao:

// Thong so dau ra: Ma phim duoc nhan tren ban phim 4x4 (ma

ASCII). Xem cau hinh ben tren.

// Cong dung: Ham se tra ve gia tri (ma) cua phim duoc nhan

(theo ASCII),

// hoac ky tu NULL neu khong co

phim nao duoc nhan.

// Ham nay phai duoc goi lien tuc de tranh khong phat hien

phim nhan.

// ***************************************************

unsigned char kbd_getc() // Ham lay ma phim duoc nhan tren

ban phim.

{

// Khai bao bien.

unsigned char kchar; // Bien chua ma phim.

Page 81: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 72 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

unsigned char col = 0; // Bien thu tu cot duoc

quet (Cot tich cuc, mac dinh = cot 0).

unsigned char row = 0; // Bien thu tu

hang co phim nhan (Hang tich cuc).

unsigned int kbd_call_count; // Bien dem so lan goi quet

phim de thuc hien chong doi.

// Dinh nghia ham.

kchar = '\0'; // Bien chua ma phim duoc nhan (Mac dinh ban

dau chua ky tu NULL).

for(kbd_call_count = 0; kbd_call_count <=

kbd_debounce_factor; kbd_call_count++) // Thuc hien vong lap

de chong doi phim nhan.

{

switch(col) // Chon lua xuat ma quet cot tuong ung

cho tung cot tren ban phim.

{

case 0: // Xuat ma quet cho cot 0: 1110.

col3 = 1;

col2 = 1;

col1 = 1;

col0 = 0;

break;

case 1: // Xuat ma quet cho cot 1: 1101.

col3 = 1;

col2 = 1;

col1 = 0;

col0 = 1;

break;

case 2: // Xuat ma quet cho cot 2: 1011.

col3 = 1;

col2 = 0;

col1 = 1;

col0 = 1;

Page 82: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 73 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

break;

case 3: // Xuat ma quet cho cot 3: 0111.

col3 = 0;

col2 = 1;

col1 = 1;

col0 = 1;

break;

}

if(kbd_down == 1) // Kiem tra xac nhan viec da co

nhan hay chua nhan phim.

// Neu chua nhan thi kiem tra

phim nao se duoc nhan.

// Neu da co phim nhan thi

cho den khi phim da nhan duoc nha (buong ra).

{ // Truong hop da co nhan phim

(kbd_down = True) - Cho nha phim da nhan.

if(ALL_ROWS() == 0) // Neu khong co phim

nao duoc nhan (khong con giu phim nhan nua).

{

kbd_down = 0; // Xac nhan khong con

phim nao duoc nhan (kbd_down = False).

kchar = last_key; // Lay ma phim duoc

nhan truoc do.

last_key = '\0'; // Cat ma phim

(NULL) tuong ung khong nhan phim nao.

}

}

else

{ // Truong hop chua co phim nao

nhan (kbd_down = False) - Kiem tra phim nao duoc nhan.

if(ALL_ROWS() == 1) // Neu truong

hop CO bat ky phim nao duoc nhan

{ // Kiem tra phim

duoc nhan thuoc hang nao (Hang tich cuc).

Page 83: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 74 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

LATBbits.LATB2 = 1; //Bao coi

if(!row0) // Hang 0 tich cuc?

(row0 = LOW).

row = 0; //

Hang 0.

else if(!row1) // Hang 1 tich cuc?

(row1 = LOW).

row = 1; //

Hang 1.

else if(!row2) // Hang 2 tich cuc?

(row2 = LOW).

row = 2; //

Hang 2.

else if(!row3) // Hang 3 tich cuc?

(row3 = LOW).

row = 3; //

Hang 3.

last_key = KEYS[row][col]; // Lay ma

phim dua vao hang (row) va cot (col) tich cuc.

// Bo ma cua ban phim duoc thiet lap o dau chuong trinh.

kbd_down = 1; // Xac

nhan da co phim nhan (kbd_down = True).

}

else // Neu truong hop

KHONG CO phim nao duoc nhan.

{ // Chuyen sang

quet cot ke tiep.

col++; // Tang bien quet cot ->

chuyen sang quet cot ke tiep.

if (col == 4) // Xu ly de chi quet 4 cot (tra

ve quet cot dau tien).

col = 0; // Cot 0.

}

Page 84: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 75 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

}

}

while (ALL_ROWS() != 0); // Cho cho den khi khong con

giu phim nua moi tra ve ma phim nhan.

LATBbits.LATB2 = 0;

return(kchar); // Tra ve ma ASCII cua phim duoc nhan

(bang ma duoc khai bao o dau chuong trinh).

}

//Chuong trinh cai dat adc

void adc_init()

{

TRISBbits.TRISB0 = 1; //RB0 la input.

ADPCFG = 0xfffe; //AN0 la input analog.

ADCON1 = 0x00e0; //Convert tu dong.

ADCON2 = 0;

ADCON3 = 0x033f; //Thoi gian lay mau = 3 Tad

(3us), Tad = 32 Tcy = 1us.

ADCHS = 0; //CN0- = Vref- = AVss, CN0+

= AN0.

ADCSSL = 0; //Chi lay mau tai AN0

nen khong scan input.

ADCON1bits.ADON = 1; //Cho phep chay ADC.

}

//Chuong trinh lay gia tri adc

unsigned int read_adc()

{

ADCON1bits.SAMP = 1;

while(!ADCON1bits.DONE);

ADCON1bits.DONE = 0;

return (ADCBUF0);

}

//Chuong trinh cap nhat gia tri PR2

Page 85: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 76 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

void update()

{

if(freq < 25)

step = 1;

else if (freq < 50)

step = 2;

else if (freq < 75)

step = 3;

else if (freq < 100)

step = 4;

else if (freq < 125)

step = 5;

else if (freq < 150)

step = 6;

else

step = 8;

IEC0 &= 0xffbf;

T2CON = 0;

TMR2 = 0;

PR2 = FCY/720/freq*step;

IEC0 |= 0x0040;

T2CON = 0x8000;

}

//Chuong trinh thiet lap QEI.

void QEI_init()

{

QEICONbits.QEIM = 0; // Tat Module QEI

QEICONbits.TQCS = 0; // su dung bo dao dong trong

QEICONbits.CNTERR = 0; // Clear any count errors

QEICONbits.QEISIDL = 0; // Continue operation during

sleep

QEICONbits.SWPAB = 0; // QEA and QEB not swapped

QEICONbits.PCDOUT = 0; // Normal I/O pin operation

Page 86: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 77 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

QEICONbits.POSRES = 0; // reset bang tran bo nho

DFLTCONbits.CEID = 1; // Count error interrupts disabled

DFLTCONbits.QEOUT = 1; // Digital filters output enabled

for QEn pins

DFLTCONbits.QECK = 5; // 1:256 clock divide for digital

filter for QEn

// DFLTCONbits.INDOUT = 1; // Digital filter output enabled

for Index pin

POSCNT = 0; // Reset position counter

QEICONbits.QEIM = 7; // X4 mode with position counter

reset by Index

MAXCNT = 0xFFFF;

}

void get_speed()

{

speed = (int) POSCNT;

if(speed < 0)

speed = - speed;

chieuquay = QEICONbits.UPDN;

}

void pid_freq()

{

error[0] = set_speed - mea_speed;

sum_error = sum_error + (error[0] + error[1])/2;

delta_error = error[0] - error[1];

Up = Kp*error[0];

Ui = Ki*sum_error*0.51136;

Ud = Kd*delta_error/1.9556;

error[1] = error[0];

Page 87: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 78 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

pc_freq = (Up + Ui + Ud)*75/1800;

/* if(pc_freq < 1)

pc_freq = 1;

if(pc_freq > 75)

pc_freq = 75;*/

}

CHƯƠNG TRÌNH TRÊN VB 6.0

Dim chuoinhan As String

Dim maguidi As String

Dim chuoinhan1 As String

Dim tocdodo As Long

Dim tocdodat As Long

Dim kp, ki, kd As Single

Dim e0, e1, e2, e3, e4, e5 As Single

Dim MANG(0 To 500000) As Long

Dim biendem As Integer

Private Sub Command1_Click()

'gui du lieu di

maguidi = txtgiu.Text

If (Len(maguidi) < 4) Then

MsgBox "Du lieu chua du"

Else

If MSComm1.PortOpen = True Then

MSComm1.Output = maguidi

Page 88: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 79 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Else

MsgBox "Chua ket noi Cong COM"

End If

End If

End Sub

Private Sub Command2_Click()

End

End Sub

Private Sub Command3_Click()

If MSComm1.PortOpen = True Then

MSComm1.PortOpen = False

Label1.Caption = "Disconnect" 'hien thi chu Disconnect len

Shape1.BackColor = &HFF& 'hien mau do len

Else

MsgBox "Not Conneting"

End If

End Sub

Private Sub Command4_Click()

txthien.Text = ""

End Sub

Private Sub connect_Click()

'an nut ket noi

Page 89: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 80 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

'Doan thiet lap truyen thong.

If Combo1.Text = "" Then

MsgBox "xin moi chon cong COM"

Else

With MSComm1

.CommPort = Combo1.Text

.Settings = "9600,N,8,1" 'baud 9600bps, none parity, 8 bit data, 1 bit

stop

.InBufferSize = 512

.InputLen = 0

.RThreshold = 1

.SThreshold = 1

.OutBufferSize = 1024

'.InputMode = comInputModeBinary // dung de truyen so

.InputMode = comInputModeText

.PortOpen = True

End With

Label1.Caption = "Connect"

Shape1.BackColor = &HFF00&

End If

End Sub

Private Sub MSComm1_OnComm()

Dim chuoinhan1 As String

Page 90: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 81 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

chuoinhan1 = MSComm1.Input

txtnhanve.Text = chuoinhan1 + txtnhanve.Text

txthien.Text = txtnhanve.Text

'StrReverse(

tocdodat = Val(txtgiu.Text)

tocdodo = Val(txthien.Text)

MANG(biendem) = tocdodo

'dich chuyen truc

If biendem / 10 > 10 Then

TChart1.Axis.Bottom.SetMinMax biendem / 10 - 9, biendem / 10

TChart1.Series(0).AddXY biendem / 10, MANG(biendem), "", vbBlue

TChart1.Series(1).AddXY biendem / 10, tocdodat, "", vbRed

'TChart1.Series(2).AddXY biendem / 20, MANG(biendem) + 100, "",

vbGreen

Else

TChart1.Series(0).AddXY biendem / 10, MANG(biendem), "", vbBlue

TChart1.Series(1).AddXY biendem / 10, tocdodat, "", vbRed

'TChart1.Series(2).AddXY biendem / 20, MANG(biendem) + 100, "",

vbGreen '

End If

biendem = biendem + 1

End Sub

Page 91: Bao Cao Tot Nghiep Moi

PHỤ LỤC

GVHD: TRẦN VĂN HÙNG 82 SVTH: Nguyễn Đăng Tín Ngô Kiến Đạt

Sub PID(kp As String, ki As String, kd As String)

tocdodat = Val(txtgiu.Text)

e0 = tocdodat - tocdodo

tocdodo = tocdodo + kp * (e0 - e1) + ki * (e0 + e1) / 2 + kd * (e0 - 2 * e1 +

e2)

End Sub

Private Sub Timer1_Timer()

Timer = Timer + 1

If (Timer = 3000) Then

Timer = 0

With TChart1

.Series(0).Clear

.Series(1).Clear

End With

End If

Timer1.Enabled = False

Timer1.Enabled = True

End Sub