Tr−êng ®¹i häc b¸ch khoa hμ néi Khoa ®iÖn

Bé m«n ®iÒu khiÓn tù ®éng

ĐỒ ÁN TỐT NGHIỆP
Đề tài:Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC

Giáo viên hướng dẫn : PGS.TS Phan Xuân Minh Sinh viên thực hiện : Phạm Văn Cường Hoàng Văn Quân Lớp : ĐKTĐ1 Khoá : 49

Hà Nội 5 - 2009

Mục lục
Lời mở đầu .......................................................................................... 5 Lời cảm ơn........................................................................................... 6
Chương 1 : Họ vi điều khiển PIC và vi điều khiển PIC18F4520 ..........................7 1.1 Giới thiệu chung .......................................................................................... 7 1.2 . Vi điều khiển Pic18F4520 ......................................................................... 8 1.2.1. Tổ chức bộ nhớ (Memory Organization) ........................................... 13 1.2.2. 8 x 8 HARDWARE MULTIPLIER ................................................... 22 1.2.3. Ngắt (Interrupts) ................................................................................. 23 1.2.4. Cổng vào ra (I/O Port)........................................................................ 32 1.2.5. Bộ định thời (Timer) .......................................................................... 33 1.2.6. Bộ truyền nhận dữ liệu đồng bộ (EUSART-Enhanced Universal Synchronous Asynchronous Receiver Transmitter)..................................... 37 1.2.7. Module chuyển đổi tưong tự sang số 10 bit (A/D) ............................ 50 Chương 2 : Thiết kế bộ điều khiển PID số...........................................................57 2.1 Thiết kế mô hình phần cứng mạch điều khiển........................................... 57 2.1.1. Yêu cầu thiết kế .................................................................................. 57 2.1.2. Các khối chức năng trên kit điều khiển.............................................. 58
a) Khối vi điều khiển trung tâm....................................................................................58 b) Khối giao tiếp máy tính qua cổng nối tiếp ...............................................................59 c) Khối bàn phím ..........................................................................................................60 d) Khối hiển thị LCD 2x16(2 dòng, 16cột) ..................................................................61 e) Khối mạch động lực điều khiển................................................................................62 f) Khối nguồn 12V/5V..................................................................................................62 g) Các khối khác ...........................................................................................................63

2.2 Thiết kế phần mềm trên nền vi điều khiển PIC ......................................... 64 2.2.1. Yêu cầu phần mềm ............................................................................. 64 2.2.2. Giải thuật chương trình ...................................................................... 65
a) Loop điều khiển........................................................................................................65 b) Thuật toán PID số.....................................................................................................66

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 ................. 69 2.3 Kit điều khiển............................................................................................. 71 Chương 3 : Ứng dụng bộ điều khiển PID số điều khiển động cơ một chiều .......72 3.1 Đối tượng điều khiển ................................................................................. 72 3.1.1. Thông số kĩ thuật ................................................................................ 72 Phạm Văn Cường - Hoàng Văn Quân. Lớp ĐKTĐ1-K49
1

3.1.2. Nhận dạng mô hình động học của động cơ điện một chiều ............... 72 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. 72 3.1.4. Nhận dạng động cơ điên một chiều bằng Toolbox Identification cảu Matlab........................................................................................................... 74 3.1.5. Đánh giá chất lượng mô hình ............................................................. 76 3.2 Thiết kế luật điều khiển PID...................................................................... 77 3.2.1. Phương pháp Ziegler-Nichols1 .......................................................... 77 3.2.2. Phương pháp IMC .............................................................................. 77 3.2.3. Mô phỏng và đánh giá chất lượng bộ điều khiển ............................... 78 3.3 Thiết bị chấp hành(IC L298) ..................................................................... 78 3.4 Cảm biến (Encoder) ................................................................................... 81 3.5 Hệ thống điều khiển................................................................................... 84 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 .. 86 3.7 :Kết quả thực nghiệm................................................................................. 87 3.8 So sánh kết quả mô phỏng và thực tế ........................................................ 88

Kết luận ............................................................................................. 89 Tài liệu tham khảo ............................................................................. 91 Phụ lục Code phần mềm.................................................................... 92

Phạm Văn Cường - Hoàng Văn Quân. Lớp ĐKTĐ1-K49

2

...4Phương thức nhận dạng và đánh giá mô hình thu được ....................................................5 : Cấu tạo cổng COM......................................2...........................2 Sơ đồ thu thập dữ liệu nhận dạng .... 59 Hinh 2......................... 15 Hình 1....................................................... 72 Hình 3.................3: Tổ chức bộ nhớ chương trình ....................11 Lưu đồ hàm ngắt dùng tạo chu lì trích mẫu..................................................... 16 Hình 1.................................... 9 Hình 1................1 Sơ đồ khối kiến trúc vi điều khiển PIC18F4520 ....... 69 Hình 3...4 Khối giao tiếp máy tính Max232.....................................................................................6 Sai lệch mô hình nhận dạng...................................................................................................................................................................................................... 64 Hình 2.......................... 67 Hình 2...................................................................... 57 Hinh 2................................................................. 76 Hình 3............................. 15 Hình 1...................................................... 62 Hình 2.......................12 Sơ đồ bộ điều khiển PID số ...................................8 Sơ đồ cấu trúc bộ nhớ dữ liệu Pic18F4520 ............14...............................1 Động cơ sủ dụng trong đồ án...............................8 Khối thiết bị chấp hành............3Chọn đầu vào và mô hình nhận dạng của đối tượng ....................... 63 Sơ đồ mạch in hai lớp .......................................... 68 Hình 2.....2 Đặc tính thu thập dữ liệu nhận dạng....................MỤC LỤC HÌNH VẼ Hình 1...................... 62 Sơ đồ nguyên lý kit điều khiển................................ 58 Hinh 2............9 Sơ đồ khối nguồn.................... 23 Hình 2...................... 72 Hinh 3....................................... 17 Hình 1....................................................................................................................10 Pic 18 Interrup logic .....2 Sơ đồ chân vi điều khiển Pic18F4520 ......1 Mô hình khối mạch điều khiển................................Hoàng Văn Quân.. 76 Phạm Văn Cường . 61 Hình 2............................................................ 13 Hình 1...................................7 Khối hiển thị LCD .................. Giao diện giao tiếp PC.......5 Đặc tính quá độ đối tượng sau khi nhận dang ....... 75 Hình 3........................6 Modul bàn phím ....................6 Instruction Pipeline Flow ..... 59 Hình 2.....................................................................................10 Lưu đồ loop điều khiển....... 58 Hinh 2................... 10 Hình 1........ 66 Hình 2.....5: Clock/Instruction Cycle................................................................. 60 Bảng sơ lược chức năng LCD 2x16 ....................... Lớp ĐKTĐ1-K49 3 .............................. 75 Hình 3...........................................................................................................Sơ đồ khối vi điều khiển trung tâm ........ 62 Hinh 2....13 Chống bão hào tích phân ................... 73 Hình 3......................................................................................................................................... 65 Hình 2...................9 Sơ đồ cấu trúc thanh ghi của Pic18F4520 ..................................................... 16 Hình 1........................................................................................7 Instruction In Program Memory...........................................3 Mạch nạp cho vi điều khiển trung tâm .............

..19 Cấu trúc khối điều khiển động cơ....................14 : Phương thức hoạt động Encoder quang tương đối............9 Đặc tính mô phỏng ....................... 84 Hình 3............................. Lớp ĐKTĐ1-K49 4 ...... 85 Một số hình ảnh mạch điều khiển động cơ một chiều...................................................................................................16 : Sơ đồ xung của En coder quang tương đối(mô hình 2) ...................................... 80 Hình 3..................17 Sơ đồ hệ thốngđiều khiển động cơ ...........................................11: Các chế độ của L298 ....................21 Đặc tính với bộ đièu khiển PID ....22 Hệ thống khi có nhiễu..10 Sơ đồ chân L298........................... 79 Hình 3...........................................20 Đặc tính với bộ điều khiển PI................................. 87 Hình 3................................ 81 Hình 3.......... 83 Hình 3. 82 Hình 3............................ 78 Hình 3.................................. 88 Hình 3...... 86 Hình 3..........................................................7 Mô phỏng trên Simulink các phương pháp điều khiển ...................... 82 Hình 3.......................Hình 3.............15 : Mô hình 2 -En coder quang tương đối ....................18 Cấu trúc hệ thống điều khiển......................................................Hoàng Văn Quân.. 88 Phạm Văn Cường ........................................13 : Mô hình1 .............................................23 Đặc tính khi hệ thống có thay đỏi giá trị đặt ........................................................................................12 : Sơ đồ giải pháp .En coder quang tương đối ................... 78 Hình 3....... 84 Hình 3................................. 87 Hình 3....................................................................................................................... 81 Hình 3............

công nghiệp. Hà Nội. Thống kê cho thấy có tới hơn 90% các bộ điều khiển sử dụng trong thực tế là PID. Có thể thiết kế điều khiển cho đối tượng độngcơ điện một chiều theo nhiều phương pháp như :dùng PLC & biến tần. Do vậy chúng em rất mong được thầy cô và bạn bè đóng góp xây dựng để đồ án của chúng em được hoàn thiện hơn. Bài toán thiết kế và điều khiển động cơ một chiều là bài toán cơ bản và quen thuộc trong ngành điều khiển tự động. mức. Kĩ thuật điều khiển trong tiến trình hoàn thiện lý thuyết cũng tạo cho mình nhiều phát triển có ý nghĩa. Lớp ĐKTĐ1-K49 5 .Ngoài ra bộ điều khiển PID còn ứng dụng nhiều trong điều khiển thích nghi.Lời mở đầu Khoa học công nghệ hiện đại đã có những bước tiến nhanh và xa đi theo đó là những thành tựu ứng dụng trong mọi lĩnh vực dời sống. Trên cơ sở muốn tìm hiểu về lĩnh vực vi điều khiển chúng em chọn đề tài: Thiết kế bộ điều khiển PID số trên nền vi điều khiểnPIC. vi điều khiển… Mỗi phương pháp có ưu và nhược điểm khác nhau nhưng đều có mục đích ổn định và điều khiển được tốc độ động cơ. Rõ ràng nếu có thiết kế và chọn lựa các thông số hợp lý cho bộ điều khiển PID thì việc đạt được các chỉ tiêu chất lượng mong muốn là khả thi Bộ điều khiển PID cũng giúp người sử dụng dễ dàng tích hợp cũng như chọn các luật điều khiển như : tỉ lệ(P). ngày tháng năm 2009 Sinh viên Phạm Văn Cường Hoàng Văn Quân Lớp ĐKT1 .K49 Phạm Văn Cường . tỉ lệ tích phân(PI). Nhiều quá trình trong công nghiệp việc sử dụng bộ điều khiển PID là không thể thay thế như khống chế nhiệt độ.Hoàng Văn Quân. điện tử công suất. tốc độ…? Ngay cả những lý thuyết điều khiển hiện đại cũng không cho ta những hiệu quả cao như bộ điều khiển PID mang lại.bền vững vẫn mang lại hiệu quả cao trong các cơ cấu chỉnh định. Ngày nay vi điều khiển phát triển sâu rộng và ngày càng ứng dụng nhiều trong cài đặt thiết kế bộ điều khiển cho các đối tượng công nghiệp. tỉ lệ vi phân(PD)… sao cho phù hợp đối với các đối tượng điều khiển. Bây giờ khi nhắc tới điều khiển con người dưòng như hình dung đến sự chính xác. tốc độ xử lý và thuật toán thông minh đồng nghĩa là lượng chất xám cao hơn. Có thể nói trong lĩnh vực điều khiển và trong công nghiệp thì bộ điều khiển PID có ứng dụng kha rộng rãi. tích phân(I). Vì khả năng và thời gian có hạn nên không thể tránh khỏi những thiếu sót trong đồ án. một giả pháp đa năng chocác ứng dụng cả Analog cũng như Digital.

Lớp ĐKTĐ1-K49 6 . giúp chúng em định hướng. góp ý và cung cấp ý tưởng cũng như chỉ dẫn tài liệu và các tiến trình thực hiện đồ án . Chúng em xin chân thành cảm ơn Phạm Văn Cường . Cuối cùng chúng em xin chân thành gửi những lời cảm ơn sâu sắc đến cha mẹ và gia đình. bộ môn ĐKTĐ. chỉ bảo tận tình của PGS. sử dụng có ích cho xã hội. các thầy cô đã dạy dỗ và dìu dắt chúng em trong suốt 5 năm học vừa qua để có được những kiến thức chuyên môn cơ sở sau này chúng em có thể vào đời làm việc.Sự hướng dẫn của cô là một yếu tố quan trọng để chúng em có thể hoàn thành đồ án này .Lời cảm ơn Đầu tiên chúng em xin chân thành gửi lời cảm ơn tới nhà truờng. Để thực hiện thành công đồ án là sự hướng dẫn.TS Phan Xuân Minh.Hoàng Văn Quân. Người đã hướng dẫn tận tình . khoa điện. nuôi dưỡng chăm sóc chúng em tạo điều kiện tốt nhất cho chúng em học tập để có kết quả như ngày hôm nay. những người luôn sát cánh cùng chúng em.

Motola68HC. Là sự bổ sung hợp lý về kiến thức cũng như ứng dụng cho họ vi điều khiển 8051 Có sự hỗ trợ cao của nhà sản xuất về các công cụ lập trình. Ngoài các tính năng như các họ VĐK khác. Pic…và có lẽ 8051 là dòng mà chúng ta được làm quen nhiều nhất trong môi trường đại học nhưng tại sao chúng ta chọn dòng vi điều khiển Pic để thực hiện ứng dụng và phát triển không ngoài những nguyên nhân sau: Họ vi điều khiển Pic phát triển và sử dụng phổ biến ở nước ta => việc tìm mua và trao đổi kinh nghiệm là hết sức thuận lợi.1 Giới thiệu chung Ngày nay. ARM. Thực tế hiện nay là hầu hết các thiết bị điện hiện nay đều có sự góp mặt của vi điều khiển và vi xử lí.Bộ nhớ chương trình được tăng cường (16Kbytes for PIC18F2420/4420 devices and 32Kbytes for PIC18F2520/4520 devices). bộ nhớ EEFROM.Hoàng Văn Quân. bộ định thời. Phạm Văn Cường . Giá thành các dòng Pic là không quá mắc. Không những vậy các tính năng đa dạng của các đòng Pic không ngừng được phát triển. mạch nạp Pic từ đơn giản tới phức tạp. Lớp ĐKTĐ1-K49 7 . Các dòng Pic có đầy đủ tính năng để hoạt động độc lập. nó còn tích hợp nhiều tính năng mới rất tiện lợi cho người thiết kế và lập trình. bộ biến đổi ADC. Có nhiều bộ phận ngoại vi ngay trên chip. bao gồm: Cổng và/ra số. Dòng sản phẩm này có nhiều cải tiến đáng kể về tính năng so các dòng Pic trước đó như : . Pic18F4520 nằm trong dòng sản phẩm PIC18F2420/2520/4420/4520 của nhà sản xuất Microchip với đặc điểm 28/40/44 -Pin Enhanced Flash Microcontrollers with 10Bit A/D and nanoWatt Technology. những ứng dụng của vi điều khiển đã đi sâu vào đời sống sinh hoạt và sản xuất của con người. AVR. - - Đây là họ VĐK được chế tạo theo kiến trúc RISC (Reduced Intruction Set Computer) có cấu trúc khá phức tạp. trình biên dịch. Ứng dụng vi điều khiển trong thiết kế hệ thống làm giảm chi phí thiết kế và hạ giá thành sản phẩm đồng thời nâng cao tính ổn định của thiết bị và hệ thống.Vi điều khiển Pic Chương 1: Họ vi điều khiển PIC và vi điều khiển PIC18F4520 1. Trên thị trường hiện nay có nhiều họ vi điều khiển để lựa chọn như: 8051. bộ điều chế độ rộng xung (PWM)… Bộ nhớ chương trình và bộ nhớ dữ liệu được tích hợp ngay trên chip.

Lớp ĐKTĐ1-K49 8 .Vi điều khiển Pic I/O ports (3 bidirectional ports on 28-pin devices.Hoàng Văn Quân.Các bộ nhớ chương trình và dữ liệu cố định 32 Kbytes bộ nhớ flash có khả năng tự lập trình trong hệ thống có thể thực hiện được 100. . hầu hết các lệnh thực hiện trong bốn chu kì xung. 1. 5 bidirectional ports on 40/44-pin devices).000 lần ghi/xóa256 bytes SRAM . Tốc độ thực hiện lên tới 10 triệu lệnh trong 1s với tần số 40Mhz Có bộ nhân cứng .000 lần ghi/xóa 256 bytes EEPROM có thể thực hiện được 1.000. Sử dụng công nghệ nanoWatl Dòng sản phẩm này nói chung có nhiều sự tương đồng về tính năng nhưng có thể chia làm hai nhóm Pic18F2420/2520 với 28 chân và Pic 18F4420/4520 với 40 hoặc 44 chân ghép nối. Phần này chủ yếu chúng ta tìm hiểu Pic18F4520 nhưng những đặc điểm các Pic khác thuộc dòng này sẽ hoàn toàn tương tự với các kí hiệu tương ứng. Tăng cường modul CCP.2 .Các đặc điểm đặc biệt khác Power on Reset và dò Brown out khả trình Phạm Văn Cường . tiêu thụ năng lượng ít Kiến trúc RISC 75 lệnh mạnh. Trong đồ án chúng ta quan tâm chủ yếu Pic18F4520 loại PDIP sử dụng trong mạch thiết kế. Bộ đếm thời gian thực với bộ tạo dao động riêng biệt 2 kênh PWM 13 kênh ADC 10 bit Bộ truyền tin nối tiếp USART khả trình Watchdog Timer khả trình với bộ tạo dao động bên trong riêng biệt Bộ so sánh tương tự . Vi điều khiển Pic18F4520 Vi điều khiển Pic18F4520 có các đặc điểm cơ bản: Sử dụng công nghệ nanoWatl: Hiệu năng cao.Những ngoại vi tiêu biểu 4 bộ định thời/bộ đếm 8 bit với các chế độ tỉ lệ đặt trước và chế độ so sánh.

Hoàng Văn Quân.Vi điều khiển Pic Bộ tạo dao động RC được định cỡ bên trong Các nguồn ngắt bên trong và bên ngoài . 44-lead TQFP.I/O và các kiểu đóng gói 32 đường I/O khả trình Đóng gói 40-pin PDIP. và 44-pad MLF Hình 1. Lớp ĐKTĐ1-K49 9 .1 Sơ đồ khối kiến trúc vi điều khiển PIC18F4520 Phạm Văn Cường .

VPP dùng để thay đổi điện áp đầu vào.RE3 đầu vào số. AN3 là đầu vào tương tự Input3. . Lớp ĐKTĐ1-K49 10 . AN1 là đầu vào tương tự Input1.2 Sơ đồ chân vi điều khiển Pic18F4520 Sau đây là giới thiệu cấu tạo chân loại 40 chân (40 Pin PDIP): • Chân 1( MCLR /VPP/RE3) : . còn CVREF là đầu ra tương tự để so sánh điện áp chuẩn.đầu vào tương tự chuyển đổi A/D điện áp tham chiếu(mức cao). • Chân 5(RA3/AN3/VREF-/CVREF ): RA3 là cổng vào ra số.Vi điều khiển Pic Sơ đồ chân của các vi điều khiển Pic18F4420/4520 Hình 1.T0CKI dầu vào xung bên ngoài của Timer0.Hoàng Văn Quân. • Chân 3(RA1/AN1): RA1 là cổng vào ra số. SS chọn đầu vào phụ thuộc SPI. C1OUT là đầu ra bộ so sánh 1. AN0 là đầu vào tương tự Input0. • Chân 7(RA5/AN4/ SS /HLVDIN/C2OUT): trong đó RA5 là cổng vào ra só. Phạm Văn Cường . HLVDINđầu vào tương tự để dò điện áp. • Chân 4(RA2/AN2/VREF+): RA2 là cổng vào ra số. VREF+ đầu vào tương tự chuyển đổi A/D điện áp tham chiếu(mức thấp). Các chân thuộc cổng vào ra Port A • Chân 2(RA0/AN0):với RA0 là cổng vào ra số. AN4 là đầu vào tương tự Input 4.MCLR là đầu vào Master Clear (reset) hoạt động ở mức thấp dể reset toàn bộ thiết bị. AN2 là đầu vào tương tự Input2. VREF. . C2OUT đầu ra bộ so sánh 2. • Chân 6(RA4/T0CKI/C1OUT): RA4 là đầu vào ra số.

