Tải bản đầy đủ (.doc) (63 trang)

đo và ổn định tốc độ động cơ sử dụng phương pháp PID

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.94 MB, 63 trang )

Khoa: Điện - Điện Tư

LỜI NÓI ĐẦU
Sự phát triển của cơng nghệ Tự Động Hóa thời gian qua khơng tách rời sự phát
triển của các công nghệ cao khác như công nghệ thông tin (CNTT), công nghệ truyền
thông và cơ điện tư. Các thành tựu của chip vi xư lý, mạng và truyền thông được áp
dụng rộng rãi trong các sản phẩm và hệ thống TĐH. Ngược lại, nhiều nguyên lý của
điều khiển tự động được ứng dụng trong các sản phẩm CNTT. Các sản phẩm công
nghệ cao ngày càng thơng minh hơn và được thiết kế tích hợp tối ưu cả phần xác
(phần cứng - cơ khí, linh kiện…) và phần hồn (phần mềm - software, thuật toán…)
trên quan điểm cơ điện tư. Xu hướng này tạo nên các sản phẩm tích hợp trong nó
nhiều chức năng của nhiều lĩnh vực công nghệ. Sự hội tụ các công nghệ trong một sản
phẩm làm ranh giới giữa CNTT và truyền thông, công nghệ TĐH và cơ điện tư ngày
càng thu hẹp.
Trong thời gian học tập và nghiên cứu, được học tập và nghiên cứu mơn vi điều
khiển , lập trình C và ứng dụng của nó trong các lĩnh vực của hệ thống sản xuất hiện
đại. Vì vậy để có thể nắm vững phần lý thuyết và áp dụng kiến thức đó vào trong thực
tế, chúng em được nhận đồ án môn học với đề tài: “Thiết kế, chế tạo mạch đo và
điều khiển ổn định tốc độ động cơ điện 1 chiều bằng phương pháp PID”. Với đề
tài được giao, chúng em đã vận dụng kiến thức của mình để tìm hiểu và nghiên cứu lý
thuyết, đặc biệt chúng em tìm hiểu sâu vào tính tốn thiết kế phục vụ cho việc hoàn
thiện sản phẩm.
Dưới sự hướng dẫn chỉ bảo nhiệt tình của thầy Nguyễn Tiến Dũng cùng với sự
cố gắng nỗ lực của các thành viên trong nhóm chúng em đã hồn thành xong đồ án
của mình. Tuy nhiên do thời gian và kiến thức còn hạn chế nên khơng tránh khỏi
thiếu sót khi thực hiện đồ án này. Vì vậy chúng em rất mong sẽ nhận được nhiều ý
kiến đánh giá, góp ý của thầy cơ giáo, cùng bạn bè để đề tài được hoàn thiện hơn.
Chúng em xin chân thành cảm ơn!
Sinh viên thực hiện
Nguyễn Đình Khiêm
Vũ Hồng Kiên



SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
1


Khoa: Điện - Điện Tư

NHẬN XÉT CỦA GIÁO VIÊN

...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
...........................................................................................................................
.....................................................................................

Hưng Yên, tháng 12 năm 2020.

Giáo viên hướng dẫn

NHẬN XÉT CỦA HỘI ĐỒNG PHẢN BIỆN
SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
2


Khoa: Điện - Điện Tư

…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
……….
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………...................................................


SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
3


Khoa: Điện - Điện Tư

MỤC LỤC

LỜI NÓI ĐẦU......................................................................................................1
NHẬN XÉT CỦA GIÁO VIÊN...........................................................................2
MỤC LỤC............................................................................................................4
2.3 Encoder.........................................................................................................26
2.3.1 Giới thiệu...................................................................................................26
2.3.3 Encoder tương đối (incremental encoder).................................................28
2.4 Động cơ điện 1 chiều....................................................................................30
2.4.1 Giới thiệu chung về động cơ điện 1 chiều.................................................30
2.5 Khối hiển thị LCD........................................................................................35
2.5.3 Bảng dữ liệu của LCD...............................................................................38
2.6 Một số linh kiện khác....................................................................................42
2.6.1 Cách ly quang PC 817...............................................................................42
2.6.4. IC ổn áp nguồn 7805.................................................................................45
CHƯƠNG III: THIẾT KẾ CHẾ TẠO MẠCH ĐIỆN.........................................47
3.1. Sơ đồ khối....................................................................................................47
3.1.1 Sơ đồ khối..................................................................................................47
3.2 Sơ đồ mạch điện............................................................................................52
3.2.1 Sơ đồ nguyên lý.........................................................................................52
3.2.2 Sơ đồ board mạch......................................................................................53
3.2.3 Sơ đồ bố trí linh kiện.................................................................................54
3.3 Thuật tốn điều khiển....................................................................................55

3.4 Chương trình điều khiển...............................................................................55
KẾT ḶN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI............................................63

SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
4


Khoa: Điện - Điện Tư

