Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC

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%.

pdf111 trang | Chia sẻ: lylyngoc | Lượt xem: 6614 | Lượt tải: 2download
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:

  • pdfThiết kế bộ điều khiển PID số trên nền vi điều khiển PIC.pdf