Hoàng Văn Quân.Vi điều khiển Pic • Chân 13(OSC1/CLKI/RA7): với OSC1là đầu vào bộ dao động thạch anh hoặc là đầu vào nguồn xung từ bên ngoài. PGM cho phép có thể lập trình ISCPTM ở điện áp thấp. • Chân 34(RB1/INT1/AN10): RB1 là đầu vào ra số. AN12 đầu vào tương tự Input 12. AN11 đầu tương tự Input 9. KBI2 thay đổi mở ngắt. CCP1(Capture1 input/Compare 1 output/PWM1 output. INT2 đầu vào ngắt ngoài Interrup2. SCL đầu vào ra đưa chuỗi xung vào ra cho I2CTM lựa chọn.) • Chân 37(RB4/KBI0/AN11):): RB4 là đầu vào ra số. • Chân 40(RB7/KBI3/PGD): RB7 đầu vào ra số.). CLK0 có tần số bằng ¼ tần số của OSC1 đọ rộng chu kì lệnh. Phạm Văn Cường . AN9 đầu tương tự Input 9. • Chân 39(RB6/KBI2/PGC): RB6 là đầu vào ra số. • Chân 17(RC2/CCP1/P1A): RC2 lầ đầu vào ra số.). T1OSO đầu ra bộ dao động Timer1. SCK đầu vào ra đư chuỗi xung vào ra cho SPI lựa chọn. P1A đầu ra tăng cường CCP1. • Chân 16(RC1/T1OSI/CCP2): RC1 đầu vào ra số. • Chân 38(RB5/KBI1/PGM): RB5 đầu vào ra số. T1OSI đầu vào bộ dao động Timer1. Port B có thể lập trình bằng phần mềm khi cho kéo đầu vào bên trong yếu lên trên toàn bộ đầu vào. KBI1 thay đổi mở ngắt. AN10 đầu tương tự Input 10. • Chân 35(RB2/INT2/AN8): RB2 là đầu vào ra số. Các chân cổng vào ra hai chièu Port B.CLKI là đầu vào CMOS cho nguồn xung bên ngoài và luôn được ghép nối với chân OSC1. FLT0 là đầu vào báo lỗi PWM được tăng cường CCP1. CCP2 ( Capture 2 input/Compare 2 output/PWM2 output. Còn RA7 là chân vào ra sử dụng chung . PGD chân dùng trong mạch chạy và xung lập trình ICSP. AN8 đầu tương tự Input 8. CCP2(Capture 2 input/Compare 2 output/PWM2 output. • Chân 33(RB0/INT0/FLT0/AN12): Với RB0 là cổng vào ra số. khi ta nối dây với các thiết bị tương tự thì đầu vào này dạng ST( Schmitt Trigger input ưith CMOS levels). INT0 là đầu vào ngắt ngoài Interrup 0. RA6 là đầu vào ra chung. Lớp ĐKTĐ1-K49 11 . • Chân 18(RC3/SCK/SCL): RC3 là đầu vào ra số. KBI3 thay đổi mở ngắt. INT1 đầu vào ngắt ngoài Interrup1. PGC chân dùng trong mạch chạy và xung lập trình ICSP. T13CKI đầu vào xung bên ngoài Timer1/Timer3. Các chân công Port C • Chân 15(RC0/T1OSO/T13CKI):RC0 đầu vào ra số. • Chân 14(OSC2/CLKO/RA6): OSC2 là đầu ra bộ dao động thạch anh được nối với thạch anh hoặc bộ công hưởng dể lựa chọn dạng bộ dao động thạch anh. KBI0 thay đổi mở ngắt. • Chân 36 (RB3/AN9/ccp2): RB3 là đầu vào ra số.

. PSP2 cổng dữ liệu song song phụ thuộc • Chân 22(RD3/PSP3): RD3 đầu vào ra số. Các chân cổng Port E • Chân 8(RE0/ RD /AN5): RE0 đầu vào ra số. Chi tiết hơn chúng ta có thể thấy qua sơ đồ khối của Pic18F4420/4520 trong tài liệu do microchip cung cấp sẽ có hoàn toàn đầy đủ thông tin. Loại 44 chân có thêm một số chân phụ khác khi cần thiết ta có thể dễ dàng tra trong DataSheet. • Chân 24(RC5/SDO): RC5 đầu vào ra số. PSP1cổng dữ liệu song song phụ thuộc • Chân 21(RD2/PSP2): RD2đầu vào ra số. AN7 đầu vào tương tự Input7. DT đầu vào ra dữ liệu đồng bộ EUSART.. P1D đầu ra được tăng cường CCP1. PSP0 cổng dữ liệu song song phụ thuộc.Đầu RE3 nằm ở chân 1 Các chân khác • Chân 12. CK dầu vào ra xung đồng bộ EUSART. • Chân 9(RE1/ WR /AN6): RE1 đầu vào ra số. RD đầu vào điều khiển đọc cho cổng PSP. Các chân cổng Port D( Port D có thể vào ra hai hướng hoặc cổng song song phụ thuộc(PSP) cho giao diên vi xử lý và khi đó các đầu vào phải là TTL.31(VSS): nối đất chuẩn cho I/O và logic. CS điều khiển chọn Chip cho cổng PSP. PSP3 cổng dữ liệu song song phụ thuộc • Chân 27(RD4/PSP4): RD4 đầu vào ra số. AN5 đầu vào tương tự Input5. • Chân 25(RC6/TX/CK): RC6 đầu vào ra số. PSP7 cổng dữ liệu song song phụ thuộc. • Chân 26(RC7/RX/DT): RC7 đầu vào ra số. • Chân 11. TX đầu ra chuyển đổi dị bộ EUSARRT. • Chân 10(RE2/ CS /AN7): RE2 đầu vào ra số. đặc điểm cấu tạo. PSP6 cổng dữ liệu song song phụ thuộc. P1B đầu ra được tăng cường CCP1. • Chân 30(RD7/PSP7/P1D): RD7 đầu vào ra số.Hoàng Văn Quân. WR đầu vào điều khiển viết dữ liệu cổng PSP. RX đầu vào nhận dị bộ EUSART. AN6 đầu vào tương tự Input6.Vi điều khiển Pic • Chân 23(RC4/SDI/SDA): RC4 là đầu vào ra số. Lớp ĐKTĐ1-K49 12 . SDA đầu vào ra dữ liệu cho I2C. SDO đầu ra dữ liệu SPI. Phạm Văn Cường . SDI đầu vào dữ liệu API. PSP5 cổng dữ liệu song song phụ thuộc. • Chân 19(RD0/PSP0): RD0 đầu vào ra số. • Chân 20(RD1/PSP1): RD1 đầu vào ra số. P1C đầu ra được tăng cường CCP1. • Chân 29(RD6/PSP6/P1C): RD6 đầu vào ra số.32(VDD): cungcấp nguồn dương cho I/O và logic. PSP4 cổng dữ liệu song song phụ thuộc • Chân 28(RD5/PSP5/P1B): RD5 đầu vào ra số.

Với Pic18F4520 có 32Kbytes bộ nhớ Flash có thể lưu trữ lên tới 16.Vi điều khiển Pic 1. Tổ chức bộ nhớ (Memory Organization) Dòng Pic18Fxxxx được tổ chức bộ nhớ thành ba loại: • Bộ nhớ chương trình (Program Memory). dòng Pic này có hai vector ngắt: Reset vector có địa chỉ 0000h và Interrupt vector ở địa chỉ 0008h và 0018h.384 câu lệnh đơn. Khi sử dung cần lưu ý tới cấu trúc lệnh có làm thay đổi giá trị PC hay không. • Bộ đếm chương trình – PC (Program Counter) PC có độ rộng 21 bits phân chia trên 3 thanh ghi 8 bits: thanh ghi PCL. thanh ghi PCH.1. • Bộ nhớ dữ liệu EEPROM (Data EEPROM ). Tổ chức các bộ nhớ chương trình theo kiến trúc Harvard được sắp xếp theo sơ đồ: Hình 1.2.3: Tổ chức bộ nhớ chương trình Tổ chức bộ nhớ chương trình(Program Memory Organization) Dòng vi điều khiển Pic18xxxx là thiết bị với 21bit bộ đếm chương trinh PC (Program counter) có thể quản lý 2Mbyte bộ nhớ chương trình. thanh ghi PCU.Hoàng Văn Quân. Dữ liệu bytes địa chỉ của PC được lưu trong bộ nhớ chương trình. Lớp ĐKTĐ1-K49 13 . • Bộ nớ dữ liệu RAM (Data RAM). Phạm Văn Cường .

Lớp ĐKTĐ1-K49 14 . Ví dụ một chương trình: Phạm Văn Cường .Stack Full and Underflow Resets Khi chúng ta lập trình cần thiết chính xác khi gọi chương trình qua lệnh Call và Rcall nên khi tác động cần quan tâm sự thay đổi các ngăn xếp cũng như quản lý con trỏ (Pointer). Một quan tâm khác nữa đó là Stack Pointer Register (STKPTR) . WREG.4: Sơ đồ địa chỉ ngăn xếp Trong vùng ngăn xếp này cần quan tâm tới:: . Sơ đồ ngăn xếp dạng: Hình 1.Top-of-Stack Access .Vi điều khiển Pic • Khôi phục dịa chỉ ngăn xếp (RETURN ADDRESS STACK) Ở đây ta có thể cho phép lưu trữ gọi 31 chương trình và các ngắt xảy ra.Return Stack Pointer (STKPTR) .Hoàng Văn Quân.thanh ghi con trỏ ngăn xếp: Bit 7 (STKFUL): bit cờ báo ngăn xếp đầy − Giá tri 1 có nghĩa là ngăn xếp đã đầy hoặc tràn − Giá trị 0 thì ngăn xếp vẫn chưa bị đầy hoặc tràn Bit 6 (STKUNF): bit cờ báo tràn dưới − Giá trị 1: xảy ra tràn dưới − Giá trị 0: không có tràn dưới Bit 5 (Unimplementad): mang giá trị “0” Bit 4-0 (SP<4:0>:Các bit xác định con trỏ ngăn xếp Chúng ta có thể xóa bit 6 và bit 7 nhờ phần mềm hoạc bởi một POR • FAST REGISTER STACK Nhóm thanh ghi này gồm có các thanh ghi: Status. BSR giúp việc khôi phục nhanh lựu chọn cho các ngắt. Ta có thể dùng các lệnh Push và Pop để điều khiển con trỏ. Trong thực thi ngăn xếp cấu trúc lệnh CALL và RCALL là được quan tâm.

6 Instruction Pipeline Flow Phạm Văn Cường . Lớp ĐKTĐ1-K49 15 .Q3.Vi điều khiển Pic Việc quản lý tốt bộ nhớ chương trình sẽ giúp ta thực hiện chương trình tốt hơn cũng như tối ưu câu lệnh.Hoàng Văn Quân. • Chu kì lệnh Pic 18Fxxx Bất kì một vi điều khiển Pic nào khi nhận một xung từ bên trong hay bên ngoài đều xử lý theo một chu kì gồm 4 bước.5: Clock/Instruction Cycle Hình 1. Hình 1.Q4.Q2. Họ 18Fxxxx cũng vậy chu kì lệnh được xử lý song song (Pipelining) qua 4 bước Q1.

Bộ nhớ dữ liệu bao gồm : thanh ghi chức năng đặc biệt (SFRs). Hình 1. Lớp ĐKTĐ1-K49 16 . thanh ghi mục đích chung (GPRs).7 Instruction In Program Memory Tổ chức dữ liệu bộ nhớ(Data Memory Organization) Pic18Fxxxx là họ Statis Ram mỗi thanh ghi bộ nhớ dữ liệu có 12 bit địa chỉ. Toàn bộ bộ nhớ dữ liệu có thể cho phép truy nhập có hướng. trong khi thanh ghi GPR dùng để lưu trữ hoặc làm vùng nhớ tạm thời đang hoạt động của các ứng dụng. Không gian bộ nhớ chia làm 16 bank gồm 256 byte mỗi bank Pic18F4520 như sơ đồ phía sau. cho phép truy nhập tới 4096 bytes dữ liệu bộ nhớ.8 Sơ đồ cấu trúc bộ nhớ dữ liệu Pic18F4520 Theo cấu trúc lệnh và kiến trúc dòng Pic18Fxxxx cho phép các bank hoạt động đồng thời. đặc điểm chung của các thanh ghi là cho phép xử lý trong một chu kì Phạm Văn Cường . Thanh ghi SFR dùng để điều khiển trạng thái và chức năng thiết bị ngoại vi. vô hướng hay địa chỉ có chỉ số.Hoàng Văn Quân.Vi điều khiển Pic Hình 1.

Pic 18Fxxxx cung cấp một AccesBank gồm 256 byte bộ nhớ cho phép truy cập nhanh tới SFRs và phần Bank0 của GPR nếu không sử dụng BSR.9 Sơ đồ cấu trúc thanh ghi của Pic18F4520 Thanh ghi Status (Status Register) Bit 7-5 (Unimplemented): mang giá trị “0” Bit 4 (N): bit xác định dấu(Negative bit) dược sử dụng cho số có dấu(số bù 2).Vi điều khiển Pic đơn. Sử dụng cho các lệnh ADDWF.Hoàng Văn Quân. SUBLW và SUBWF Phạm Văn Cường . − Giá trụ 1: xảy ra việc thao tác 4 bit thấp. nó được xác dịnh khi kết quả mang dấu âm(ALU MSB=1) − Giá trị 1: kết quả là âm − Giá trị 0: kết quả là dương Bit 3 (OV): bít báo tràn(overflow bit) được sử dụng cho số có dấu (số bù 2). Lớp ĐKTĐ1-K49 17 . − Giá trụ 1: xảy ra tràn − Giá trị 0 : không xáy ra tràn Bit 2 (Z): bít không (Zero bit) − Giá trụ 1: kết quả các phép toán số học và logic là bằng “0” − Giá trị 0 : kết quả các phép toán khác “0” Bit 1 (DC): Digit Carry/ borrow bit. ADDLW. Chi tiết các bank thanh ghi và chức năng ta có thể theo dõi kĩ hơn trong dataSheet Sau đây là một số cấu trúc các thanh ghi điển hình: Hình 1. nó xác định báo tràn cho độ dài 7 bit cái là nguyên nhân thayđổi trạng thái và dấu bit 7.

cụ thể ta có thể theo đõi như hình vẽ Phạm Văn Cường . − Giá trị 0 : không xảy ra việc thao tác với bit quan trọng. Với chế độ này chủ yếu thay đổi cấu trúc kiểu địa chỉ có hướng và vô hướng còn hai chế độ địa chỉ bàng chữ và có sẵn là không thay đổi. − Giá trụ 1: xảy ra việc thao tác bit quan trọng.Vi điều khiển Pic − Giá trị 0 : không xảy ra việc thao tác 4 bit thấp. Bit 1 (DC): Carry/ borrow bit. Các kiểu địa chỉ dữ liệu(Data Addressing Modes) Có bốn kiểu địư chỉ như sau: • Địa chỉ có sẵn (Inherent addressing) • Địa chỉ bằng chữ (Literal addressing) • Địa chỉ có hướng (Direct addressing) • Địa chỉ vô hướng (Indirect addressing) Các chế độ này có chế độ địa chỉ theo hướng khi sử dụng có liên hệ thanh ghi FSR SUBLW và SUBWF • • Bộ nhớ dữ liệu và cấu trúc lệnh được mở rộng(Data Memory and the Extended Instruction Set) Pic 18 có khả năng cho ta mở rộng cấu trúc lệnh nhờ Access Bank và cho ta gấp dôi lệnh khi lựa chon địa chỉ không gian bộ nhớ. Sử dụng cho các lệnh ADDWF.Hoàng Văn Quân. Lớp ĐKTĐ1-K49 18 . ADDLW. Nó có thể mang lại nhiều ý nghĩa về kích thước bộ nhớ.

xoá một khối 64 byte. • Table Reads and Table Writes Theo thứ tự đọc và viết dữ liệu cho phép vi xử lý di chuyển các byte giữa không gian bộ nhớ chương trình và dữ liệu trong RAM thông qua: Table Reads and Table Writes. Khi ta xoá hoặc viết vào bộ nhớ chương trình sẽ ngừng chỉ dẫn cho khi hoàn thành hoạt động. Tại một thời điểm chúng ta có thể thực hiện đọc một byte. Lớp ĐKTĐ1-K49 19 . Sau đây chúng ta sẽ tìm hiểu một số thuộc tính cơ bản khi thao tác bộ nhớ Flash. Hoạt động xoá một khối lớn không có khả năng từ mã người sử dụng.: Bảng viết hoạt động lưu trữ dữ liệu từ bộ nhớ dữ liệu htông qua đó giữ trong bộ nhớ chương trình: Phạm Văn Cường .Hoàng Văn Quân. Viết một khối 32 byte.Và không có sự truy nhập trong suốt quá trình viết hoặc xoá dữ liệu. Nhưng do bộ nhớ chương trình có độ rông 16bit còn bộ nhớ Ram chỉ là 8 bit nên để di chuyển dữ liệu giữa chúng cần thanh ghi 8bit (TABLAT): Bảng đọc hoạt động lấy ra dữ liệu từ bộ nhớ chương trình đưa chúng tới khoảng nhớ của RAM.Vi điều khiển Pic Bộ nhớ chương trình Flash (Flash Program Memory) Đặc điểm bộ nhớ Flash là có khả năng đọc viết và xoá trong thời gian hoạt động dựa vào khoảng điện áp VDD một cách dễ dàng. Sẽ có một bộ đếm thời gian khi có hoạt động xoá hoặc viết.

− Giá trị 0: Cổng vào cho bộ nhớ EEPROM hoặc bộ nhớ Flash . Ta có thể xác định hoặc điều khiển các bit 0 và bit 1 nhờ phần mềm. Bit 5 (Unimplemented): mang giá trị “0” Bit 4 (FREE): bit cho phép xóa bộ nhớ Flash theo hàng: − Giá trị 1: Xoá bộ nhớ chương trình theo địa chỉ hàng bởi TBLPTR trên cơ sỏ lệnh WR kế tiếp.Vi điều khiển Pic • Control Registers Có bốn thanh ghi điều khiển: • EECON1 register • EECON2 register • TABLAT (TABLE LATCH ) register • TBLPTR(TABLE POINTER) registers Ta đưa ra thanh ghi EECON1 ví dụ: Bit 7 (EEPGD): bit lựa chọn bộ nhớ Flash và bộ nhớ dữ liệu EEPROM − Giá trị 1:Cổng vào cho bộ nhớ Flash. − Giá trị 1: Một hoạt động viết kết thúc sớm. Lớp ĐKTĐ1-K49 20 . − Giá trị 0: Chu kỳ viết trên bộ nhớ EEPROM hoàn tất.Hoàng Văn Quân. − Giá trị 1: Cho phép viết theo chu kỳ trên bộ nhớ Flash và bộ nhớ dữ liệu EEPROM. − Giá trị 0: Cổng vào cho bộ nhớ EEPROM. Bit 1 (WR): bit điều khiển hoạt động viết. Bit 0 (RD): Bit điều khiển hoạt động đọc. Phạm Văn Cường . − Giá trị 0: Chỉ thực hiện hoạt động viết. − Giá trị 0: Hoạt động viết được hoàn tất. − Giá trị 0: Chưa bắt đầu hoạt động đọc dữ liệu. Bit 2 (WREN): bít cho phép hoạt động viết trên bộ nhớ Flash và bộ nhớ dữ liệu EEPROM. bộ nhớ dữ liệu EEPROM hoặc thanh ghi cấu hình (Configuration register): − Giá trị 1:Cổng vào cho thanh ghi cấu hình. Bit 3 (WRERR): bit cờ để báo lỗi trren bộ nhớ Flash và bộ nhớ dữ liệu EEPROM. − Giá trị 1: Ngăn cản viết theo chu kỳ trên bộ nhớ Flash và bộ nhớ dữ liệu EEPROM. − Giá trị 1: Bắt đầu chu kỳ xóa/viết dữ liệu trên bộ nhớ dữ liệu EEPROM hoặc bộ nhớ chương trình. Bit 6 (CFGS): bit lựa chọn bộ nhớ Flash . − Giá trị 1: Bắt đầu hoạt động đọc dữ liệu EEPROM.

Hoạt đông này được hỗ trợ từ thanh ghi EECON1. Lớp ĐKTĐ1-K49 21 . Chúng ta có thể xoá khối nhỏ nhất 32 từ tới 64 byte. có khả nưng cho ta xoá khối lớn nhưng thông qua cổng điều khiển.Hoàng Văn Quân. khả năng viết có thể từ 16 từ tới 32 byte và thông qua bảng viết với hỗ trợ khoảng 32 thanh ghi cho lập trình.Vi điều khiển Pic • Reading the Flash Program Memory Khi đọc dữ liệu chúng ta sử dụng cấu trúc lệnh TBLRD để lấy dữ liệu từ bộ nhớ tới bộ nhớ RAM. • Writing to Flash Program Memory Ta có thể thực hiện viết dữ liệu từ bên trong để tải dữ liệu cần thiết tới bộ nhớ. Hoạt động theo hình sau: • Erasing Flash Program Memory Việc thực hiện xoá dữ liệu có thể thông qua người lập trình hoặc thông qua điều khiển ISCP. • Flash Program Operation During Code Protection Phạm Văn Cường .

cấu trúc thanh ghi EECON1 chúng ta có phần bộ nhớ Flash. • EECON1 and EECON2 Registers Cả hai thanh ghi này dùng để điều khiển truy nhập dữ liệu EEPROM. Bộ nhớ EEPROM có khả năng đọc và viết trong quá trình hoạt đông thông qua khoảng điên áp VDD. Lớp ĐKTĐ1-K49 22 . xoá bit điều khiển EEPGD Thuộc thanh gi EECON1<7>.Vi điều khiển Pic Bộ nhớ dữ liệu EEPROM (Data EEPROM Memory) Dữ liệu EEPROM là một mảng bộ nhớ bất biến được phân chia từ bộ nhớ RAM và bộ nhớ chương trình. • Operation During Code-Protect • Protection Against Spurious Write • Using the Data EEPROM 1. Nhưng để đọc dược dữ liệu người sử dụng phải viết dữ liệu lên thanh ghi EEADR. Một byte được viết ngay lập tức xoá tai vị trí đó và viết dữ liệu mới. Năm thanh ghi SFRs được sử dụng để đọc và viết dữ liệu bộ nhớ EEPROM gồm: EECON1. Bộ nhân có hình thức nhân không đấu và cho kết quả 16 bit lưu trữ trong thanh ghi kết quả PRODH:PRODL. Hoạt động bộ nhân không ảnh hưởng gì tới các cờ của thanh ghi trạng thái STATUS. EEDATA. thanh ghi này sẽ giữ giá trị cần đọc tới khi nó được viết bới người sử dụng.. hoạt động thanh ghi này hoàn toàn tương tự như các thanh gi điều khiển truy nhập bộ nhớ chương trình nhưng ở đây là để điều khiển truy nhập dữ liệu EEPROM. dược dùng để lưu trữ lâu dài dữ liệu chương trình. EECON2.Hoàng Văn Quân. sau đó viết dữ liệu lên thanh ghi EEDATA. 8 x 8 HARDWARE MULTIPLIER Tất cả các thiết bị Pic 18Fxxxx đều có bộ nhân phần cứng giống như một phần ALU. Chúng có cấu trúc tương tự nhau. Nó coi là ánh xạ có hướng tới không gian bộ nhớ chương trình nhưng lại là địa chỉ vô hướng thong qua thanh ghi SFRs.2. • Thanh ghi EEADR (EEADR Register) Chức năng thanh ghi này dùng dể đưa địa chỉ dữ liệu trong hoạt động đọc/viết. • Writing to the Data EEPROM Memory Quá trình viết dữ liệu vào bộ nhớ EEPROM trước tiên là nạp địa chỉ vào thanh ghi EEADR. Hoạt động bộ nhân cho phép trong một chu kì lệnh góp phần nâng cao tốc độ tính toán và giảm bớt kích thước thuật toán giúp Pic18 sử dụng nhiều ứng dụng hơn trong phần cứng và phần mềm. • Kiểm tra lại quá trình viết dữ liệu (Write Verify) Hoạt đông này phụ thuộc vào từng ứng dụng và nó đảm bảo ta có bài lập trình tốt. EEADR. Khi có giao diện tới khối dữ liệu bộ nhớ thì EEDATA nhiệm vụ giữ dữ liệu 8bit để đọc viết còn thanh ghi EEADR là để chốt địa chỉ EEPROM cho phép truy nhập.2. • Reading the Data EEPROM Memory Quá trình đọc dữ liệu nhờ thanh ghi EEDATA. quá trình này được điều khiển bới bộ đếm thời gian on-Chip. Thanh ghi này độ rộng 8 bit có khả năng quản lý bộnhớ rộng 256byte(00h-FFh). Phạm Văn Cường . sau dó set bit điều khiển EECON<0>.

Những ngắt ưu tiên cao thực hiện ngắt còn các ngắt ưu tiên thấp phải được gọi trong chương trình.Vi điều khiển Pic 1. • Priority bit : Để chọn mức ưu tiên cho ngắt Ngoài ra ở các thanh ghi chức năng cụ thể phục vụ cho các ngắt thì có các bit riêng với các chức năng giúp người lập trình có thể quản lý và sử dụng các ngắt hiệu quả. Lớp ĐKTĐ1-K49 23 .Hoàng Văn Quân. ngắt ưu tiên thấp ở địa chỉ 0018h. PIR2 • PIE1. Sơ đồ trạng thái Logic các ngắt có thể mô tả : Hình 1. PIE2 • IPR1.2.10 Pic 18 Interrup logic Phạm Văn Cường . Ngắt ưu tiên cao ở địa chỉ 0008h. Có tất cả mười thanh ghi sử dụng dể điều khiển hoạt dộng ngắt gồm: • RCON • INTCON • INTCON2 • INTCON3 • PIR1.3. • Enable bit : Cho phép thực hiện ngắt tại địa chỉ Flag bit trỏ tới. • Flag bit : để xác định sự kiện ngắt xảy ra. Ngắt (Interrupts) Dòng Pic18Fxxxx này cung cấp cho người sử dụng nhiều nguồn ngắt và một đăc trưng ưu tiên ngắt là hầu hết các ngắt đều có cả mức ưu tiên cao và thấp. IPR2 Nói chung các nguồn ngắt có 3 bit dể điều khiển hoạt động ngắt.

Hoàng Văn Quân. bit 2 (TMR0IF): bit cờ ngắt báo trànTMR0 − Giá trị 1: thanh ghi TMR0 xảy ra tràn (có thể xoá bằng phần mềm). INTCON 1 Registers bit 7 (GIE/GIEH): bit cho phép ngắt toàn cục.Vi điều khiển Pic Bây giờ chúng ta sẽ tìm hiểu cấu trúc mọt số thanh ghi điển hình sử dụng phục vụ hoạt động ngắt: • INTCON Registers Thanh ghi này cho phép dọc ghi các ngắt và cho phép ưu tiên ngắt có cờ Flag bit. • Khi IPEN = 0: − Giá trị 1: Cho phép toàn bộ hoạt động ngắt. Lớp ĐKTĐ1-K49 24 . − Giá trị 0: Không cho phép ngắt báo tràn TMR0. − Giá trị 0: Không thực hiện toàn bộ hoạt động ngắt từ ngoại vi với mức ưu tiên thấp. bit 4 (INT0IE): bit cho phép ngắt ngoài INT0 − Giá trị 1: Cho phép ngắt ngoài INT0 . − Giá trị 0: Không thực hiện toàn bộ hoạt động ngắt. − Giá trị 0: Không xảy ra tràn thanh ghi TMR0. bit 5 (TMR0IE): bit cho phép ngắt báo tràn TMR0 − Giá trị 1: Cho phép ngắt báo tràn TMR0. bit 6 (PEIE/GIEL): bit cho phép các ngắt từ ngoại vi thực hiện. • Khi IPEN = 1: − Giá trị 1: Cho phép toàn bộ hoạt động ngắt từ ngoại vi với mức ưu tiên thấp. • Khi IPEN = 0: − Giá trị 1: Cho phép toàn bộ hoạt động ngắt từ ngoại vi. − Giá trị 0: Không thực hiện toàn bộ hoạt động ngắt từ ngoại vi. − Giá trị 0: Không cho phép ngắt thay đổi RB Port . − Giá trị 0: Không thực hiện toàn bộ hoạt động ngắt từ ngoại vi. bit 1 (INT0IF): bit cờ báo ngắt ngoài INT0 Phạm Văn Cường . • Khi IPEN = 1: − Giá trị 1: Cho phép toàn bộ hoạt động ngắt với mức ưu tiên cao. − Giá trị 0: Không cho phép ngắt ngoài INT0 bit 3 (RBIE): bit cho phép thay đổi RB Port − Giá trị 1: Cho phép ngắt thay đổi RB Port .

− Giá trị 1: tăng biên độ ngắt. bit 1 (Unimplemented): mang giá trị “0” bit 0 (RBIP): bit ưu tiên ngắt thay đổi RB Port − Giá trị 1: mức ưu tiên cao − Giá trị 0: mức ưu tiên thấp.Vi điều khiển Pic − Giá trị 1: xảy ra ngắt ngoài INT0 (có thể xoá bằng phần mềm). INTCON 2 Registers bit 7 ( RBPU ): bit cho phép kéo lên cổng PORT B. − Giá trị 1: toàn bộ PORT B không được kéo lên. − Giá trị 1: tăng biên độ ngắt. bit 6 (INTEDG0): bit lựa chọn biên ngắt ngoài số 0. − Giá trị 0: Không có thay đổ trạng thái các chân RB<7:4>. − Giá trị 0: Không xảy ra ngắt ngoài INT0. bit 0 (RBIF): bit cờ báo thay đổi RB Port − Giá trị 1: có thay đổi trạng thái của chân mang giá trị nhỏ nhất của RB<7:4>(có thể xoá bằng phần mềm).Hoàng Văn Quân.. − Giá trị 0: giảm biên độ ngắt bit 4 (INTEDG2): bit lựa chọn biên ngắt ngoài số 2. Lớp ĐKTĐ1-K49 25 . − Giá trị 0: giảm biên độ ngắt bit 3 (Unimplemented): mang giá trị “0” bit 2 (TMR0IP): bit ưu tiên ngắt báo tràn TMR0 − Giá trị 1: mức ưu tiên cao − Giá trị 0: mức ưu tiên thấp. − Giá trị 0: Cho phép toàn bộ PORT B được kéo lên bơỉi một giá trị cổng chốt riêng lẻ. − Giá trị 1: tăng biên độ ngắt. INTCON 3 Registers Phạm Văn Cường . − Giá trị 0: giảm biên độ ngắt bit 5 (INTEDG1): bit lựa chọn biên ngắt ngoài số 1.

Hoàng Văn Quân. − Giá trị 1: mức ưu tiên cao − Giá trị 0: mức ưu tiên thấp. − Giá trị 1: Cho phép ngắt ngoài INT2 thực hiện. PIR1 Registers bit 7 (PSPIF): bit cờ thực hiện ngắt khi đọc/viết cổng song song phụ thuộc (Parallel Slave Port) − Giá trị 1: hoạt động đọc hoặc viết có thể dưa tới(có thể xoá bằng phần mềm) − Giá trị 0: Không có hoạt dộng đọc viết. − Giá trị 0: Không xảy ra ngắt ngoài INT1. Phạm Văn Cường . − Giá trị 1: Cho phép ngắt ngoài INT1 thực hiện. − Giá trị 0: Không cho phép ngắt ngoài INT2 thực hiện. − Giá trị 0: Không cho phép ngắt ngoài INT1 thực hiện. Lớp ĐKTĐ1-K49 26 . bit 5 (Unimplemented): mang giá trị “0” bit 4 (INT2IE): bit cho phép ngắt ngoài INT 2. bit 2 (Unimplemented): mang giá trị “0” bit 1 (INT2IF): bit cờ báo ngắt ngoài INT2 − Giá trị 1: xảy ra ngắt ngoài INT2 (có thể xoá bằng phần mềm).Vi điều khiển Pic bit 7 (INT2IP): bit ưu tiên ngắt ngoài INT2. − Giá trị 1: mức ưu tiên cao − Giá trị 0: mức ưu tiên thấp. bit 3 (INT1IE): bit cho phép ngắt ngoài INT 1. bit 6 (ADIF): A/D Converter Interrupt Flag bit − Giá trị 1: Một hoạt động chuyển đổi A/D hoàn tất (có thể xoá bởi phần mềm). − Giá trị 0: Không xảy ra ngắt ngoài INT2. bit 0 (INT1IF): bit cờ báo ngắt ngoài INT1 − Giá trị 1: xảy ra ngắt ngoài INT1 (có thể xoá bằng phần mềm). • PIR Registers Các thanh ghi này xác định cờ ngắt cho thiết bị ngoại vi. Cùng lúc có hai thanh ghi phục vụ cho hai thiết bị ngoại vi là PIR1 và PIR2. bit 5 (RCIF): bit cờ báo ngắt nhận EUSART . − Giá trị 0 : Hoạt động chuyển đổi A/D chưa hoàn tất. bit 6 (INT1IP): bit ưu tiên ngắt ngoài INT1.

xung đầu vào tác động thay đổi tới INTOSC (phải được xóa bởi phần mềm). PIR 2 Register bit 7 (OSCFIF): bit cờ báo ngắt khi có lỗi bộ dao động Oscillator − Giá trị 1:thiết bị bộ dao động lỗi. Lớp ĐKTĐ1-K49 27 .Vi điều khiển Pic − Giá trị 1:EUSART nhận từ bộ đệm và RCREG là đầy(được xoá khi RCREG được đọc) − Giá trị 0: EUSART nhận từ bộ đệm là rỗng. bit 6 (CMIF): Bit cờ báo ngắt bộ so sánh. − Giá trị 0:Xung thiết bị hoạt động. bit 1 (TMR2IF):bit cờ báo ngắt liên kếtTMR2 tới PR2 − Giá trị 1:Xảy ra liên kết TMR2 tới PR2 (phải được xoá bởi phần mềm) − Giá trị 0:Không xảy ra liên kết TMR2 tới PR2. • Lựa chọn kiểu Compare : − Giá trị 1: thanh ghi TMR1 theo kiểu compare xảy ra (phải xoá bởi phần mềm) − Giá trị 0: Không xảy ra kiểu compare trên với thanh ghi TMR1 . bit 3 ( SSPIF): bit cờ báo ngắt cổng Master Synchronous Serial Port − Giá trị 1:Hoạt động truyền/nhận hoàn tất (có thể xóa bởi phần mềm) − Giá trị 0:đang đợi truyền nhận. − Giá trị 0: Không có thay đổi đầu vào bộ so sánh. − Giá trị 1: Đầu vào bộ so sánh là thay đổi (phải xoá bởi phần mềm). bit 5 (Unimplemented): mang giá trị ‘0’ Phạm Văn Cường . bit 0 (TMR1IF): bit cờ báo ngắt trànTMR1 − Giá trị 1: thanh ghi TMR1 đã tràn (phải được xoá bởi phần mềm) − Giá trị 0: Không có tràn trên thanh ghiTMR1. • Lựa chọn kiểu PWM: không sử dụng kiểu lựa chon này. bit 4 (TXIF): bit cờ báo ngắt việc truyền từ EUSART − Giá trị 1:EUSART truyền tới bộ đệm và TXREG là đầy(được xoá khi TXREG được viết) − Giá trị 0: EUSART nhận từ bộ đệm là rỗng. bit 2 (CCP1IF): bit cờ báo ngắt CCP1 • Lựa chọn kiểu Capture : − Giá trị 1: thanh ghi TMR1 theo kiểu capture xảy ra (phải xoá bởi phần mềm) − Giá trị 0: Không xảy ra kiểu capture trên với thanh ghi TMR1 .Hoàng Văn Quân.

PIE1 Registers bit 7 (PSPIE): bit cho phép ngắt khi đọc/viết qua cổng song song phụ thuộc − Giá trị 1:cho phép ngắt khi đọc/viết qua cổng sông song phụ thuộc − Giá trị 0:không cho phép ngắt khi đọc/viết qua cổng sông song phụ thuộc bit 6 (ADIE): Bit cho phép ngắt khi có chuyển đổi A/D − Giá trị 1: cho phép ngắt khi có chuyển đổi A/D − Giá trị 0: Không cho phép ngắt khi có chuyển đổi A/D bit 5 (RCIE): Bit cho phép ngắt khi ÊUSART nhận − Giá trị 1: cho phép ngắt khi EUSART nhận − Giá trị 0: Không cho phép ngắt khi EUSART nhận bit 4 (TXIE):Bit cho phép ngắt khi EUSART truyền Phạm Văn Cường . bit 3 (BCLIF): bit cờ báo ngắt có xung đột Bus − Giá trị 1: xảy ra xung đột trên Bus (phải xoá bởi phần mềm) − Giá trị 0: Không xảy ra xung đột Bus. • PIE Registers Giống như các thanh ghi PIR nhưng thanh ghi PIE dùng cho phép ngắt ở thiết bị ngoại vi và cũng gồm hai thanh ghi PIE1 và PIE2. • Lựa chọn kiểu Compare : − Giá trị 1: thanh ghi TMR1 theo kiểu compare xảy ra (phải xoá bởi phần mềm) − Giá trị 0: Không xảy ra kiểu compare trên với thanh ghi TMR1 . bit 2 (HLVDIF): Bit cờ báo ngắt có dò điện áp (High/Low-Voltage) − Giá trị 1: điều kiện xảy ra điện áp mức cao/thấp (hướng xavs địng bởi VDIRMAG bit. bit 1 (TMR3IF): bit cờ báo tràn TMR3 − Giá trị 1: Có tràn trên thanh ghi TMR3 (phải xóa bởi phần mềm) − Giá trị 0: Không có tràn thanh ghi TMR3.Hoàng Văn Quân. HLVDCON<7>) − Giá trị 0: Không xảy ra với mức điện áp cao/thấp. bit 0 (CCP2IF): bit cờ báo ngắt trên CCP2 • Lựa chọn kiểu Capture : − Giá trị 1: thanh ghi TMR1 theo kiểu capture xảy ra (phải xoá bởi phần mềm) − Giá trị 0: Không xảy ra kiểu capture trên với thanh ghi TMR1 . • Lựa chọn kiểu PWM: không sử dụng kiểu lựa chon này. Lớp ĐKTĐ1-K49 28 .Vi điều khiển Pic bit 4 (EEIF):bit cờ báo ngắt hoạt động viết dữ liệu bộ nhớ EEPROM/Flash − Giá trị 1: Hoạt động viết hoàn tất (phải xoá bởi phần mềm). − Giá trị 0: Hoạt động viết chưa hoàn tất hoặc chưa bắt đầu.

− Giá trị 0: Không cho phép ngắt khi có liên kết TMR2 tới PR2. bit 2 (CCP1IE): Bit cho phép ngắt CCP1 − Giá trị 1: cho phép ngắt CCP1 − Giá trị 0: Không cho phép ngắt CCP1 . bit 5 (Unimplemented): mang giá trị ‘0’ bit 4 (EEIE):bit cho phép báo ngắt hoạt động viết dữ liệu bộ nhớ EEPROM/Flash − Giá trị 1: cho phép − Giá trị 0: Không cho phép bit 3 (BCLIE): bit cho phép báo ngắt có xung đột Bus − Giá trị 1: cho phép − Giá trị 0: Không cho phép. bit 0 (TMR1IE): bit cho phép ngắt khi có tràn TMR1 − Giá trị 1: cho phép ngắt khi có tràn TMR1 − Giá trị 0: Không cho phép ngắt khi có tràn TMR1 PIE2 Registers bit 7 (OSCFIE): bit cho phép ngắt khi có lỗi bộ dao động Oscillator − Giá trị 1:cho phép − Giá trị 0:Không cho phép bit 6 (CMIE): Bit cho phép báo ngắt bộ so sánh. − Giá trị 0: Không cho phép .Hoàng Văn Quân. − Giá trị 1: cho phép ngắt khi có liên kết TMR2 tới PR2. − Giá trị 0: Không cho phép. − Giá trị 0: Không cho phép. bit 1 (TMR3IE): bit cho phép báo tràn TMR3 − Giá trị 1: cho phép. − Giá trị 0: Không cho phép.Vi điều khiển Pic − Giá trị 1: cho phép ngắt khi EUSART truyền − Giá trị 0: Không cho phép ngắt khi EUSART truyền bit 3 (SSPIE): bit cho phép ngắt khi giao tiếp cổng Master Synchronous − Giá trị 1: cho phép ngắt khi giao tiếp cổng Master Synchronous − Giá trị 0: Không cho phép ngắt khi giao tiếp cổng Master Synchronous. bit 1 (TMR2IE): bit cho phép ngắt khi có liên kết TMR2 tới PR2. Phạm Văn Cường . − Giá trị 1: cho phép . bit 2 (HLVDIE): Bit cho phép báo ngắt có dò điện áp (High/Low-Voltage) − Giá trị 1: cho phép. bit 0 (CCP2IE): bit cho phép báo ngắt trên CCP2 − Giá trị 1: cho phép. Lớp ĐKTĐ1-K49 29 .

bit 6 (ADIP): Bit ưu tiên ngắt khi có chuyển đổi A/D − Giá trị 1:mức ưu tiên cao. − Giá trị 0:mức ưu tiên thấp. − Giá trị 0:mức ưu tiên thấp. bit 0 (TMR1IP): bit ưu tiên ngắt khi có tràn TMR1 − Giá trị 1:mức ưu tiên cao. IPR1 Registers bit 7 (PSPIP): bit ưu tiên ngắt khi đọc/viết qua cổng sông song phụ thuộc − Giá trị 1:mức ưu tiên cao. bit 5 (RCIE): Bit cho phép ngắt khi ÊUSART nhận − Giá trị 1:mức ưu tiên cao. − Giá trị 0:mức ưu tiên thấp. bit 1 (TMR2IP): bit ưu tiên ngắt khi có liên kết TMR2 tới PR2. − Giá trị 0:mức ưu tiên thấp. − Giá trị 1:mức ưu tiên cao. − Giá trị 0:mức ưu tiên thấp.Vi điều khiển Pic • IPR Registers Giống như các thanh ghi PIR. IPR2 Registers Phạm Văn Cường . bit 4 (TXIP):Bit ưu tiên ngắt khi EUSART truyền − Giá trị 1:mức ưu tiên cao. thanh ghi IPR dùng xác định giá trị ưu tiên cho phép ngắt ở thiết bị ngoại vi và cũng gồm hai thanh ghi IPR1 và IPR2. − Giá trị 0:mức ưu tiên thấp.PIE để phuc vụ hoạt động ngắt. bit 3 (SSPIP): bit ưu tiên ngắt khi giao tiếp cổng Master Synchronous − Giá trị 1:mức ưu tiên cao.Hoàng Văn Quân. Lớp ĐKTĐ1-K49 30 . − Giá trị 0:mức ưu tiên thấp. − Giá trị 0:mức ưu tiên thấp. bit 2 (CCP1IP): Bit ưu tiên ngắt CCP1 − Giá trị 1:mức ưu tiên cao.

• RCON Register Thanh ghi này có bit cờ (Flag bit) sử dụng để xác định ngưyên nhân Reset và khởi dộng các trạng thái Idle và Sleep. − Giá trị 0:mức ưu tiên thấp. − Giá trị 1:mức ưu tiên cao. − Giá trị 0:mức ưu tiên thấp. − Giá trị 0:mức ưu tiên thấp. bit 5 (Unimplemented): mang giá trị ‘0’ bit 4 (EEIP):bit ưu tiên báo ngắt hoạt động viết dữ liệu bộ nhớ EEPROM/Flash − Giá trị 1:mức ưu tiên cao. bit 7 (IPEN): bit cho phép ưu tiên ngắt − Giá trị 1:cho phép mức ưu tiên ngắt − Giá trị 0: không cho phép mức ưu tiên ngắt bit 6 (SBOREN): Bit cho phép lập trình phần mềm BOR • Với BOREN1:BOREN0 = 01: − Giá trị 1 : Cho phép BOR − Giá trị 0 : Không cho phép BOR • Với BOREN1:BOREN0 = 00. Thanh ghi này chứa bit IPEN cho phép mức ưu tiên ngắt. − Giá trị 0:mức ưu tiên thấp. bit 0 (CCP2IP): bit ưu tiên báo ngắt trên CCP2 − Giá trị 1:mức ưu tiên cao. bit 6 (CMIP): Bit ưu tiên báo ngắt bộ so sánh. bit 1 (TMR3IP): bit ưu tiên báo tràn TMR3 − Giá trị 1:mức ưu tiên cao. Phạm Văn Cường .10or11 không cho phép và mang giá trị “0” bit 5 (Unimplemented): mang giá trị ‘0’ bit 4 (RI): bit cờ của cấu trúc lệnh RESET − Giá trị 1:Không thực hiện cấu trúc lệnh RESET − Giá trị 0: không thực hiện cấu trúc lệnh RESET đẻ RESET thiết bị. − Giá trị 0:mức ưu tiên thấp. − Giá trị 0:mức ưu tiên thấp.Vi điều khiển Pic bit 7 (OSCFIP): bit ưu tiên ngắt khi có lỗi bộ dao động Oscillator − Giá trị 1:mức ưu tiên cao. bit 3 (BCLIP): bit ưu tiên báo ngắt có xung đột Bus − Giá trị 1:mức ưu tiên cao.Hoàng Văn Quân. − Giá trị 0:mức ưu tiên thấp. Lớp ĐKTĐ1-K49 31 . bit 2 (HLVDIP): Bit ưu tiên báo ngắt có dò điện áp (High/Low-Voltage) − Giá trị 1:mức ưu tiên cao.

. Còn các chức năng cơ bản khác trong sơ đồ chân phần cứng đã giải thích cụ thể. PortB. Thanh ghi TRISA dùng điều khiển dữ liệu có hướng.2. bit 1 (POR): bit dể RESET trậng thái nguồn khi chạy − Giá trị 1:Không xảy ra RESET nguồn (được thiét lập bởi vi chương trình) . Phạm Văn Cường . − Giá trị 0:Xảy ra RESET nguồn(cần phải thiết lập bởi phần mềm sau khi RESET xảy ra) bit 0 (BOR): Bit cho biết trạng thái RESETyếu nguồn − Giá trị 1:Không xảy ra RESET yếu nguồn (được thiét lập bởi vi chương trình) . TRISE and LATE Registers Port E có độ rộng 4 bit các chân chúng ta đã tìm hiểu ở trên. PortD có nguyên tắc hoạt động giống PortA. PortD. − Giá trị 0: Thực hiện thiết lập bởi cấu trúc lệnh SLEEP. PortE. Việc sử dụng lựa chọn các cổng vào ra này phụ thuộc nhiều vào các ứng dụng và thiết bị ngoại vi. Cổng vào ra (I/O Port) Như đã tìm hiểu cấu trúc chân Pic18F4520 loại PDIP chúng ta biết có tất cả 5 cổng vào ra PortA. ngược lại (=0) tương ứng các chân Port A là đầu ra. • PORTB. − Giá trị 0:Xảy ra RESET yếu nguồn(cần phải thiết lập bởi phần mềm sau khi RESET xảy ra) Ngoài ra Pic18 cũng cung cấp cho ta các công cụ phục vụ ngắt khác như : • INTx Pin Interrupts • TMR0 Interrupt • PORTB Interrupt-on-Change • Context Saving During Interrupts 1. PortC. TRISD and LATD Registers Về cơ bản Port B.Vi điều khiển Pic bit 3 ( TO ):Bit cờ báo bộ định thời Watchdog Time-out − Giá trị 1:Cấp nguồn điện bởi cấu trúc lệnh CLRWDT hoặc SLEEP. • PORTE. Khi bit TRISA(=1) thì tương ứng các chân Port A là đầu vào. Cụ thể chức năng các chân của cổng này đã nói chi tiết ở cấu trúc chân của vi điều khiển.4. Hoạt động thanh ghi TRISE cũng tươngtự như các thanh ghi có cùng chức năng ở các cổng khác. TRISB and LATB Registers • PORTC. TRISC and LATC Registers • PORTD. Lớp ĐKTĐ1-K49 32 . Mỗi cổng này đều gồm ba thanh ghi hoạt động chính đó là: − Thanh ghi TRIS (thanh ghi dữ liệu có hướng) − Thanhghi của chính các cổng (PORT register) − Thanh ghi LAT(thanh ghi chốt dữ liệu) • PORTA. Riêng PortD có thêm sự đặc biệt do nó có thể chuyển tiếp thành cổng song song phụ thuộc(PSP).Hoàng Văn Quân. TRISA and LATA Registers Port A là cổng vào ra hai hướng 8 bit. Thanh ghi LATA kiểm soát hoạt động đọc viết hiệu chỉnh của Port A. bit 2 (PD): Bit cờ báo dò mất nguồn − Giá trị 1:Cấp nguồn điện bởi cấu trúc lệnh CLRWDT . − Giá trị 0: Xảy ra trên bộ định thời WDT time-out . Port C.

bit 6 (OBF): bit báo trạng thái đầu ra bộ đệm đầy − Giá trị 1:đầu ra bộ đệm vẫn giữ dể viết một từ trước đó. 1. − Giá trị 0: Không nhận một từ nào. PSP được chuyển đổi từ các chân PortD. Lớp ĐKTĐ1-K49 33 . Trong đó TRISE<4>-PSPMODE coi là bít diều khiển cổng. • Có khả năng như thanh ghi đọc viết • Riêng loại 8 bit có thẻ coi là bộ đếm lập trình bằng phần mềm • Khả năng lựa chon xung nguồn(cả bên trong và bên ngoài) Phạm Văn Cường .5..Vi điều khiển Pic bit 7 (IBF): bit báo trạng thái đầu vào bộ đệm đầy.2. − Giá trị 0: Đầu ra bộ điệm đã đọc. − Giá trị 1:Một từ đã được nhân và đang chờ CPU đọc. Bộ định thời (Timer) Timer0 Module Modle này được coi có những đặc điểm sau: • Có thể lựa chon phần mềm như một bộ định thời hoặc bộ đếm có thể là 8 bit hoặc 16 bit. PSP cũng được tăng cường modul CCP nó có thể là giao diện có hướng tới một vi điều khiển 8 bit. bit 3 (Unimplemented): mang giá trị ‘0’ bit 2 (TRISE2): bít điều khiển hướng cho RE2 − Giá trị 1:đầu vào − Giá trị 0: đầu ra bit 1 (TRISE1): bít điều khiển hướng cho RE1 − Giá trị 1:đầu vào − Giá trị 0: đầu ra bit 0 (TRISE0): bít điều khiển hướng cho RE0 − Giá trị 1:đầu vào − Giá trị 0: đầu ra • Parallel Slave Port(PSP) Đây có thể coi là sự thêm chức năng của các cổng vào ra nói chung. bit 5 (IBOV): bit lựa chọn kiểm tra dò tràn đầu vào bộ đệm − Giá trị 1:xảy ra hoạt động viết khi mà một từ trước đó ở bộ đệm chưa được đọc(cần xoá bởiphần mềm) − Giá trị 0: Không xảy ra tràn.Hoàng Văn Quân. bit 4 (PSPMODE): bit lựa chon kiểu cho cổng PSP − Giá trị 1:hoạt động cổng PSP − Giá trị 0: hoạt động như cổng vào ra thông thường. PSP được điều khiển bởi 4 bit cao của thanh ghi TRISE.

bit 3 (PSA): bit thiết lập bộ đếm gộp trước choTimer0 − Giá trị 1: không thiết lập bộ đệm gộp trước Timer0. Xung dầu vào Timer0 trở thành dầu ra bộ đệm gộp trước. • Khả năng như thanh ghi đọc viết được 8bit(TMR1H. Xung dầu vào Timer0 được chuyển hướng bởi bộ đệm gộp trước. • Ngắt-Tràn • Reset nhờ bộ tạo sự kiện dặc biệt CCP Phạm Văn Cường .. TMR1L). − Giá trị 0: thiết lập bộ đệm gộp trước Timer0. • Khả năng lựa chon nguồn xung bên trong qua bọ dao động Oscillator..tràn Đặc trưng cho Timer0 là thanh ghi T0CON bit 7(TMR0ON): bit điều khiển đóng mỏ Timer0 − Giá trị 1:cho phép hoạt động − Giá trị 0: dừng hoạt động bit 6 (T08BIT): bit điều khiển Timer0 8-Bit/16-Bit − Giá trị 1:Timer0 cấu hình như 8-bit timer/counter − Giá trị 0: Timer0 cấu hình như 16-bit timer/counter bit 5 (T0CS): bit lựa chọn nguồn xung cho Timer0 − Giá trị 1:truyền trên chân T0CKI − Giá trị 0: chu kỳ xung lệnh bên trong (CLKO) bit 4 (T0SE): bit lựa chon giới hạn nguồn choTimer0 − Giá trị 1: truyền trên chân T0CKI thay đổi từ cao-thấp. Lớp ĐKTĐ1-K49 34 . − Giá trị 0: truyền trên chân T0CKI thay đổi từ thấp-cao.mở . bit 2-0 (T0PS<2:0>): bit lựa chon bộ đệm gộp trước cho Timer0 111 = 1:256 giá trị bộ đệm gộp trước 110 = 1:128 giá trị bộ đệm gộp trước 101 = 1:64 giá trị bộ đệm gộp trước 100 = 1:32 giá trị bộ đệm gộp trước 011 = 1:16 giá trị bộ đệm gộp trước 010 = 1:8 giá trị bộ đệm gộp trước 001 = 1:4 giá trị bộ đệm gộp trước 000 = 1:2 giá trị bộ đệm gộp trước Timer1 module Đặc trưng cơ bản của bộ định thời này gồm: • Khả năng lựa chon bằng phần mềm giống như bộ định thời 16bit hoặc bộ dếm.Hoàng Văn Quân.Vi điều khiển Pic • Lự chon giới hạn cho xung từ bên ngoài • Ngắt .

− Giá tri 0: cho phép thanh ghi đọc/viết của Timer1 trong hoạt động như một số 8 bit. bit 2 ( T1SYNC ): bit lựa chọn xung đồng bộ đầu vào bên ngoài cho Timer1 • Khi TMR1CS = 1: − Giá tri 1: không phải xung đồng bộ đầu vào bên ngoài − Giá tri 0: xung đồng bộ đầu vào bên ngoài • Khi TMR1CS = 0: bit này không sử dụng và lúc này Timer1 sử dụng nguồn xung từ bên trong bit 1 (TMR1CS): bit lựa chọn nguồn xung cho Timer1 − Giá tri 1: nguồn xung từ bên ngoài qua chân RC0/T1OSO/T13CKI − Giá tri 0: nguồn xung từ bên trong (Fosc/4) bit 0 (TMR1ON): bit hoạt động Timer1 − Giá tri 1: Cho phép − Giá tri 0: Dừng Timer1 . Timer1 có thể hoạt động ở một trong 3 chế độ •Bộ định thời (Timer) • Bộ đếm đồng bộ (Synchronous Counter) • Bộ đếm không đồng bộ(Asynchronous Counter) Việc sử dụng Timer1 phụ thuộc vào việc sử dụng thanh thạo thanh ghi T1CON. Lớp ĐKTĐ1-K49 35 .Vi điều khiển Pic • Cờ báo trạng thái xung thiết bị Thanh ghi T1CON sử dụng điều khiển Timer1 bit 7 (RD16): bit cho phép lựa chọn các chế độ đọc/viết 16-Bit − Giá tri 1: cho phép thanh ghi đọc/viết của Timer1 trong hoạt động như một số 16 bit.Hoàng Văn Quân. bit 6 (T1RUN): Bit trạng thái hệ thống xung Timer1 − Giá tri 1: xung thiết bị là dẫn xuất từ bộ dao động Timer1. − Giá tri 0: xung thiết bị là dẫn xuất từ mootj nguồn khác. bit 5-4 (T1CKPS<1:0>): bit lựa chọn xung đầu vào bộ đếm gộp trước cho Timer1 11 = 1:8 Giá trị bộ đếm gộp trước 10 = 1:4 Giá trị bộ đếm gộp trước 01 = 1:2 Giá trị bộ đếm gộp trước 00 = 1:1 Giá trị bộ đếm gộp trước bit 3 (T1OSCEN): bit cho phép bộ dao động Timer1 − Giá tri 1: Cho phép − Giá tri 0: Dừng bộ dao động Timer1 . Phạm Văn Cường .

Lớp ĐKTĐ1-K49 36 . 0000 = 1:1 sau khi dừng 0001 = 1:2 sau khi dừng • 1111 = 1:16 sau khi dừng bit 2 (TMR2ON): Bit hoạt dộng Timer2 − Giá tri 1: Cho phép − Giá tri 0: Dừng Timer1 . bit 1-0 (T2CKPS<1:0>): bit chọn xung bộ đếm gộp trước cho Timer2 00 = bộ đếm gộp trước 1 01 = bộ đếm gộp trước 4 1x = bộ đếm gộp trước 16 Timer 3 Module Đặc điểm Timer3 bao gồm: • Lựa chon được hoạt động bằng phàn mềm giống như bộ đếm thời gian 16 bit. • Lựa chọn các nguồn xung cả bên trong và ngoài nhờ bộ dao động • Ngắt. • Khả năng đọc và viết được giống thanh ghi 8 bit(TMR3H-TMR3L). Phạm Văn Cường .Vi điều khiển Pic Timer2 Module Đặc điểm nổi bật Timer2 gồm: • Bộ định thời 8bit(TMR2) và thanh ghi ghi Period(PR2) • Khả năng đọc và viết được.Hoàng Văn Quân.Tràn • Modul Reset trên CCP (đặc biệt với kết quả Trigger) Timer 3 điều chỉnh nhờ thanh ghi T3CON bit 7(RD16): (RD16): bit cho phép lựa chọn các chế độ đọc/viết 16-Bit − Giá tri 1: cho phép thanh ghi đọc/viết của Timer1 trong hoạt động như một số 16 bit. • Lập trình phần mềm • Ngắt trên TMR2 nhờ PR2 • Cài đặt khối xung cho modul MSSP Timer 2 điều khiển hoạt động dựa thanh ghi T2CON bit 7 (Unimplemented): mang giá trị ‘0’ bit 6-3 (T2OUTPS<3:0>): bit lựa chọn đầu ra Timer2 sau khi dừng.

Vi điều khiển Pic − Giá tri 0: cho phép thanh ghi đọc/viết của Timer1 trong hoạt động như một số 8 bit. hệ thống đồng bộ có thể giao tiếp với thiết bị ngoại vi. Bộ truyền nhận dữ liệu đồng bộ (EUSART-Enhanced Universal Synchronous Asynchronous Receiver Transmitter) Module thu phát đồng bộ và không đồng bộ (EUSART) là một trong hai module vào ra nối tiếp .3 (T3CCP<2:1>): bit cho phép Timer3 và Timer1 liên kết CCPx modules − Giá tri 1x : Timer3 là cấu hình nguồn xung capture/compare cho CCP modules − Giá tri 01: Timer3 là cấu hình nguồn xung capture/compare cho CCP2 modules. tự động nhận biết quá trình nhận dữ liệu và 12 bit kí tự ngắt truyền.6. và các EEPROMs Module thu phát đồng bộ và không đồng bộ mở rộng USART được tích hợp . Nó cũng có thể được cấu hình như là chế độ bán song công. như là các thiết bị đầu cuối và các máy tính cá nhân. Lớp ĐKTĐ1-K49 37 .(Nói chung EUSART cũng được biết đến như giao diện truyền thông nối tiếp hoặc SCL). bao gồm sự dò tốc độ baud tự động và hiệu chỉnh.EUSART có thể cấu hình như hệ thống không đồng bộ song công mà nó có thể giao tiếp với thiết bị ngoại vi.Hoàng Văn Quân. như là bộ A/D hoặc D/A. bit 6. Phù hợp với việc sử dụng hệ thống Bus kết nối cục bộ. Module thu phát đồng bộ và không đồng bộ EUSART có thể được cấu hình theo những phương thức sau : • Chế độ dị bộ (song công) với: − Tự động nhận kí tự Phạm Văn Cường .2. Timer1 là cấu hình nguồn xung capture/compare cho CCP1 modules − Giá tri 00 : Timer1 là cấu hình nguồn xung capture/compare cho CCP modules bit 5-4 ((T3CKPS<1:0>): bit lựa chọn xung đầu vào bộ đếm gộp trước cho Timer3 11 = 1:8 Giá trị bộ đếm gộp trước 10 = 1:4 Giá trị bộ đếm gộp trước 01 = 1:2 Giá trị bộ đếm gộp trước 00 = 1:1 Giá trị bộ đếm gộp trước bit 2 ( T3SYNC ): bit điều khiển xung đồng bộ đầu vào bên ngoài cho Timer3 • Khi TMR3CS = 1: − Giá tri 1: không phải xung đồng bộ đầu vào bên ngoài − Giá tri 0: xung đồng bộ đầu vào bên ngoài • Khi TMR3CS = 0: bit này không sử dụng và lúc này Timer3 sử dụng nguồn xung từ bên trong bit 1 (TMR3CS): bit lựa chọn nguồn xung cho Timer3 − Giá tri 1: nguồn xung từ bên ngoài từ bbộ dao động Timer1 hoặc T13CKI − Giá tri 0: nguồn xung từ bên trong (Fosc/4) bit 0 (TMR1ON): bit hoạt động Timer1 − Giá tri 1: Cho phép − Giá tri 0: Dừng Timer1 . 1.

bit 2 BRGH: Bit chọn tốc độ cao Phạm Văn Cường . • Chế độ đồng bộ phụ (bán song công ) với xung nhịp chọn Các chân của EUSART được đặt ở Port C để cấu hình cho RC6/TX/CK và RC7/RX/DT như là một EUSART. Thanh ghi điều khiển và trạng thái truyền Bit 7 CSRC : bit chọn nguồn clock − Chế độ không đồng bộ: Không dùng.Hoàng Văn Quân.Vi điều khiển Pic − Tự động hiệu chỉnh baud − Truyền gián đoạn 12 bit • Chế độ đồng bộ chính (song công toàn phần) với xung nhịp chọn. − Chế độ đồng bộ : Không dùng. bit 4 SYNC: Bit chọn chế độ EUSART 1 = Chế độ đồng bộ 0 = Chế độ không đồng bộ. bit 3 SENDB: Bit gửi kí tự gián đoạn − Chế độ không đông bộ: 1 = Gửi kí tự ngắt đồng bộ ở lần truyền tiếp theo (được xóa bởi phần cứng khi hoàn thành) 0 = Kí tự ngắt truyền xong. • bit SPEN (RCSTA<7>) được đặt bằng ( = 1) • bit TRISC<7> được đặt (= 1) • bit TRISC<6> được đặt (= 1) Sự hoạt động cửa module EUSART mở rộng được điều khiển thông qua ba thanh ghi sau: • Thanh ghi điều khiển và trạng thái truyền (TXSTA) • Thanh ghi điều khiển và trạng thái nhận (RCSTA) • Điều khiển tốc độ truyền (BAUDCON). Lớp ĐKTĐ1-K49 38 . − Chế độ đồng bộ: 1= Chế độ Master (clock được phát bên trong từ BRG) 0=Chế độ Slave (clock từ nguồn bên ngoài) Bit 6 TX :Bit cho phép chế độ truyền 9 bit 1= Chọn truyền 9 bit 0= Chọn truyền 8 bit. bit 5 TXEN: Bit cho phép truyền 1= Cho phép truyền . 0 = Không cho phép truyền.

CREN. bit 4 CREN: Bit cho phép tiếp tục nhận. 0 = Không cho phép riêng rẽ. − Chế độ đồng bộ: Không sử dụng trong chế độ này. − Chế độ không đồng bộ nhận 8 bit (RX9 = 0):Không dùng. cho phép ngắt nạp dữ liệu vào đệm khi RSR<8> được đặt. 0 = TSR đầy. bit 1 TRMT: Bit trạng thái thanh ghi dịch TSR. − Chế độ không đồng bộ nhận 9 bit (RX9 = 1): 1 = Cho phép đánh địa chỉ .Hoàng Văn Quân. 0 = Không cho phép nhận. 1 = TSR rỗng. bit 0 TX9D: Dữ liệu của bit thứ 9 có thể là địa chỉ / dữ liệu hoặc địa chỉ. Bit này được xóa sau khi quá trình nhận hoàn thành. Lớp ĐKTĐ1-K49 39 . − Chế độ đồng bộ: 1 = Cho phép nhận đến khi bit . bit 7 SPEN: Bit cho phép cổng truyền nối tiếp. 1 = Cho phép hoạt động (cấu hình RX/DT và TX/CK các chân này giống các chân cổng vào nối tiếp) 0 = Không cho phép (được đặt khi Reset) bit 6 RX9: Bit cho phép nhận 9 bit 1 = Chọn chế độ nhận 9 bit 0 = Chọn chế độ nhận 8 bit bit 5 SREN: Bit cho phép nhận riêng rẽ. − Chế độ không đồng bộ: 1 = Cho phép nhận.Vi điều khiển Pic − Chế độ không đồng bộ: 1= Tốc độ cao 0 = Tốc độ thấp. Phạm Văn Cường . được xóa (CREN overrides SREN) 0 = Không cho phép tiếp tục nhận. 0 = Không cho phép đánh địa chỉ. bit 2 FERR: Bit báo lỗi khung truyền. − Chế độ đồng bộ – Slave: Không dùng chế độ này. THANH GHI ĐIỀU KHIỂN VÀ TRẠNG THÁI NHẬN. bit 3 ADDEN: Cho phép đánh địa chỉ. − Chế độ không đồng bộ: Không sử dụng − Chế độ đồng bộ – Master: 1 = Cho phép nhận riêng rẽ. tất cả các byte được nhận và bit thứ 9 được được sử dụng như bit chẳn lẻ.

bit 1 OERR: Bit báo tràn.Vi điều khiển Pic 1 = Có lỗi(Có thể được xóa khi đọc thanh ghi RCREG và nhận giá tri byte tiếp theo) 0 = Không có lỗi. THANH GHI ĐIỀU KHIỂN TỐC ĐỘ TRUYỀN bit 7 ABDOVF: Bit trạng thái tự động nhận tốc độ truyền. 0 = Trạng thái không truyền (TX) là mức cao. − Chế độ không đồng bộ: 1 = EUSART sẽ tiếp tục lấy mẫu trên chân RX – ngắt được tạo ra khi giảm. 1 = xảy ra tác động thanh ghi điều khiển tốc độ truyền trông các chế độ lựa chọn phát hiện trạng thái tự động boud (phải xoá bởi phần mềm) 0 = không xảy ra bit 6 RCIDL: Bit báo trạng thái nhận 1 = Không nhận 0 = Xảy ra quá trình nhận bit 5 RXDTP: Bit xác định mức tích cực dữ liệu nhận − Chế độ không đồng bộ: 1 = Dữ liệu nhận (RX) được đảo (mức tích cực thấp) 0 = Dữ liệu nhận (RX) không được đảo (mức tích cực cao) − Chế độ đồng bộ: 1 = Dữ liệu (DT) được đảo (mức tích cực thấp) 0 = Dữ liệu (DT) không đảo (mức tích cực cao) bit 4 TXCKP: Bit chọn trạng thái tích cực dữ liệu và xung nhịp. bit 0 RX9D: Dữ liệu của bit thứ 9. − Chế độ không đồng bộ: 1 = Trạng thái không truyền (TX) là mức thấp. Đây có thể là bit địa chỉ / dữ liệu hoặc bit chẵn lẻ và phải được tính toán bằng phần cứng. bit này được xóa khi phần cứng tăng lên. SPBRGH không hoạt động. Phạm Văn Cường . Lớp ĐKTĐ1-K49 40 . − Chế độ đồng bộ: 1 = Trạng thái không hoạt động của clock (CK) là mức cao. bit 3 BRG16: Bit cho phép thanh ghi phát tốc độ baud 16 bit. 1 = Lỗi tràn (Có thể được xóa khi xóa bit CREN) 0 = Không có lỗi tràn. 0 = Trạng thái không hoạt động của clock (CK) là mức thấp.Hoàng Văn Quân. bit 2 Không xác định : xem như bằng ‘0’ bit 1 WUE: Bit kích hoạt. 1 = Cho phép thanh ghi phát tốc độ baud 16 bit – SPBRGH và SPBRG 0 = Cho phép thanh ghi phát tốc độ baud 8 bit – chỉ thanh SPBRG hoạt động.

Trong chế độ không đồng bộ các bit BRGH (TXSTA<2>) và BRG16 (BAUDCON<3>) cũng điều khiển tốc độ baud. đặt BRG làm việc 16 bit dùng thanh ghi (BAUDCON <3>) để chọn chế độ 16 bit. BRGH không được dùng. Ghi lại giá trị mới vào thanh ghi SPBRGH:SPBRG bằng cách reset BRG (hoặc xóa). • Hoạt động ở chế độ quản lí nguồn. Bằng cách thay đổi giá trị trong cặp thanh ghi SPBRG. Một ví dụ về tính tốc độ baud trong ví dụ 18-1. The SPBRGH:SPBRG là hai thanh ghi điều khiển chu kì của bộ đếm thời gian chạy tự do. Bảng 18-1 chỉ ra cách tính toán tốc độ baud cho các chế độ EUSART khác nhau mà nó chỉ áp dụng cho chế độ chính (tạo xung nhịp bên trong). Phạm Văn Cường . Bộ tạo xung được sử dụng để phát ra tốc độ baud mong muốn. Bộ BRG đưa ra tốc độ baud mới trước thời gian tràn. − Chế độ không đồng bộ: 1 = Cho phép đo tốc độ baud khi truyền kí tự tiếp theo. − Chế độ đồng bộ: Không dùng cho chế độ này.Vi điều khiển Pic 0 = Chân RX không được theo dõi hoặc tăng lên.Được xóa bởi phần cứng khi hoàn thành. Lớp ĐKTĐ1-K49 41 . VÍ DỤ: Dữ liệu trên chân RX được lấy mẫu 3 lần bằng cách dò trên mạch nếu mức tích cực trên chân RX là mức cao hay thấp. Đây là đặc trưng hoạt động chỉ có trong chế độ không đồng bộ và trong khi bit được xóa. Tốc độ mặc định và lỗi giá trị trong các chế độ không đồng bộ khác nhau được chỉ ra trong bảng 18-2.Trong chế độ đồng bộ. • TỰ ĐỘNG DÒ TỐC ĐỘ BAUD Module USART mở rộng hỗ trợ chế độ dò và hiệu chỉnh tốc độ baud tự động. Từ tốc độ baud yêu cầu và tần số thạch anh Fosc . giá trị nguyên gần nhất được tính cho thanh ghi SPBRGH:SPBRG có thể tính toán dựa vào kết quả của bảng 18-1. BRG được mặc định hoạt động ở chế độ 8 bit . 0 = Không đô tốc độ baud hoặc đã hoàn thành. hoặc có thể đạt được tốc độ baud thấp khi sử dụng bộ dao động có tần số cao.Hoàng Văn Quân. Bộ phát tốc độ baud (BRG) BRG là thanh ghi phát chuyên dụng 8 bit hoặc 16 bit được cung cấp trong chế đô đồng bộ và không đồng bộ của EUSART. Đó có thể là thuân lợi cho việc sử dụng tốc độ baud cao (BRGH = 1) hoặc 16-bit BRG để làm giảm lỗi tốc độ baud. Từ đó các lỗi về tốc độ baud có thể xác định. Khi hoạt động ở chế độ quản lí nguồn. bit 0 ABDEN: Bit cho phép tự động dò baud. Cần nhận trường đồng bộ (55h). − Chế độ đồng bộ: Không sử dụng cho chế độ này. nguồn xung nhịp mới có thể hoạt động ở các tần số khác nhau .

Chế độ ABD vẫn hoạt động khi xảy ra sự kiện tràn và bit ABDEN vẫn được đặt (Figure 18-2). Bit này được set bằng phần cứng khi xảy ra tràn và có thể set hoặc xóa bằng phần mền . cả SPBRG và SPBRGH được sử dụng như bộ đếm 16 bit. Bit BRG16 được đặt độc lập.thì bit ABDEN sẽ tự động được xóa. sự kiện này được báo hiệu bởi trạng thái bit ABDOVF (BAUDCON<7>). Trong quá trình ABD diễn ra . SPBRG bắt đầu đếm. Phạm Văn Cường . • Chế độ truyền EUSART và ABD( Auto Baud Rate Detect) Khi xung nhịp BRG được giữ trong quá trình ABD . Người sử dụng phải đảm bảo rằng bit ABDEN không được set trong quá trình truyền liên tiếp. Tự động dò tốc độ baud phải nhân byte với giá trị 55h (ASCII “U”. nó cũng là kí tự đồng bộ LIN bus) để tính toán tần số chính xác. Sau khi start bit. Một khi có sườn lên thứ 5 . Xung nhịp BRG được thiết lập bởi các bit BRG16 và BRGH . Cho phép người lập trình là không có nhớ trong chế độ 8 bit bằng cách kiểm tra thanh ghi SPBRGH có bằng 00h không . Phép đo được lấy trên cả hai mức cao và thấp để làm giảm tính đối xứng của tín hiệu thu thập. Trong chế độ tự dò tốc độ baud (ABD) . Trong chế độ ABD. Khi mà bit ABDEN được set. tín hiệu RX là thời gian BRG. Nếu thanh ghi BGR xảy ra tràn (tràn từ FFFFh đến 0000h).chế độ truyền EUSART không được sử dụng trong quá trình ABD hoạt động . Lớp ĐKTĐ1-K49 42 . xung nhịp của BRG được đảo hơn nửa bộ đếm BRG thu thập tín hiệu RX. Điều này có nghĩa là bất cứ khi nào bit ABDEN được set . một giá trị tổng chu kì BRG được đặt trong cặp thanh ghi SPBRGH :SPBRG.Vi điều khiển Pic Tốc độ baud được đo liên tục bắt đầu khi bit start được nhận và bit ABDEN được set. giá tri thanh ghi BRG được đặt bằng 1/8 tốc độ xung nhịp ban đầu . trạng thái bộ vi xử lí trong chế độ EUSRT là trạng thái rảnh rỗi(Idle).Kết quả tính toán được tự lấy trung bình. Giá trị chứa trong RCREG có thể bỏ đi. nó sẽ đếm sườn lên đâu tiên đầu tiên của RX.Hoàng Văn Quân. Khi đó hoạt động của EUSART sẽ không xác đinh. Bit báo ngắt RCIF được đặt khi phát hiện ra sườn lên thứ 5 trên RX. bộ phát tốc độ baud từ bên trong được sử dụng như bộ đếm thời gian chu kỳ bit của thu thập chuỗi byte nối tiếp. Trong khi hiệu chỉnh chu kì tốc độ baud. Sau khi 8 bit trên chân RX hoặc sườn lên thứ 5 của RX . trạng thái máy sẽ xóa BRG và chờ bit start.thi TXREG không thể được ghi . Cần đọc giá trị trong thanh ghi RCREG để xóa cờ ngắt RCIF.

Khi chế độ không đồng bộ hoạt động. Khởi tạo cho thanh khi SPBRGH:SPBRG để có tốc độ baud tương ứng . Thanh ghi dịch TSR sẽ không nạp dữ liệu cho đến khi bit Stop của lần vừa nạp được truyền xong. Trong khi TXIF xác định trạng thái thanh ghi TXREG. • Tự động kích hoạt kí tự ngắt đồng bộ. Phạm Văn Cường . tám hoặc chín bit dữ liệu và một bit Stop). Thanh ghi TXREG nạp dữ liệu từ phần mềm. chỉ ra trạng thái của thanh ghi dịch TSR . • CHẾ ĐỘ TRUYỀN KHÔNG ĐỒNG BỘ EUSART. nhưng nó trở nên hợp lệ trong chu kì lệnh thứ hai sau lệnh vừa nạp. Chế độ không đồng bộ được chon bằng cách xóa bit SYNC (TXSTA<4>). Đặt hoặc xóa bit BRGH và bit BRG16. Thông thường khung dữ liệu được dùng phổ biến nhất là 8 bits. Kiểm tra bit TXIF ngay sau khi nạp lại giá tri cho thanh ghi TXREG. Trên một chip. Để đặt chế độ truyền không đồng bộ có các bước sau: 1. bit TRMT là bit chỉ được đọc và nó được set khi thanh ghi TSR trống rỗng. Sơ đồ khối truyền EUSART trong hình 18-3. nó không thể xóa trong phần mềm. Đây là ngắt có thể cho phép hoặc không cho phép bằng cách set hoặc xóa bit cho phép ngắt TXIE (PIE1<4>).Hoàng Văn Quân. Trong EUSART thì bit truyền hoặc nhận đầu tiên là bit có trọng số thấp nhất. • Truyền 12 bit kí tự ngắt. một bộ phát tốc độ 8-bit/16-bit Baud được sử dụng để tạo tốc độ chuẩn từ bộ dao động. thì thanh khi TXREG sẽ trống và cờ ngắt truyền TXIF (PIR1<4>) được set. • Truyền không đồng bộ. EUSART sử dụng khung dữ liệu chuẩn Non-Return-to-Zero (NRZ) (một bit Start.Vi điều khiển Pic Chế đô EUSART không đồng bộ. Lớp ĐKTĐ1-K49 43 . Trong chế độ này . bit TXIF cũng không thể xóa ngay lập tức khi dữ liệu đang nạp trên thanh ghi TXREG. Khi thanh ghi đêm truyền TXREG truyền dữ liệu cho thanh ghi dịch TSR (xảy ra trong TCY). module EUSART bao gồm những thành phần quan trọng sau: • Bộ phát tốc độ baud. Bộ phát tốc độ baud sinh ra tốc độ xung nhịp gấp x16 hoặc x64 tốc độ thay đổi bit phụ thuộc vào bit BRGHvà bit BRG16 (TXSTA<2> and BAUDCON<3>). Ngay khi bit Stop được truyền xong . Trung tâm của khối truyền là thanh ghi dịch truyền (nối tiếp) (TSR). • Nhận không đồng bộ. • Mạch tạo mẫu. Thanh ghi dịch chứa dữ liệu từ thanh ghi đệm truyền đọc /ghi TXREG. • Tự động dò tốc độ baud. để đạt được tốc độ baud mong muốn. cần thiết . Sự truyền và nhận trong EUSART là chức năng độc lập nhưng sử dụng khung dữ liệu và tốc độ baud là giống nhau. thanh ghi dịch TSR được nạp giá trị mới từ thanh ghi đệm TXREG (nếu được cho phép). Bit chẵn lẻ không được cung cấp bởi phần cứng nhưng có thể cài đặt trong phần mềm và được lưu như bit dữ liệu thứ 9.bit TXIF will besẽ được set dù cho trạng thái của bit TXIE như thế nào. một bit khác là bit TRMT (TXSTA<1>). Không có ngắt logic từ bit này vì vậy người sử dụng phải kiểm tra bit này để xác định trạng thái của thanh ghi TSR nếu nó trống.

5. Nếu muốn có ngắt . Nếu muốn có ngắt . và đặt bit SPEN. vì vậy khối nhận hoạt động ở tốc độ bit hoặc tần số dao động . Khởi tạo cho thanh ghi SPBRGH:SPBRG để có tốc độ baud thích hợp. Phạm Văn Cường . Và bit TXIF cũng sẽ được set. 6. 9. Nếu truyền khung dữ liệu 9 bit. Có thể được sử dụng như bit địa chỉ hoặc dữ liệu. set bit truyền TX9. thì set bit cho phép ngắt RCIE. Cho phép truyền bằng cách set bit TXEN. Đọc thanh ghi RCSTA để lấy bit thứ 9 (nếu nhận là 9 bit) và xác định lỗi đã xảy ra trong lúc nhân. Nếu có lỗi trong quá trình nhận thì xóa lỗi bằng cách xóa bit cho phép nhận CREN. 10. Nếu chọn truyền 9 bit trong khung dữ liệu . Nạp dữ liệu từ thanh ghi TXREG (bắt đầu quá trình truyền). Sơ đồ khối nhận là khối trong hình 18-6.Vi điều khiển Pic 2. Lớp ĐKTĐ1-K49 44 . 8. Cho phép cổng không đồng bộ nối tiếp bằng cách xóa bit SYNC. set hoặc xóa bit BRGH và BRG16 để có được tốc độ baud mong muốn. Cờ báo nhân RCIFsẽ được set khi quá trình nhận hoàn thành và sẽ xuất hiện một ngắt nếu như bit cho phép ngắt nhận RCIE đã được set. 7. 5. Cho phép quá trình nhận bằng cách set bit CREN. 2. 7. 6.set bit cho phép TXIE. Nếu sử dụng ngắt. 8. 3.Hoàng Văn Quân. Dữ liệu được nhận trên chân RX và được đưa tới khối khôi phục dữ liệu. Các bước thiết lập chế độ nhận không đồng bộ: 1. thì phải đảm bảo rằng hai bit GIE và PEIE trong thanh ghi INTCON (INTCON<7:6>) đã được set. Nếu muốn nhân khung dữ liệu 9 bit thì set bit RX9. Chế độ này thường được sử dụng trong hệ thống RS 232. • CHẾ ĐỘ NHẬN KHÔNG ĐỒNG BỘ EUSART. và set bit SPEN.thì bit thứ 9 sẽ được nạp vào bit TX9D. Khối khôi phục dữ liệu thực tế có tốc độ dịch cao gấp 16 lần tốc độ baud. Cho phép cổng không đồng bộ nối tiếp bằng cách xóa bit SYNC. 4. 3. 4. Nếu sử dụng ngắt thì phải đảm bảo rằng các bit GIEvà PEIE trong thanh ghi INTCON (INTCON<7:6>) phải được set. Lấy 8 bit dữ liệu còn lại bằng cách đọc thanh ghi RCREG register.

Set bit RX9 để cho phép nhận 9 bit. 10. Đặc điểm của chế độ kích hoạt tự động cho phép kích hoạt hoạt động trở lại trên đường RX/DT trong khi EUSART hoạt động trong chế độ không đồng bộ. Ngắt sẽ được xác nhận nếu bit RCIE và bit GIE bits are seđược set. Sự kiện kích hoạt bao gồm khi xuất hiện sườn xuống trên đường RX/DT . hoặc đọc bit dữ liệu thứ 9 (nếu có thể dùng). tất cả các xung của chế độ EUSART bị treo. Bởi vì vậy . Đọc thanh ghi RCREG để xác nếu thiết bị là địa chỉ. 9. bộ phát tốc độ baud không hoạt động và nhân một byte không thể thực hiện được. Một khi set bit này. Lớp ĐKTĐ1-K49 45 . Bit RCIF sẽ được set khi khi quá trình nhận hoàn thành. sự kiện kích hoạt độc lập với chế độ của CPU. Set bit ADDEN để cho phép dò địa chỉ . 7. 3. Khởi tạo cho thanh ghi SPBRGH:SPBRG để có tốc độ baud thích hợp.Hoàng Văn Quân. 11. Cho phép nhân bằng cách set bit CREN. 2. Cho phép cổng truyền không đồng bộ nối tiếp bằng cách xóa bit SYNC và set bit SPEN. Nếu có lỗi thì xóa bit CREN . • TỰ ĐỘNG KÍCH HOẠT KÍ TỰ NGẮT ĐỒNG BỘ. Trong suốt chế độ sleep . Thiết lập cho chế độ nhân không đồng bộ có dò địa chỉ: 1. xóa bit ADDENvà cho phép nhân tất cả dữ liệu vào đệm và ngắt CPU. Chế độ này thường được sử dụng trong hệ thống RS-485 . 6. 5. set hoặc xóa bit BRGH và BRG16 để có được tốc độ baud mong muốn. Nếu cần sử dụng ngắt thì set bit RCENvà chọn mức độ ưu tiên mong muốn bằng bit RCIP . 8. (Nó trùng với kí tự ngắt đồng bộ và kí tự kích hoạt giao thức LIN ) Phạm Văn Cường . Nếu thiết bị đã xác định được địa chỉ . thông thường nhận liên tiếp trên RX/DT là không thể và EUSART còn lại trong trạng thái Idle . Đặc điểm của kích hoạt tự động được cho phép hoạt động bằng việc set bit WUE (BAUDCON<1>). 4. Đọc thanh ghi RCSTA để xác định lỗi trong quá trình nhận.Vi điều khiển Pic • THIẾT LẬP CHẾ ĐỘ 9 BIT DÒ ĐỊA CHỈ.

Điều này cho phép người sử dụng nạp lại giá trị truyền FIFO với byte truyền tiếp theo sau kí tự ngắt (thông thường kí tự đồng bộ chỉ rõ trong LIN). Xem hình 18-10 cho thời gian của chuỗi kí tự ngắt. Chú ý rằng giá trị dữ liệu ghi vào thanh TXREG sẽ được bỏ qua và tất cả các bit ‘0’s(kí hiệu cho các bit) sẽ được truyền. module sẽ phát ra một ngắt RCIF. Để đảm bảo rằng không bị mất dữ liệu. Kí tự ngắt này cần cho chuẩn LIN. Điêu kiện xảy ra ngắt là phải xóa bằng cách đọc thanh ghi RCREG . Phạm Văn Cường . Thời gian của sự kiện bit WUE và bit RCIF có thể bị rối loạn khi nó xác định giá trị của dữ liệu nhận when it comes to determining the validity of received data. Bit WUE được tự động xóa một khi trên đường RX xuất hiện sườn lên sau sự kiện kích hoạt ngắt. module EUSART trong chế độ Idle và trở lại hoạt động bình thường. Khung kí tự ngắt được gửi bất cứ khi nào bit SENDB và bit TXEN (TXSTA<3> và TXSTA<5>) được set trong khi thanh ghi dịch truyền được nạp dữ liệu . Thực tế là bit WUE đã được xóa (hoặc vẫn được set) và cờ RCIF được set nên không được sử dụng như dữ liệu ban đầu trong thanh ghi RCREG. Thông thường . • Phải thân trọng khi sử dụng Auto-Wake-up Khi mà chức năng tự động kích hoạt được nhận biết bởi sườn lên trên chân RX/DT. Cách viết đơn giản chỉ phục vụ cho các mục đích khởi động đơn giản. Bit SENDB sẽ được tự động reset bởi phần cứng bit Stop tương ứng được gửi. Để làm việc đúng thì kí tự truyền ban đầu phải là ‘0’s. Điều kiện của ngắt là nó phải được xóa bằng cách đọc thanh ghi RCREG.. Ngắt này được phát đồng bộ với xung Q trong chế độ hoạt động bình thường. Bit WUE được xóa sau khi trên chân RX/DT xuất hiện sườn lên.giống như quá trình truyền bình thường . đặc biệt là ứng dụng trong việc sử dụng bộ dao động bắt đầu ngưng hoạt động (i. set bit WUE khi sử dụng EUSART . XT or HS mode). Nếu hoạt động nhận không xảy ra thì bit WUE có thể sau đó được đặt trước khi vào chế độ Sleep • KÍ TỰ NGẮT LIÊN TIẾP Module EUSART có thể gửi kí tự ngắt liên tiếp đặc biệt . • Cần phải đặc biệt thận trọng khi sử dụng bit WUE . Kí tự ngắt truyền bao gồm bit Start theo sau là 12 bit và một bit Stop. • Ngắt và truyền đồng bộ liên tiếp. nếu chíp hoạt động trong chế độ sleep (hình 18-9). dữ liệu trong RCREG sẽ là dữ liêu giả và nên được bỏ. Tín hiệu sử dụng trong sự kiện ngắt đồng bộ là sự kiền tràn. Bộ dao động bắt đầu hoạt động cũng phải được xem xét. kiểm tra bit RCIDL để xác nhận rằng một hoạt động nhận dữ liệu là không xảy ra trong quá trình này.Hoàng Văn Quân. Đây có thể là 00h (8 bits) theio chuẩn thiết bị RS-232 hoặc 000h (12 bits) theo chuẩn LIN. Chú ý rằng giá trị dữ liệu ghi vào TXREG cho kí tự ngắt được bỏ qua.e. Vào thời điểm đó. thông tin về thay đổi trạng thái trước khi bit Stop là tín hiệu lỗi End-of-Character (EOC) và nguyên nhân là lỗi dữ liệu hoặc lỗi khung truyền .Vi điều khiển Pic Sau sự kiện kích hoạt . (hình 18-8) và chế độ không đồng bộ. Lớp ĐKTĐ1-K49 46 . Kí tự ngắt đồng bộ (tín hiệu kích hoạt ) phải đủ dài và sau đó phải cho phép đủ thời gian để cho phép bộ dao động bắt đầu và cung cấp giá trị khởi tạo cho EUSART. Bit TRMT để chỉ ra rằng khi quá trình truyền là không hoạt động hoặc chế độ Idle. Như đã lưu ý. Người sử dụng nên xem xét các triển khai phương pháp song song trong firmware (là phần mềm nhớ trong bộ nhớ chỉ đọc) để nhận dữ liệu nguyên vẹn.

Ghi ‘55h’ vào TXREG để nạp kí tự đồng bộ vào đệm truyền FIFO. Khi truyền dữ liệu . đặt bit TXCKP để đặt trạng thái Idle trên CK như mức cao.Hoàng Văn Quân. trong khi xóa trạng thái Idle như là mức thấp. Sau khi ngắt được gửi . dữ liệu được truyền theo phương thức bán song công (truyền và nhận chỉ được xảy ra vào một thời điểm).bởi vì ngắt RCIF và nhận dữ liệu ở byte tiếp theo sau một ngắt khác. Chế độ chính chỉ ra rằng quá trình truyền chính tạo xung nhịp trên đường CK. Chiều xung nhịp được chọn bằng bit TXCKP (BAUDCON<4>). Lớp ĐKTĐ1-K49 47 . 3. Chế độ đồng bộ được cho phép bằng cách set bit SYNC (TXSTA<4>). • EUSART SYNCHRONOUS MASTER TRANSMISSION Khối biểu đồ truyền EUSART đưa ra trên hình 18-3. sau đó là byte n Auto-Baud Sync . • NHẬN MỘT KÍ TỰ NGẮT. Điều này cho phép bit Stop truyền đúng vị trí lấy mẫu (13 bits cho bit Start chống ngắt và 8 bit dữ liệu cho dữ liệu bình thường). Cấu hình EUSART để có chế độ mong muốn. Ngoài ra. được biết bởi bit TXIF. quá trình nhận bị cấm và ngược lại . 5.4 “Auto-Wake-up on Sync Break Character”. EUSART sẽ lấy mẫu ở hai lần truyền tiếp theo trên RX/DT. Sự chọn này được cung cấp để hỗ trợ thiết bị Microwire devices với module này. Bởi việc cho phép đặc điểm này. 2. Kí tự đồng bộ bây giờ được truyền trong chế độ cấu hình sẵn rồi. bit cho phép SPEN (RCSTA<7>) được set để cấu hình cho chân TX và chân RX tương ứng với đường xung nhịp CK (clock) và đường dữ liệu DT (data) . Khi thanh ghi TXREG trở nên rỗng. Trung tâm của khối truyền là thanh ghi dịch ( nối tiếp) TSR. Phương pháp đầu tiên là cấu hình tốc độ baud bằng 9/13 tần số bình thường. Nạp vào TXREG một kí tự giả để bắt đầu truyền (giá trị này sẽ được loại bỏ ). Module USART mở rộng có thể nhận một kí tự ngắt bằng hai cách. Set bit TXEN và bit SENDB để đặt chế độ kí tự ngắt. bit SENDB được reset bởi phần cứng.Vi điều khiển Pic Sau khi có ngắt thì chuỗi liên tiếp sẽ được gửi bắt đầu bằng khung thông điệp . Thanh ghi dịch thu được dữ liệu từ thanh ghi đệm Phạm Văn Cường .2. byte dữ liệu tiếp theo có thể ghi vào TXREG. Trong chế độ này . 4. Đây một số thành phần chính thông thường của một LIN bus. 1. Phương pháp thứ 2 sử dụng đặc điểm của tự động kích hoạt ( auto-wake-up) mô tả trong mục 18. Chế độ đồng bộ chính EUSART Chế độ đồng bộ chính được nhập vào bằng cách set bit CSRC (TXSTA<7>).

4. 6. 3. Nếu bit cho phép SREN được set . Khởi tạo cho thanh ghi SPBRGH:SPBRG để có tốc độ baud thích hợp. 5. set bit cho phép TXIE. Nếu chọn truyền 9 bit trong khung dữ liệu . Nếu cho phép ngắt. Bit cờ ngắt RCIFsẽ được set khi quá trình nhận hoàn thành và một ngắt sẽ được phát ra nếu bit cho phép RCIE đã được set. Cho phép cổng nối tiếp chính đồng bộ bằng cách set bit SYNC.chỉ khi có từ đơn được nhận. 7. Thanh ghi TSR không được cho sẵn trong bộ nhớ vì vậy nó không có sẵn cho người sử dụng. Chắc chắn rằng bit CREN và SREN được xóa. Đọc thanh ghi RCSTA để xác định lỗi trong quá trình nhận.nó có thể được xóa trong phần mềm. set bit SREN. 3. set hoặc xóa bit BRGH và BRG16 để có được tốc độ baud mong muốn. quá trình nhận sẽ tiếp tục cho đến khi bit CREN được xóa. Nếu sử dụng ngắt thì phải đảm bảo rằng các bit GIEvà PEIE trong thanh ghi INTCON (INTCON<7:6>) phải được set. 8. Không có ngắt logic nào được tạo ra từ bit này vì vậy người sử dụng phải giám sát bit này để xác định thanh ghi TSR có rỗng không. thanh ghi TSR được nạp giá trị mới từ TXREG (nếu cho phép ). Set bit RX9 để cho phép nhận 9 bit. set hoặc xóa bit BRGH và BRG16 để có được tốc độ baud mong muốn. hoặc đọc bit dữ liệu thứ 9 (nếu có thể dùng). thanh ghi TXREG bị trống và bit cờ TXIF (PIR1<4>) được set . 5. Một khi thanh ghi TXREG truyền dữ liệu cho thanh ghi TSR (xảy ra trong một TCY). Thanh ghi TSR không được nạp dữ liệu cho đến khi bit cuối cùng được truyền từ lần nạp trước. Để tiếp tục nhận set bit CREN. Nếu bit cho phép CREN được set. Phạm Văn Cường . Lớp ĐKTĐ1-K49 48 . Bắt đầu truyền bằng cách nạp dữ liệu vào thanh ghi TXREG . 2. Ngắt có thể được cho phép hoặc không cho phép bằng cách đặt hoặc xóa bit cho phép ngắt TXIE (PIE1<4>). nhận dữ liệu được cho phép bằng cách set bit Single Receive Enable SREN (RCSTA<5>).Hoàng Văn Quân.thì bit thứ 9 sẽ được nạp vào bit TX9D. SPEN và CSRC. SPEN và CSRC. hoặc bit cho phép tiếp tục nhận CREN (RCSTA<4>). Khởi tạo cho thanh ghi SPBRGH:SPBRG để có tốc độ baud thích hợp. 8. TXIF được set cho dù trạng thái của bit cho phép ngắt TXIE thế nào. Thiết lập chế độ nhận đồng bộ Master: 1. 4. 6. Set bit RX9 để cho phép nhận 9 bit. • CHẾ ĐỘ NHẬN ĐỒNG BỘ MASTER Một khi chế độ đồng bộ được chọn. Nó chỉ sẽ được reset khi dữ liệu mới được nạp lại thanh ghi TXREG . Nếu muốn có ngắt. Thiết lập chế độ truyền đồng bộ chủ: 1. set bit RCIE. Thanh ghi TXREG được nạp dữ liệu từ phần mềm . Dữ liệu là các mẫu trên chân RX khi có sườn xuống của xung nhịp. Nếu cả hai bit được set .Vi điều khiển Pic đọc/ghi TXREG. 7. Cho phép truyền bằng cách set bit TXEN. Thanh ghi TRMT chỉ được đọc khi bit báo trạng thái thanh khi TSR là trống rỗng được set. thì CREN được ưu tiên. 2. Ngay khi bit cuối cùng được truyền. Nếu nhận riêng rẽ . Trong khi bit cờ TXIF báo trạng thái của thanh ghi TXREG thì bit khác là bit TRMT (TXSTA<1chỉ trạng thái thanh ghi TSR . Cho phép cổng nối tiếp chính đồng bộ bằng cách set bit SYNC.

Chế độ đồng bộ Slave được đưa vào hoạt động bằng cách xóa bit CSRC (TXSTA<7>). Chế độ này khác với chế độ đồng bộ Master Synchronous Master mode trong đó xung nhịp được cung cấp từ bên ngoài ở chân CK (thay vì cung cấp từ bên trong trong chế độ Master ). d) Khi từ thứ nhất được truyền khỏi thanh ghi TSR. set bit TXIE. Set bit RX9 để cho phép nhận 9 bit. nếu bit cho phép RCIE được set. ngoại trừ trong chế độ Sleep. ngắt được phát sẽ được kích hoạt chíp trong chế độ tiết kiệm năng lượng. Cho phép truyền bằng cách set bit cho phép TXEN . ngắt sẽ kích hoạt chip từ chế độ Sleep. Cho phép nhận bằng cách set bit cho phép CREN . Nếu hai từ được viết lên TXREG và sau đó chế độ SLEEP hướng dẫn được thực hiện như sau: a) Từ đầu tiên sẽ ngay lập tức được chuyển vào thanh ghi TSR và truyền. Nếu ngắt toàn cục được cho phép . • CHẾ ĐỘ TRUYỀN ĐỒNG BỘ SLAVE CỦA EUSART. chương trình sẽ phân nhánh vector ngắt . • CHẾ ĐỘ NHẬN ĐỒNG BỘ SLAVE CỦA EUSART. 7. 2. Nếu nhận được cho phép bởi việc set bit CREN bit ưu tiên chế đô hoặc chế độ Idle . e) Nếu bit cho phép TXIE được set . • Chế độ đồng bộ Slave của EUSART. 11. 3. 8. Đọc 8 bit dữ liệu nhận bằng cách đọc thanh ghi RCREG . Nếu cho phép ngắt. sau khi một từ có thể nhận trong chế độ tiết kiệm năng lượng. Nếu có lỗi thì xóa lỗi bằng cách xóa bit CREN .Hoàng Văn Quân. Cho phép cổng nối tiếp Slave bằng cách set bit SYNC và bit SPEN và xóa bit CSRC. 3. 10.Vi điều khiển Pic 9. c) Bit cờ TXIF sẽ không được set. Lớp ĐKTĐ1-K49 49 . Cho phép cổng nối tiếp Slave bằng cách set bit SYNC và bit SPEN và xóa bit CSRC. Hoạt động của chế độ Master và Slave là giống nhau . Hoạt động của chế độ Master và Slave là giống nhau . Bắt đầu truyền bằng cách nạp dữ liệu cho thanh TXREG. Nếu sử dụng ngắt thì phải đảm bảo rằng các bit GIEvà PEIE trong thanh ghi INTCON (INTCON<7:6>) phải được set. Nếu sử dụng ngắt thì phải đảm bảo rằng các bit GIEvà PEIE trong thanh ghi INTCON (INTCON<7:6>) phải được set. b) Từ thứ hai còn lại ở trong thanh ghi TXREG . Nếu ngắt toàn cục được cho phép . 5. 4. Điều này cho phép thiết bị truyền và nhận dữ liệu trong chế độ tiết kiệm năng lượng. Xóa bit CREN và bit SREN. chương trình sẽ phân nhánh vector ngắt .bit thứ 9 được nạp từ bit TX9D. ngoại trừ trong chế độ Sleep hoặc chế độ Idle và bit SREN là bit “ don’t care ” trong chế độ Slave. Set bit RX9 để cho phép nhận 9 bit. set bit cho phép RCIE. thanh ghi RSR sẽ truyền dữ liệu cho thanh ghi RCREG . Thiết lập chế độ truyền đồng bộ Slave: 1. Nếu chọn truyền 9 bit được chọn . 4. 2.thanh ghi TXREG sẽ truyền từ thứ hai cho thanh ghi TSR và bit cờ TXIF bây giờ sẽ được set. Một khi một từ được nhận . Thiết lập chế độ nhân đồng bộ Slave : 1. Phạm Văn Cường . 6. Nếu cho phép ngắt.

7. Thanh ghi ADCON2 chỉ ra trong thanh ghi 19-3. Bit cờ RCIF sẽ được set khi nhận hoàn thành . Đọc 8 bit dữ liệu nhận bằng cách đọc thanh ghi RCREG . Chế độ này cho phép trao đổi tín hiệu tương tự đầu vào tương đương với 10 bit số.2) 0110 = Channel 6 (AN6) (1.xóa lỗi bằng cách xóa bit CREN.Vi điều khiển Pic 5. 1.2) 1000 = Channel 8 (AN8) 1001 = Channel 9 (AN9) 1010 = Channel 10 (AN10) 1011 = Channel 11 (AN11) 1100 = Channel 12 (AN12) 1101 = Không xác định(2) Phạm Văn Cường . Thanh ghi ADCON0 bit 7-6 Unimplemented: mang giá trị ‘0’ bit 5-2 CHS3:CHS0: bit lựa chọn kenh tương tự 0000 = Channel 0 (AN0) 0001 = Channel 1 (AN1) 0010 = Channel 2 (AN2) 0011 = Channel 3 (AN3) 0100 = Channel 4 (AN4) 0101 = Channel 5 (AN5) (1. Module chuyển đổi tưong tự sang số 10 bit (A/D) Module chuyển đổi tương tự sang số (A/D) có 10 đầu vào trong thiết bị 28 chân và có 13 đầu vào trong thiết bị 40/44 chân . Lớp ĐKTĐ1-K49 50 . Module có năm thanh ghi: • A/D Thanh ghi kết quả cao (ADRESH) • A/D Thanh ghi kết quả thấp (ADRESL) • A/D Thanh ghi điều khiển 0 (ADCON0) • A/D Thanh ghi kết quả thấp 1 (ADCON1) • A/D Thanh ghi điều khiển 2 (ADCON2) Thanh ghi ADCON0 trong thanh ghi 19-1.2. 8.cấu hình chức năng của các chân ở cổng. Một sẽ được phát nếu bit cho phép RCIE được set . 9. 6.Hoàng Văn Quân. điều khiển hoạt động của module A/D. Nếu có lỗi xảy ra . cấu hình cho nguồn xung A/D .2) 0111 = Channel 7 (AN7)(1.7. Đọc thanh ghi RCSTA để nhận bit thứ 9 ( nếu cho phép ) và được xác định nếu có lỗi xảy ra trong quá trình nhận. Thanh ghi ADCON1 trong thanh ghi 19-2. Nếu sử dụng ngắt thì phải đảm bảo rằng các bit GIEvà PEIE trong thanh ghi INTCON (INTCON<7:6>) phải được set. phần mền sẽ thu thập thời gian và hiệu chỉnh.

0 = A/D Module chuyển đổi không cho phép . Thanh ghi ADCON1 bit 7-6 Unimplemented: mang giá trị ‘0’ bit 5 VCFG1: Bit cấu hình điện áp chuẩn (VREF.Hoàng Văn Quân. 0 = A/D Idle bit 0 ADON: bit hoạt động A/D 1 = A/D Module chuyển đổi được cho phép.source) 1 = VREF.(AN2) 0 = VSS bit 4 VCFG0: bit cấu hình điên áp chuẩn (VREF+ source) 1 = VREF+ (AN3) 0 = VDD bit 3-0 PCFG3:PCFG0: A/D Những bít cấu hình điều khiển cổng: Thanh ghi ADCON2 Phạm Văn Cường . Lớp ĐKTĐ1-K49 51 .Vi điều khiển Pic 1110 = Không xác định (2) 1111 = Không xác định (2) bit 1 GO/DONE: A/D trạng thái bit chuyển đổi Khi bit ADON = 1: 1 = A/D đang trong quá trình chuyển đổi.

Bộ biến đổi tương tự số A/D có đặc điểm là có thể hoạt động khi thiết bị ở chế độ Sleep . Mỗi cổng được nối với bộ biến đổi A/D có thể cấu hình như một đầu vào tương tự hoặc như cổng và ra số.Hoàng Văn Quân. xung nhịp chuyển đổi A/D có thể được lấy từ bộ dao động RC bên ngoài của bộ chuyển đổi A/D.bit GO/DONE ( thanh ghi ADCON0 ) được xóa và bit cờ ngắt A/D ( ADIF) được set. Sau khi kênh đầu vào tương tự được chọn ( thay Phạm Văn Cường . Môt thiết bị được reset thì buộc phải reset tất cả các thanh ghi trạng thái của nó . Module vào tương tự trong hình 19-3. Sơ đồ khối của module trong hình 19-1. Trở kháng nguồn (RS) và trở kháng bên trong công tắc lấy mẫu (RSS) ảnh hưởng trực tiếp đến thời gian nạp CHOLD. Thanh ghi ADRESH và thanh ghi ADRESL chứa kết quả của chuyển đổi A/D. Trở kháng nguồn ảnh hưởng trực tiếp đến điện áp offset ( điện áp lệch) ở đầu vào tương tự (rò điện trên chân ).Vi điều khiển Pic bit 7 ADFM: bit chọn định dạng cho A/D 1 = Căn chỉnh bên phải 0 = Căn chỉnh bên trái bit 6 Unimplementedânmng giá trị ‘0’ bit 5-3 ACQT2:ACQT0:bit lựa chịn thời gian thu nhận A/D 111 = 20 TAD 110 = 16 TAD 101 = 12 TAD 100 = 8 TAD 011 = 6 TAD 010 = 4 TAD 001 = 2 TAD 000 = 0 TAD bit 2-0 ADCS2:ADCS0: bít lựa chọn xung chuyển đổi A/D 111 = FRC ( xung dẫn xuất từ bộ dao động A/D RC ) 110 = FOSC/64 101 = FOSC/16 100 = FOSC/4 011 = FRC 010 = FOSC/32 001 = FOSC/8 000 = FOSC/2 Điện áp chuẩn tương tự được chọn bởi phần mềm là một trong hai mức tích cưc của thiết bị cung cấp điện áp là tích cực dương và tích cực âm (VDD và VSS). Giá trị trở kháng lớn nhất cho phép của nguồn tương tự là 2. Đầu ra của mẫu và giá trị giữ được lấy từ đâu vào của bộ chuyển đổi.Khi module A/D module bị tắt và bất cứ quá trình chuyển đổi nào cũng bị bỏ . Trở kháng trên các công tắc lấy mẫu (RSS) thay đổi khác nhau trên thiết điên áp khác nhau (VDD). Hoạt động trong chế đô Sleep. hoặc mức điện áp trên các RA3/AN3/ VREF+ và các chân RA2/AN2/VREF-/CVREF .Khi chuyển đổi A/D hoàn thành kết quả được nạp vào cặp thanh ghi ADRESH:ADRESL . mà nó đưa ra thông qua việc lấy xấp xỉ.5 kΩ . • Yêu cầu khi sử dụng bộ thu nhận A/D Đối với bộ A/D để đảm bảo độ chính xác tụ nạp điên phải được cho phép nạp đầy mức điện áp đầu vào . Lớp ĐKTĐ1-K49 52 .

) EQUATION:ACQUISITION TIME EQUATION:A/D MINIMUM CHARGING TIME EQUATION:CALCULATING THE MINIMUM REQUIRED ACQUISITION TIME • Chọn và cấu hình thời gian cần thiết . Khi bit GO/DONE được set. Trong công thức này cho rằng 1/2 bit có trọng số lớn ( LSb error ) được sử dụng (1024 bước cho A/D). Khi bit GO/DONE được set. Ví dụ 19-3 chỉ ra cách tính thời gian bé nhất cần thiết TACQ. Khi thời gian thu nhận được lập trình . module A/D tiếp tục lấy mẫu đầu vào để chọn thời gian . mẫu sẽ ngừng nhận và quá trình nhận được bắt đầu . Tính toán này dựa trên các giả thiết thông số hệ thống sau: − CHOLD = 25 pF − Rs = 2. Người sử phải có trách nhiệm đảm bảo thời gian thu nhận cần thiết phải qua thời điểm chọn kênh và set bit GO/DONE .sau đó tự động bắt đầu quá trình chuyển đổi . nó cung cấp một dải của 2 đến 20 TAD. Thời gian nhận được phải được đặt với bit ACQT2:ACQT0 ( ADCON2 <5:3>). có thể không cần đợi một thời gian thu nhận từ lúc chọn kênh đến lúc set bit GO/DONE . Sự lựa chọn này cũng mặc định thiết lập lại trạng Phạm Văn Cường . 1/2 bit có trọng số lớn lỗi là lỗi lớn nhất cho phép của A/D đáp ứng độ phân giải đã định . Tính toán thời gian nhỏ nhất yêu cầu To calculate the minimum acquisition time.Vi điều khiển Pic đổi ). Nó cũng cho người sử dụng lựa chọn sử dụng tự động xác định thời gian cần thiết .5 kΩ − Conversion Error ≤ 1/2 LSb − VDD =5V → Rss = 2 kΩ − Temperature = 85°C (system max. Chế độ chọn thời gian thu nhận bằng tay được chọn khi ACQT2 :ACQT0 = 000. Công thức 19-1 có thể được sử dụng .Hoàng Văn Quân. Lớp ĐKTĐ1-K49 53 . kênh này phải lấy mẫu trong thời gian nhỏ nhất yêu cầu trước khi bắt đầu chuyển đổi . Thanh ghi ADCON2 cho phép cho phép người sử dụng chọn được thời gian cần thiết và thời gian này xảy ra mỗi lần bit GO/DONE được set .

Bảng 19-1 chỉ ra rằng tổng thời gian TAD nhận được từ tần số thiết bị hoạt động và nguồn xung nhịp A/D được chọn. không có gì để xác định nếu thời gian thu nhận đã kết thúc nếu quá trình truyền đã bắt đầu .khi chuyển đổi hoàn thành thì bit thì bit GO/DONE được xóa. Lớp ĐKTĐ1-K49 54 . Có bảy thời gian lựa chọn cho TAD: •2 TOSC •4 TOSC •8 TOSC •16 TOSC •32 TOSC •64 TOSC • Bộ tạo dao động RC . Nguồn xung nhịp A/D chuyển được phần mềm chọn . Và thời gian A/D truyền 10-bit cần là 11 TAD.Vi điều khiển Pic thái của bit ACQT2:ACQT0 và tương thích với thiết bị mà không cung cấp cho lập trình thời gian thu nhận. Chọn chế độ thời gian thu nhận tự động và xung nhịp chuyển đổi A/D được xác định một phần từ xung nhịp nguồn và tần số trong chế độ quản lí nguồn . Trong cả hai trường hợp .bộ A/D thu nhân hoặc chuyển đổi có thể bắt bắt đầu hoạt động .thiết bị có thể đặt vào chế độ Idle tương ứng trong quá trình chuyển đổi. Sau khi nhập chế độ . và nguồn xung nhịp RC của Phạm Văn Cường . Nếu thời gian thu nhận được lập trình . Thời gian A/D chuyển đổi một bit được xác định như là một TAD. Nếu bộ A/D phải hoạt động trong khi thiết bị trong chế độ quản lí nguồn thì bit ACQT2:ACQT0 và bit ADCS2:ADCS0 bits trong thanh ghi ADCON2 phải được cập nhập phù hợp với nguồn xung được sử dụng trong chế độ này . • Hoạt động trong các chế độ quản lí nguồn. Nếu tần số xung nhịp thiết bị là thấp hơn 1 MHz. Kiểm tra bộ chuyển đổi A/D .Hoàng Văn Quân. Nếu muốn . Khi nó hoạt động xung nhịp của thiết bị nên tiếp tục giữ bằng xung nhịp của nguồn cho đến khi quá trình chuyển đổi được hoàn thành . • Chọn xung nhịp chuyển đổi A/D . cờ ADIF được set và A/D bắt đầu lấy mẫu được chọn một lần nữa . xung nhịp bộ chuyển đổi A/D (TAD) phải ngắn nhất có thể nhưng lớn hơn thời gian nhỏ nhất TAD ( xem tham số 130 để biết thêm thông tin).

Các chân khi mà làm việc như cổng vào cần phải set các bit TRIS tương ứng (đầu vào). Khi kích hoạt xảy ra .như là mạch cần để nạp mảng tụ điện .Vi điều khiển Pic A/D được chọn . Một sự biến đổi được bắt đầu sau khi lệnh cho phép đi vào chế độ Sleep .chứ không phải nạp /phóng điện dựa trên sự đo lường giá trị . Sau khi chuyển đổi A/D được hoàn thành hoặc hủy bỏ . Hình 19-5 minh họa hoạt động của bộ biến đổi sau khi bit GO/DONE đã được set và bit ACQT2:ACQT0 được set thành ‘010’. thời gian chờ 2TAD là cần thiết trước lần thu nhận tiếp theo có thể bắt đầu . Điều này có nghĩa rằng thanh ghi ADRESH:ADRESL sẽ tiếp tục chứa giá trị của lần chuyển đổi trước (hoặc giá trị đã ghi vào thanh ghi ADRESH:ADRESL ). Lớp ĐKTĐ1-K49 55 . Đặc điểm này giúp tối ưu hóa bộ khuếch đại. Bit IDLEN(OSCCON<7>) phải đã được xóa trước khi quá trình chuyển đổi.Hoàng Văn Quân. Nếu bit TRIS bị xóa . thì quá trình chuyển đổi sẽ được trễ trong một chu kì lệnh cho phép thực hiện lệnh SLEEP để đi vào chế độ Sleep .Dãy tụ điện này được phóng điện trước tất cả các mẫu .bit GO/DONE sẽ được set . • Cấu hình các chân của cổng tương tự. • Sử dụng Trigger CCP2 Một bộ chuyển đổi A/D có thể được khởi động bằng cách kích hoạt sự kiện đặc biệt của module CCP2 . Cặp thanh ghi kết quả của chuyển đổi A/D sẽ không được cập nhật khi mẫu chuyển đổi mới hoàn thành một phần . Nếu bit ACQT2:ACQT0 được set thành ‘000’ và quá trình chuyển đổi được bắt đầu . Hoạt động của A/D độc lập với trạng thái của bit CHS3:CHS0 và bit TRIS . Các thanh ghi ADCON1. Xóa bit GO/DONE trong quá trình chuyển đổi sẽ bỏ qua dòng chuyển đổi .Hoạt động trong chế độ Sleep cần chọn nguồn xung nhịp FRC của A/D . bắt đầu quá trình nhận và chuyển đổi . kênh thu nhận được chọn thì tự động bắt đầu hoạt động . bộ đếm của Timer1 (hoặc Timer3) được reset về không. TRISB và TRISE dùng để cấu hình cho các chân của cổng tương tự số A/D . • Sự biến đổi A/D Hình 19-4 minh họa hoạt động của bộ biến đổi A/D sau khi bit GO/DONE được set và bit ACQT2:ACQT0 được xóa. TRISA. Timer1 Phạm Văn Cường .mức cổng ra số ( VOH hoặc VOL ) sẽ được bị biến đổi . • Phóng điện Giai đoạn phóng điện được sử dụng để khởi tạo giá trị cho dãy tụ điện. và chọn thời gian thu nhận bằng 4TAD trước khi chuyển đổi bắt đầu . Sau thời gian chờ này . Sự kiện này cần các bit CCP2M3:CCP2M0 (CCP2CON<3:0>) được lập trình bằng ‘1011’và module A/D được cho phép (bit ADON được set ).

Lớp ĐKTĐ1-K49 56 . sự kiện kích hoạt ngắt đặc biệt sẽ bị bỏ qua bởi module A/D. Kênh đầu vào tương tự tương ứng phải được chọn và chu kì chuyển đổi nhỏ nhất cũng được đặt bởi người sử dụng. ----------------------------o0o--------------------------- Phạm Văn Cường . nhưng vẫn reset bộ đếm của Timer1 (hoặc Timer3) .Hoàng Văn Quân.Vi điều khiển Pic (hoặc Timer3) được reset tự động lặp lại chu kì chuyển đổi với mục đích tối ưu hóa phần mềm(chuyển ADRESH:ADRESL đến vị trí mong muốn ). Nếu module A/D không được cho phép hoạt động (bit ADON được xóa). thời gianTACQ tương ứng được chọn trước khi sự kiện kích hoạt đặc biệt set bit GO/DONE (bắt đầu quá trình chuyển đổi ).

dung luợng bộ nhớ lớn hoặc có thể mở rộng được bộ nhớ với dòng chip Pic mới thì cơ bản đáp ứng yêu cầu này. bên cạnh đó là các đầu vào số cho phép thu thập các giá trị logic số. 0-10V và đầu vào đo điện trở. cho phép gửi và nhận dữ liệu với máy tính.1 Thiết kế mô hình phần cứng mạch điều khiển 2.1 Mô hình khối mạch điều khiển Phạm Văn Cường .Hoàng Văn Quân.1. Yêu cầu thiết kế Khi thiết kế một kit điều khiển thành phần trung tâm là vi điều khiển để cho phép có thể cài đặt nhiều thuật toán điều khiển thì trước tiên yêu cầu vi diều khiển phải tính toán nhanh. 4 -20mA.Kit có khối bàn phím cho phép nhập một số tham số và chế độ hoạt động. 4 -20mA. nhận tín hiệu ngắt từ bên ngoài. đếm xung. bao gồm đầu ra logic số. .Kit có các đầu ra tương tự theo các chuẩn công nghiệp 0-20mA. .1.Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC Chương 2: Thiết kế bộ điều khiển PID số 2. 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.Kit có các phần tử cho phép hiển thị là LCD hoặc LED . . 0 10V.Kit giao tiếp với máy tính qua cổng nối tiếp RS 232.Kit có các đầu vào tương tự theo các chuẩn công nghiệp 0-20mA. các đầu ra số. 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 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. Lớp ĐKTĐ1-K49 57 . đầu ra xung cho phép băm xung hoặc phát tần số. . .

4 -20mA.Sử dụng mạch nạp PicKit2 riêng để nạp chương trình cho PIC18F4520 Hinh 2.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.Hoàng Văn Quân.1. 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.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ý. 2.Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC 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. giám sát.3 Mạch nạp cho vi điều khiển trung tâm Phạm Văn Cường . 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. 0-10V còn các đầu vào ra số là các tín hiệu logic hoặc xung số. điều khiển hoạt động toà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. . Lớp ĐKTĐ1-K49 58 . Ngoài ra: .Vi điều khiển Pic18F4520 sử dụng mạch dao động thạch anh ngoài tần số 10MHz.

Hoàng Văn Quân.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 . .5 : Cấu tạo cổng COM Phạm Văn Cường . Hình 2. 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. Ngày nay. Lớp ĐKTĐ1-K49 59 .Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC b) Khối giao tiếp máy tính qua cổng nối tiếp Hinh 2.RTS (Request To Send): Yêu cầu gửi. 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ó 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. 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).RxD (Receive Data): đường nhận dữ liệu . bộ truyền đặt đường này lên mức hoạt động khi sẵn sàng truyền dữ liệu.TxD (Transmit Data): đường gửi dữ liệu .CTS (Clear To Send): Xoá để gửi. Cấu tạo cổng COM .