CHƯƠNG I: TỔNG QUAN VỀ ĐỀ TÀI
1.1 Mục tiêu của đề tài
Đề tài: “Thiết kế, chế tạo mạch đo và điều khiển ổn định tốc độ động cơ điện
1 chiều bằng phương pháp PID”
Giúp sinh viên hiểu rõ và nắm chắc hơn về các môn học: điện tư công suất, truyền
động điện, vi xư lý, … có thể vận dụng linh hoat giữa lý thuyết và thực tế. Hiểu được
phương pháp điều khiển động cơ cũng như các phương pháp điều chế xung với PWM.
Nâng cao khả năng thực hành làm mạch,tra cứu các linh kiện.
1.2 Đối tượng nghiên cứu
- Động cơ điện một chiều
- Tải mơ men cản
- Ngơn ngữ và chương trình cho vi điều khiển.
1.3 Phương pháp nghiên cứu đề tài
Dựa vào các kiến thức đã học trên lớp trong các môn: Truyền động điện, Điện
tư công suất, Vi xư lý và Đo lường và cảm biến, Xư lý tín hiệu điều khiển kết hợp với
những kiến thức tìm hiểu ngồi thực tế về mơ hình cũng như sơ đồ mạch để thiết kế
và chế tạo mạch.
1.4 Ý nghĩa của đề tài
Để giúp sinh viên có thể có thể củng cố kiến thức, tổng hợp và nâng cao kiến
thức chuyên ngành cũng như kiến thức ngồi thực tế. Đề tài cịn thiết kế chế tạo thiết

bị, mơ hình để các sinh viên trong trường đặc biệt là sinh viên khoa Điện – Điện tư
tham khảo, học hỏi tạo tiền đề nguồn tài liệu cho các học sinh, sinh viên khố sau có
thêm nguồn tài liệu để nghiên cứu và học tập.
Những kết quả thu được sau khi hoàn thành đề tài này trước tiên là sẽ giúp
chúng em có thể hiểu sâu hơn về các động cơ điện, các phương pháp bảo điều chỉnh
và ổn định tốc độ động cơ. Từ đó sẽ tích luỹ được kiến thức cho năm học sau và ra
ngồi thực tế.

CHƯƠNG II: CƠ SỞ LÝ THUYẾT

SVTH: Ngũn Đình Khiêm
Vũ Hồng Kiên
5


Khoa: Điện - Điện Tư

2.1 Tổng quan về vi điều khiển PIC 16F877A
2.1.1 Khái quát về vi điều khiển PIC16F877A

Hình 2.1 Vi điều khiển PIC16F877A
Ngày nay, các bộ vi điều khiển đang có ứng dụng ngày càng rộng rãi trong các
lĩnh vực kỹ thuật và đời sống xã hội, đặc biệt là trong lĩnh vực tự động hóa và điều
khiển từ xa. Giờ đây với nhu cầu chuyên dụng hóa, tối ưu hóa (thời gian, khơng gian,
giá thành). Tính bảo mật, tính chủ động trong cơng việc…ngày càng địi hỏi khắt khe.
Việc đưa ra công nghệ mới trong lĩnh vực thiết kế mạch điện tư đáp ứng những nhu
cầu trên là hồn tồn cần thiết và mang tính thực tế cao.
Khối xư lí trung tâm mà đóng vai trị chính là PIC16F877A sẽ làm nhiệm vụ chính là
tiếp nhận và xư lí các dữ liệu đến và đi một cách tự động. Đề tài sư dụng PIC16F877A
vì những ưu điểm vượt trội của nó so với các vi điều khiển khác. Về mặt tính năng và

cơng năng thì có thề xem PIC vượt trội hơn rất nhiều so với 89 với nhiều module
được tích hợp sẵn như ADC 10 BIT, PWM 10 BIT, EEPROM 256 BYTE,
COMPARATER, VERF COMPARATER…Về mặt giá cả thì có đơi chút chênh lệch
như giá 1 con 89S52 khoảng 20.000 thì PIC16F877 là 60.000 nhưng khi so sánh như
thế thì ta nên xem lại phần linh kiện cho việc thiết kế mạch nếu như dùng 89 muốn có
ADC bạn phải mua con ADC chẳng hạn như ADC 0808 hay 0809 với giá vài chục
ngàn và bộ Opamp thì khi sư dung PIC nó đã tích hợp cho ta sẵn các module đó có
nghĩa là bạn ko cần mua ADC, Opam, EPPROM vì PIC đã có sẵn trong nó. Ngồi ra
SVTH: Ngũn Đình Khiêm
Vũ Hồng Kiên
6


Khoa: Điện - Điện Tư

chúng ta sẽ gặp nhiều thuận lợi hơn trong thiết kế board, khi đó board mạch sẽ nhỏ
gọn và đẹp hơn dễ thi công hơn rất nhiều, vì tính về giá cả tổng cộng cho đến lúc
thành phẩm thì PIC có thể xem như rẻ hơn 89. Một điều đặc biệt nữa là tất cả các con
PIC được sư dụng thì đều có chuẩn PI tức chuẩn cơng nghiệp thay vì chuẩn PC (chuẩn
dân dụng).
Ngồi ra, PIC có ngơn ngữ hỗ trợ cho việc lập trình ngồi ngơn ngữ Asembly cịn có
ngơn ngữ C thì có thề sư dụng CCSC, HTPIC, MirkoBasic,…và cịn nhiều chương
trình khác nữa để hỗ trợ cho việc lập trình bên cạnh ngơn ngữ kinh điển là asmbler thì
sư dụng MPLAB IDE. Bên cạnh đó với bề dày của sự phát triển lâu đời PIC đã tạo ra
rất nhiều diễn đàn sôi nổi về PIC cả trong và ngồi nước. Chính vì vậy chúng ta sẽ có
nhiều thuận lợi trong việc dễ dàng tìm kiếm các thơng tin lập trình cho các dòng PIC.
2.1.2 Sơ đồ chân và sơ đồ nguyên lý của PIC 16F877A
* Sơ đồ chân vi điều khiển PIC 16F877A

