Đến với Đồ Án 1 lần này chúng tôi xin giới thiệu với người đọc một vấn đề tiếp cận mới với động cơ DC.Đó là “Điều khiển động cơ DC với PID số trên DSPIC 33FJ64GP802”,ở đây là tổng hợp nh
Trang 1Điều khiển động cơ DC (DC Motor) là một trong những ứng dụng cơ bản nhất trong ngành điều khiển nói chung và điều khiển tự động nói riêng Động cơ DC đối với sinh viên ngành tự động cũng đã trở nên rất thân quen thuộc từ các cuộc thi trong trường như FanLed 2009 (CLB Nghiên Cứu Khoa Học Khoa Điện-Điện tử) đến những cuộc thi nổi tiếng như RoboCon
Đến với Đồ Án 1 lần này chúng tôi xin giới thiệu với người đọc một vấn đề
tiếp cận mới với động cơ DC.Đó là “Điều khiển động cơ DC với PID số trên DSPIC 33FJ64GP802”,ở đây là tổng hợp nhiều vấn đề mà chúng tôi đã được học
trên trường từ những môn học như: Lý Thuyết Điều Khiển Tự Động,Vi Xử Lý,Thiết
Bị Hệ Thống Tự Động và các môn thí nghiệm liên quan.Đồ án này chúng tôi thực hiện điều khiển động cơ DC bằng cách đọc từ encoder về vi điều khiển,hiển thị trên LCD tốc độ(vị trí) động cơ,kết nối với máy tính qua giao tiếp UART (cổng RS 232)với chương trình giao tiếp trên máy tính là GUI của Matlab có thể đặt vận tốc
và các thông số trên màn hình máy tính,trên hết là giải thuật điều khiển động cơ DC
là giải thuật PID mà chúng ta đã được học
Để tiếp cận với Đồ án thì lần lượt chúng tôi sẽ giới thiệu từ vi điều khiển
DSPIC 33FJ64GP802 rồi đến lý thuyết điều khiển bằng PID,thiết kế phần cứng của nhóm,và giải thuật PID bằng phần mềm biên dịch C MPLAB
Lời cuối cùng,chúng tôi xin cảm ơn thầy hướng dẫn của nhóm tôi:
T.s HUỲNH THÁI HOÀNG, bên cạnh đó chúng tôi cũng cảm ơn những bạn trong CLB Nghiên Cứu Khoa Học Khoa Điện –Điện tử đã tận tình giúp đỡ cho chúng tôi hoàn thành tốt Đồ án này
Trang 2MỤC LỤC
.Trang
Lời giới thiệu 1
Mục lục 2
CHƯƠNG I: GIỚI THIỆU VỀ DSPIC 33FJ64GP802 1.1 Giới Thiệu Họ Vi Điều Khiển DSPIC 33F & Sơ Đồ Chân & Cấu Trúc Bên Trong DSPIC 33FJ64GP802 1.1.1 Giới thiệu về họ vi điều khiển DSPIC 33FJ64GP 4
1.1.2 Giới thiệu về DSPIC 33FJ64GP802 4
1.1.3 Sơ đồ chân DSPIC 33FJ64GP802 5
1.1.4 Mô tả chân I/O của DSPIC 33FJ64GP802 7
1.1.5 Cấu trúc bên trong DSPIC 33FJ64GP802 8
1.1.6 Cấu hình bộ dao động cho chip 9
1.2 Tổ Chức Bộ Nhớ Và Vùng Địa Chỉ Bên Trong DSPIC 33FJ64GP802 1.2.1 Tổ chức bộ nhớ chương trình 11
1.2.2 Vùng địa chỉ dữ liệu 12
1.2.3 Tổ chức dữ liệu bộ nhớ và sự sắp hàng 12
1.3 TIMER Trong DSPIC 33FJ64GP802 1.3.1 Giới thiệu 13
1.3.2 Timer A 14
1.3.3 Timer B 14
1.3.4 Timer C 15
1.3.5 Các chế độ thực hiện 16
1.3.6 Chế độ Timer và cách đặt cấu hình 16
1.3.7 Đặt cấu hình Timer 32-bit 17
1.4 NGẮT Trong DSPIC 33FJ64GP802 1.4.1 Giới thiệu về khối ngắt trong DSPIC 33F 18
1.4.2 Ưu tiên ngắt 19
1.4.3 Tác vụ ngắt 19
1.4.4 Thanh ghi trạng thái và điều khiển ngắt 20
1.4.5 Thủ tục tạo ngắt 20
1.4.6 Chương trình phục vụ ngắt (Interrupt Service Rountine) 20
1.5 UART Trong DSPIC 33FJ64GP802 1.5.1 Giới thiệu về UART 21
1.5.2 Những thanh ghi điều khiển 22
1.5.3 Bộ phát tốc độ Baud 23
1.5.4 Đặt cấu hình UART 24
1.5.5 Bộ truyền dữ liệu UART 25
1.5.6 Bộ ngắt truyền dữ liệu UART 26
1.5.7 Khối nhận dữ liệu UART 27
Trang 3CHƯƠNG II: GIẢI THUẬT ĐIỀU KHIỂN PID & ĐIỀU KHIỂN PID SỐ 2.1 Giải Thuật Điều Khiển PID
2.1.1 Lịch sử phát triển 29
2.1.2 Giới thiệu về giải thuật PID 29
2.1.3 Phương pháp Zeigler-Nichols 32
2.2 Điều Khiển PID Số 2.2.1 Vì sao lại sử dụng bộ điều khiển PID số 34
2.2.2 Số hóa các công thức tính bộ điều khiển PID số 34
CHƯƠNG III: THIẾT KẾ PHẦN CỨNG 3.1 Đối Tượng Điều Khiển 3.1.1 Động cơ DC 38
3.1.2 Bộ encoder tương đối (incremental optical encoder) 39
3.1.3 Đọc encoder bằng ngắt ngoài 41
3.2 Mô Tả Phần Cứng 3.2.1 Khối Main 41
3.2.2 Khối Công Suất 43
3.2.3 Khối Nguồn 43
3.2.4 Khối cổng nạp 44
3.2.5 Khối UART 44
3.2.6 Khối LCD 45
3.2.7 Khối Nút nhấn 45
3.2.8 Khối giao tiếp máy tính (GUI) 46
3.2.9 Tóm tắt 49
CHƯƠNG IV : LƯU ĐỒ GIẢI THUẬT,KẾT QUẢ THỰC NGHIỆM & KẾT LUẬN 4.1 Lưu Đồ Giải Thuật 4.1.1 Lưu đồ giải thuật tổng quát 53
4.1.2 Lưu đồ giải thuật hàm Main 54
4.1.3 Lưu đồ giải thuật Mappin 55
4.1.4 Lưu đồ giải thuật ngắt ngoài 56
4.1.5 Lưu đồ giải thuật ngắt Timer 57
4.1.6 Lưu đồ giải thuật điều khiển PID vị trí 58
4.1.7 Lưu đồ giải thuật điều khiển PID vận tốc 59
4.1.8 Lưu đồ giải thuật UART 60
4.2 Kêt Quả Thực Nghiệm 4.2.1 Hiệu chỉnh PID vị trí 61
4.2.2 Hiệu chỉnh PID vận tốc 64
4.3 Kết Luận 4.3.1 Kết luận về DSPIC 33FJ64GP802 67
4.3.2 Kết luận về giải thuật PID và bộ điều khiển PID số 67
4.3.3 Kết luận về phần cứng và thiết kế mạch 68
PHỤ LỤC 69
Trang 4
Chương I : GIỚI THIỆU VỀ DSPIC 33FJ64GP802
1.1 GIỚI THIỆU HỌ VI ĐIỀU KHIỂN DSPIC 33FJ64GP SƠ ĐỒ CHÂN & CẤU TRÚC BÊN TRONG DSPIC 33FJ64GP802
1.1.1 Giới thiệu về họ vi điều khiển DSPIC 33FJ64GP
Họ vi điều khiển DSPIC 33FJ64GP là họ vi điều khiển chuẩn CMOS 16
bit (high performance, 16- Bit digital signal controllers),với CPU được chế tạo theo cấu trúc Harvard (có vùng nhớ riêng cho chương trình (mã) và dữ liệu).Họ
vi điều khiển DSPIC 33FJ64GP mang đầy đủ các đặc tính của một dòng vi điều khiển thông thường (I/O port,timer,interrupt,UART…).Nhưng đặc biệt so với các dòng vi điều khiển khác như 8051,hay AVR thì DSPIC 33FJ64GP có nhưng thế mạnh sau:
Bộ dao động của DSPIC thông qua bộ chia (nhân tần số) PLL, sau đó dùng 2 chu kỳ để thực hiện 1 lệnh,ở DSPIC cho phép tần số dao động tối đa là 80Mhz chạy ở tối đa 40MIPS nên tốc độ xử lý (1 chu kỳ máy là 0.05µs) nhanh hơn rất nhiều so với PIC 16F887 và 8051,cũng như khả năng nhân tần số thông qua bộ chia có thể giúp ta thay đổi tần số dao động
Tập lệnh rút gọn,với trình biên dịch C làm tối ưu hóa giải thuật,ngoài ra DSPIC rất mạnh về khả năng xử lý số với 2 module lớn là DAC (audio digital to analog converter) và DCI (data converter interface)
Ngoài ra họ vi điều khiển DSPIC 33FJ64GP còn cho phép nhiều module giao tiếp (communication Modules) như SPI (hỗ trợ 8-bit và 16-bit với giao diện I/O đơn giản),I2C,UART,truyền thông CAN(ECANTM
module)
1.1.2 Giới thiệu về DSPIC 33FJ64GP802
Là một trong nhưng vi điều khiển thuộc họ DSPIC 33F,nên ngoài những đặc tính có được đã nêu ở trên thì đối với 33FJ64GP802 còn có những đặc điểm sau: + Số chân: 28
+ Bộ nhớ chương trình (program flash memory): 64Kbyte
Trang 5+ I/O pins : 21
+ Timer : 5 (16 bit)
Để có thể thấy được tính năng nổi trội và sự hơn hẳn của DSPIC 33FJ64GP802
ta có bảng so sanh sau với một số vi điều khiển đã học
1.1.3 Sơ đồ chân DSPIC 33FJ64GP802
Từ sơ đồ chân ở trên ta thấy :
+ DSPIC 33FJ64GP802 có tất cả 28 chân,có 2 loại là loại linh kiện dán
hoặc chân
+ DSPIC 33FJ64GP802 có 2 PORT I/O : PORT A,PORT B,PORT
C.Trong đó PORTA gồm các chân : RA0÷RA4,trong đó PORT B gồm các chân : RB0÷RB15.Ngoài ra còn có thêm 15 chân remapable pin từ RP0(1) ÷ RP15(1)
SRAM /RAM (byte)
EEP ROM / ROM Flash
(10-40MIPS 5 49 4 2UART,2SPI,
1ECAN,1 I2CTM
Hình 1.1
Trang 6+ DSPIC 33FJ64GP802 sử dụng thạch anh (Crystal) gắn bên ngoài có tầm từ 3Mhz đến 10Mhz,còn nếu dùng thạch anh tốc độ cao (high speed crystal) có tầm từ 10Mhz-40Mhz
+ Kết nối phần cứng bên ngoài của DSPIC 33FJ64GP802 trong mạch được thực hiên như sau (theo datasheet)
Hình 1.2 Dựa vào hình vẽ trên (hình 1.2) ta có thể thiết kế phần cứng cho mạch,nhưng trước hết ta cần xác định các giá trị R1,R và tụ C,các giá trị tụ nối giữa AVDD – AVSS Theo datasheet ta có được
- Tụ nối giữa VCAP /VDDCORE và Ground có tác dụng ổn định điện
áp ngõ ra và chân này (VCAP / VDDCORE) không được nối với VDD và có giá trị từ 4.7µF ÷ 10µF
- Các tụ nối giữa các cặp chân cung cấp nguồn như VDD,VSS,AVDD và AVSS có giá trị thích hợp là 0.1µF, 10-20V.Các tụ này nên mắc gần các chân càng tốt hơn trong quá trình lọc
- Đối với cách kết nối ngõ vào chân RESET (MCLR)
Trang 7Hình 1.3
- Với giá trị R ≤ 10 kΩ (R = 10kΩ) là thích hợp cùng vơi đó là giá trị của
R1,theo datasheet ta thấy R1 ≤ 470Ω (R = 470Ω) có tác dụng hạn dòng,còn lại
tụ C ở đây vơi giá trị thích hợp là 0.1µF (tụ 104) là thích hợp
1.1.4 Mô tả chân I/O của DSPIC 33FJ64GP802
Tên Chân
(Pin Name)
Loại chân (Pin Type)
Loại bộ đệm (Buffer type)
Mô tả
AN0-AN12 I Analog Những kênh ngõ vào analog
ngoài,luôn kết nối với chân OSC1-2
CVREF O ANA Ngõ ra so sánh điện áp
Trang 81.1.5 Cấu trúc bên trong DSPIC 33FJ64GP802
Từ cấu trúc bên trong họ vi điều khiển 33FJ64GPX02 ta có thể thấy được rằng:
+ Các chân lấy từ vi điều khiển có 2 loại là: Một là các chân ở dạng remappable pins,và các PORT (A,B,C) thực hiện các chức năng I/O hoặc khác
+ Sử dụng 2 đường Bus dữ liệu là : X data bus,Y data bus.Trong đó X data bus nối với các PORT và ngõ interrupt controller đồng thời kết nối với bộ đếm chương trình Programmer counter, data latch.Còn Y data bus nối với DMA RAM từ DMA RAM nối với DMA Controller nối kết với các PORT và Remappable Pins của vi điều khiển
Hình 1.4
Trang 91.1.6 Cấu hình Bộ dao động cho chip
- Có 2 sự lựa chọn cho bộ định thời trên chíp (nguồn xung nhịp) là bộ dao động nội và bộ dao động ngoại
- Bộ PLL ( Phase-Locked Loop) trên chip dùng để định tầm cho tần số thực thi cũng như định tần số xung nhịp cần thiết cho hệ thống
- Bộ dao động FRC có thể được dùng với bộ PLL trên chip có thể cho phép chip thực thi lệnh với tốc độ tối đa mà không cần bất cứ nguồn xung nhịp nào bên ngoài
- Thanh ghi điều khiển nguồn xung nhịp là OSCON
Hình 1.5
DSPIC 33FJ64GP802 cung cấp cho ta 7 chế độ lựa chọn xung nhịp:
- Bộ dao động nhanh RC (FRC)
- Bộ dao động FRC kết hợp với Phase Locked Loop (PLL)
- Bộ dao động chính (XT,HS hoặc EC)
- Bộ dao động với PLL
- Bộ dao động phụ (LP)
- Bộ dao động nguồn thấp RC (LPRC)
Trang 10- Bộ dao động FRC với postscaler
Việc lựa chọn bộ định thời cho hệ thống:
Thiết lập cấu hình những bit cho bộ dao động được đặt trong thanh ghi cấu hình trong bộ nhớ chương trình.Trong đó:
+Những bits cấu hình lựa chọn dao động tức thời FNOSC<2:0> + Những bits lập nên chế độ dao động chính là POSCMD<1:0> + Những bits cho phép người dùng lựa chọn trong 12 bộ xung nhịp
Ngõ ra bộ dao động (hoặc ngõ ra của PLL nếu ngõ này được chọn) là FOSC được chia cho 2 để tạo ra chỉ dẫn thiết bị xung nhịp (FCY) và xung nhịp biên (FP).FCY sẽ xác định tốc độ thực thi lệnh của thiết bị và tốc độ đó có thể tăng lên 40MHz
Một trong những điều chúng ta cần lưu ý trong việc viết chương trình cho DSPIC 33FJ64GP802 là việc CONFIG các tính năng hay các hàm
header,trong đó có việc CONFIG cấu hình của PLL.Chúng ta cần biết là:Bộ PLL trên chip cũng cấp khả năng linh hoạt cao trong việc lựa chọn tốc độ thực hiện lệnh.Có thể tham khảo theo sơ đồ dưới (Hình 1.6)
o Ngõ ra của bộ dao động chính hoặc FRC,bao hàm trong đó là
“FIN”,được chia cho cho chỉ số định tầm N1 có giá trị từ 2,3…33 trước khi được cung cấp bởi điện áp điều khiển dao động PLL(VCO-voltage controlled Oscillator).Ngõ vào của VCO phải được lựa chọn trong tầm 0.8Mhz đến 8Mhz
o Bộ chia hồi tiếp cung cấp bởi chỉ số ‘M’.Chỉ tiêu này được lựa chọn
là để cho tần số VCO ngõ ra nằm trong tần số 100Mhz -200Mhz
o Ngõ ra VCO sau cùng được chia cho chỉ số N2.’N2’ có thể là 2,4,8 và phải được chọn sao cho ngõ ra tần số PLL nằm trong tầm 12.5Mhz đến 80Mhz,để tạo ra tốc độ thực thi lệnh từ 6.25-40MIPS
Vd: Như cho tần số của thạch anh là 10Mhz được dùng để chọn chế độ dao động là XT với PLL
Nếu PLLPRE<4:0> = 0 thì N1 = 2 lúc này ngõ vào VCO là 10/2
= 5 Mhz thuộc khoảng 0.8 – 8Mhz (thỏa)
Nếu PLLDIV<8:0> = 0x1E thì M = 32 lúc này thì ngõ ra VCO là
5 x 32 = 160 Mhz cũng thuộc trong khoảng 100-200 Mhz
Trang 11Nếu PLLPOST<1:0> = 0 thì N2 = 2.Lúc này cung cấp cho FOSC
Địa chỉ bộ nhớ chương trình thường là những word xếp gọn trên vùng word thấp và những địa chỉ được tăng lên hoặc giảm đi trong quá trình code thực thi.Việc sắp xếp này mang lại sự tương thích với không gian địa chỉ dữ liệu bộ nhớ và dữ liệu chương trình được truy cập dễ dàng
Hình 2.1
Trang 121.2.2 Vùng địa chỉ dữ liệu
DSPIC 33FJ64GP802 có vùng địa chỉ phân chia 16-bit-wide dữ liệu Vùng địa chỉ dùng AGUs (Address Generation Units) để thực hiện các tác vụ đọc và ghi.Sơ đồ bộ nhớ dữ liệu và truy cập được thể hiện qua hình dưới
(Hình 2.2).Tất cả vùng địa chỉ tích cực (EAs) trong vùng địa chỉ dữ liệu rộng 16bits và chỉ đến những bytes trong vùng đó.Sự sắp xếp này cho ra địa chỉ vùng địa chỉ truy cập đến là 64Kbytes hay là 32K words.Một nửa thấp vùng
dữ liệu được dùng cho việc bù địa chỉ,còn nửa cao dữ liệu được dùng để dự trữ chương trình
Việc đọc dữ liệu byte,đọc hoàn toàn word có chứa byte,dùng LSB của bất
kỳ EA để xác định byte nào được lựa chọn.Byte được chọn được đặt trên LSB của phần data.Điều đó chứng tỏ rằng bộ nhớ dữ liệu và những thanh ghi được
tổ chức thành 2 phần song song nhau và chia sẻ chung phần địa chỉ decode nhưng tách riêng thành những đường ghi khác nhau (write lines).Byte dữ liệu chỉ có thể được ghi vào phân vùng tương thích ở những chuỗi hay thanh ghi
mà có nối kết với địa chỉ byte đó
Tất cả các word truy cập phải được xếp thẳng hàng trên vùng địa chỉ chẵn.Các word dữ liệu truy cập mà không xếp thẳng hàng không được hỗ trợ,vì vậy cần lưu ý trong quá trình truy xuất byte và word hoặc trong quá trình dịch mã 8-bits (8-bits MCU code).Nếu tác vụ đọc hoặc ghi được cố tình thực thi với các word xếp không thẳng hàng thì có thể dẫn đến việc sinh ra các lỗi địa chỉ.Nếu có lỗi báo trong tác vụ ghi thì sự chỉ dẫn tác vụ này sẽ tiến hành nhưng việc ghi sẽ không thực hiện.Một cách khác là khi có lỗi xảy ra thì
hệ thống hay ứng dụng người dùng sẽ cho phép kiểm tra trạng thái tại lỗi đó Tất cả các byte có thể được ghi vào thanh ghi W hoặc vào Least
significant byte.Phần Most Significant byte không được dùng đến
Tác vụ chỉ dẫn mở rộng dấu (SE) được cung cấp để cho phép các ứng dụng người dùng có thể chuyển từ 8-bits có dấu sang 16-bits có dấu.Như một
sự lựa chọn với 16-bits không dấu dữ liệu người dùng có thể xóa phần MSB của bất kỳ thanh ghi W nào bởi tác vụ ZE(zero-extend)
Trang 13+ Timer loại A(Timer 1)
+ Timer loại B(Timer 2,Timer 4)
+ Timer loại C(Timer 3,Timer 5)
Timer B và Timer C có thể kết hợp lại để tạo thành bộ Timer 32-bit
Mỗi khối timer 16-bit timer/counter chứa những thanh ghi có thể đọc hoặc ghi sau:
Trang 14+ TMRx:Thanh ghi đếm 16 bit Timer
+ PRx: Thanh ghi 16-bits Timer Period giao tiếp với Timer
+TxCON:Thanh ghi điều khiển 16-bits Timer
Mỗi khối timer đều có những bit giao tiếp với điều khiển ngắt
Bit enable ngắt(TxIE)
Bit cờ trạng thái ngắt(TxIF)
Bit điều khiển khoảng thời gian ngắt(TxIP<2:0>)
1.3.2 Timer A
Timer 1 trên chip là loại Timer A,so với các loại Timer khác thì Timer A có những đặc điểm khác như :
+Thực thi lệnh từ bộ dao động nguồn thấp 32kHz trên các thiết bị
+Có thể thực thi lệnh không đồng bộ với bộ đếm Counter từ nguồn xung nhịp bên ngoài
Sơ đồ Timer A như sau:
Sơ đồ khối Timer B :
Trang 15Hình 3.3
1.3.4 Timer C
Các Timer :Timer 3,Timer 5 là thuộc loại Timer C,với những chi tiết khác biệt sau :
+ Có thể kết nối với bộ Timer B để tạo ra bộ timer 32-bits
+ Có tối thiểu một Timer loại C để kích khởi cho cho bộ chuyển đổi A/D
+Ngõ vào của bộ xung nhịp bên ngoài (TxCK) luôn luôn đồng bộ hóa với xung nhịp bên trong thiết bị
Sơ đồ cấu trúc Timer C :
Hình 3.4
Trang 161.3.5 Các chế độ thực hiện
Khối Timer có thể thực hiện theo các chế độ sau :
+ Chế độ Timer (Timer mode)
+Chế độ đếm đồng bộ (Synchronous Counter mode)
+Chế độ đếm không đồng bộ(Asynchronous Counter mode)
+Chế độ cổng (Gated Timer mode)
Chế độ Timer và chế độ cổng, ngõ vào bộ xung nhịp được lấy từ chu kỳ xung nội (FCY).Chế độ đếm đồng bộ và chế độ đếm không đồng bộ,ngõ vào xung nhịp được lấy từ xung nhịp ngoài tại chân TxCK
Những chế độ chọn được xác định bởi các bits:
+TCS (TxCON<1>): Bit điều khiển nguồn xung Timer
+ TSYNC (TxCON<2>): Bit điều khiển chế độ đồng bộ hóa ( Chỉ có Timer A)
+ TGATE (TxCON<6>): Bit điều khiển mở cổng
Vd: Đây là ví dụ mô tả code tuần tự được lập nên Timer 1 chế độ 16-bit.Phần code
này sẽ cho ra một sự kiện ngắt sau mỗi 10 chu kỳ lệnh
Trang 17Các chế độ khác của bộ Timer như : Chế độ Cổng (Gated Timer mode),chế
độ đếm đồng bộ ( Synchronous Counter mode),chế độ đếm không đồng
bộ(Asynchronous Counter mode) cũng có cách đặt cấu hình tương tự như chế độ timer như trên,có thể xem chi tiết cụ thể ở datasheet
1.3.7 Đặt cấu hình Timer 32-bit
Chế độ timer 32-bit được tạo bởi kết hợp giữa Timer loại B và Timer loại C.Để thực hiện Timer 32-bit thì bit điều khiển Timer 32-bit ở trong thanh ghi điều khiển Timer loại B (TxCON<3>) phải được đưa lên cao.Timer C chứa word cao trong khi Timer B chứa word thấp
Khi cấu hình cho tác vụ 32-bit,chỉ có những bit trong thanh ghi điều khiển loại B là cần thiết cho việc lập nên và điều khiển.Cũng không loại trừ bit TSIDL,tất
cả các bit trong thanh ghi điều khiển Timer C thì bỏ ngõ
Để điều khiển ngắt,32-bit timer kết hợp dùng cho ngắt tích cực,cờ ngắt,và những bit ưu tiên ngắt timer C.Bit điều khiển ngắt và trạng thái của Timer B bị bỏ ngõ trong tác vụ thực thi timer 32-bit
Chế độ 32-bit Timer được xác định bởi những bit theo sau ở trong thanh ghi Timer B:
TCS(TxCON<1>):Bit điều khiển nguồn xung nhịp Timer
TGATE (TxCON<6>): Bit điều khiển cổng timer
Ngõ vào xung nhịp (FCY hoặc TxCK) cho tất cả 32-bit Timers được định tầm lựa chọn các thông số sau: 1:1,1:8,1:64, và 1:256.Việc định tầm xung nhịp này được lựa chọn bằng bits định tầm xung nhịp Timer (TCKPS<1:0>) trong thanh ghi điều khiển loại B (TxCON<5:4>).Bộ định tầm đếm được xóa khi bất kỳ tác vụ theo sau đây:
+ Ghi vào thanh ghi Timer B (TMRx) hoặc thanh ghi điều khiển Timer
B (TxCON)
Trang 18+Xóa bít tích cực timer (TON) trong thanh ghi điều khiển Timer B (TxCON<15>)
+ Khi reset hệ thống
1.4 NGẮT TRONG DSPIC 33FJ64GP802
1.4.1 Giới thiệu về khối ngắt trong DSPIC 33F
Họ vi điều khiển DSPIC 33F có khối (module) điều khiển ngắt đã giảm đi số lượng những tín hiệu ngắt ngoại biên và những tín hiệu ngắt đơn đến CPU của DSPIC33F.Ở khối này chứa đựng những đặc điểm sau:
+ 7 chế độ lựa chọn mức cao cho người dùng
+ Vector ngắt có thể up lên tận 126 vector
+ Một vector ngắt cho mỗi quá trình ngắt
+Bảng vector ngắt có thể thay đổi để phục vụ quá trình debug
Bảng vector (Interrupt Vector table)
Trang 191.4.2 Ưu tiên ngắt
Mỗi nguồn ngắt ngoại vi có thể được gán với một trong 7 mức ưu tiên ngắt.Đối với mỗi ngắt riêng lẻ thì những bit điều khiển mức ưu tiên ngắt của người dùng được chứa trong 3 bit thấp (3 bit đầu tiên 0,1,2) của thanh ghi IPC.Bit còn lại (bit 3) trong 4 bit thấp được đặt ở mức tích cực thấp.Những bit này xác định việc gán mức
ưu tiên đến một chế độ ngắt riêng biệt.Nếu các bit của thanh ghi IPC được nối với
nguồn ngắt và đều được xóa,thì nguồn ngắt sẽ bịđưa về mức thấp
Ngoài ra việc lập mỗi nguồn ngắt cho một trong 7 mức tích cực của ứng dụng người dùng sẽ cung cấp cho người dùng khả năng linh hoạt xử lý ngắt.VD: khối UART1 Rx ngắt có thể dùng mức ưu tiên 7 và ngắt ngoài 0 (INT0) có thể đặt ở mức
ưu tiên 1 tuy vậy nó sẽ làm cho mức ưu tiên ngắt giảm đi tốc độ truy xuất
1.4.3 Tác vụ ngắt
Tất cả những cờ ngắt sự kiện đều được lấy mẫu trong quá trình thực thi
lệnh.Một yêu cầu chờ ngắt (IRQ) được chỉ ra khi cờ ngắt được bật lên 1 (tích cực) trong thanh ghi IFS.IRQ xuất hiện sẽ dẫn đến tác vụ ngắt,nếu bit tương thích ở trong thanh ghi tích cực ngắt (IECx) được đặt lên mức tích cực.Trong khoảng nghỉ của chu kỳ lệnh lúc mà IRQ được lấy mẫu,thì những mức ưu tiên trong yêu cầu chờ ngắt
sẽ được tham chiếu
Lệnh của vi điều khiển khi IRQ được lấy mẫu hoàn toàn trước chương trình phục vụ ngắt thực hiện (Interrupt Service Rountine)
Nếu trong quá trình chờ yêu cầu ngắt mà người dùng gán mức ưu tiên lớn hơn mức ưu tiên lệnh xử lý hiện tại của vi điều khiển,được chỉ bởi bits trạng thái (SR
<7:5>) trên IPL<2:0>,thì quá trình ngắt sẽ được vi điều khiển thực hiện,quá trình
xử lý hiện tại các thông tin hay dữ liệu sẽ được lưu vào stack,quá trình này được diễn tả:
Giá trị hiện tại của PC
Byte thấp của thanh ghi trạng thái (SRL)
Bit trạng thái IPL3 (CORCON<3>)
Với 3 giá trị này cho phép chương trình hay con trỏ chương trình (Program counter address) sẽ tự động quay về vị trí trước khi thực hiện ngắt để tiếp tục thực thi lệnh nhờ việc lưu lại những bit trạng thái MCU và thông tin trước ngắt
Trang 20Hình 4.1
1.4.4 Thanh ghi trạng thái và điều khiển ngắt
INTCON1,INTCON2: Đây là những thanh ghi điều khiển ngắt toàn cục.Trong đó INTCON1 chứa bit NSTDIS (Nesting Disable) cũng giống như việc xử lý trạng thái cờ và nguồn xử lý ngắt.Còn INTCON2 điều khiển tín hiệu yêu cầu ngắt ngoài và tra bảng vector ngắt
IFSx:Thanh ghi trạng thái cờ ngắt
IECx: Thanh ghi điều khiển việc tích cực ngắt
IPCx: Thanh ghi điều khiển ưu tiên ngắt
SR: Thanh ghi trạng thái CPU
1.4.5 Thủ tục tạo ngắt
Ban đầu:
Đặt cấu hình nguồn ngắt:
1 Đặt bit điều khiển NSTDIS lên cao
2 Sau đó gán mức ưu tiên người dùng cho nguồn ngắt bằng cách ghi ra những bit điều khiển trên thanh ghi điều khiển
IPCx.Mức ưu tiên phụ thuộc vào ứng dụng người dùng và loại nguồn ngắt.Nếu không muốn dùng nhiều mức ưu tiên,ta có thể dùng chương trình để tích cực tất cả các bit trên thanh ghi IPCx để tất cả các nguồn ngắt đều có giá trị khác 0
3 Xóa bit trạng thái cờ ngắt nối với ngoại biên qua kết nối với thanh ghi trạng thái IFSx
4 Tích cực nguồn ngắt bằng cách lập tích cực các bit điều khiển
có kết nối với nguồn bời thanh ghi điều khiển IECx
1.4.6 Chương trình phục vụ ngắt (Interrupt Service Routine)
Đây là chương trình mà khi quá trình ngắt thì vector PC sẽ chỉ đến chương trình con này để thực thi các lệnh.Nói chung đối với DSPIC 33F cũng tương tự như
Trang 21các dòng vi điều khiển khác,người dùng phải xóa cờ ngắt trong thanh ghi IFSx để nguồn ngắt mà ISR đang điều khiển lúc đó.Mặt khác thì người dùng sẽ ngay lập tức quay lại ISR sau khi đã thoát ra khỏi chương trình con,có thể tham khảo chương trình mẫu (lấy từ datasheet)
1.5 UART TRONG DSPIC 33FJ64GP802
1.5.1 Giới Thiệu về UART
UART – Universal Asynchronous Receiver Transmitter- Bộ truyền nhận đồng
bộ thông dụng,là một trong những modul I/O nối tiếp có ở họ vi điều khiển DSPIC 33F/PIC24H.UART là bộ truyền nhận song song,kênh giao tiếp đồng bộ kết nối với thiết bị ngoại vi và máy tính cá nhân thông qua chuẩn RS-232 hay RS-485,LIN và IrDA.Khối này được hỗ trợ bởi phần cứng với việc lái dòng của các chân
UxCTS,UxRTS và bao gồm bộ giải mã IrDA và bộ dịch mã
Những đặc điểm chính trong khối UART :
Truyền nhận song công thông qua 8-bit,9-bit dữ liệu ở các chân ra UxTX và UxRX
Có từ 1 đến 2 bit Stop
Hỗ trợ bộ giải mã ngoài /bộ dịch mã ngoài cho ngõ ra bộ định thời tốc
độ 16x Baud
Hỗ trợ LIN bus
Trang 22 Hỗ trợ chế độ 9-bit mode với địa chỉ dò (address detect (bit thứ 9 =1))
Tốc độ Baud có khoảng từ 10Mbps đến 38bps tại 40MIPS
Bộ phát tốc độ Baud đầy đủ (BRG – Fully intergrated Baud Rate
Generator) với bộ định tầm 16-bit
Điều khiển lái dòng với các chân UxCTS và UxRTS trên phần cứng
Sơ đồ khối UART đơn giản hóa
Hình 5.1
1.5.2 Những thanh ghi điều khiển
Phần này sẽ đề cập một cách chi tiết đến các chức năng mỗi thanh ghi mà điều khiển tác vụ của khối UART:
UxMODE: UART x Mode Register (Thanh ghi chế độ)
- Khởi động/ngắt chế độ UART
- Khởi động/ngắt chế độ giải mã hay dịch mã IrDA
- Khởi động/ngắt chế độ WAKE,ABAUD hay vòng hồi tiếp
- Khởi động/ngắt chân UxRTS và UxCTS
- Đặt cấu hình chân UxRTS ở tác vụ mong muốn
- Cấu hình tính chất (cao/thấp) cho chân UxRx
- Chọn lựa tốc độ Baud
- Chọn lựa số lượng bit dữ liệu,bậc,Stop bits
UxSTA :UART x Status and Control Register (Thanh ghi điều khiển
và trạng thái UART)
- Chọn lựa chế độ ngắt truyền
- Chọn lựa chế độ ngắt nhận
- Khởi động/ngắt chế độ truyền UART
- Chế độ điều khiển và dò địa chỉ
Trang 23- Xác định điều kiện trạng thái khác nhau,như truyền và nhận trạng thái bộ đệm,bậc sai số,lỗi tràn
UxRXREG: UART x Receive Register (Thanh ghi nhận)
- Chứa dữ liệu nhận được
UxTXREG: UART x Transmit Register (Thanh ghi truyền –chỉ đọc)
- Cung cấp dữ liệu để truyền
UxBRG:UART x Baud Rate Register (Thanh ghi tốc độ Baud)
- Chứa giá trị tốc độ baud của dữ liệu truyền và nhận
1.5.3 Bộ phát tốc độ Baud
Modul UART có chứa bộ phát tốc độ Baud 16-bit (BRG).Thanh ghi UxBRG điều khiển chu kỳ chạy tự do,16-bit Timer.Dưới đây là công thức về việc tính toán tốc độ Baud với BRGH = 0
Với FCY = FOSC/2
Ví dụ: Tính toán tốc độ sai số Baud với điều kiện:
= = 0.16%
Qua ví dụ trên ta có thể nhận thấy được rằng:
Trang 24Max tốc độ Baud (BRGH =0) có thể là FCY/16 (cho UxBRG = 0)
Min tốc độ Baud có thể là FCY/(16*65536)
Với Tốc độ Baud khi BRGH =1
Ta có công thức là
Max tốc độ Baud (BRGH = 1) có thể là FCY/4 (với UxBRG = 0)
Min tốc độ Baud có thể là FCY/(4 * 65536)
1.5.4 Đặt Cấu hình UART
Khối UART thường dùng chuẩn Non-Return-to-Zero (NRZ) với ( 1 bit Start,8 đến 9 bit dữ liệu,và 1-2 bit Stop).Bậc cũng được lập bởi phần cứng và có thể bởi những ứng dụng của người dùng như bậc chẵn,bậc lẻ,không có bậc.Mẫu dữ liệu phổ biến là 8-bit,không bậc và 1 bit stop, cái phần này thuộc dạng mặc định.Số lượng dữ liệu bit,Stop bit, bậc đều được đặt trong PDSEL<1:0> bit (UxMODE <2:1>) và STSEL bit.Trên chip thì bộ 16-bit BRG có thể dùng để lái tốc độ baud từ bộ dao động.Việc truyền và nhận của khối UART tối thiểu phải cài đặt bit LSb trước Khối modul truyền và nhận của UART hoàn toàn độc lập nhau nhưng lại dùng chung một mẫu dữ liệu và tốc độ baud
Khởi động UART
Khối UART được khởi động bằng cách set cho bit UARTEN (UxMODE<15>) và bit UTXEN (UxSTA<10>).Sau khi khởi động,chân UxTX và UxRX được cấu hình như một ngõ ra và ngõ vào mong muốn để ghi lên những bit kích khởi của thanh ghi TRIS và PORT để thích hợp với chân I/O.Khi quá trình truyền dữ liệu xảy ra thì chân UxTX ở mức logic 1
Tất cả sai số và cờ trạng thái có giao tiếp với khối UART đều reset khi khối modul được ngắt.URXDA,OERR,FERR,PERR,UTXEN,UTXBRK và bit UTXBF đều bị xóa.Chú ý là việc xóa bit UARTEN trong khi UART đang tích cực sẽ hủy việc chờ truyền dữ liệu cũng như quá trình nhận dữ liệu sau
đó là khởi động lại modul.Tái khởi động là UART sẽ khởi động lại cấu hình UART như trên
Trang 251.5.5 Bộ Truyền dữ liệu UART
Sơ đồ bộ truyền dữ liệu UART (hình 5.2) cho ta thấy là ở trung tâm của bộ truyền dữ liệu là thanh ghi Transmit Shift (UxTSR).Thanh ghi này nhận dữ liệu từ
bộ truyền đệm FIFO,UxTXREG.Thanh ghi UxTXREG được nhập dữ liệu bằng phần mềm.Ngay sau khi việc ngưng truyền dữ liệu,UxTSR được nhận dữ liệu mới
từ thanh ghi UxTXREG
Việc truyền được khởi động bằng khởi động UTXEN bit (UxSTA<10>).Việc truyền cũng không thể xảy ra cho đến khi thanh ghi UxTXREG được cấp bởi dữ liệu và bộ phát tốc độ Baud (UxBRG) sinh ra một shift clock (như hình 5.2).Thường thường,khi việc truyền dữ liệu được bắt đầu,thanh ghi UxTSR bỏ trống,bởi vì một
sự chuyển tiếp của thanh ghi UxTXREG dẫn đến kết quả là sự chuyển tiếp ngay lập tức của UxTSR.Việc xóa bit UTXEN trong quá trình truyền sẽ dẫn đến sự truyền dữ liệu bị ngắt và sẽ reset lại bộ truyền dữ liệu.Do đó mà chân UxTX sẽ được trả lại trạng thái trở kháng cao
Trên thiết bị reset,thì chân UxTX được cấu hình như ngõ vào,do đó trạng thái của chân UxTX là không xác định.Khi khối UART được kích khởi,thì chân truyền được lái ở mức cao và được giữ trong quá trình trạng thái cho đến khi dữ liệu được ghi lên bộ truyền đệm (Transmit buffer) (UxTXREG).Chân truyền được lái sang mức thấp ngay sau khi dữ liệu đầu tiên được ghi lên thanh ghi UxTXREG Để chắc chắn bit Start được dò ra,một lời khuyên là có một khoản delay giữa lúc UART được kích khởi (UARTEN =1) và lúc ban đầu khi việc truyền dữ liệu
Trang 26đầu.tiên.Khoản delay là tốc độ Baud độc lập và nên bằng hoặc dài hơn thời gian nó thực hiện việc truyền 1 bit dữ liệu
Hình 5.3
1.5.6 Bộ ngắt truyền dữ liệu UART
Cờ ngắt truyền dữ liệu (UxTXIF) được chứa trong thanh ghi cờ ngắt trạng thái (IFS).Bit điều khiển UTXISEL<1:0> (UxSTA<15,13>) xác định khi nào UART sẽ sinh ra ngắt truyền tín hiệu
Nếu UTXISEL<1:0> = 00, thì UxTXIF được kích khi có xảy ra việc chuyển tín hiệu từ bộ đệm truyền dữ liệu đến thanh ghi truyền Shift (Transmit Shift register – UxTSR).Điều này ngụ ý là tối thiểu một vị trí trống trong bộ truyền đệm
Nếu UTXISEL<1:0> = 01,và UxTXIF được kích khi tác vụ truyền hoàn toàn kết thúc
Nếu UTXISEL<1:0> = 10,thì UxTXIF được kích khi việc truyền từ thanh ghi UxTSR và bộ truyền đệm trống
Bit UxTXIF được lập khi modul được kích khởi.Trong những ứng dụng người dùng thì có thể xóa bit UxTXIF khi có chương trình con phục vụ ngắt thực hiện (Interrupt Service Routine)
Trang 27Code mẫu từ datasheet phục vụ tác vụ truyền dữ liệu UART với ngắt
1.5.7 Khối nhận dữ liệu UART
Sơ đồ cấu trúc nhận dữ liệu được mô tả bởi hình bên dưới,trung tâm của khối nhận dữ liệu là thanh ghi nhận Receive Shift.Dữ liệu được nhận trên chân UxRX và được gửi đến khối phục hồi dữ liệu.Khối phục hồi dữ liệu làm việc tại tốc độ gấp 16 lần tốc độ Baud,nơi chính nhận dữ liệu tuần tự làm việc tại tốc độ Baud.Sau khi lấy mẫu từ chân UxRX để dừng bit,dữ liệu nhận được trong UxRSR được truyền đến bộ nhận FIFO
Các thanh ghi liên quan trong khối nhận dữ liệu UART
Trang 28 Bộ đệm nhận dữ liệu (UxRXREG)
Bộ ngắt tác vụ nhận dữ liệu
Cờ ngắt tác vụ nhận dữ liệu UART được chứa trong thanh ghi ngắt cờ trạng thái (IFS).URXISEL<1:0> (UxSTA<7:6>) là bít điều khiển xác định khi nào bộ nhận UART sinh ra một ngắt
Nếu URXISEL<1:0> = 00 hoặc 01,một ngắt được sinh ra mỗi lúc một word dữ liệu được truyền từ thanh ghi Receive Shift
Sơ đồ khối nhận UART:
Hình 5.4
Trang 29Ch ngươ II : GIẢI THUẬT ĐIỀU KHIỂN PID
ĐIỀU KHIỂN PID SỐ
2.1 GIẢI THUẬT ĐIỀU KHIỂN PID
2.1.1 Lịch sử phát triển
Các bộ điều khiển PID trong việc thiết kế điều tốc xuất hiện từ những năm 1890,các bộ điều khiển PID ban đầu được phát triển trong hệ thống điều khiển lái tàu (thủy) tự động vào cuối thế kỷ XIX.Nhưng mãi đến năm 1922 thì tác phẩm phân tích lý thuyết đầu tiên về bộ điều khiển PID được kỹ sư người Mỹ gốc Nga Nicolas Minorsky xuất bản
Minorsky đã thiết kế các hệ thống lái tàu tự động cho Hải quân Mỹ,và dựa trên các phân tích của ông khi quan sát người lái tàu,ông nhận thấy rằng người lái tàu điều khiển con tàu không chỉ dựa trên sai số hiện tại (vị trí con thuyền) mà còn sai
số quá khứ (vị trí con tàu trong quá khứ) và tốc độ thay đổi hiện tại cũng có mối quan hệ tương tự.Từ phát hiện đó,ông đưa ra mô hình toán học hóa giải thuật điều khiển đó.Bộ điều khiển PID dựa trên giải thuật của ông ban đầu phát triển từ các mô hình cơ khí như khí nén,máy thủy lực,sau này giải thuật đó được phát triển lên và ứng dụng nhiều trong lĩnh vực hệ thống điện,điều khiển tự động,và các hệ thống điều khiển công nghiệp…
2.1.2Giới thiệu về giải thuật PID
PID là cách viết tắc của các từ Propotional (tỉ lệ),Integral (tích phân) và Derivative (đạo hàm).Tuy xuất hiện rất lâu nhưng đến nay PID vẫn là giải thuật điều khiển được dùng nhiều nhất trong các ứng dụng điều khiển tự động.Để hiểu rõ bản chất của giải thuật PID chúng tôi đưa ra một ví dụ điều khiển vị trí của một chiếc xe (car) trên đường
Bài Toán:Giả sử ta có một chiếc xe (đồ chơi…) có gắn một động cơ DC.Động cơ
sinh ra một lực để đẩy xe chạy tới chạy lui trên một đường thẳng như hình
dưới.Yêu cầu là xác định phương trình lực F (lực đẩy của động cơ DC) để điều khiển xe đến đúng vị trí O với các yêu cầu: Chính Xác (accurate),Nhanh (fast response),Ổn định (small overshot)
Trang 30Phân Tích:
Một điều rất tự nhiên, nếu vị trí hiện tại của xe rất xa vị trí mong muốn (điểm O), hay nói cách khác sai số(error) lớn, chúng ta cần tác động lực F lớn để nhanh chóng đưa xe về O Một cách đơn giản để công thức hóa ý tưởng này là dùng quan hệ
tuyến tính:
F=Kp*e (1)
Trong đó Kp là một hằng số dương nào đó mà chúng ta gọi là hệ số P
(Propotional gain), e là sai số cần điều khiển tức khoảng cách từ điểm O đến vị trí hiện tại của xe Mục tiêu điều khiển là đưa e tiến về O càng nhanh càng tốt Rõ ràng nếu Kp lớn thì F cũng sẽ lớn và xe rất nhanh chóng tiến về vị trí O Tuy nhiên, lực F quá lớn sẽ gia tốc cho xe rất nhanh (định luật II của Newton: F=ma) Khi xe đã đến
vị trí O (tức e=0), thì tuy lực F=0 (vì F=Kp*e =Kp*0 =0) nhưng do quán tính xe vẫn tiếp tục tiến về bên phải và lệch điểm O về bên phải, sai số e lại trở nên khác 0, giá trị sai số lúc này được gọi là vọt lố (overshot) Lúc này, sai số e là số âm, lực F lại xuất hiện nhưng với chiều ngược lại để kéo xe về lại điểm O Nhưng một lần nữa,
do Kp lớn nên giá trị lực F cũng lớn và có thể kéo xe lệch về bên trái điểm O Quá trình cứ tiếp diễn, xe cứ mãi dao động quanh điểm O Có trường hơp xe dao động càng ngày xàng xa điểm O Bộ điều khiển lúc này được nói là không ổn định Một
đề xuất nhằm giảm độ vọt lố của xe là sử dụng một thành phần “thắng” trong bộ
điều khiển Sẽ rất lý tưởng nếu khi xe đang ở xa điểm O, bộ điều khiển sinh ra lực F lớn nhưng khi xe đã tiến gần đến điểm O thì thành phần “thắng” sẽ giảm tốc độ xe lại Chúng ta điều biết khi một vật dao động quanh 1 điểm thì vật đó có vận tốc cao nhất ở tâm dao động (điểm O) Nói một cách khác, ở gần điểm O sai số e của xe
thay đổi nhanh nhất (cần phân biệt: e thay đổi nhanh nhất không phải e lớn nhất) Mặt khác, tốc độ thay đổi của e có thể tính bằng đạo hàm của biến này theo thời
gian Như vậy, khi xe từ A tiến về gần O, đạo hàm của sai số e tăng giá trị nhưng ngược chiều của lực F (vì e đang giảm nhanh dần) Nếu sử dụng đạo hàm làm thành phần “thắng” thì có thể giảm được độ vọt lố của xe Thành phần “thắng” này chính
là thành phần D (Derivative) trong bộ điều khiển PID mà chúng ta đang khảo sát Thêm thành phần D này vào bộ điều khiển P hiện tại, chúng ta thu được bộ điều
khiển PD nhu sau:
Trang 31số e không thay đổi nữa), lực F = Kp*e Trong khi Kp và e lúc này đều nhỏ nên lực
F cũng nhỏ và có thể không thắng được lực ma sát tĩnh Bạn hãy tưởng tượng tình huống bạn dùng sức của mình để đẩy một xe tải nặng vài chục tấn, tuy lực đẩy tồn tại nhưng xe không thể di chuyển Như thế, xe sẽ đứng yên mãi dù sai số e vẫn chưa bằng 0 Sai số e trong tình huống này gọi là steady state error (tạm dịch là sai số trạng thái tĩnh) Để tránh steady state error, người ta thêm vào bộ điều khiển một thành phần có chức năng “cộng dồn” sai số Khi steady state error xảy ra, 2 thành phần P và D mất tác dụng, thành phần điều khiển mới sẽ “cộng dồn” sai số theo thời gian và làm tăng lực F theo thời gian Đến một lúc nào đó, lực F đủ lớn để thắng ma sát tĩnh và đẩy xe tiến tiếp về điểm O Thành phần “cộng dồn” này chính là thành phần I (Integral - tích phân) trong bộ điều khiển PID Vì chúng ta điều biết, tích phân một đại lượng theo thời gian chính là tổng của đại lượng đó theo thời gian Bộ điều khiển đến thời điểm này đã đầy đủ là PID:
F=Kp*e+Kd*(de/dt)+Ki*∫ (3)
Như vậy, chức năng của từng thành phần trong bộ điều khiển PID giờ đã rõ Tùy vào mục đích và đối tượng điều khiển mà bộ điều khiển PID có thể được lượt bớt để trở thành bộ điều khiển P, PI hoặc PD Công việc chính của người thiết kế bộ điều khiển PID là chọn các hệ số Kp, Kd và Ki sao cho bộ điều khiển hoạt động tốt và ổn định (quá trình này gọi là PID gain tuning) Đây không phải là việc dễ dàng vì nó phụ thuộc vào nhiều yếu tố Tôi tóm tắt một kinh nghiệm cơ bản khi chọn các hệ số cho PID như sau:
- Chọn Kp trước: thử bộ điều khiển P với đối tượng thật (hoặc mô phỏng), điều
chỉnh Kp sao cho thời gian đáp ứng đủ nhanh, chấp nhận độ vọt lố nhỏ
- Thêm thành phần K D để loại overshot, tăng Kd từ từ, thử nghiệm và chọn giá trị thích hợp Steady state error có thể sẽ xuất hiện
- Thêm thành phần K I để giảm steady state error Nên tăng Ki từ bé đến lớn để giảm steady state error đồng thời không để cho overshot xuất hiện trở lại
Có một phương pháp rất phổ biến dùng để chọn các hệ số cho bộ điều khiển PID gọi là Ziegler–Nichols,chung ta sẽ tham khảo phương pháp này
Theo Kinh Nghiệm của nhóm:
Trong quá trình thực hành cũng như lấy từ kinh nghiệm bạnTrường –từng tham gia Robocon 2008-2009 – thì nhóm cũng đưa ra một cách chọn các thông số
KP,KI,KD như sau:
Trang 32- Chọn K P trước: Đầu tiên ta gán các thông số KI,KD đều bằng 0,rồi set giá trị vận tốc (hay vị trí) mong muốn,từ từ tăng thông số KP lên đến khi thấy trên đồ thị vận tốc động cơ (từ màn hình máy tính qua giao tiếp RS232 với đồ họa trong
Matlab) xuất hiện dao động.Lúc này ta lấy giá trị KP cần chọn bằng một nửa giá trị
KP mà tại đó bắt đầu xuất hiện dao động
- Chọn K I :Sau khi đã chọn giá trị KP thích hợp thì giá trị KI sẽ bằng 0.6 lần giá trị KP mà tại đó xuất hiện dao động trên đồ thị vận tốc
- Chọn K D : Cũng dựa vào giá trị KP mà tại đó xuất hiện dao động,ta tìm giá trị
KD bằng 0.2 lần giá trị KP
Cuối cùng: Khảo sát một lần nữa các thông số giá trị và dựa vào đồ thị trên Matlab
để tinh chỉnh các thông số KP,KI,KD để đáp ứng được như mong muốn
2.1.3 Phương pháp Zeigler-Nichols (Trích sách “Lý Thuyết Điều Khiển Tự
Động” –TS.Huỳnh Thái Hoàng)
Phương pháp Zeigler-Nichols là phương pháp thực nghiệm để thiết kế bộ điều khiển P,PI,hoặc PID bằng cách dựa vào đáp ứng quá độ của đối tượng điều khiển.Bộ điều khiển PID cần thiết kế có hàm truyền là :
GPID(s) = + + = (1 + + )
Zeigler và Nichols đưa ra hai cách chọn thông số bộ điều khiển PID tùy theo đặc điểm của đối tượng
Cách 1: Dựa vào đáp ứng quá độ của hệ hở,áp dụng cho các đối tượng có đáp
ứng đối với tín hiệu vào là hàm nấc có dạng chữ S như hình dưới.Ví dụ như nhiệt độ
lò nhiệt,tốc độ động cơ
Hình 6.1
Đây là đáp ứng nấc của hệ hở có dạng S
Trang 33Cách 2: Dựa vào đáp ứng quá độ của hệ kín,áp dụng cho các đối tượng có
khâu tích phân lý tưởng,ví dụ như mực chất lỏng trong bồn chứa,vị trí hệ truyền động dùng động cơ,…Đáp ứng quá độ (hệ hở) của các đối tượng có khâu tích phân
lý tưởng không có dạng như hình 6.1 mà tăng đến vô cùng.Đối với các đối tượng thuộc loại này ta chọn thông số bộ điều khiển PID dựa vào đáp ứng quá độ của hệ kín như hình 6.2.Tăng dần hệ số khuếch đại K của hệ kín đến giá trị giới hạn
Kgh,khi đó đáp ứng ra của hệ kín ở trạng thái xác lập là dao động ổn định với chu kỳ
Tgh
Hình 6.2
Đáp ứng nấc của hệ kín khi K = Kgh
Trang 34Thôn số bộ điều khiển P,PI,PID được chọn như sau:
2.2.1 Vì sao lại sử dụng bộ điều khiển PID số
Như chúng ta đã biết hệ thống máy tính và vi điều khiển là các hệ thống số (digital),nhưng các công thức và lý thuyết được đề cập ở trên là các hàm liên tục của biến e (phần 2.1.1 các công thức (1),(2),(3)).Vì thế một yêu cầu đặt ra là làm sao ta có thể biểu diễn các công thức trên dưới dạng số để DSPIC hiểu được qua việc nạp chương trình từ trình biên dịch MPLAB
Trước hết ta tìm hiểu tại sao lại chọn hệ thống số (vi điều khiển + máy tính)
để điều khiển PID.Thực ra trong Đồ án này chúng tôi đã nói rõ đề tài mà nhóm chúng tôi thực hiện là nghiện cứu giải thuật PID trên con DSPIC để điều khiển động
cơ tức là phải dùng hệ thống điều khiển số.Nhưng ở đây chúng tôi cũng muốn cung cấp thêm thông tin tại sao thường dùng các hệ thống số (hiện nay) để điều khiển động cơ cũng như áp dụng giải thuật PID
- Các hệ thống điều khiển bằng Analog (tương tự) thường phải thiết kế rất cồng kềnh về phần cứng do sử dụng các Opamp rồi điện trở,tụ
điện,các transistor.Đặt biệt mạch cầu H để điều khiển động cơ rất dễ bị nhiễu,độ chính xác kém hơn dùng IC số
- Khi điều khiển PID bằng analog ta thường phải set các thông số
KP,KI,KD bằng các biến trở,nên thường độ trực quan không cao ngoài ra
để biết các thông số đó phải đo biến trở dẫn đến sự bất lợi.Ngoài ra trong
bộ điều khiển PID tương tự thường rất khó để thiết kế giải thuật auto turning (tự động hiệu chỉnh các thông số KP,KI,KD)
2.2.2 Số hóa các công thức tính bộ điều khiển PID số
a Giới thiệu công thức tính bộ điều khiển PID số thường thấy
Vì bộ điều khiển PID xây dựng trong DSPIC sẽ là bộ điều khiển số,chúng ta cần xấp xỉ công thức của bộ điều khiển này theo các khoảng thời gian rời rạc.Trước hết,thành phần P tương đối đơn giản vì đó là quan hệ tuyến tính KP*e,chúng ta chỉ cần áp dụng trực tiếp công thức này mà không cần bất kỳ xấp xỉ nào.Tiếp đến là xấp
xỉ cho đạo hàm của biến e.Vì thời gian lấy mẫu cho các bộ điều khiển thường rất bé nên có thể xấp xỉ đạo hàm bằng sự thay đổi của e trong 2 lần lấy mẫu liên tiếp: de/dt = (e(k) –e(k-1))/h (4)