Tính chống nhiễu tương đối tốt. .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. 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. .6 Modul bàn phím Phạm Văn Cường . 8 bit dữ liệu không sủ dụng bit Parity. RxD. Cổng nối tiếp có nhiều ưu điểm và đặc điểm nổi trội: .DCD (Data Carrier Detect): Phát hiện tín hiệu mang dữ liệu. . c) Khối bàn phím - Hinh 2. cho biết là bộ nhận đang nhận tín hiệu rung chuông.Hoàng Văn Quân. . 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 . 1 bit stop. RxD . 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.SG (Signal Ground): Đất của tín hiệu.Số lượng dây kết nối ít tối thiểu 3 dây: TxD. .DTR (Data Terminal Ready): Đầu cuối dữ liệu sẵn sàng. 1bit start. . Lớp ĐKTĐ1-K49 60 . 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. GND. GND không dùng chế độ bắt tay phần cứng.RI (Ring Indicate): Báo chuông. khoảng cách truyền xa hơn cổng song song. . nếu khi cần bắt tay chúng ta có thể sử dụng phần mềm.Ghép nối dễ dàng vi điều khiển hoặc PLC.Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC DSR (Data Set Ready): Dữ liệu sẵn sàng.

d) Khối hiển thị LCD 2x16(2 dòng. và ngắt ngoài INT0 được kích hoạt khi có sườn xuống (1 0).Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC 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. Nếu tích đó bằng “0” thì không phải cột 1 có phím nhấn. 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. từ đó xác định được phím nào đã nhấn. Trong thủ tục ngắt ta xác định phím nào được nhấn. 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 Phạm Văn Cường . Đầ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. Lớp ĐKTĐ1-K49 61 . đầu tiên ta cho COL1=1 và COL2=COL3=COL4=0 sau đó kiểm tra tích ROW1*ROW2* ROW3*ROW4. Ban đầu khởi tạo các COL1 : COL4 là 0000. để xác định được ta cần xác định ra hàng và cột của phím được nhấn.Hoàng Văn Quân. Cứ tiếp tục như vậy ta sẽ xác định được cột có phím nhấn. nếu tích bằng “1” thì 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.

Chỉ dùng LCD để hiển thị (Write) nên chân R/W được nối mass.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 . e) Khối mạch động lực điều khiển Hinh 2. f) Khối nguồn 12V/5V Hình 2.Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC - Hình 2. Lớp ĐKTĐ1-K49 62 .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.Hoàng Văn Quân.9 Sơ đồ khối nguồn Phạm Văn Cường .

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. truyền thông cổng Com. . led.Hoàng Văn Quân. hai chân vào ra cho phép kết nối đầu vào ra khác.24V sau đó qua IC ổn áp LM7805 mắc song song để thu được điện áp đầu ra 5V. thu được điện áp 1 chiều 18 . Encoder.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ơ. Lớp ĐKTĐ1-K49 63 . 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ụ. ISP&ISCP để kết nối mạch nạp ngoài cho Chip. qua chỉnh lưu 2 nửa chu kỳ bằng cầu diode. và cầu chì bảo vệ đầu vào khi lấy nguồn từ biến áp. 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. Ngoài ra còn thêm đèn báo và công tắc bật. Sơ đồ nguyên lý kit điều khiển Phạm Văn Cường .Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC 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. ADC.