Hình 2.2 Sơ đồ chân vi điều khiển PIC16F877A

* Sơ đồ nguyên lý vi điều khiển PIC16F877A

SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
7


Khoa: Điện - Điện Tư

Hình 2.3 Sơ đồ nguyên lý vi điều khiển PIC16F877A
2.1.3 Nhận xét
Từ sơ đồ chân và sơ đồ nguyên lý ở trên, ta rút ra các nhận xét ban đầu như sau :
-

PIC16F877A có tất cả 40 chân

-

40 chân trên được chia thành 5 PORT, 2 chân cấp nguồn, 2 chân GND, 2

chan thạch anh và một chân dùng để RESET vi điều khiển.
-

5 port của PIC16F877A bao gồm :

+ PORTB : 8 chân
+ PORTD : 8 chân
+ PORTC : 8 chân
+ PORTA : 6 chân
+ PORT E : 3 chân

2.1.4 Khái quát về chức năng của các port trong vi điều khiển PIC16F877A
Cổng xuất nhập (I/O port) chính là phương tiện để vi điều khiển tương tác với thế
giới bên ngoài. Sự tương tác này rất đa dạng và thơng qua q trình tương tác đó, chức
năng của vi điều khiển được thể hiện một cách rõ ràng.
Một cổng xuất nhập của vi điều khiển bao gồm nhiều chân (I/O pin), tùy theo cách bố
trí và chức năng của vi điều khiển mà số lượng cổng xuất nhập và số lượng chân trong
SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
8


Khoa: Điện - Điện Tư

mỗi cổng có thể khác nhau. Bên cạnh đó, do vi điều khiển được tích hợp sẵn bên trong
các đặc tính giao tiếp ngoại vi nên bên cạnh chức năng là cổng xuất nhập thông
thường, một số chân xuất nhập cịn có thêm các chức năng khác để thể hiện sự tác
động của các đặc tính ngoại vi nêu trên đối với thế giới bên ngoài. Chức năng của
từng chân xuất nhập trong mỗi cổng hoàn tồn có thể được xác lập và điều khiển được
thơng qua các thanh ghi SFR liên quan đến chân xuất nhập đó.
Vi điều khiển PIC16F877 có 5 cổng xuất nhập, bao gồm PORTA, PORTB, PORTC,
PORTD và PORTE
PORTA
PORTA gồm có 6 chân. Các chân của PortA, ta lập trình để có thể thực hiện được
chức năng “hai chiều” : xuất dữ liệu từ vi điều khiển ra ngoại vi và nhập dữ liệu từ
ngoại vi vào vi điều khiển.
Việc xuất nhập dữ liệu ở PIC16F877A khác với họ 8051. Ở tất cả các PORT của
PIC16F877A, ở mỗi thời điểm chỉ thực hiện được một chức năng :xuất hoặc nhập. Để
chuyển từ chức năng này nhập qua chức năng xuất hay ngược lại, ta phải xư lý bằng
phần mềm, không như 8051 tự hiểu lúc nào là chức năng nhập, lúc nào là chức năng
xuất.

Trong kiến trúc phần cứng của PIC16F877A, người ta sư dụng thanh ghi TRISA ở địa
chỉ 85H để điều khiển chức năng I/O trên. Muốn xác lập các chân nào của PORTA là
nhập (input) thì ta set bit tương ứng chân đó trong thanh ghi TRISA. Ngược lại, muốn
chân nào là output thì ta clear bit tương ứng chân đó trong thanh ghi TRISA. Điều này
hồn tồn tương tự đối với các PORT cịn lại
Ngồi ra, PORTA cịn có các chức năng quan trọng sau :
- Ngõ vào Analog của bộ ADC : thực hiện chức năng chuyển từ Analog sang
Digital
- Ngõ vào điện thế so sánh
- Ngõ vào xung Clock của Timer0 trong kiến trúc phần cứng : thực hiện các
nhiệm vụ đếm xung thông qua Timer0…
- Ngõ vào của bộ giao tiếp MSSP (Master Synchronous Serial Port)
Các thanh ghi SFR liên quan đến PORTA bao gồm:
PORTA (địa chỉ 05h)

: chứa giá trị các pin trong PORTA.

SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
9


Khoa: Điện - Điện Tư

TRISA (địa chỉ 85h)

: điều khiển xuất nhập.

CMCON (địa chỉ 9Ch)


: thanh ghi điều khiển bộ so sánh.

CVRCON (địa chỉ 9Dh)

: thanh ghi điều khiển bộ so sánh điện áp.

ADCON1 (địa chỉ 9Fh)

: thanh ghi điều khiển bộ ADC.

PORTB
PORTB có 8 chân. Cũng như PORTA, các chân PORTB cũng thực hiện được 2 chức
năng : input và output. Hai chức năng trên được điều khiển bới thanh ghi TRISB. Khi
muốn chân nào của PORTB là input thì ta set bit tương ứng trong thanh ghi TRISB,
ngược lại muốn chân nào là output thì ta clear bit tương ứng trong TRISB.
Thanh ghi TRISB cịn được tích hợp bộ điện trở kéo lên có thể điều khiển được bằng
chương trình.
Các thanh ghi liên quan đến PORTB bao gồm:
PORTB (địa chỉ 06h, 106h)

: chứa giá trị các pin trong PORTB

TRISB (địa chỉ 86h, 186h)

