Upload
nguyen-dang-tin
View
72
Download
15
Embed Size (px)
DESCRIPTION
thiet ke bien tan dieu khien dong co ba pha
Citation preview
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
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
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
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
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)
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)
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
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
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
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
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.
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.
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
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.
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)
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ó:
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.
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))
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
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.
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.
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
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.
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
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.
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
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)
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.
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
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:
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.
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
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
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.
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.
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
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ơ.
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.
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.
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.
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.
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”.
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
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à:
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)]
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
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.
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ơ.
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.
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.
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:
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:
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
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:
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ỏ.
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:
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á độ.
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.
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.
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
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,
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,
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,
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,
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,
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,
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.
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");
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 '*':
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);
}
}
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':
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);
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();
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;
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");
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
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)
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
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.
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.
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;
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).
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.
}
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
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
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];
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
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
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
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
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