1. ngôn ngữ Asembly hoặc C18 .Tính toán đầu ra cho bộ điều khiển thiết kế.Hoàng Văn Quân. 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.Hiển thị dữ liệu lên LCD và tín hiệu đèn led. .2 Thiết kế phần mềm trên nền vi điều khiển PIC 2. Lớp ĐKTĐ1-K49 64 . ADC. . 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.2. . Phần mềm nhúng trên vi điều khiển PIC thực hiện các nhiệm vụ sau: . . Timer.Truyền dữ liệu lên máy tính qua cổng truỳen thông nối tiếp RS232. 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. các hàm bộ điều khiển PID… Phạm Văn Cường .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. Led.Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC Sơ đồ mạch in hai lớp 2.Nhận dữ liệu thông số từ máy tính và bàn phím. trong đề tài là bộ điều khiển PID số.

Lớp ĐKTĐ1-K49 65 . Giải thuật chương trình a) Loop điều khiển BEGIN Khởi tạo các khối chức năng: PWM.Hoàng Văn Quân.Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC 2.TIMER… Khởi tạo các giá trị ban đầu Start ? Yes Cập nhật dữ liệu từ ADC CPU Tính toán thuật toán PID No Digital Kiểu cổng ra ? Analog PWM CPU ADC Xử lý truyền thông END Hình 2.LCD.2.10 Lưu đồ loop điều khiển Phạm Văn Cường .2.