: điều khiển xuất nhập

OPTION_REG (địa chỉ 81h, 181h)

: điều khiển ngắt ngoại vi và bộ timer0.


PORTC
PORTC có 8 chân và cũng thực hiện được 2 chức năng input và output dưới sự điều
khiển của thanh ghi TRISC tương tự như hai thanh ghi trên.
Ngoài ra PORTC cịn có các chức năng quan trọng sau :
- Ngõ vào xung clock cho Timer1 trong kiến trúc phần cứng
- Bộ PWM thực hiện chức năng điều xung lập trình được tần số, duty cycle: sư
dụng trong điều khiển tốc độ và vị trí của động cơ v.v….
- Tích hợp các bộ giao tiếp nối tiếp I2C, SPI, SSP, USART
Các thanh ghi điều khiển liên quan đến PORTC:
PORTC (địa chỉ 07h) : chứa giá trị các pin trong PORTC
TRISC (địa chỉ 87h) : điều khiển xuất nhập.
PORTD
PORTD có 8 chân. Thanh ghi TRISD điều khiển 2 chức năng input và output của
PORTD tương tự như trên. PORTD cũng là cổng xuất dữ liệu của chuẩn giao tiếp song
song PSP (Parallel Slave Port).
Các thanh ghi liên quan đến PORTD bao gồm:
SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
10


Khoa: Điện - Điện Tư

Thanh ghi PORTD : chứa các giá trị Pin trong PORTD.
Thanh ghi TRISD

: điều khiển xuất nhập.

PORTE
PORTE có 3 chân. Thanh ghi điều khiển xuất nhập tương ứng là TRISE. Các chân của

PORTE có ngõ vào analog. Bên cạnh đó PORTE cịn là các chân điều khiển của chuẩn
giao tiếp PSP.
Các thanh ghi liên quan đến PORTE bao gồm:
+ PORTE

: chứa giá trị các chân trong PORTE.

+ TRISE

: điều khiển xuất nhập và xác lập các thông số cho chuẩn giao tiếp PSP.

+ ADCON1 : thanh ghi điều khiển khối ADC…. [3]
2.1.5 So sánh với bộ vi điều khiển 89C51
- Các đặc điểm chung của bộ VĐK này:
 8 KB EPROM bên trong.
 128 Byte RAM nội.
 4 Port xuất /nhập I/O 8 bit.
 Giao tiếp nối tiếp.
 64 KB vùng nhớ mã ngoài
 64 KB vùng nhớ dữ liệu ngồi.
 Xư lí Boolean (hoạt động trên bit đơn).
 210 vị trí nhớ có thể định vị bit.
 4 µs cho hoạt động nhân hoặc chia.
 Port 0 :
Port 0 là port có 2 chức năng ở các chân 32 – 39 của 8951. Trong các thiết kế cỡ nhỏ
khơng dùng bộ nhớ mở rộng nó có chức năng như các đường IO. Đối với các thiết kế
cỡ lớn có bộ nhớ mở rộng, nó được kết hợp giữa bus địa chỉ và bus dữ liệu.
 Port 1:
Port 1 là port IO trên các chân 1-8. Các chân được ký hiệu P1.0, P1.1, P1.2, … có thể
dùng cho giao tiếp với các thiết bị ngoài nếu cần. Port 1 khơng có chức năng khác, vì

vậy chúng chỉ được dùng cho giao tiếp với các thiết bị bên ngồi.
 Port 2:
SVTH: Ngũn Đình Khiêm
Vũ Hồng Kiên
11


Khoa: Điện - Điện Tư

Port 2 là 1 port có tác dụng kép trên các chân 21 - 28 được dùng như các đường xuất
nhập hoặc là byte cao của bus địa chỉ đối với các thiết bị dùng bộ nhớ mở rộng.
 Port 3:
Port 3 là port có tác dụng kép trên các chân 10 - 17. Các chân của port này có nhiều
chức năng, các cơng dụng chuyển đổi có liên hệ với các đặc tính đặc biệt của 8951.

Hình 2.4 Sơ đồ khối của AT89C51
Ngồi những đặc tính trên thì bộ vi điều khiển PIC16F877 cịn có một đặc
điểm hơn hẳn 89C51 là có 10bít chuyển đổi A/D trên chip điều này giúp chúng ta
không mất một bộ chuyển đổi (sẽ dẫn đến kết nối dây trở nên phức tạp).
Một đặc điểm nữa là bộ VĐK PIC16F877 có bộ tạo dao động chủ trên chíp điều này
sẽ tránh được những sai số không cần thiết trong việc tạo xung dao động, vi điều
khiển PIC16F877 có khả năng tự Reset bằng bộ WTD và có thêm 256 byte EEPROM.
2.2 Tìm hiều về vi điều khiển PIC 16F877A
2.2.1 Cấu trúc phần cứng của PIC16F877A
PIC là tên viết tắt của “ Programmable Intelligent computer” do hãng General
Instrument đặt tên cho con vi điều khiển đầu tiên của họ. Hãng Micrchip tiếp tục phát
triển sản phầm này và cho đến hàng đã tạo ra gần 100 loại sản phẩm khác nhau.
PIC16F887A là dịng PIC khá phổ biến, khá đầy đủ tính năng phục vụ cho hầu hết tất
cả các ứng dụng thực tế. Đây là dòng PIC khá dễ cho người mới làm quen với PIC có
thể học tập và tạo nền tản về họ vi điều khiển PIC của mình.

