Dựa trên kết quả mô phỏng trên Matlab và trên giao diện chương trình ta có thể
đánh giá:
- Đặc tính hệ thống sau thực hiện bộ điều khiển là tương đối tốt đáp ứng chỉ tiêu
chất lượng : độ quá điều chỉnh nhỏ, thòi gian qua độ nhỏ khoàng 200-600ms
- Trên giao diện chương trình vẫn thấy rõ sai lệch so mô phỏng Matlab: đặc tính
chưa thật mịn, và vẫn tồn tại sai số so với tốc độ đặt khoảng sai số dao động từ
2% tới 10%.
111 trang |
Chia sẻ: lylyngoc | Lượt xem: 6614 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
này. Bên cạnh đĩ kit điều khiển cũng phải cĩ khả
năng giao tiếp với nhiều đối tượng và thiết bị cảm biến khác nhau, hiển thị các tham số
chế độ hoạt động đồng thời cĩ khả năng cĩ thể giao tiếp máy tính thực hiện chức năng
điều khiển giám sát …Trên cơ sỏ đĩ việc thiết kế kit điều khiển trong đồ án thieets kế
đảm bảo chức năng:
- Kit cĩ các đầu vào tương tự theo các chuẩn cơng nghiệp 0-20mA, 4 -20mA,
0-10V và đầu vào đo điện trở, bên cạnh đĩ là các đầu vào số cho phép thu
thập các giá trị logic số, đếm xung, nhận tín hiệu ngắt từ bên ngồi.
- Kit cĩ các đầu ra tương tự theo các chuẩn cơng nghiệp 0-20mA, 4 -20mA, 0 -
10V, các đầu ra số, bao gồm đầu ra logic số, đầu ra xung cho phép băm xung
hoặc phát tần số.
- Kit giao tiếp với máy tính qua cổng nối tiếp RS 232, cho phép gửi và nhận dữ
liệu với máy tính.
- Kit cĩ các phần tử cho phép hiển thị là LCD hoặc LED .
- Kit cĩ khối bàn phím cho phép nhập một số tham số và chế độ hoạt động.
- Kit cĩ các chân vào ra cho phép kết nối một số modul chức năng khác…
Như vậy mơ hình khối chức năng của kit mạch điều khiển cĩ dạng:
Hình 2.1 Mơ hình khối mạch điều khiển
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 58
Cấu tạo của kít điều khiển : Ở đây các đầu vào-ra tương tự là các tín hiệu chuẩn
điều khiển 0-20mA, 4 -20mA, 0-10V cịn các đầu vào ra số là các tín hiệu logic hoặc
xung số. Khối vi điều khiển trung tâm là thành phần quan trọng nhất của kit nĩ giám
sát thu thập xử lý dữ liệu từ cảm biến và cơ cấu chấp hành để điều khiển truyền thơng
nối tiếp với máy tính qua chuẩn RS232. Bàn phím và LCD là hai modul tác dụng hỗ
trợ quá trình điều khiển và giám sát hệ thống hoạt động.
2.1.2. Các khối chức năng trên kit điều khiển
a) Khối vi điều khiển trung tâm
Hinh 2.2.Sơ đồ khối vi điều khiển trung tâm
Khối vi điều khiển trung tâm cĩ nhiệm vụ điều khiển quản lý, giám sát, điều khiển
hoạt động tồn bộ các modul sử dụng trong mạch cĩ nghĩa là mọi hoạt động trong hệ
thống trên cơ sở diều khiển Pic18F4520. Ngồi ra:
- Vi điều khiển Pic18F4520 sử dụng mạch dao động thạch anh ngồi tần số
10MHz.
- Sử dụng mạch nạp PicKit2 riêng để nạp chương trình cho PIC18F4520
Hinh 2.3 Mạch nạp cho vi điều khiển trung tâm
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 59
b) Khối giao tiếp máy tính qua cổng nối tiếp
Hinh 2.4 Khối giao tiếp máy tính Max232
Cổng nối tiếp của máy tính là cổng COM( Comunication Port) để giao tiếp dữ
liệu hai chiều giữa máy tính PC và ngoại vi với nhiều ưu điểm . Ngày nay, mỗi máy
tính cá nhân đều cĩ một hoặc một vài cổng nối tiếp theo chuẩn RS-232 (cổng COM),
cĩ thể sử dụng để kết nối với các thiết bị ngoại vi hoặc các máy tính khác. Nhiều thiết
bị cơng nghiệp cũng tích hợp cổng RS-232 phục vụ cho cơng việc lập trình hoặc tham
số hĩa.
Cấu tạo cổng COM
- TxD (Transmit Data): đường gửi dữ liệu
- RxD (Receive Data): đường nhận dữ liệu
- RTS (Request To Send): Yêu cầu gửi; bộ truyền đặt đường này lên mức
hoạt động khi sẵn sàng truyền dữ liệu.
- CTS (Clear To Send): Xố để gửi; bộ nhận đặt đường này lên mức hoạt
động để thơng báo cho bộ truyền là nĩ sẵn sàng nhận dữ liệu.
Hình 2.5 : Cấu tạo cổng COM
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 60
- DSR (Data Set Ready): Dữ liệu sẵn sàng; tính hoạt động giống với CTS
nhưng được kích hoạt bởi bộ truyền khi nĩ sẵn sàng nhận dữ liệu.
- SG (Signal Ground): Đất của tín hiệu.
- DCD (Data Carrier Detect): Phát hiện tín hiệu mang dữ liệu.
- DTR (Data Terminal Ready): Đầu cuối dữ liệu sẵn sàng; tính hoạt động
giống với RTS nhưng được kích hoạt bởi bộ nhận khi muốn truyền dữ
liệu.
- RI (Ring Indicate): Báo chuơng, cho biết là bộ nhận đang nhận tín hiệu
rung chuơng.
Cổng nối tiếp cĩ nhiều ưu điểm và đặc điểm nổi trội:
- Tính chống nhiễu tương đối tốt, khoảng cách truyền xa hơn cổng song song.
- Số lượng dây kết nối ít tối thiểu 3 dây: TxD, RxD , GND.
- Ghép nối dễ dàng vi điều khiển hoặc PLC.
- Cĩ khả năng kết nối mạng…
Trong sơ đồ mạch giao tiếp máy tính này chúng ta sử dụng 3 dây truyền nhận dừ
liệu TxD, RxD, GND khơng dùng chế độ bắt tay phần cứng, nếu khi cần bắt tay chúng
ta cĩ thể sử dụng phần mềm. Ngày nay vi xử lý và máy tính tốc độ hoạt độngcao
khơng nư trước lên thuận lợi khi chúng ta truyền nhận .
Trên vi điều khiển chúng ta sử dụng modul USART giao tiếp bất đồng bộ máy tính
cài đặt thơng số: tốc độ 9600 baud, 1bit start, 1 bit stop, 8 bit dữ liệu khơng sủ dụng bit
Parity.
c) Khối bàn phím
Hinh 2.6 Modul bàn phím
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 61
Nguyên tắc sử dụng khố bàn phím là :Dùng ngắt để nhận biết cĩ phím nhấn. Ban
đầu khởi tạo các COL1 : COL4 là 0000, và ngắt ngồi INT0 được kích hoạt khi cĩ
sườn xuống (1 Ỉ 0). Khi nhấn một phím bất kỳ thì chân INT0 xuât hiện sườn xuống
chương trình chuyển sang phục vụ ngắt. Trong thủ tục ngắt ta xác định phím nào được
nhấn, để xác định được ta cần xác định ra hàng và cột của phím được nhấn. Đầu tiên ta
kiểm tra các hàng ROW1 Ỉ ROW4 nếu hàng nào cĩ giá trị bằng “0” thì hàng đĩ cĩ
phím nhấn. Tiếp theo ta xác định cột, đầu tiên ta cho COL1=1 và
COL2=COL3=COL4=0 sau đĩ kiểm tra tích ROW1*ROW2* ROW3*ROW4, nếu tích
bằng “1” thì cột 1 cĩ phím nhấn, từ đĩ xác định được phím nào đã nhấn. Nếu tích đĩ
bằng “0” thì khơng phải cột 1 cĩ phím nhấn, ta lại chuyển sang kiểm tra cột 2 với
COL2=1 và COL1=COL3=COL4=0. Cứ tiếp tục như vậy ta sẽ xác định được cột cĩ
phím nhấn.
d) Khối hiển thị LCD 2x16(2 dịng, 16cột)
LCD làm việc chế độ 8 bit ghép nối Port D của vi điều khiển trung tâm
Bảng sơ lược chức năng LCD 2x16
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 62
Hình 2.7 Khối hiển thị LCD
- Sử dụng một biến trở 100K điều chỉnh độ tương phản của LCD.
- Chỉ dùng LCD để hiển thị (Write) nên chân R/W được nối mass.
e) Khối mạch động lực điều khiển
Hinh 2.8 Khối thiết bị chấp hành
Khối mạch lực này làm việc đúng theo nguyên lý trình cơ cấu chấp hành (IC L298)
trình bày chương 3 ứng dụng bộ điều khiển PID số điều khiển động cơ một chiều .
f) Khối nguồn 12V/5V
Hình 2.9 Sơ đồ khối nguồn
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 63
Trong mạch sử dụng hai modul nguồn 5V(cung cáp mạch điều khiển) và 12V(cung
cấp cho động cơ):
- Mạch cung cấp đầu ra 5V cho mạch điều khiển: điện áp đầu vào xoay chiều
khoảng 18-24V xoay chiều lấy từ biến áp, qua chỉnh lưu 2 nửa chu kỳ bằng
cầu diode, thu được điện áp 1 chiều 18 - 24V sau đĩ qua IC ổn áp LM7805
mắc song song để thu được điện áp đầu ra 5V. Trước IC ổn áp ta mắc thêm
trở nhiệt và diode để tản nhiệt 1 phần cho IC và bảo vệ ngăn dịng đánh
ngược. Ở đầu vào và đầu ra của IC ổn áp đều mắc thêm tụ, gồm cả tụ hĩa (cĩ
phân cực) và tụ keo (khơng phân cực) để ổn định điện áp. Ngồi ra cịn thêm
đèn báo và cơng tắc bật, và cầu chì bảo vệ đầu vào khi lấy nguồn từ biến áp.
- Mạch nguồn 12V cũng tương tự hoạt động như trên nhưng thay vì dùng
ICLM7805 chúng ta dùng LM7812 tạo nguồn 12V điều khiển động cơ.
g) Các khối khác
Trên Kit cịn cĩ một số khối phụ khác như cịi chip, led, ADC, ISP&ISCP để kết
nối mạch nạp ngồi cho Chip, hai chân vào ra cho phép kết nối đầu vào ra khác,
Encoder, truyền thơng cổng Com.
Sơ đồ nguyên lý kit điều khiển
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 64
Sơ đồ mạch in hai lớp
2.2 Thiết kế phần mềm trên nền vi điều khiển PIC
2.2.1. Yêu cầu phần mềm
Chương trình phần mềm cho vi điều khiển Pic18F4520 cĩ thể viết theo nhiều cơng
cụ như CCS, ngơn ngữ Asembly hoặc C18 . Trong đồ án chúng ta thực hiện lập trình
vi điều khiển Pic18F4520 sử dụng C18 trên mơi trường MPLAB của nhà sản suất
Mỉcochip. Phần mềm nhúng trên vi điều khiển PIC thực hiện các nhiệm vụ sau:
- Nhận dữ liệu thơng số từ máy tính và bàn phím.
- Xử lý và nhận các tín hiệu từ các đầu vào số hoặc tương tự trên modul phần
cứng.
- Truyền dữ liệu lên máy tính qua cổng truỳen thơng nối tiếp RS232.
- Hiển thị dữ liệu lên LCD và tín hiệu đèn led.
- Tính tốn đầu ra cho bộ điều khiển thiết kế, trong đề tài là bộ điều khiển PID
số.
Khi viết chương trình cho vi điều khiển chúng ta cĩ thể sử dụngthư viện khối chức
năng hỗ trợ sãn nhà sản xuất về các modul PWM, Timer, ADC, Led, các hàm bộ điều
khiển PID…
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 65
No
Yes
Digital
Analog
2.2.2. Giải thuật chương trình
a) Loop điều khiển
Hình 2.10 Lưu đồ loop điều khiển
BEGIN
Khởi tạo các khối chức năng:
PWM,LCD,TIMER…
Khởi tạo các giá trị ban đầu
Start ?
Cập nhật dữ liệu từ
ADC Ỉ CPU
Tính tốn thuật tốn
PID
Kiểu cổng
ra ?
PWM
CPU Ỉ ADC
Xử lý truyền thơng
END
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 66
Khi thực hiện chương trình chúng ta quản lý theo ngắt để tạo chu kì trích mẫu.
Hình 2.11 Lưu đồ hàm ngắt dùng tạo chu lì trích mẫu
Trong đĩ gọi T là chu kỉ trích mẫu chương trình thì ta sẽ xây dựng được quan hệ
biến “Constant” và T theo khung thời gian hoạt động của “timer”. Điều đĩ cĩ nghĩa
lớn trong việc quản lý chính xác việc tạo thời gian trích mẫu.
b) Thuật tốn PID số
* ) Luật PID trên miền thời gian ( liên tục ) được mơ tả bởi cơng thức:
(3.1)
Trong đĩ: KR = Hệ số tỷ lệ
TC = Hằng số thời gian tích phân
TV = Hằng số thời gian vi phân
* ) Xấp xỉ thành phần I
(3.2)
Bản chất là phép tính xấp xỉ diện tích của hàm e (t)
- Xấp xỉ theo nguyên tắc hình chữ nhật :
- Xấp xỉ theo nguyên tắc hình thang :
Trong đĩ T là chu kì trích mẫu .
*) Xấp xỉ thành phần D
- Khai triền thành chuỗi
Start Interrupt
If (Biến đếm < Constant) then biến
đếm++
Else biến đếm=Constant;
thực hiện thuật tốn Flag=1;
End Interrupt
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 67
- Vi phân xấp xỉ bậc 2 :
- Vi phân xấp xỉ bậc 1 :
*) Xấp xỉ luật PID
Thay các cơng thức xấp xỉ trên vào cơng thức:
uk = upk + uik + udk
- Với xấp xỉ thành phần I theo phương pháp hình chữ nhật và thành phần D theo bậc 1
(3.3)
- Với xấp xỉ thành phần I theo phương pháp hình chữ thang và thành phần D theo
bậc2:
- Theo Takahashi cĩ thể làm giảm bớt biên độ độ lớn điều khiển khi đại lượng chủ đạo
( giá trị đặt ) cĩ đột biến nhanh bằng cách, thay vì ek = wk – xk chỉ sử dụng ek = - xk. Từ
đĩ ta cĩ :
(3.4)
Mơ hình bộ điều khiển PID số:
Hình 2.12 Sơ đồ bộ điều khiển PID số
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 68
Sơ đồ như trên giúp chúng ta cĩ thể lựa chọn nhiều giải pháp sử dụng bộ điều
khiển PID theo nhiều luật khác nhau.
Khi thiết kế thuật tốn PID số cho vi điều khiển chúng ta cũng thực hiện thuật tốn
PID theo nguyên tắc chung như trên nhưng sử dụng các khối Timer để quản lý việc
thực hiện thuật tốn. Các thơng số đầu vào bộ điều khiển là Ref_Input và Mea_Input
luơn được cập nhập từ các cổng vào ra số và tương tự trên kit điều khiển để vi điều
khiển thực hiện thuật tốn PID áp đặt lên cơ cấu chấp hành điều khiển đối tượng.
Trong quá trình điều khiển dựa trên sai lệch đầu vào giữa Ref_Input và Mea_Input bộ
điều khiển PID số tác dụng vừa đưa sai lệch mơ hình về khơng vừa đảm bảo các chỉ
tiêu chất lượng điều khiển . Mỗi một chu kì thực hiện thuật tốn PID trên vi điều khiển
thì tín hiệu đầu ra của hệ thống điều khiển luơn được cập nhập qua cảm biến chuyển
đổi phản hồi về tạo tín hiệu Mea_Input .
Cĩ nhiều cách xấp xỉ bộ điều khiển PID nên việc thực thi các thuật tốn PID trên vi
điều khiển cũng khác nhau. Một vấn đề quan trọng cần quan tâm khi thiết kế bộ điều
khiển PID cần quan tâm là việc hạn chế các hiện tượng bão hồ tích phân (Winup).
Vấn dề này rất thường gặp khi thực thi luật điều khiển PID. Hiện tượng bão hồ tích
phân là hiện tượng đầu ra của bộ điều khiển vẫn tiếp tục tăng quá mức giới hạn do tích
luỹ của thành phần tích phân vẫn cịn khi sai lệch điều khiển đã trở về khơng. Giải
quyết vấn đề này cĩ thể sử dụng phương pháp:
- Khi sai lệch mơ hình bằng khơng ta thực hiện tách bỏ thành phần tích phân
hoặc xố trạng thái của nĩ bằng vịng lặp.
- Giảm hệ số khuếch đại để đầu ra nằm trong dải cho phép khơng quá lớn.
- Thực hiện thuật tốn bù thành phần tích phân bằng phản hồi giá trị thực đo
được.
- Đặt một khâu giới hạn ở dầu ra của bộ điều khiển và sử dụng thuật tốn bù.
Hai phương pháp cuối cĩ ưu điểm hơn cả và thường được hầu hết các bộ điều
khiển cơng nghiệp hỗ trợ. Giả pháp đa năng và áp dụng nhiều trên thực tế thực hiện
Anti_Winup là điều khiển bám(tracking) thực chất cải thiện thành phần tích phân I:
Hình 2.13 Chống bão hào tích phân
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 69
2.2.3. Thiết kế phần mềm điều khiển và giám sát trên máy tính
Chúng ta thực hiện thiết kế giao diện giao tiếp vi điều khiẻn và máy tính bằng
ngon ngữ Visual Basic6.0(VB).Trong mơi trường lập trình VB, việc tạo ra một giao
diện đồ họa là tương đối đơn giản. VB đã hỗ trợ cho người sử dụng những mơ đun đối
tượng phổ biến giúp cho cơng việc của người lập trình trở nên nhẹ nhàng hơn rất
nhiều. Việc tạo giao diện chỉ là lựa chọn những đối tượng vẽ vào một giao diện (form)
cĩ sẵn cùng với việc thiết lập các thơng số cho đối tượng.
Ở đây, giao diện được tạo tương đối đơn giản nhưng đủ đáp ứng được những
yêu cầu mà cơng việc đặt ra.
Yêu cầu cơng việc:
• Thu nhận dữ liệu do người dùng nhập vào (các giá trị Kp, Ki, Kd , thơng
số cần đạt được …)
• Phân tích, xử lý dữ liệu đã nhận, truyền xuống cho vi điều khiển PIC qua
cổng nối tiếp
• Nhận dữ liệu truyền về từ PIC và hiển thị lên màn hình đồ họa để thấy
được khả năng đáp ứng của hệ thống
Hình 2.14. Giao diện giao tiếp PC
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 70
Trên giao điện đồ hoạ gồm cĩ các button điều khiển, các textbox hiển thị số liệu,
combobox cho phép lựa chọn các chế độ, và picturebox dùng để nhận dữ liệu của
người sử dụng vẽ vào, đồng thời cũng là nơi hiển thị dữ liệu thu nhận được cho thấy
đáp ứng của hệ thống. Cụ thể hoạt động các phím chức năng như sau:
- Khối chức năng điều khiển động cơ bao gồm:comand button và textbox biểu
thị và điều khiển chế độ hoạt đọng động cơ DC. Button ‘Start’Button “Start”
dùng để bắt đầu gởi giá trị vị trí mong muốn xuống cho vi điều khiển, lúc đĩ
chương trình sẽ nhận được giá trị tốc độ được gởi lên bởi vi điều khiển thơng
qua giao triếp RS232, rồi vẽ trên đồ thì và hiển thị giá trị tốc độ của động cơ
trên đồ thị theo miền thời gian, từ đĩ ta cĩ thể quan sát được hoạt động của hệ
thống cĩ đáp ứng đúng yêu cầu đề ra khơng (như sai lệch, thời gian đạt được
…).Button ‘Inverser’ điều khiển đảo chièu quay động cơ. Button ‘Stop’ dừmg
hoạt động của động cơ Button ‘update’ là để cập nhập thơng số khi điều
khiển. Hai Textbox ‘tốc độ đặt’ và ‘Chu kì’ tạo thơng số cho điều khiển động
cơ xuống vi điều khiển.
- Khối Parameter Sattus Motor là các texbox chỉ cĩ chức năng hiển thị thơng tin
cập nhập trong quá trình điều khiển.
- Khối bộ điều khiển cho người sử dụng cĩ thể nhập dừ liệu ban đầu điều khiển.
Trên cơ sở đĩ xây dựng thuật tốn phía dưới vi điều khiển.
- Khối đồ thị cĩ button ‘Export’ nhiệm vụ xuất dữ liệu ra màn hình điều khiển
quan sát chất lượng hệ thống.
- Cịn lại Button ‘Exit’ thực hiện thốt khỏi chương trình khi cần thiết .
- Màn hình đồ thị cho ta hai đặc tính đĩ là đặc tính điều khiển tốc độ động cơ
và điện áp đầu vào.
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 71
2.3 Kit điều khiển
Sản phẩm kit điều khiển cĩ được sau khi thiết kế cĩ các khối chức năng như đã nêu
phần trên với đặc điểm :
- Cĩ các cổng vào tương tự : 0 - 5V, 0 - 20mA.
- Cĩ các cổng ra số ( xung số và logic)
- Thời gian trích mẫu tối thiểu là 2.55*10-5 s, tuy nhiên với thời gian trích mẫu
nhỏ ta phải lưu ý tới thời gian tính tốn của các câu lệnh. Với thời gian trích
mẫu lớn ( ví dụ trong ứng dụng điều khiển nhiệt độ…) ta cĩ thể bỏ qua thời
gian tính tốn của VXL.
- Cĩ các khối hiển thị LCD, Led .
- Cĩ khối giao tiếp truyền thơng nối tiếp máy tính RS232.
- Khối nguồn 5V và 12V
- Cịi cảnh báo
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 72
Chương 3: Ứng dụng bộ điều khiển PID số điều
khiển động cơ một chiều
3.1 Đối tượng điều khiển
3.1.1. Thơng số kĩ thuật
Hình 3.1 Động cơ sủ dụng trong đồ án
Chúng ta sử dụng Servo Motor với các thơng số cơ bản như sau:
- Điện áp nguồntối đa là 24V.
- Tốc độ tối đa là 3000 vịng/phút.
- Cĩ gắn liền Encoder quang tương đối 100xung .
- Cơng suất 30-50w.
3.1.2. Nhận dạng mơ hình động học của động cơ điện một chiều
Cấu trúc mơhình động học của đọng cơ điện được đề suất tài liệu tham khảo [3],
[4], [6] cĩ mơ hình dạng:
2DT )(*21
)(W
TsTs
Ks ++= η (3-1)
Các tham số mơ hình động cơ điện một chiều sẽ được nhận dạng từ thực nghiệm
và giới thiệu trong phần tiếp theo.
3.1.3. Thu thập dừ liệu vào/ra của động cơ điện một chiều từ thựcnghiệm
Chúng ta sử dụng kit điều khiển để thu thập dữ liệu nhận dạng động cơ điện một
chiều theo mơ hình :
Hinh 3.2 Sơ đồ thu thập dữ liệu nhận dạng
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 73
Hình 3.2 Đặc tính thu thập dữ liệu nhận dạng
Trong giao điện phần mềm giám sát hệ thống chúng ta cĩ thể lấy trực tiếp dữ liệu
vào/ra xuất ra file định dạng Exel. Như vậy chúng ta cĩ tập dữ liệu đối tưọng lưu trên
file: ’C:\data.xls’. Chúng ta hồn tồn cĩ thể chuyển dữ liệu dạng khác để sử dụng
nhạn dạng như file ‘.mat’, ‘.dat’… Matlab vẫn hỗ trợ các dữ liệu định dạng này.
Khi thu thập dữ liệu đối tượng ta cho điện áp dầu vào động cơ là 9V, thời gian trích
mầu 5ms .
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 74
3.1.4. Nhận dạng động cơ điên một chiều bằng Toolbox Identification cảu
Matlab
Sau khi thu thập dữ liệu vào ra của động cơ ta tiến hành nhận dạng đối tượng sử
dụng toolbox của Matlab (System Identification toolbox) . Khi nhận dạng đối tượng sử
dụng dữ liệu trong miền thời gian Time – Domain Data. Các bước tiến hành nhận dạng
trên Matlab tĩm lược như sau :
Các câu lệnh để tiến hành nhận dạng dữ liệu trong cửa sổ Matlab:
>> X=xlsread('D:\data.xls',1) // Đọc dữ liệu lưu trong data1.xls
>> u1=X(:,1) // Đầu vào điện áp bước nhảy
>> y1=X(:,2) // đầu ra tốc độ y1
>> save identdata u1 y1 // lưu file dữ liệu dưới dạng identdata.mat
>> ident // mở của sổ nhận dạng
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 75
Hình 3.3Chọn đầu vào và mơ hình nhận dạng của đối tượng
Hình 3.4Phương thức nhận dạng và đánh giá mơ hình thu được
Sau khi tiến hành nhận dạng chúng ta thu được mơ hình của đối tượng vĩi hàm
truyền: 2DT )(*21
)(W
TsTs
Ks ++= η Với η=0.31528 ,T=0.0057876 , K=138.67
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 76
Hình 3.5 Đặc tính quá độ đối tượng sau khi nhận dang
3.1.5. Đánh giá chất lượng mơ hình
Cũng trong Toolbox này Matlab cịn cho ta thấy sai lệch tương đối giữa đối tượng
nhận dạng và tập dừ liệu ban đầu thu thập được.
Hình 3.6 Sai lệch mơ hình nhận dạng
Cĩ thể đánh giá sai lệch mơ hình thực đối tượng là khoảng 5.5% làcĩ thể chấp
nhận được. Mơ hình đố tượng động cơ điện một chiều chúng ta nhận dạng được là khá
chính xác.
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 77
3.2 Thiết kế luật điều khiển PID
3.2.1. Phương pháp Ziegler-Nichols1
Để thiết kế bộ điều khiển PID ta dùng phương pháp Ziegler – Nichols thứ nhất
dựa trên cơ sở đặc tính của đối tượng .
Từ hình vẽ trên ta cĩ L = 0,00375 ; T = 0,041và hệ số k = 71.2
Kp= 0.16
Ti = 0.0075
Td = 0.0019
3.2.2. Phương pháp IMC
Phương pháp này cĩ ưu điểm là thiết kế tính tốn các tham số bộ điều khiển PID
cho từng loại mơ hình đối tượng khác nahu qua một số biểu thức trung gian. Chúng ta
sử dụng phương pháp này cho đối tượng động cơ một chiều là vì nĩ đã cĩ sẵn luật
thiết kế .Đối tượng động cơ điện một chiều cĩ mơ hình :
2DT )(*21
)(W
TsTs
Ks ++= η Với η=0.31528 ,T=0.0057876 , K=138.67
Ta cĩ : Chon tc=0.06
Kp=Ti/(tc*K)= 0.0004
Ti=2*η*T=0.00365=>Ki=0.12
Td=T/(2*η)=0.092=>Kd=0.000037
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 78
3.2.3. Mơ phỏng và đánh giá chất lượng bộ điều khiển
Mơ hình Simulink:
Hình 3.7 Mơ phỏng trên Simulink các phương pháp điều khiển
Hình 3.9 Đặc tính mơ phỏng
Rõ dàng hai phương pháp đều cho đặc tính hệ thống sai lệch và đoọ quá điều
chỉnh bằng khơng nhưng IMC cho ta thời gian quá độ Tqd=140ms, cịn Ziegler-
Nichols cho Tqd=230ms. Như vậy phương pháp IMC cho ta kết quả tốt hơn.
3.3 Thiết bị chấp hành(IC L298)
Đảm nhiệm vai trị thiết bị chấp hành trong hệ thống điều khiển thực thi thuật tốn
điều khiển là mạch cơng suất L298.L298 là một Driver tích hợp sẵn 2 mạch cầu H bên
trong với chuẩn điều khiển TTL, khơng cĩ Diode nội bảo vệ Mosfet. Chịu tải tối đa
trên mỗi cầu là 2A, điện áp 40VDC. Logic “0” ở ngõ vào lên tới 1.5V ( khả năng khử
nhiễu cao). Sử dụng dạng đĩng gĩi Multiwatt15.
Một số đặc điểm của mạch cơng suất L298:
Điện áp cấp lên đến 46V
• Tổng dịng DC chịu đựng lên đến 4A
• Chức năng bảo vệ quá nhiệt
• Điện áp logic ‘0’ từ 0V đến 1.5V nên tính chống nhiễu tốt.
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 79
Hình 3.10 Sơ đồ chân L298
Chức năng các chân :
MW.15 Power SO Tên Chức năng
1.15 2;19 Sense A
sense B
Nối chân này qua điện trở cảm ứng dịng
xuống GND để điều khiển dịng tải .
2;3 4;5 Out1
Out2
Ngõ ra của cầu A . Dịng của tải mắc giữa 2
chân này được qui định bởi chân 1.
4 6 Vs Chân cấp nguồn cho tầng cơng suất. Cần cĩ một tụ điện khơng cảm kháng 100nF nối giữa
chân này và chân GND
5;7 7;9 Input1
Input2
Chân ngõ vào của cầu A, tương thích chuẩn
TTL
6;11 8;14 EnableA
EnableB
Chân ngõ vào enable (cho phép) tương thích
chuẩn TTL. Mức thấp ở chân này sẽ cấm
(disable) ngõ ra cầu A (đối với chân EnableA)
và/hoặc cầu B ( đối với chân EnableB)
8 1;10;11;20 GND Chân đất (Ground)
9 12 VSS Chân cấp nguồn cho khối logic. Cần cĩ tụ
điện 100nF nối giữa chân này với GND
10;12 13;15 Input3
Input4
Các chân logic ngõ vào của cầu B
13;14 16;17 Output3
Output4
Ngõ ra của cầu B. Dịng của tải mắc giữa hai
chân này được qui định bởi chân 15.
- 3;18 N.C Khơng kết nối .
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 80
Hình 3.11: Các chế độ của L298
Hai chân C,D của L298 để điều khiển chiều động cơ, phanh động cơ. Chân Enable
của L298 dùng làm đầu vào băm xung PWM cho động cơ để cĩ thể điều khiển tốc độ
động cơ.
Bảng chế độ của trong quá trình điều khiển động cơ :
Đầu vào Chức năng
M1A=1; M1B=0 Tiến động cơ
M1A=0; M1B=1 Lùi động cơ M1E=1
M1A=M1B Dừng khẩn cấp (phanh)
M1E=0 M1A=X; M1B=X Dừng khơng phanh
Trong thực tế ứng dụng này, động cơ DC chỉ cĩ dịng tải 200mA khi hoạt động
bình thường, và lên đến tối đa 2A khi quá tải. Tuy nhiên cũng cần thiết kế một bộ điều
khiển mở cĩ thể sử dụng cho các động cơ lên đến 4A.
Việc hạn chế dịng cho động cơ là rất cần thiết, cĩ nhiều tình huống khơng mong
đợi xảy ra, vì vậy cần phải cĩ chế độ hạn dịng bằng phần mềm.
Trong các trường hợp nguy hiểm như ngắn mạch do va chạm, hoặc tuột dây nối,
cần cĩ mạch bảo vệ chống ngắn mạch bằng phần cứng để đáp ứng kịp thời.
Cần điều khiển PWM ở tần số cao để tránh tiếng ồn do động cơ tạo ra, nhất là
những tiếng kêu nghe rất rõ ở khoảng tần số 1KHz đến 3KHz. Bộ điều khiển PWM
thơng thường được điều khiển ở 5KHz.Nối song song hai cầu H để điều khiển động cơ
lên đến 4A.
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 81
Hình 3.12 : Sơ đồ giải pháp
L298 khơng cĩ Diode nội bảo vệ, do đĩ cần cĩ 4 Diode ngồi bảo vệ. Để đảm
bảo điều khiển PWM ở tần số cao, cần dùng Diode nhanh cĩ điện trở thấp. Diode
chuyên dụng để điều khiển động cơ là các Diode “fast recovery Schottky”. Nhưng ở
tần số khoảng 5KHz vẫn cĩ thể dùng loại 1N4007.
Lưu ý rằng, khi hoạt động L298 rất nĩng, do vậy cần cần phải lắp miếng tản
nhiệt.
Hai chân RC0 và RC1 để điều khiển chiều quay của động cơ:
+ ) RC0 = 1 và RC1 = 0 quay thuận
+ ) RC0 = 0 và RC1 = 1 quay nghịch
+ ) RC0 = RC1 = 0 hoặc RC0 = RC1 = 1 động cơ dừng quay
Chân PWM được đưa vào chân Enable của L298, do vậy chỉ cần điều chỉnh độ
lớn của Dutycycle của PWM ta cĩ thể điều chỉnh được điện áp đầu ra của L298 đưa
vào động cơ ( 0V : 12V ).
3.4 Cảm biến (Encoder)
Nguyên lý hoạt động của cảm biến encoder : có nhiều loại encoder khác nhau
như : Encoder tiếp xúc, Encoder từ trường, Encoder quang (Encoder quang tương
đối và Encoder quang tuyệt đối). Mỗi loại lại có một nguyên lý hoạt động khác
nhau, trong khuôn khổ báo cáo đồ án chỉ trình bày phần nguyên lý loại encoder sử
dụng là Encoder quang tương đối ( incremental encoder).
Mô hình thứ 1
Hình 3.13 : Mơ hình1 - En coder quang tương đối
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 82
Incremental encoder về cơ bản là một đĩa tròn quay quanh một trục được đục lỗ
như hình trên.
Hình 3.14 : Phương thức hoạt động Encoder quang tương đối
Ở 2 bên mặt của cái đĩa tròn đó, sẽ có một bộ thu phát quang. Trong quá trình
encoder quay quanh trục, nếu gặp lỗ rống thì ánh sáng chiếu qua được, nếu gặp
mãnh chắn thì tia sáng không chiếu quá được. Do đó tín hiệu nhận được từ sensor
quang là một chuổi xung. Mỗi encoder được chế tạo sẽ biết sẵn số xung trên một
vòng. Do đó ta có thể dùng vi điều khiển đếm số xung đó trong một đơn vị thời gian
và tính ra tốc độ động cơ.
Cái encoder mà em sử dụng trong đồ án của mình, hoàn toàn giống với mô hình
ở trên. Tuy nhiên, mô hình trên có nhược điểm lớn là : ta không thể xác định được
động cơ quay trái hay quay phải, vì có quay theo chiều nào đi nữa thì chỉ có một
dạng xung đưa ra. Ngoài ra điểm bắt đầu của động cơ, ta cũng không thể nào biết
được.
Cải tiến mô hình 1 bằng mô hình 2 như sau:
Mô hình thứ 2
Hình 3.15 : Mơ hình 2 -En coder quang tương đối
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 83
Trong mô hình này, người ta đục tất cả là 2 vòng lỗ. Vòng ngoài cùng giống
như mô hình 1, vòng giữa pha so với vòng ngoài là 90 độ. Khi đó, dạng xung ra từ 2
vòng trên như sau :
Hình 3.16 : Sơ đồ xung của En coder quang tương đối(mơ hình 2)
Hai xung đưa ra từ 2 vòng lệch nhau 90 độ, nếu vòng ngoài nhanh pha hơn vòng
trong thì chắc chắn động cơ quay từ trái sang phải và ngược lại.
Một lỗ ở vòng trong cùng dùng để phát hiện điểm bắt đầu của động cơ. Có thể
viết chương trình cho vi điều khiển nhận biết : nếu có một xung phát ra từ vòng
trong cùng này, tức là động cơ đã quay đúng một vòng.
Với những đặc tính trên, encoder dùng rất phổ biến trong việc xác định vị trí góc
của động cơ…..
Vấn đề quan trọng trong việc tìm mua những loại động cơ có gắn encoder như
thế này để làm đồ án đối với sinh viên là : cặp mắt quang 2 bên encoder để tạo
xung thường bị chết và không có đồ thay thế.
Một loại encoder thứ 2 cũng phổ biến hiện nay, đó là :absolute encoder.
Mô hình đĩa quang của loại này như sau:
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 84
Cách tính tốc độ động sơ sử dụng trong đồ án
Ở đồ án động cơ được gắn Encoder 100 xung/vịng.
Hai kênh xung A và B được đưa vào hai chân ngắt của VĐK là INT1 , INT2. Ta
thiết lập khi cĩ sườn xuống thì tạo ngắt. Do vậy tổng số xung trên 1 vịng sẽ được nhân
đơi lên thành 200 xung.
Cách tính tốc độ : Tốc độ = (Counter*60)/(200*T)
Ở đây:
T : là chu kỳ trích mẫu
Counter : là số xung đếm được trong khoảng thời gian T
Trong đồ án sử dụng T = 0.02 s nên : Tốc độ = Counter * 15
3.5 Hệ thống điều khiển
Trên cơ sỏ thiết kế bộ điều khiển PID số chương 2 chúng ta cĩ thể khái quát hệ
thống điều khiển động cơ điện một chiều cĩ dạng:
Hình 3.17 Sơ đồ hệ thốngđiều khiển động cơ
Hình 3.18 Cấu trúc hệ thống điều khiển
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 85
Cơ sở nguyên lý thực hiện sơ đồ điều khiển tốc độ động cơ :
- Thực hiện điều khiển động cơ bằng bộ điều khiển thiết kế cài dặt trên vi điều
khiển.
- Sử dụng encoder quang tương đối dùng dể phản hồi tốc độ động cơ.
- Giao tiếp máy tính qua chuẩn RS232 thơng qua modul trên mcạh điều khiển
hiển thị đặc tính hệ thống theo phương pháp điều chế độ rộng xung PWM.
- Trên mạch cĩ khối hiển thị LCD hiển thị các chế độ hoạt động động cơ cùng
như các thơng số: tốc độ , điện áp điều khiển…
Hình 3.19 Cấu trúc khối điều khiển động cơ
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 86
3.6 Một số hình ảnh về Kit điều khiển động cơ sử dụng vi điều
khiển PIC
Một số hình ảnh mạch điều khiển động cơ một chiều
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 87
3.7 :Kết quả thực nghiệm
Bộ điều khiển PI
Hình 3.20 Đặc tính với bộ điều khiển PI
Bộ điều khiển PID
Hình 3.21 Đặc tính với bộ đièu khiển PID
Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 88
Hình 3.22 Hệ thống khi cĩ nhiễu
Hình 3.23 Đặc tính khi hệ thống cĩ thay đỏi giá trị đặt
3.8 So sánh kết quả mơ phỏng và thực tế
Dựa trên kết quả mơ phỏng trên Matlab và trên giao diện chương trình ta cĩ thể
đánh giá:
- Đặc tính hệ thống sau thực hiện bộ điều khiển là tương đối tốt đáp ứng chỉ tiêu
chất lượng : độ quá điều chỉnh nhỏ, thịi gian qua độ nhỏ khồn 200-600ms
- Trên giao diện chương trình vẫn thấy rõ sai lệch so mơ phỏng Matlab: đặc tính
chưa thật mịn, và vẫn tồn tại sai số so với tốc độ đặt khoảng sai số dao động từ
2% tới 10%.
Kết luận
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 89
Kết luận
Các kết quả đạt được
Trên cơ sở thiết kế phần cứng và phần mềm khi thực hiện đồ án đã đạt được một số
kết quả sau:
- Về phần cứng: Tìm hiểu về vi điều khiển Pic
- Đi sâu tìm hiểu một số thuật tốn điều khiển như bộ điều khiển PID, bộ điều
khiển mờ…
- Nhận dạng và mơ phỏng đối tượng điều khiển (động cơ một chièu kích từ độc
lập) trên Matlab.
- Thiết kế kit phần cứng cho vi điều khiển Pic 18F4520 cĩ khả năng điều khiển
nhiều đối tượng (động cơ một chiều. lị nhiệt…). với các thuật tốn điều khiển
khác nhau
- Tạo được giao diện và giao tiếp được PC và vi điều khiển trung tâm
Một số điểm hạn chế
Trong gian đoạn làm đồ án, chúng em đã rất cố gắng nghiên cứu, thiết kế để cĩ
được những kết quả đã nêu trên. Tuy nhiên do thời gian và kiến thức của chúng em cĩ
hạn, mặt khác một số điều kiện về thiết bị khơng cho phép nên trong đồ án cịn những
hạn chế :
- Sử dụng Encoder cĩ độ phân giải chưa cao nên vẫn gây ra nhiều sai số trong
quá trình tính tốn.
- Pic 18F4520 là dịng vi điều khiển 8 bits cĩ tốc độ tính tốn và bộ nhớ chương
trình khơng lớn nên khĩ áp dụng cho những bộ điều khiển cần nhiều bộ nhớ
như : bộ điều khiển mờ...
- Kết quả thu được vẫn cĩ sai số so với mơ hình lý tưởng thiết kế trên Matlab.
- Một số modul trên Kit chưa được khai thác.
Hướng khắc phục các điểm hạn chế
Dựa trên cơ sỏ hạn chế chúng ta cĩ hướng khắc phục :
- Cĩ thể sử dụng động cơ cĩ encoder 500 xung/vịng hoặc 1000 xung/vịng để
khắc phục sai số .
- Sử dụng dịng Pic 16 bits, 32 bits..........
Hướng phát triển đề tài
- Thiết kế bộ điều khiển thích nghi PID, bộ điều khiển mờ học theo mơ hình
mẫu : FMRLC, hoặc bộ điều khiển ứng dụng mạng Nơron.
Kết luận
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 90
- Mở rộng thêm các đối tượng thực mà Kit cĩ thể làm việc được như lị nhiệt,
bình mức…
Do lí do về thời gian những lí do khách quan khác nên đồ án được thực hiện vẫn
cịn nhiều khiếm khuyết. Chúng em rất mong nhận được nhũng ý kiến đĩng gĩp quý
báu của các thầy cơ.
Một lần nữa, chúng em xin chân thành cảm ơn cơ giáo PGS.TS Phan Xuân Minh
đã hướng dẫn chúng em tận tình trong quá trình thực hiện đồ án này.
----------------------------o0o----------------------------
Phụ lục- Tài liệu tham khảo
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 91
Tài liệu tham khảo
1. Nguyễn Phùng Quang, Andreas Dittrich – Truyền động điện thơng minh
– NXB KHKT, 2002
2. Nguyễn Tăng Cường, Phan Quốc Thắng – Cấu trúc và lập trình họ vi điều
khiển 8051
3. Nguyễn Dỗn Phước : Lý thuyết điều khiển tuyến tính. Nhà xuất bản khoa học
kỹ thuật, 2005
4. Nguyễn Phùng Quang : Matlab & Simulink dành cho kỹ sư điều khiển tự
động. Nhà xuất bản khoa học kỹ thuật, 2005
5. Nguyễn Phùng Quang : Bài giảng điều kiển số
6. Nguyễn Văn Hồ : Tự động hố quá trình cơng nghệ
7. Hồng Minh Sơn : Điều khiển quá trình
8. Phạm Cơng Ngơ (chủ biên) : Tự học Visual C++ từ cơ bản đến nâng cao. Nhà
xuất bản thơng kê, 2002
9. Dương Thủy Vỹ : Phương pháp tính. Nhà xuất bản khoa học kỹ thuật, 2002
10. Bùi Quốc Khánh, Nguyễn Văn Liễn & Nguyễn Thị Hiền : Truyền động điện.
Nhà xuất bản khoa học kỹ thuật, 2006
11. Hãng MicroSoft : MSDN Library for Visual Studio 2005
12. Hãng Texas Instruments : datasheet MAX232
13. Hãng microchip:datasheet 18F4520
14. Hãng ST : datasheet L298
15. www.dientuvietnam.net
16. www.diendandientu.com
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 92
Phụ lục Code phần mềm
//code bàn phím//
#ifndef __pvc_keypad_H
#define __pvc_keypad_H
#define row1 PORTAbits.RA2
#define row2 PORTAbits.RA3
#define row3 PORTAbits.RA4
#define row4 PORTAbits.RA5
#define col1 PORTBbits.RB4
#define col2 PORTBbits.RB5
#define col3 PORTBbits.RB6
#define col4 PORTBbits.RB7
/*******************************************************************/
unsigned char col(void)
{
col4 = 1;
if (row1 & row2 & row3 & row4)
{
col4 = 0;
return 4;
}
col4 = 0;
col3 = 1;
if (row1 & row2 & row3 & row4)
{
col3 = 0;
return 3;
}
col3 = 0;
col2 = 1;
if (row1 & row2 & row3 & row4)
{
col2 = 0;
return 2;
}
col2 = 0;
col1 = 1;
if (row1 & row2 & row3 & row4)
{
col1 = 0;
return 1;
}
col1 = 0;
}
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 93
/*************************************************************/
unsigned char row(void)
{
if (!row4) return 4;
else if (!row3) return 3;
else if (!row2) return 2;
else if (!row1) return 1;
}
/************************************************************/
unsigned char get_keypad(void)
{
if((col()==1) && (row()==1)) return 7;
if((col()==1) && (row()==2)) return 4;
if((col()==1) && (row()==3)) return 1;
if((col()==1) && (row()==4)) return 0;
if((col()==2) && (row()==1)) return 8;
if((col()==2) && (row()==2)) return 5;
if((col()==2) && (row()==3)) return 2;
if((col()==2) && (row()==4)) return 'Q';
if((col()==3) && (row()==1)) return 9;
if((col()==3) && (row()==2)) return 6;
if((col()==3) && (row()==3)) return 3;
if((col()==3) && (row()==4)) return 'L';
if((col()==4) && (row()==1)) return 'P';
if((col()==4) && (row()==2)) return 'V';
if((col()==4) && (row()==3)) return 'C';
if((col()==4) && (row()==4)) return 'M';
}
#endif
/////// code LCD/////
#ifndef __pvc_lcd_H
#define __pvc_lcd_H
#define LCD_RS PORTEbits.RE1
#define LCD_RW PORTCbits.RC3
#define LCD_E PORTEbits.RE2
#define LCD_DATA PORTD
/***************************************************************/
void busy_lcd (void)
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 94
{
unsigned char data;
TRISD=0xff;
LCD_RS=0;
LCD_RW=1;
do
{
LCD_E=1;
Delay10TCYx(2);
LCD_E=0;
data=PORTD;
data=data&0x80;
}
while(data==0x80);
}
/*****************************************************************/
void write_cmd_lcd(char cmd)
{
busy_lcd();
TRISD=0x00;
LCD_RW = 0;
LCD_RS = 0;
LCD_E = 1;
LCD_DATA = cmd;
LCD_E = 0;
}
/****************************************************************/
void init_lcd (void)
{
write_cmd_lcd(0b00111000);
write_cmd_lcd(0b00001100);
write_cmd_lcd(0b00000110);
write_cmd_lcd(0b00000001);
write_cmd_lcd(0x02);
}
/****************************************************************/
void write_data_lcd(char data)
{
if(data=='\n')
{
write_cmd_lcd(0xC0); // Dua con tro ve dau dong thu 2
return;
}
if(data=='\1')
{
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 95
write_cmd_lcd(0x01); // Xoa man hinh hien thi
return;
}
busy_lcd();
TRISD=0x00;
LCD_RW = 0;
LCD_RS = 1;
LCD_E = 1;
LCD_DATA = data;
LCD_E = 0;
}
/*****************************************************************/
void write_str_lcd(char *str)
{
while(*str)
{
write_data_lcd(*str);
str++;
}
}
#endif
/*******************************************
CPU PIC18F4520
Frequency 40MHz
*******************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
//============================================
#pragma config OSC=HSPLL
#pragma config BOREN=OFF
#pragma config WDT=OFF
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 96
#pragma config MCLRE=ON
#pragma config PBADEN=OFF
#pragma config LVP=OFF
#pragma config PWRT=ON
long vc=0;
long w=0;
long pc=0,ic=0,dc=0;
char p_h=0,p_l=0,i_h=0,i_l=0,d_h=0,d_l=0;
char mode=0;
char w_h=0,w_l=0;
//=============================================
char flag=0;
char co_tocdo=0;
char timer0_flag=0;
//=============================================
float u_p=0,u_i=0,u_d=0,k_p=0,k_i=0;
//long u=0,v=0;
float u=0,v=0;
float e=0;
float pre_e=0;
float sum_e=0;
float tocdothuc=0;
float pre_tocdothuc=0;
float pre_ui=0;
float pre_u=0;
unsigned long counter=0,dienap=0;
unsigned long tocdodat=0;
unsigned int dutycycle=0;
//=============================================
unsigned char temp,msg[35];
unsigned int j=0;
unsigned int jlcd=0;
unsigned short long k=0;
unsigned int k_usart=0;
char pad=0;
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 97
char message[35];
char pvcm[32]={"\1 Pham Van Manh \n My Brother "};
void delay10ms (void)
{
Delay10KTCYx(10);
}
void delay500ms (void)
{
Delay10KTCYx(500);
}
void counter1_isr(void);
void counter2_isr(void);
void usart_isr(void);
void keypad_isr(void);
void timer0_isr(void);
void pvc(void)
{
e= tocdodat - tocdothuc;
u_p =pc*e;
u_i=pre_ui + 0.0457*ic*pre_e ;
u_d=dc*(e-pre_e)/0.0457;
u= (u_p+u_i+u_d/10)/12800;
pre_e=e;
pre_ui=u_i;
if(u>=11.8)
{
u=11.8;
sum_e -= e;
}
if(u<=0)
{
u=0;
sum_e -= e;
}
dutycycle = 256*u/12;
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 98
SetDCPWM1(dutycycle);
return;
}
//===============================================
#pragma code high_vector=0x08
void interrupt_at_high_vector(void)
{
_asm GOTO keypad_isr _endasm
}
#pragma code
//===================================
#pragma interrupt keypad_isr
void keypad_isr(void)
{
INTCONbits.INT0IF=0;
delay10ms();
co_tocdo=1;
if(!(row1 & row2 & row3 & row4))
{
pad = get_keypad();
if (pad>=0 && pad<=9)
sprintf(&message[0],"\1 KeyPad = %u ",pad);
else
sprintf(&message[0],"\1 KeyPad = %c ",pad);
write_str_lcd(&message[0]);
}
}
//*************************************************
#pragma code low_vector = 0x18
void interurrupt_at_low_vector(void)
{
if(INTCON3bits.INT1IF)
{
_asm GOTO counter1_isr _endasm
}
if(INTCON3bits.INT2IF)
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 99
{
_asm GOTO counter2_isr _endasm
}
if(PIR1bits.RCIF)
{
_asm GOTO usart_isr _endasm
}
if(INTCONbits.TMR0IF)
{
_asm GOTO timer0_isr _endasm
}
}
//********************************************************************
#pragma interruptlow usart_isr
void usart_isr(void)
{
INTCONbits.GIE = 0;
pad=0;
if(k_usart==0)
{
mode=ReadUSART();
}
if(k_usart==1)
{
w_h = ReadUSART();
}
if(k_usart==2)
{
w_l = ReadUSART();
}
if(k_usart==3)
{
p_h = ReadUSART();
}
if(k_usart==4)
{
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 100
p_l = ReadUSART();
}
if(k_usart==5)
{
i_h = ReadUSART();
}
if(k_usart==6)
{
i_l = ReadUSART();
}
if(k_usart==7)
{
d_h = ReadUSART();
}
if(k_usart==8)
{
d_l = ReadUSART();
k_usart=0;
flag=1;
}
else k_usart++;
INTCONbits.GIE = 1;
}
//========================================
#pragma interruptlow counter1_isr
void counter1_isr(void)
{
counter++;
INTCON3bits.INT1IF=0;
}
//ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
#pragma interruptlow counter2_isr
void counter2_isr(void)
{
counter++;
INTCON3bits.INT2IF=0;
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 101
}
//ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
//tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
#pragma interruptlow timer0_isr
void timer0_isr(void)
{
INTCONbits.GIE = 0;
if(j<7)//0.026s
{
j++;
}
else
{
j=0;
tocdothuc = counter*6.565;
counter=0;
timer0_flag=1;
}
INTCONbits.TMR0IF=0;
INTCONbits.GIE = 1;
}
//tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt
void main()
{
OpenUSART (USART_TX_INT_OFF &
USART_RX_INT_ON &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH,64);
OpenADC( ADC_FOSC_32 &ADC_RIGHT_JUST
&ADC_6_TAD,ADC_CH0&ADC_INT_OFF, 0);
RCONbits.IPEN=1; // cho phep uu tien ngat
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 102
INTCON=0xC0; // mo tat ca cac ngat
INTCONbits.INT0IE =1;
INTCON2=0x00; // ngat tai INT1,INT2 on falling edge
INTCON2bits.TMR0IP=0; //Ngat timer0 thap
INTCON3=0x18; // cho phep ngat INT1,INT2
PIE1bits.RCIE=1;
IPR1bits.RCIP=0;
PIE1bits.TXIE=0; // Khong cho ngat khi truyen du lieu
ADCON1 = 0x0d;
TRISC = 0x80;
PORTCbits.RC5 =1;
TRISD = 0x00;
TRISE = 0x00;
TRISA = 0xff;
TRISB = 0b00001111; // Khoi tao cho Kepad
PORTB = 0X00; // Khoi tao cho Kepad
ADCON1 = 0x0E; // Lay nguon la 5V va 0v cua mach
init_lcd();
write_str_lcd(&pvcm[0]);
OpenTimer2( TIMER_INT_OFF &
T2_PS_1_1 &
T2_POST_1_16 );
delay500ms();
PORTCbits.RC5 = 1;
//-----------------------------------------------------------------------------------
while(1)
{
//fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ff
if(flag)
{
while(1)
{
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 103
flag=0;
sum_e=0;
k=0;
j=0;
counter=0;
if((pad=='P')||(pad=='V')||(pad=='M')||(pad=='Q')) break;
if(mode)
{
tocdodat= w_h*256 + w_l;
pc=p_h*256+p_l;
ic=i_h*256+i_l;
dc=d_h*256+d_l;
OpenPWM1(63);//156.25kHz 256
PORTCbits.RC0 = 0;
PORTCbits.RC1 = 1;
}
else
{
dutycycle=0;
ClosePWM1();
tocdodat=0;
PORTCbits.RC0 = 0;
PORTCbits.RC1 = 0;
pc=0;
ic=0;
dc=0;
u=0;
v=0;
pre_u=0;
pre_ui=0;
pre_e=0;
sum_e=0;
}
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 104
OpenTimer0( TIMER_INT_ON &
T0_8BIT &
T0_SOURCE_INT &
T0_PS_1_256 );
while(1)
{
if((pad=='P')||(pad=='V')||(pad=='M')||(pad=='Q')||(flag==1)) break;
if(timer0_flag)
{
timer0_flag=0;
k++;
jlcd++;
pvc();
}
if(k==2)
{
k=0;
w=tocdothuc;
while (BusyUSART());
WriteUSART(w/256);
while (BusyUSART());
WriteUSART(w%256);
while (BusyUSART());
vc=u*1000;
WriteUSART(vc/256);
while (BusyUSART());
WriteUSART(vc%256);
}
if(jlcd==10)
{
jlcd=0;
w=tocdothuc;
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 105
sprintf(&msg[0],"\1 Toc do la: \n %lu (rpm)",w);
write_str_lcd(&msg[0]);
}
}
}
}
//ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
//pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
if(pad=='P')
{
while(1)
{
if((pad=='V')||(pad==0)||(pad=='M')||(pad=='C')) break;
OpenPWM1(63);//156.25khz 256
SetDCPWM1(192);// 9V
PORTCbits.RC0 = 0;
PORTCbits.RC1 = 1;
OpenTimer0( TIMER_INT_ON &
T0_8BIT &
T0_SOURCE_INT &
T0_PS_1_256 );
while(1)
{
if((pad=='V')||(pad==0)||(pad=='M')||(pad=='C')) break;
if(timer0_flag)
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 106
{
timer0_flag=0;
w=tocdothuc;
while (BusyUSART());
WriteUSART(w/256);
while (BusyUSART());
WriteUSART(w%256);
while (BusyUSART());
WriteUSART(9000/256);
while (BusyUSART());
WriteUSART(9000%256);
sprintf(&msg[0],"\1 Toc do la: \n %lu (rpm)",w);
write_str_lcd(&msg[0]);
}
}
}
}
//pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
//vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
if(pad=='V')
{
while(1)
{
if((pad==0)||(pad=='P')||(pad=='M')||(pad=='C')) break;
dutycycle=0;
ClosePWM1();
tocdodat=0;
pc=0;
ic=0;
dc=0;
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 107
pre_e=0;
sum_e=0;
u=0;
v=0;
pre_u=0;
pre_ui=0;
PORTCbits.RC0 = 0;
PORTCbits.RC1 = 0;
write_str_lcd(&pvcm[0]);
}
}
//vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
if(pad=='C')
{
tocdodat=0;
sprintf(&message[0],"\1Nhap toc do:\nNhan L de OK");
write_str_lcd(&message[0]);
do{
if(co_tocdo)
{
co_tocdo=0;
if((pad>=0)&&(pad<=9))
{
tocdodat=tocdodat+pad;
sprintf(&message[0],"\1V dat: %lu (rpm)\nNhan L de OK ",tocdodat);
write_str_lcd(&message[0]);
tocdodat=tocdodat*10;
}
}
}
while(pad !='L');
tocdodat = tocdodat/10;
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 108
while(1)
{
sprintf(&message[0],"\1V dat: %lu (rpm)\nNhan Q(M) de chay ",tocdodat);
write_str_lcd(&message[0]);
if((pad==0)||(pad=='P')||(pad=='V')||(pad=='M')||(pad=='C')||(pad=='Q')) break;
}
}
//ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
if(pad=='M')
{
OpenPWM1(63);//156.25kHz 256
PORTCbits.RC0 = 0;
PORTCbits.RC1 = 1;
OpenTimer0( TIMER_INT_ON &
T0_8BIT &
T0_SOURCE_INT &
T0_PS_1_256 );
pc=5;
ic=300;
sum_e=0;
while(1)
{
if((pad=='P')||(pad=='V')||(pad=='C')||(pad=='Q')||(pad==0))
break;
if(timer0_flag)
{
timer0_flag=0;
jlcd++;
pvc();
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 109
}
if(jlcd==10)
{
jlcd=0;
w=tocdothuc;
sprintf(&msg[0],"\1W dat: %lu(rpm)\nW thuc: %lu(rpm)",tocdodat,w);
write_str_lcd(&msg[0]);
}
}
}
//mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
//qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
if(pad=='Q')
{
OpenPWM1(63);//156.25kHz 256
PORTCbits.RC0 = 0;
PORTCbits.RC1 = 1;
OpenTimer0( TIMER_INT_ON &
T0_8BIT &
T0_SOURCE_INT &
T0_PS_1_256 );
pc=5;
ic=400;
sum_e=0;
while(1)
{
if((pad=='P')||(pad=='V')||(pad=='C')||(pad=='M')||(pad==0)) break;
Phụ lục – Code phần mềm
Phạm Văn Cường - Hồng Văn Quân. Lớp ĐKTĐ1-K49 110
if(timer0_flag)
{
timer0_flag=0;
jlcd++;
pvc();
}
if(jlcd==10)
{
jlcd=0;
w=tocdothuc;
sprintf(&msg[0],"\1W dat: %lu(rpm)\nW thuc:
%lu(rpm)",tocdodat,w);
write_str_lcd(&msg[0]);
}
}
}
//qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
//--------------------------------------------------------------------------------------------------
}
}
Các file đính kèm theo tài liệu này:
- Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC.pdf