Start Interrupt If (Biến đếm < Constant) then biến đếm++ Else biến đếm=Constant. *) Xấp xỉ thành phần D .Khai triền thành chuỗi Phạm Văn Cường .1) 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. b) Thuật toá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.Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC 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. Đ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.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”. thực hiện thuật toán Flag=1. End Interrupt Hình 2. Lớp ĐKTĐ1-K49 66 .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 thang : Trong đó T là chu kì trích mẫu .Hoàng Văn Quân.Xấp xỉ theo nguyên tắc hình chữ nhật : Trong đó: .

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 = .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 .Vi phân xấp xỉ bậc 2 : .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.12 Sơ đồ bộ điều khiển PID số Phạm Văn Cường . Từ đó ta có : (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: .Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC .Hoàng Văn Quân.4) Mô hình bộ điều khiển PID số: Hình 2. Lớp ĐKTĐ1-K49 67 .3) .xk.

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ợ.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 xoá trạng thái của nó bằng vòng lặp. . Khi thiết kế thuật toán PID số cho vi điều khiển chúng ta cũng thực hiện thuật toá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 toán. Hiện tượng bão hoà 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.Thực hiện thuật toán bù thành phần tích phân bằng phản hồi giá trị thực đo được. Mỗi một chu kì thực hiện thuật toá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 .13 Chống bão hào tích phân Phạm Văn Cường . 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. 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 .Đặ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 toán bù. . 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 toán PID áp đặt lên cơ cấu chấp hành điều khiển đối tượng. Lớp ĐKTĐ1-K49 68 .Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC 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. .Hoàng Văn Quân. Vấn dề này rất thường gặp khi thực thi luật điều khiển PID. 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 hoà tích phân (Winup). Giải quyết vấn đề này có thể sử dụng phương pháp: . 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 toán PID trên vi điều khiển cũng khác nhau.Giảm hệ số khuếch đại để đầu ra nằm trong dải cho phép không quá lớn.