Cấu trúc tổng quát của PIC16F877A như sau :
-

8K Flash Rom

SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
12


Khoa: Điện - Điện Tư

-

368 bytes Ram

-

256 bytes EFPROM

-

5 port vào ra với tín hiệu điều khiển độc lập

-

2 bộ định thời Timer0 và Timer2 8 bit

-


1 bộ định thời Timer1 16 bit có thể hoạt động ở cả chế độ tiết kiệm năng

lượng với nguồn xung clock ngoài
-

2 bộ Capture/ Compare/ PWM

-

1 bộ biến đổi Analog -> Digital 10 bit, 8 ngõ vào

-

2 bộ so sánh tương tự

-

1 bộ định thời giám sát (Watch Dog Timer)

-

1 cổng song song 8 bit với các tín hiệu điều khiển

-

1 cổng nối tiếp

-

15 nguồn ngắt


SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
13


Khoa: Điện - Điện Tư

Hình 2.5 Sơ đồ khối vi điều khiển 16F877A
2.2.2 Một vài thông số về vi điều khiển PIC16F877A
Dòng PIC16F877 được chọn sư dụng trong đề tài là dịng phổ thơng với các
tính năng cơ bản và dễ cho việc sư dụng với:
- Tập lệnh để lập trình chỉ có 35 lệnh rất dễ nhớ và dễ học, có độ dài 8bit. Tất cả các
lệnh đều được thực thi trong một chu kỳ lệnh ngoại trừ một số câu lệnh rẽ nhánh thực
hiện trong hai chu kỳ lệnh.
- Tốc độ hoạt động tối đa cho phép của xung đồng hồ là DC - 20MHz.
SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
14


Khoa: Điện - Điện Tư

- Chu kỳ lệnh thực hiện trong 200ns.
- Bộ nhớ chương trình Flash Rom 8K×14words.
- Bộ nhớ RAM 368×8 bytes.
- Bộ nhớ EEPROM 256×8 bytes
Bộ nhớ chương trình của Vi điều khiển PIC16F877 là bộ nhớ flash, dung lượng bộ
nhớ 8K word (1 word = 16bit).
• Khả năng của bộ xư lý này:

- Khả năng ngắt ( lên tới 14 nguồn ngắt trong và ngắt ngoài )
- Ngăn nhớ Stack được phân chia làm 8 mức
- Truy cập bộ nhớ bằng địa chỉ trực tiếp hoặc gián tiếp.
- Nguồn khởi động lại (POR)
- Bộ tạo xung thời gian (PWRT) và bộ tạo dao động (OST)
- Bộ đếm xung thời gian (WDT) với nguồn dao động trên chíp (nguồn dao động
RC) hoạt động đáng tin cậy.
- Có mã chương trình bảo vệ.
- Có bảng lựa chọn dao động.
- Công nghệ CMOST FLASH/EEPROM nguồn mức thấp, tốc độ cao.
- Thiết kế hồn tồn tĩnh.
- Mạch chương trình nối tiếp có 2 chân.
- Xư lý đọc/ghi tới bộ nhớ chương trình.
- Dải điện thế hoạt động rộng từ 2.0V đến 5.5V.
- Nguồn sư dụng hiện tại 25mA.
- Dãy nhiệt độ công nghiệp và thuận lợi.
- Công suất tiêu thụ thấp:
< 0.6mA với 5.5V, 4MHz
20µA với nguồn 3V, 32KHz
< 1µA nguồn dự phịng.
• Các đặc tính nổi bật của thiết bị ngoại vi trên chip
- Timer0: 8 bít của bộ định thời, bộ đếm với hệ số tỉ lệ trước.

SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
15


Khoa: Điện - Điện Tư


- Timer1: 16 bít của bộ định thời, bộ đếm với hệ số tỉ lệ trước, có khả năng tăng
trong khi ở chế độ Sleep qua xung đồng hồ được cung cấp bên ngoài.
- Timer2: 8 bít của bộ định thời, bộ đếm với 8 bít của hệ số tỉ lệ trước, hệ số tỉ
lệ sau.
- Có 2 chế độ bắt giữ, so sánh, điều chế độ rộng xung (PWM)
- Chế độ bắt giữ với 16 bít, tốc độ 12.5ns, chế độ so sánh với 16 bít, tốc độ giải quyết
cực đại 200ns, chế độ điều chế độ rộng xung với 10 bít.
- 2 bộ module CCP ( bao gồm Capture bắt giữ, Compare so sánh, PWM điều chế
xung 10 bit) và 1 bộ module ECCP.
- 1 bộ ADC với 10 kênh ADC 10 bit .
- Bộ chuyển đổi số sang tương tự với 10 bít.
- Cổng truyền thông nối tiếp SSP với SPI phương thức chủ và I2C (chủ/phụ)
- Bộ truyền nhận thông tin đồng bộ, dị bộ USART (AUSART/EUSART) có khả năng
phát hiện ra 9 bít địa chỉ.
- Cổng phụ song song (PSP) với 8 bít mở rộng, với RD, WR và CS điều khiển.
- Bộ giám sát định thời Watchdog timer.
- Chuẩn giao tiếp nối tiếp MSSP (SPI/I2C)
- Nạp chương trình bằng cổng nối tiếp ICSP( In Circuit Serial Programming) thông
qua 2 chân.
- Có thể hoạt động với nhiều dạng Oscillator khác nhau.
- Tần số hoạt động tối đa là 64Mhz.
- Bộ nhớ Flash với khả nămh ghi xóa được 100.000 lần
- Bộ nhớ EEPROM với khả năng ghi xóa được 1.000.000 lần
- Dữ liệu EEPROM có thể lưu trữ trên 40 năm
- Khả năng tự nạp chương trình với sự điều khiển của phần mềm.
2.2.3 Tổ chức bộ nhớ PIC16F877A
* Bộ nhớ chương trình

SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên

16


Khoa: Điện - Điện Tư

Hình 2.6 Bộ nhớ chương trình PIC16F877A
Bộ nhớ chương trình của vi điều khiển PIC16F877A là bộ nhớ Flash, dung lượng
8K word (1 word chứa 14bit) và được phân thành nhiều trang như hình trên.
Để mã hóa được địa chỉ 8K word bộ nhớ chương trình, thanh ghi đếm chương trình
PC có dung lượng 13 bit.
Khi vi điều khiển reset, bộ đếm chương trình sẽ trỏ về địa chỉ 0000h. Khi có ngắt xảy
ra thì thanh ghi PC sẽ trỏ đến địa chỉ 0004h.
Bộ nhớ chương trình khơng bao gồm bộ nhớ Stack và khơng được địa chỉ hóa bởi bộ
đém chương trình.
SVTH: Ngũn Đình Khiêm
Vũ Hồng Kiên
17


Khoa: Điện - Điện Tư

* Bộ nhớ dữ liệu
Bộ nhớ dữ liệu của PIC16F877A được chia thành 4 bank. Mỗi bank có dụng
lượng 128 byte.
Nếu như 2 bank bộ nhớ dữ liệu của 8051 phân chia riêng biệt : 128 byte đầu tiên thuộc
bank1 là vùng Ram nội chỉ để chứa dữ liệu, 128 byte còn lại thuộc bank 2 là cùng các
thanh ghi có chức năng đặc biệt SFR mà người dùng không được chứa dữ liệu khác
trong đây thì 4 bank bộ nhớ dữ liệu của PIC16F877A được tổ chức theo cách khác.
Mỗi bank của bộ nhớ dữ liệu PIC16F877A bao gồm cả các thanh ghi có chức năng
đặc biệt SFR nằm ở các các ô nhớ địa chỉ thấp và các thanh ghi mục đích dùng chung

GPR nằm ở vùng địa chỉ còn lại của mỗi bank thanh ghi. Vùng ơ nhớ các thanh ghi
mục đích dùng chung này chính là nơi người dùng sẽ lưu dữ liệu trong quá trình viết
chương trình. Tất cả các biến dữ liệu nên được khai báo chứa trong vùng địa chỉ này.
Trong cấu trúc bộ nhớ dữ liệu của PIC16F877A, các thanh ghi SFR nào mà thường
xuyên được sư dụng (như thanh ghi STATUS) sẽ được đặt ở tất cả các bank để thuận
tiện trong việc truy xuất. Sở dĩ như vậy là vì, để truy xuất một thanh ghi nào đó trong
bộ nhớ của 16F877A ta cần phải khai báo đúng bank chứa thanh ghi đó, việc đặt các
thanh ghi sư dụng thường xuyên giúp ta thuận tiên hơn rất nhiều trong quá trình truy
xuất, làm giảm lệnh chương trình.

SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
18


Khoa: Điện - Điện Tư

Hình 2.7 Sơ đồ bộ nhớ dữ liệu của PIC16F877A
Dựa trên sơ đồ 4 bank bộ nhớ dữ liệu PIC16F877A ta rút ra các nhận xét như sau:
- Bank0 gồm các ơ nhớ có địa chỉ từ 00h đến 77h, trong đó các thanh ghi dùng chung
để chứa dữ liệu của người dùng địa chỉ từ 20h đến 7Fh. Các thanh ghi PORTA,
PORTB, PORTC, PORTD, PORTE đều chứa ở bank0, do đó để truy xuất dữ liệu các
thanh ghi này ta phải chuyển đến bank0. Ngoài ra một vài các thanh ghi thông dụng
khác ( sẽ giới thiệu sau) cũng chứa ở bank0
SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
19


Khoa: Điện - Điện Tư


- Bank1 gồm các ô nhớ có địa chỉ từ 80h đến FFh. Các thanh ghi dùng chung có địa
chỉ từ A0h đến Efh. Các thanh ghi TRISA, TRISB, TRISC, TRISD, TRISE cũng được
chứa ở bank1
- Tương tự ta có thể suy ra các nhận xét cho bank2 và bank3 dựa trên sơ đồ trên.
Cũng quan sát trên sơ đồ, ta nhận thấy thanh ghi STATUS, FSR… có mặt trên cả 4
bank. Một điều quan trọng cần nhắc lại trong việc truy xuất dữ liệu của PIC16F877A
là : phải khai báo đúng bank chứa thanh ghi đó. Nếu thanh ghi nào mà 4 bank đều
chứa thì không cần phải chuyển bank.
2.2.4 Một vài thanh ghi chức năng đặc biệt SFR
Thanh ghi STATUS: thanh ghi này có mặt ở cả 4 bank thanh ghi ở các địa chỉ 03h,
83h, 103h và 183h : chứa kết quả thực hiện phép toán của khối ALU, trạng thái reset
và các bit chọn bank cần truy xuất trong bộ nhớ dữ liệu.