Kd . 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. 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.0(VB). 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. Lớp ĐKTĐ1-K49 69 .3.Hoàng Văn Quân.2.14. 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.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. xử lý dữ liệu đã nhận.Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC 2. Ki. Giao diện giao tiếp PC Phạm Văn Cường . 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. thông số cần đạt được …) • Phân tích. 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.

Lớp ĐKTĐ1-K49 70 . và picturebox dùng để nhận dữ liệu của người sử dụng vẽ vào.Button ‘Inverser’ điều khiển đảo chièu quay động cơ. Phạm Văn Cường . 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.Hoàng Văn Quân. 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. combobox cho phép lựa chọn các chế độ.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. 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.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. đồ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. . 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. thời gian đạt được …).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. .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. Trên cơ sở đó xây dựng thuật toán phía dưới vi điều khiển. . .Còn lại Button ‘Exit’ thực hiện thoát khỏi chương trình khi cần thiết .Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC Trên giao điện đồ hoạ gồm có các button điều khiển. Cụ thể hoạt động các phím chức năng như sau: . 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. 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.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. các textbox hiển thị số liệu. .

Có các khối hiển thị LCD.5V. . Lớp ĐKTĐ1-K49 71 . . Led . 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 toán của các câu lệnh. .Thời gian trích mẫu tối thiểu là 2.Có các cổng ra số ( xung số và logic) .Hoàng Văn Quân.Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC 2.Có các cổng vào tương tự : 0 .20mA. 0 .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òi cảnh báo Phạm Văn Cường .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 . 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 toán của VXL.55*10-5 s.