Thanh ghi OPTION_REG : có mặt ở bank2 và bank3 có địa chỉ 81h và 181h. Thanh
ghi này cho phép đọc và ghi, cho phép điều khiển chức năng pull_up của các chân
trong PORTB, xác lập các tham số về xung tác động, cạnh tác động của ngắt ngoại vi
và bộ đếm Timer0

Thanh ghi INTCON : có mặt ở cả 4 bank ở địa chỉ 0Bh,8Bh,10Bh,18Bh. Thanh ghi
cho phép đọc và ghi, chứa các bit điều khiển và các bit báo tràn timer0, ngắt ngoại vi
RB0/INT và ngắt khi thay đổi trạng thái tại các chân của PORTB.

Thanh ghi PIE1 :địa chỉ 8Ch, chứa các bit điều khiển chi tiết các ngắt của các khối
chức năng ngoại vi.

SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
20



Khoa: Điện - Điện Tư

Thanh ghi PIR1 : địa chỉ 0Ch, chứa cờ ngắt của các khối chức năng ngoại vi, các ngắt
này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE1.

Thanh ghi PIE2 : địa chỉ 8Dh, chứa các bit điều khiển các ngắt của các khối chức
năng CCP, SSP bú, ngắt của bộ so sánh và ngắt ghi vào bộ nhớ EEPROM.

Thanh ghi PIR2: địa chỉ 0Dh, chứa cờ ngắt của các khối chức năng ngoại vi, các ngắt
này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE2

Thanh ghi PCON : địa chỉ 8Eh, chứa các cờ hiệu cho biết trạng thái các chế độ reset
của vi điều khiển.

2.2.5 Thanh ghi W (work)
Đây là thanh ghi rất đặc biệt trong PIC16F877A. Nó có vai trị tương tự như
thanh ghi Accummulator của 8051, tuy nhiên tầm ảnh hưởng của nó rộng hơn rất
nhiều.
Tập lệnh của PIC16F877A có tất cả 35 lệnh thì số lệnh có sự “góp mặt” của thanh ghi
W là 23 lệnh. Hầu hết các lệnh của PIC16F877A đều liên quan đến thanh ghi W. Ví dụ
như, trong PIC chúng ta không được phép chuyển trực tiếp giá trị của một thanh ghi
này qua thanh ghi khác mà phải chuyển thơng qua thanh ghi W.
Thanh ghi W có 8 bit và không xuất hiện trong bất kỳ bank thanh ghi nào của bộ nhớ
dữ liệu của 16F877A. Mỗi dòng lệnh trong PIC16F877a được mô tả trong 14 bit. Khi
SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
21



Khoa: Điện - Điện Tư

ta thực hiện một lệnh nào đó, nó phải lưu địa chỉ của thanh ghi bị tác động (chiếm 8
bit) và giá trị một hằng số k nào đó (thêm 8 bit nữa) là 16 bit, vượt quá giới hạn 14 bit.
Do vậy ta không thể nào tiến hành một phép tính tồn trực tiếp nào giữa 2 thanh ghi
với nhau hoặc giữa một thanh ghi với một hằng số k. Hầu hết các lệnh của
PIC16F877A đều phải liên quan đến thanh ghi W cũng vì lý do đó. Khi thực hiện một
dịng lệnh nào đó, thì PIC sẽ địa chỉ của thanh ghi W trong mã lệnh ( vì được hiểu
ngầm). Có thể xem thanh ghi W là thanh ghi trung gian trong quá trình viết chýõng
trình cho PIC16F877A.
2.2.6 Các vấn đề về Timer
PIC16F877A có tất cả 3 timer : timer0 (8 bit), timer1 (16 bit) và timer2 (8 bit).
Timer0

Hình 2.8 Sơ đồ khối của Timer0
Cũng giống như 8051, Timer0 của 16F877A cũng có 2 chức năng : định thời và
đếm xung. 2 chức năng trên có thể được lựa chọn thơng qua bit số 5 TOCS của thanh
ghi OPTION.
SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
22


Khoa: Điện - Điện Tư

Ngồi ra, ta cũng có thể lựa chọn cạnh tích cực của xung clock, cạnh tác động ngắt…
thơng qua thanh ghi trên.
Timer0 được tích hợp thêm bộ tiền định 8 bit (prescaler), có tác dụng mở rộng “dung
lượng” của Timer0. Bộ prescaler này có thể được điều chỉnh bởi các 3 bit PS2:PS0
trong thanh ghi OPTION. Nó có thể có giá trị 1:2, 1:4, 1:8, 1:16, 1:32, 1:64, 1:128,

1:256 tùy thuộc vào việc thiết lập các giá trị 0 ,1 cho 3 bit trên.
Bộ tiền định có giá trị 1:2 chẳng hạn ,có nghĩa là : bình thường khơng sư dụng bộ tiền
định của Timer0 (đồng nghĩa với tiền định tỉ lệ 1:1) thì cứ khi có tác động của 1 xung
clock thì timer0 sẽ tăng thêm một đơn vị. Nếu sư dụng bộ tiền định 1:4 thì phải mất 4
xung clock thì timer0 mới tăng thêm một đơn vị. Vơ hình chung, giá trị của timer0 (8
bit) lúc này khơng cịn là 255 nữa mà là 255*4=1020.
Các thanh ghi liên quan đến Timer0 bao gồm :
-

TMR0 : chứa giá trị đếm của Timer0

-

INTCON : cho phép ngắt hoạt động

-

OPTION_REG : điều khiển prescaler

Timer1