3.1 Đối tượng điều khiển 3. Thông số kĩ thuật Hình 3.Hoàng Văn Quân.Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC Chương 3: Ứng dụng bộ điều khiển PID số điều khiển động cơ một chiều 3.2 Sơ đồ thu thập dữ liệu nhận dạng Phạm Văn Cường . 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].1.2.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.1.3. Công suất 30-50w. Lớp ĐKTĐ1-K49 72 .1.1. 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. Tốc độ tối đa là 3000 vòng/phút. 3. Có gắn liền Encoder quang tương đối 100xung . [4]. [6] có mô hình dạng: WDT ( s ) = K 1 + 2 *ηTs + (Ts ) 2 (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.

dat’… Matlab vẫn hỗ trợ các dữ liệu định dạng này.Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC Hình 3. Khi thu thập dữ liệu đối tượng ta cho điện áp dầu vào động cơ là 9V.Hoàng Văn Quân.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. Phạm Văn Cường .xls’. thời gian trích mầu 5ms . ‘. Lớp ĐKTĐ1-K49 73 . Chúng ta hoàn toàn có thể chuyển dữ liệu dạng khác để sử dụng nhạn dạng như file ‘.mat’.

xls'.mat // mở của sổ nhận dạng Phạm Văn Cường .1) >> u1=X(:.Hoàng Văn Quân. 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.Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC 3. Khi nhận dạng đối tượng sử dụng dữ liệu trong miền thời gian Time – Domain Data. 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) .1) >> y1=X(:.1.xls // Đầu vào điện áp bước nhảy // đầu ra tốc độ y1 // lưu file dữ liệu dưới dạng identdata.2) >> save identdata u1 y1 >> ident // Đọc dữ liệu lưu trong data1.4. Lớp ĐKTĐ1-K49 74 .

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: WDT ( s ) = K Với η=0.Hoàng Văn Quân.67 1 + 2 *ηTs + (Ts ) 2 Phạm Văn Cường . Lớp ĐKTĐ1-K49 75 .T=0.31528 .Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC Hình 3.0057876 . K=138.3Chọn đầu vào và mô hình nhận dạng của đối tượng Hình 3.

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.5.Hoàng Văn Quân. Đá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. Lớp ĐKTĐ1-K49 76 .Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC Hình 3.1. Hình 3. Phạm Văn Cường .5 Đặc tính quá độ đối tượng sau khi nhận dang 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.

Phương pháp IMC Phương pháp này có ưu điểm là thiết kế tính toá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.T=0.2 Thiết kế luật điều khiển PID 3.31528 .2.06 Kp=Ti/(tc*K)= 0.041và hệ số k = 71.Đối tượng động cơ điện một chiều có mô hình : WDT ( s ) = K Với η=0. K=138.2. 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ế .00365=>Ki=0.092=>Kd=0. T = 0.0019 3.0004 Ti=2*η*T=0.67 1 + 2 *ηTs + (Ts ) 2 Ta có : Chon tc=0.2 Kp= 0.Hoàng Văn Quân. Lớp ĐKTĐ1-K49 77 . Từ hình vẽ trên ta có L = 0.0057876 .16 Ti = 0.0075 Td = 0.12 Td=T/(2*η)=0.2.00375 . 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 .000037 Phạm Văn Cường .Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC 3.1.

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. điện áp 40VDC. Chịu tải tối đa trên mỗi cầu là 2A. Lớp ĐKTĐ1-K49 78 . Logic “0” ở ngõ vào lên tới 1. 3.7 Mô phỏng trên Simulink các phương pháp điều khiển Hình 3.3.Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC 3.2. Như vậy phương pháp IMC cho ta kết quả tốt hơn. còn ZieglerNichols cho Tqd=230ms.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. 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.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 toán điều khiển là mạch công suất L298.Hoàng Văn Quân.5V ( khả năng khử nhiễu cao). Sử dụng dạng đóng gói Multiwatt15.5V nên tính chống nhiễu tốt. không có Diode nội bảo vệ Mosfet. Phạm Văn Cường . Mô phỏng và đánh giá chất lượng bộ điều khiển Mô hình Simulink: Hình 3.

5 Out1 Out2 4 6 Vs Chức năng 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 . Không kết nối .9 Input1 Input2 6. 79 - 3. Ngõ ra của cầu A .Hoàng Văn Quân.7 7. Lớp ĐKTĐ1-K49 . Cần có tụ điện 100nF nối giữa chân này với GND Các chân logic ngõ vào của cầu B 5.14 EnableA EnableB 8 9 10. Chân cấp nguồn cho tầng công suất.11 8.18 N.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.Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC Hình 3. 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 Chân ngõ vào của cầu A.10 Sơ đồ chân L298 Chức năng các chân : MW.10.11.12 1.19 Tên Sense A sense B 2.3 4.15 GND VSS Input3 Input4 13. Dòng của tải mắc giữa 2 chân này được qui định bởi chân 1.C Phạm Văn Cường . tương thích chuẩn TTL 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) Chân đất (Ground) Chân cấp nguồn cho khối logic.14 16.20 12 13.15 1.15 Power SO 2.

Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC Hình 3. M1B=X Chức năng Tiến động cơ Lùi động cơ Dừng khẩn cấp (phanh) Dừng không phanh Trong thực tế ứng dụng này. vì vậy cần phải có chế độ hạn dòng bằng phần mềm. 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 M1A=1. nhất là những tiếng kêu nghe rất rõ ở khoảng tần số 1KHz đến 3KHz. Lớp ĐKTĐ1-K49 80 . phanh động cơ. có nhiều tình huống không mong đợi xảy ra. M1B=0 M1E=1 M1E=0 M1A=0.D của L298 để điều khiển chiều động cơ. hoặc tuột dây nối.11: Các chế độ của L298 Hai chân C. động cơ DC chỉ có dòng tải 200mA khi hoạt động bình thường. Trong các trường hợp nguy hiểm như ngắn mạch do va chạm. 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. M1B=1 M1A=M1B M1A=X. và lên đến tối đa 2A khi quá tải. 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.Hoàng Văn Quân. 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. Phạm Văn Cường . Việc hạn chế dòng cho động cơ là rất cần thiết.

Hoàng Văn Quân. Lưu ý rằng. trong khuoân khoå baùo caùo ñoà aùn chæ trình baøy phaàn nguyeân lyù loaïi encoder söû duïng laø Encoder quang töông ñoái ( incremental encoder). Encoder töø tröôøng. Để đảm bảo điều khiển PWM ở tần số cao.4 Cảm biến (Encoder) Nguyeân lyù hoaït ñoäng cuûa caûm bieán encoder : coù nhieàu loaïi encoder khaùc nhau như : Encoder tieáp xuùc. 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 ). do đó cần có 4 Diode ngoài bảo vệ. Diode chuyên dụng để điều khiển động cơ là các Diode “fast recovery Schottky”. 3.12 : Sơ đồ giải pháp L298 không có Diode nội bảo vệ.13 : Mô hình1 . do vậy cần cần phải lắp miếng tản nhiệt.En coder quang tương đối Phạm Văn Cường . Encoder quang (Encoder quang töông ñoái vaø Encoder quang tuyeät ñoái).Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC Hình 3. Moâ hình thöù 1 Hình 3. Nhưng ở tần số khoảng 5KHz vẫn có thể dùng loại 1N4007. Lớp ĐKTĐ1-K49 81 . 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. Moãi loaïi laïi coù moät nguyeân lyù hoaït ñoäng khaùc nhau. cần dùng Diode nhanh có điện trở thấp. khi hoạt động L298 rất nóng.

Tuy nhieân. Hình 3. Lớp ĐKTĐ1-K49 82 . Trong quaù trình encoder quay quanh truïc. Caùi encoder maø em söû duïng trong ñoà aùn cuûa mình. moâ hình treân coù nhöôïc ñieåm lôùn laø : ta khoâng theå xaùc ñònh ñöôïc ñoäng cô quay traùi hay quay phaûi.Hoàng Văn Quân. Do ñoù ta coù theå duøng vi ñieàu khieån ñeám soá xung ñoù trong moät ñôn vò thôøi gian vaø tính ra toác ñoä ñoäng cô. Caûi tieán moâ hình 1 baèng moâ hình 2 nhö sau: Moâ hình thöù 2 Hình 3.15 : Mô hình 2 -En coder quang tương đối Phạm Văn Cường . vì coù quay theo chieàu naøo ñi nöõa thì chæ coù moät daïng xung ñöa ra.Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC Incremental encoder veà cô baûn laø moät ñóa troøn quay quanh moät truïc ñöôïc ñuïc loã nhö hình treân. Moãi encoder ñöôïc cheá taïo seõ bieát saün soá xung treân moät voøng.14 : Phương thức hoạt động Encoder quang tương đối ÔÛ 2 beân maët cuûa caùi ñóa troøn ñoù. neáu gaëp loã roáng thì aùnh saùng chieáu qua ñöôïc. seõ coù moät boä thu phaùt quang. Do ñoù tín hieäu nhaän ñöôïc töø sensor quang laø moät chuoåi xung. hoaøn toaøn gioáng vôùi moâ hình ôû treân. neáu gaëp maõnh chaén thì tia saùng khoâng chieáu quaù ñöôïc. Ngoaøi ra ñieåm baét ñaàu cuûa ñoäng cô. ta cuõng khoâng theå naøo bieát ñöôïc.

Vaán ñeà quan troïng trong vieäc tìm mua nhöõng loaïi ñoäng cô coù gaén encoder nhö theá naøy ñeå laøm ñoà aùn ñoái vôùi sinh vieân laø : caëp maét quang 2 beân encoder ñeå taïo xung thöôøng bò cheát vaø khoâng coù ñoà thay theá. neáu voøng ngoaøi nhanh pha hôn voøng trong thì chaéc chaén ñoäng cô quay töø traùi sang phaûi vaø ngöôïc laïi. Lớp ĐKTĐ1-K49 83 . Coù theå vieát chöông trình cho vi ñieàu khieån nhaän bieát : neáu coù moät xung phaùt ra töø voøng trong cuøng naøy. Voøng ngoaøi cuøng gioáng nhö moâ hình 1. Vôùi nhöõng ñaëc tính treân. Khi ñoù. Moät loaïi encoder thöù 2 cuõng phoå bieán hieän nay. Moät loã ôû voøng trong cuøng duøng ñeå phaùt hieän ñieåm baét ñaàu cuûa ñoäng cô. ngöôøi ta ñuïc taát caû laø 2 voøng loã. töùc laø ñoäng cô ñaõ quay ñuùng moät voøng. encoder duøng raát phoå bieán trong vieäc xaùc ñònh vò trí goùc cuûa ñoäng cô….16 : Sơ đồ xung của En coder quang tương đối(mô hình 2) Hai xung ñöa ra töø 2 voøng leäch nhau 90 ñoä. Moâ hình ñóa quang cuûa loaïi naøy nhö sau: Phạm Văn Cường .Hoàng Văn Quân.Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC Trong moâ hình naøy. ñoù laø :absolute encoder. daïng xung ra töø 2 voøng treân nhö sau : Hình 3.. voøng giöõa pha so vôùi voøng ngoaøi laø 90 ñoä.

Do vậy tổng số xung trên 1 vòng sẽ được nhân đôi lên thành 200 xung.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. 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.18 Cấu trúc hệ thống điều khiển Phạm Văn Cường .17 Sơ đồ hệ thốngđiều khiển động cơ Hình 3. Hai kênh xung A và B được đưa vào hai chân ngắt của VĐK là INT1 .Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC Cách tính tốc độ động sơ sử dụng trong đồ án Ở đồ án động cơ được gắn Encoder 100 xung/vòng. INT2. Lớp ĐKTĐ1-K49 84 .02 s nên : Tốc độ = Counter * 15 3. Ta thiết lập khi có sườn xuống thì tạo ngắt.Hoàng Văn Quân.

Hoàng Văn Quân. Lớp ĐKTĐ1-K49 85 .Sử dụng encoder quang tương đối dùng dể phản hồi tốc độ động cơ. . điện áp điều khiển… Hình 3. .19 Cấu trúc khối điều khiển động cơ Phạm Văn Cường . .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 độ .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.Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC Cơ sở nguyên lý thực hiện sơ đồ điều khiển tốc độ động cơ : .

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 Phạm Văn Cường .Thiết kế bộ điều khiển PID số trên nền vi điều khiển PIC 3. Lớp ĐKTĐ1-K49 86 .Hoàng Văn Quân.

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

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

Phạm Văn Cường - Hoàng Văn Quân. Lớp ĐKTĐ1-K49

87

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

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ỏ khoà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%.

Phạm Văn Cường - Hoàng Văn Quân. Lớp ĐKTĐ1-K49

88

Kết luận

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 toá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 toá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 toán. Pic 18F4520 là dòng vi điều khiển 8 bits có tốc độ tính toá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.

Phạm Văn Cường - Hoàng Văn Quân. Lớp ĐKTĐ1-K49

89

Một lần nữa. 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ô. 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.Hoàng Văn Quân.Kết luận 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. ----------------------------o0o---------------------------- Phạm Văn Cường .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. Lớp ĐKTĐ1-K49 90 . chúng em xin chân thành cảm ơn cô giáo PGS.

Nhà xuất bản khoa học kỹ thuật. Nhà xuất bản khoa học kỹ thuật. Nguyễn Văn Hoà : Tự động hoá quá trình công nghệ 7.dientuvietnam. Dương Thủy Vỹ : Phương pháp tính. Nguyễn Doãn Phước : Lý thuyết điều khiển tuyến tính. Phan Quốc Thắng – Cấu trúc và lập trình họ vi điều khiển 8051 3. Nhà xuất bản khoa học kỹ thuật. Bùi Quốc Khánh.diendandientu. Nhà xuất bản thông kê. Nguyễn Tăng Cường. www. Nguyễn Phùng Quang : Matlab & Simulink dành cho kỹ sư điều khiển tự động. Nguyễn Văn Liễn & Nguyễn Thị Hiền : Truyền động điện. Lớp ĐKTĐ1-K49 91 .net 16.Phụ lục. Hãng microchip:datasheet 18F4520 14. 2002 2.Hoàng Văn Quân. Phạm Công Ngô (chủ biên) : Tự học Visual C++ từ cơ bản đến nâng cao. 2002 9. 2002 10. Hãng Texas Instruments : datasheet MAX232 13. Nguyễn Phùng Quang : Bài giảng điều kiển số 6.Tài liệu tham khảo Tài liệu tham khảo 1. 2005 5. Hoàng Minh Sơn : Điều khiển quá trình 8. Hãng ST : datasheet L298 15. Nhà xuất bản khoa học kỹ thuật. www. Hãng MicroSoft : MSDN Library for Visual Studio 2005 12. Andreas Dittrich – Truyền động điện thông minh – NXB KHKT.com Phạm Văn Cường . 2005 4. 2006 11. Nguyễn Phùng Quang.

Lớp ĐKTĐ1-K49 92 . col3 = 1.RA3 #define row3 PORTAbits. } Phạm Văn Cường .RB5 #define col3 PORTBbits. if (row1 & row2 & row3 & row4) { col2 = 0.RB6 #define col4 PORTBbits.RA5 #define col1 PORTBbits. col2 = 1.Phụ lục – Code phần mềm Phụ lục Code phần mềm //code bàn phím// #ifndef __pvc_keypad_H #define __pvc_keypad_H #define row1 PORTAbits. col1 = 1. } col4 = 0.Hoàng Văn Quân. return 1. return 3.RA2 #define row2 PORTAbits.RB7 /*******************************************************************/ unsigned char col(void) { col4 = 1. return 4. } col1 = 0. if (row1 & row2 & row3 & row4) { col4 = 0.RB4 #define col2 PORTBbits. if (row1 & row2 & row3 & row4) { col1 = 0. if (row1 & row2 & row3 & row4) { col3 = 0. return 2.RA4 #define row4 PORTAbits. } col3 = 0. } col2 = 0.

if((col()==1) && (row()==3)) return 1. 'V'. else if (!row2) return 2. Lớp ĐKTĐ1-K49 93 . } /************************************************************/ unsigned char get_keypad(void) { if((col()==1) && (row()==1)) return 7.Hoàng Văn Quân. 'P'.RE2 LCD_DATA PORTD return return return return return return return return return return return return 8. 'M'.RC3 LCD_E PORTEbits. if((col()==1) && (row()==2)) return 4.RE1 LCD_RW PORTCbits. if((col()==2) && (row()==1)) if((col()==2) && (row()==2)) if((col()==2) && (row()==3)) if((col()==2) && (row()==4)) if((col()==3) && (row()==1)) if((col()==3) && (row()==2)) if((col()==3) && (row()==3)) if((col()==3) && (row()==4)) if((col()==4) && (row()==1)) if((col()==4) && (row()==2)) if((col()==4) && (row()==3)) if((col()==4) && (row()==4)) } #endif /////// code LCD///// #ifndef __pvc_lcd_H #define __pvc_lcd_H #define #define #define #define LCD_RS PORTEbits. 2. 3. if((col()==1) && (row()==4)) return 0. 'Q'. 5. 9. else if (!row3) return 3. 'L'. /***************************************************************/ void busy_lcd (void) Phạm Văn Cường . 6.Phụ lục – Code phần mềm /*************************************************************/ unsigned char row(void) { if (!row4) return 4. 'C'. else if (!row1) return 1.

LCD_RW = 0. do { LCD_E=1. Lớp ĐKTĐ1-K49 94 . TRISD=0xff. LCD_E=0. LCD_RW=1. write_cmd_lcd(0b00000110).Phụ lục – Code phần mềm { unsigned char data. write_cmd_lcd(0x02). } while(data==0x80). LCD_E = 1. LCD_E = 0. LCD_DATA = cmd. data=PORTD. LCD_RS = 0. write_cmd_lcd(0b00000001). } /*****************************************************************/ void write_cmd_lcd(char cmd) { busy_lcd().Hoàng Văn Quân. data=data&0x80. Delay10TCYx(2). } /****************************************************************/ void write_data_lcd(char data) { if(data=='\n') { write_cmd_lcd(0xC0). LCD_RS=0. } /****************************************************************/ void init_lcd (void) { write_cmd_lcd(0b00111000). write_cmd_lcd(0b00001100). // Dua con tro ve dau dong thu 2 return. } if(data=='\1') { Phạm Văn Cường . TRISD=0x00.

} } #endif /******************************************* CPU PIC18F4520 Frequency 40MHz *******************************************/ #include<stdio. return.h> #include<delays.h> //============================================ #pragma config OSC=HSPLL #pragma config BOREN=OFF #pragma config WDT=OFF // Xoa man hinh hien thi Phạm Văn Cường .h> #include<pvc_lcd.Hoàng Văn Quân.h> #include<adc. LCD_E = 1.Phụ lục – Code phần mềm write_cmd_lcd(0x01).h> #include<timers. LCD_E = 0. LCD_RS = 1. } busy_lcd().h> #include<pwm. } /*****************************************************************/ void write_str_lcd(char *str) { while(*str) { write_data_lcd(*str).h> #include<p18f4520.h> #include<usart. LCD_DATA = data. Lớp ĐKTĐ1-K49 95 . TRISD=0x00. str++. LCD_RW = 0.h> #include<pvc_keypad.

char pad=0.dienap=0. //long u=0. char w_h=0. float u=0. Lớp ĐKTĐ1-K49 96 . float tocdothuc=0. unsigned short long k=0. unsigned int k_usart=0. long w=0.i_h=0. float pre_u=0.w_l=0. char mode=0.d_l=0. float pre_e=0.dc=0.i_l=0. float sum_e=0. unsigned int j=0. Phạm Văn Cường . unsigned int dutycycle=0. //============================================= float u_p=0.u_d=0.p_l=0.ic=0. float pre_ui=0. float pre_tocdothuc=0. char co_tocdo=0.u_i=0. char timer0_flag=0. long pc=0. float e=0. //============================================= unsigned char temp. unsigned int jlcd=0.d_h=0.k_p=0. char p_h=0. //============================================= char flag=0. unsigned long tocdodat=0. unsigned long counter=0.v=0.Phụ lục – Code phần mềm #pragma config #pragma config #pragma config #pragma config MCLRE=ON PBADEN=OFF LVP=OFF PWRT=ON long vc=0.k_i=0.msg[35].v=0.Hoàng Văn Quân.

void delay10ms (void) { Delay10KTCYx(10). pre_e=e.8) { u=11. char pvcm[32]={"\1 Pham Van Manh \n My Brother "}. Lớp ĐKTĐ1-K49 97 . } dutycycle = 256*u/12. pre_ui=u_i. void pvc(void) { e= tocdodat . void usart_isr(void). u_p =pc*e. u_d=dc*(e-pre_e)/0.tocdothuc. Phạm Văn Cường . u_i=pre_ui + 0.Hoàng Văn Quân. sum_e -= e.8.0457*ic*pre_e . sum_e -= e. void timer0_isr(void).0457. } void delay500ms (void) { Delay10KTCYx(500). void counter2_isr(void). void keypad_isr(void). u= (u_p+u_i+u_d/10)/12800. } if(u<=0) { u=0. if(u>=11. } void counter1_isr(void).Phụ lục – Code phần mềm char message[35].

Phụ lục – Code phần mềm SetDCPWM1(dutycycle).pad). write_str_lcd(&message[0])."\1 KeyPad = %c ". else sprintf(&message[0]. delay10ms(). co_tocdo=1.INT2IF) Phạm Văn Cường . } } //************************************************* #pragma code low_vector = 0x18 void interurrupt_at_low_vector(void) { if(INTCON3bits.INT1IF) { _asm GOTO counter1_isr _endasm } if(INTCON3bits. if(!(row1 & row2 & row3 & row4)) { pad = get_keypad(). if (pad>=0 && pad<=9) sprintf(&message[0].INT0IF=0. Lớp ĐKTĐ1-K49 98 . } //=============================================== #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."\1 KeyPad = %u ".Hoàng Văn Quân.pad). return.

} if(k_usart==2) { w_l = ReadUSART(). if(k_usart==0) { mode=ReadUSART(). } if(k_usart==1) { w_h = ReadUSART().TMR0IF) { _asm GOTO timer0_isr _endasm } } //******************************************************************** #pragma interruptlow usart_isr void usart_isr(void) { INTCONbits.Phụ lục – Code phần mềm { _asm GOTO counter2_isr _endasm } if(PIR1bits. } if(k_usart==3) { p_h = ReadUSART().GIE = 0.RCIF) { _asm GOTO usart_isr _endasm } if(INTCONbits. Lớp ĐKTĐ1-K49 99 . pad=0.Hoàng Văn Quân. } if(k_usart==4) { Phạm Văn Cường .

} if(k_usart==8) { d_l = ReadUSART().Hoàng Văn Quân. } if(k_usart==7) { d_h = ReadUSART(). Lớp ĐKTĐ1-K49 100 . } //======================================== #pragma interruptlow counter1_isr void counter1_isr(void) { counter++. Phạm Văn Cường . } else k_usart++.INT1IF=0.GIE = 1.INT2IF=0. } if(k_usart==6) { i_l = ReadUSART(). INTCONbits. } if(k_usart==5) { i_h = ReadUSART(). flag=1. } //ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc #pragma interruptlow counter2_isr void counter2_isr(void) { counter++. INTCON3bits. k_usart=0. INTCON3bits.Phụ lục – Code phần mềm p_l = ReadUSART().

TMR0IF=0. } //tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt void main() { OpenUSART (USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH.GIE = 1. // cho phep uu tien ngat Phạm Văn Cường .IPEN=1. } INTCONbits.Hoàng Văn Quân. 0). tocdothuc = counter*6.565. timer0_flag=1. counter=0.Phụ lục – Code phần mềm } //ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc //tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt #pragma interruptlow timer0_isr void timer0_isr(void) { INTCONbits.ADC_CH0&ADC_INT_OFF. } else { j=0. OpenADC( ADC_FOSC_32 &ADC_RIGHT_JUST &ADC_6_TAD.64). if(j<7)//0. INTCONbits. RCONbits.026s { j++.GIE = 0. Lớp ĐKTĐ1-K49 101 .

write_str_lcd(&pvcm[0]). OpenTimer2( TIMER_INT_OFF & T2_PS_1_1 & T2_POST_1_16 ). //----------------------------------------------------------------------------------while(1) { //fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff if(flag) { while(1) { Phạm Văn Cường . // ngat tai INT1. Lớp ĐKTĐ1-K49 102 .TXIE=0. //Ngat timer0 thap INTCON3=0x18. PORTCbits. // Khong cho ngat khi truyen du lieu ADCON1 = 0x0d. // cho phep ngat INT1. TRISC = 0x80. // Lay nguon la 5V va 0v cua mach init_lcd().INT2 PIE1bits. INTCON2=0x00. // Khoi tao cho Kepad PORTB = 0X00. PORTCbits.Hoàng Văn Quân. PIE1bits. TRISA = 0xff. IPR1bits.INT2 on falling edge INTCON2bits.RCIE=1.RC5 = 1. TRISE = 0x00. delay500ms(). TRISD = 0x00. TRISB = 0b00001111.RC5 =1.Phụ lục – Code phần mềm INTCON=0xC0.RCIP=0.INT0IE =1. // mo tat ca cac ngat INTCONbits.TMR0IP=0. // Khoi tao cho Kepad ADCON1 = 0x0E.

Phụ lục – Code phần mềm flag=0. if(mode) { tocdodat= w_h*256 + w_l. pre_e=0. OpenPWM1(63). tocdodat=0. sum_e=0.RC0 = 0.25kHz 256 PORTCbits. ClosePWM1(). pc=p_h*256+p_l. } Phạm Văn Cường . dc=d_h*256+d_l. sum_e=0.RC1 = 0. pc=0.Hoàng Văn Quân. Lớp ĐKTĐ1-K49 103 .//156. pre_u=0. } else { dutycycle=0. ic=i_h*256+i_l. PORTCbits. k=0. v=0. ic=0. j=0. PORTCbits. PORTCbits. pre_ui=0. u=0. if((pad=='P')||(pad=='V')||(pad=='M')||(pad=='Q')) break. dc=0. counter=0.RC1 = 1.RC0 = 0.

WriteUSART(w%256). Phạm Văn Cường . k++. while (BusyUSART()). w=tocdothuc. while (BusyUSART()). Lớp ĐKTĐ1-K49 104 . } if(k==2) { k=0. vc=u*1000. while (BusyUSART()). WriteUSART(w/256). while(1) { if((pad=='P')||(pad=='V')||(pad=='M')||(pad=='Q')||(flag==1)) break.Hoàng Văn Quân. while (BusyUSART()). WriteUSART(vc%256). } if(jlcd==10) { jlcd=0. jlcd++.Phụ lục – Code phần mềm OpenTimer0( TIMER_INT_ON & T0_8BIT & T0_SOURCE_INT & T0_PS_1_256 ). if(timer0_flag) { timer0_flag=0. WriteUSART(vc/256). w=tocdothuc. pvc().

RC1 = 1.RC0 = 0. } } } } //ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff //pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp if(pad=='P') { while(1) { if((pad=='V')||(pad==0)||(pad=='M')||(pad=='C')) break. Lớp ĐKTĐ1-K49 105 .25khz 256 SetDCPWM1(192). OpenPWM1(63). write_str_lcd(&msg[0]).Phụ lục – Code phần mềm sprintf(&msg[0].// 9V PORTCbits. if(timer0_flag) Phạm Văn Cường . while(1) { if((pad=='V')||(pad==0)||(pad=='M')||(pad=='C')) break. PORTCbits.w)."\1 Toc do la: \n %lu (rpm)".Hoàng Văn Quân.//156. OpenTimer0( TIMER_INT_ON & T0_8BIT & T0_SOURCE_INT & T0_PS_1_256 ).

pc=0. WriteUSART(w/256). while (BusyUSART()). while (BusyUSART()). } } } } //pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp //vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv if(pad=='V') { while(1) { if((pad==0)||(pad=='P')||(pad=='M')||(pad=='C')) break."\1 Toc do la: \n %lu (rpm)".w). WriteUSART(w%256). while (BusyUSART()). w=tocdothuc. Phạm Văn Cường . dutycycle=0. ClosePWM1().Hoàng Văn Quân. while (BusyUSART()).Phụ lục – Code phần mềm { timer0_flag=0. ic=0. write_str_lcd(&msg[0]). tocdodat=0. dc=0. sprintf(&msg[0]. Lớp ĐKTĐ1-K49 106 . WriteUSART(9000%256). WriteUSART(9000/256).

do{ if(co_tocdo) { co_tocdo=0. Lớp ĐKTĐ1-K49 107 . tocdodat = tocdodat/10. sum_e=0."\1V dat: %lu (rpm)\nNhan L de OK ".Phụ lục – Code phần mềm pre_e=0. pre_ui=0. pre_u=0. PORTCbits. write_str_lcd(&pvcm[0]).Hoàng Văn Quân. } } } while(pad !='L'). } } //vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv //ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc if(pad=='C') { tocdodat=0. u=0. tocdodat=tocdodat*10. PORTCbits.tocdodat). if((pad>=0)&&(pad<=9)) { tocdodat=tocdodat+pad. sprintf(&message[0]."\1Nhap toc do:\nNhan L de OK"). write_str_lcd(&message[0]).RC1 = 0. sprintf(&message[0]. v=0. Phạm Văn Cường .RC0 = 0. write_str_lcd(&message[0]).

tocdodat).25kHz 256 PORTCbits.Phụ lục – Code phần mềm while(1) { sprintf(&message[0]."\1V dat: %lu (rpm)\nNhan Q(M) de chay ".RC1 = 1. jlcd++. sum_e=0.//156. if((pad==0)||(pad=='P')||(pad=='V')||(pad=='M')||(pad=='C')||(pad=='Q')) break.RC0 = 0. write_str_lcd(&message[0]). Lớp ĐKTĐ1-K49 108 . if(timer0_flag) { timer0_flag=0. Phạm Văn Cường . pvc(). while(1) { if((pad=='P')||(pad=='V')||(pad=='C')||(pad=='Q')||(pad==0)) break. ic=300. OpenTimer0( TIMER_INT_ON & T0_8BIT & T0_SOURCE_INT & T0_PS_1_256 ). } } //ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc //mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm if(pad=='M') { OpenPWM1(63). PORTCbits. pc=5.Hoàng Văn Quân.

tocdodat. Lớp ĐKTĐ1-K49 109 . PORTCbits. } } } //mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm //qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq if(pad=='Q') { OpenPWM1(63). w=tocdothuc. sum_e=0.RC0 = 0.Hoàng Văn Quân.RC1 = 1. write_str_lcd(&msg[0]). ic=400.25kHz 256 PORTCbits.//156.w). pc=5.Phụ lục – Code phần mềm } if(jlcd==10) { jlcd=0. OpenTimer0( TIMER_INT_ON & T0_8BIT & T0_SOURCE_INT & T0_PS_1_256 )."\1W dat: %lu(rpm)\nW thuc: %lu(rpm)". Phạm Văn Cường . while(1) { if((pad=='P')||(pad=='V')||(pad=='C')||(pad=='M')||(pad==0)) break. sprintf(&msg[0].

} if(jlcd==10) { jlcd=0.w). jlcd++.Hoàng Văn Quân. sprintf(&msg[0]. w=tocdothuc. pvc(). write_str_lcd(&msg[0]). } } } //qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq //-------------------------------------------------------------------------------------------------} } dat: %lu(rpm)\nW thuc: Phạm Văn Cường .Phụ lục – Code phần mềm if(timer0_flag) { timer0_flag=0."\1W %lu(rpm)". Lớp ĐKTĐ1-K49 110 .tocdodat.

Sign up to vote on this title
UsefulNot useful