Hình 2.9 Sơ đồ khối của Timer1
Timer1 là bộ định thời 16 bit, giá trị của Timer1 sẽ được lưu trong hai thanh ghi
8 bit TMR1H:TMR1L. Cờ ngắt của Timer1 là bit TMR1IF, bit điều khiển của Timer1
là TRM1IE.

SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
23



Khoa: Điện - Điện Tư

Cặp thanh ghi của TMR1 sẽ tăng từ 0000h lên đến FFFFh rồi sau đó tràn về 0000h.
Nếu ngắt được cho phép, nó sẽ xảy ra khi khi giá trị của TMR1 tràn từ FFFFh rồi về
0000h, lúc này TMR1IF sẽ bật lên.
Timer1 có 3 chế độ hoạt động :
- Chế độ hoạt động định thời đồng bộ : Chế độ được lựa chọn bởi bit TMR1CS. Trong
chế độ này xung cấp cho Timer1 là Fosc/4, bit T1SYNC khơng có tác dụng.
- Chế độ đếm đồng bộ : trong chế độ này, giá trị của timer1 sẽ tăng khi có xung cạnh
lênh vào chân T1OSI/RC1. Xung clock ngoại sẽ được đồng bộ với xung clock nội,
hoạt động đồng bộ được thực hiện ngay sau bộ tiền định tỉ lệ xung (prescaler).
- Chế độ đếm bất đồng bộ :chế độ này xảy ra khi bit T1SYNC được set. Bộ định thời
sẽ tiếp tục đếm trong suốt quá trình ngủ của vi điều khiển và có khả năng tạo một ngắt
khi bộ định thời tràng và làm cho Vi điều khiển thoát khỏi trạng thái ngủ.
Timer2 : là bộ định thời 8 bit bao gồm một bộ tiền định (prescaler), một bộ hậu định
Postscaler và một thanh ghi chu kỳ viết tắt là PR2. Việc kết hợp timer2 với 2 bộ định
tỉ lệ cho phép nó hoạt động như một bộ đinh thời 16 bit. Module timer2 cung cấp thời
gian hoạt động cho chế độ điều biến xung PWM nếu module CCP được chọn.

Hình 2.10 Sơ đồ khối của Timer2
2.2.7 Ngắt (INTERRUPT)
PIC16F877A có đến 15 nguồn tạo ra hoạt động ngắt và được điều khiển bởi
thanh ghi INTCON (bit GIE). Bên cạnh đó mỗi ngắt cịn có một bit điều khiển và cờ
SVTH: Nguyễn Đình Khiêm
Vũ Hồng Kiên
24


Khoa: Điện - Điện Tư


ngắt riêng. Các cờ ngắt vẫn được set bình thường khi thỏa mãn điều kiện ngắt xảy ra
bất chấp trạng thái của bit GIE. Tuy nhiên hoạt động ngắt vẫn phụ thuộc vào bit GIE
và các bit điều khiển khác. Bit điều khiển ngắt RB0/INT0 và TMR0 nằm trong thanh
ghi INTCON, thanh ghi này còn chứa bit cho phép các ngắt ngoại vi PEIE. Bit điều
khiển các ngắt nằm trong thanh ghi PIE1 và PIE2. Các cờ ngắt ngoại vi được chứa
trong hai thanh ghi chức năng đặc biệt: thanh ghi PIR1 và PIR2. Các bit cho phép ngắt
tương ứng được chứa trong hai thanh ghi PIE 1 và PIE 2.
Trong một thời điểm chỉ có một chương trình ngắt được thực thi, chương trình ngắt
được kết thúc bằng lệnh RETFIE. Khi chương trình ngắt được thực thi, bit GIE tự
động được xóa, địa chỉ lệnh tiếp theo của chương trình chính được cất vào trong bộ
nhớ Stack và bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h. Lệnh RETFIE được dùng
để thoát khỏi chương trình ngắt và quay trở về chương trình chính, đồng thời bit GIE
cũng sẽ được set để cho phép các ngắt hoạt động trở lại. Các cờ hiệu được dùng để
kiểm tra ngắt nào đang xảy ra và phải được xóa bằng chương trình trước khi cho phép
ngắt tiếp tục hoạt động trở lại để ta có thể phát hiện được thời điểm tiếp theo mà ngắt
xảy ra.
Khi một ngắt được đáp ứng, bit GIE được xóa và cấm tất cả các ngắt khác. Cờ ngắt
phải được xóa bởi phần mềm trước khi cho phép lại ngắt. Thông thường, trước khi
thực hiện các chương trình phục vụ ngắt, nội dung các thanh ghi được lưu lại để bảo
đảm an toàn và được phục hồi trước khi trở lại chương trình chính.
Đối với các ngắt ngoại vi như ngắt từ chân INT hay ngắt từ sự thay đổi trạng thái các
Pin của PortB (PORTB interrupt-on-change), việc xác định ngắt nào xảy ra cần 3 hoặc
4 chu kì lệnh tùy thuộc vào thời điểm xảy ra ngắt.
Trong quá trình thực thi ngắt, chỉ có giá trị của bộ đếm chương trình được cất vào
trong Stack, trong khi một số thanh ghi quan trọng sẽ khơng được cất và có thể bị thay
đổi giá trị trong quá trình thực thi chương trình ngắt. Điều này nên được xư lí bằng
chương trình để tránh hiện tượng trên xảy ra.

SVTH: Nguyễn Đình Khiêm

Vũ Hồng Kiên
25


×