Với yêucầu đề tài như trên, hướng thực hiện đề tài của em được tóm tắt như sau: - Sử dụng vi điều khiển PIC16F877A làm chip điều khiển trung tâm.. Đểchuyển từ chức năng này nhập qua chức
Trang 1Đề tài Điều khiển ON_OFF tốc độ
động cơ DC
Trang 2Mục lục
Mục lục 1
Chương I : Giới thiệu về đề tài 5
I.Tóm tắt đề tài đồ án môn học I 5
1 Giới thiệu các module mạch của đề tài 5
2 Sơ đồ nguyên lý kết nối các module trong mạch 5
3 Cách vận hành mạch 6
II Các yêu cầu của đề tài 7
Chương II : Giới thiệu về các linh kiện, phần tử sử dụng trong mạch 8
I Vi điều khiển PIC16F877A 8
1 Khái quát về vi điều khiển PIC16F877A 8
1.2 Nhận xét 9
1.3 Khái quát về chức năng của các port trong vi điều khiển PIC16F877A 9
1.4 Tại sao sử dụng PIC16F877A mà không dùng 8051 cho đề tài 11
2 Tìm hiểu về vi điều khiển PIC16F877A 13
2.1 Cấu trúc phần cứng của PIC16F877A 13
Sơ đồ khối vi điều khiển 16F877A 14
2.2 Tổ chức bộ nhớ PIC16F877a 15
2.2.1 Bộ nhớ chương trình 15
Bộ nhớ chương trình PIC16F877A 15
2.2.2 Bộ nhớ dữ liệu 16
Sơ đồ bộ nhớ dữ liệu của PIC16F877A 17
2.2.3 Một vài thanh ghi chức năng đặc biệt SFR 18
2.3 Thanh ghi W(work) và tập lệnh của PIC16F877A 20
2.3.1 Thanh ghi W 20
2.3.2 Tập lệnh của PIC16F877A 20
2.4 Các vấn đề về Timer 20
II Motor Driver L293D : 23
III Các IC khác 26
IV Đối tượng điều khiển : Động cơ DC 29
Mô hình thứ 1 29
Mô hình thứ 2 31
Chương III : Nguyên lý hoạt động của một số module trong mạch 33
I.Mạch nguồn 5 V chuẩn cung cấp cho vi điều khiển và nguồn 24 cung cấp cho động cơ 33
1 Sơ đồ nguyên lý 33
2 Giải thích nguyên lý hoạt động 33
II Khối mạch reset vi điều khiển PIC16F877A 34
Trang 31.Sơ đồ nguyên lý 34
2 Giải thích 34
III Khối mạch quét phím 35
1.Sơ đồ nguyên lý 35
2 Giải thích kết nối 35
3 Giải thuật quét phím 35
IV Giải thuật điều khiển ON_OFF động cơ DC 36
1.Sơ đồ nguyên lý 36
2 Giải thuật điều khiển 36
Chương IV: Chương trình viết bằng Assembly điều khiển ON_OFF động cơ DC.37 Phụ lục: 38
Tài liệu tham khảo 42
Trang 4Lời cảm ơn
Kính gửi Thầy TS Nguyễn Thiện Thành!
Em là Nguyễn Uy Danh, sinh viên năm 4, khoa Điện_Điện Tử, Đại Học Bách KhoaTp.HCM
Học kỳ này, em rất vinh dự được thực hiện đề tài của đồ án môn học I dưới sự hướng dẫntận tình của Thầy Chính sự nhiệt tình chỉ dẫn của Thầý đã giúp em hoàn thành đồ án khátốt, đạt được những yêu cầu cơ bản mà đề tài đặt ra Và cũng qua đó, em đã học hỏi, tiếpcận được nhiều vấn đề thực tế hơn, bổ sung những “khe hở” kiến thức do việc học thiên
về lý thuyết để lại
Em xin chân thành cảm ơn Thầy
Cũng qua đây, em xin gửi lời cảm ơn chân thành của mình đến gia đình, bạn bè –nhữngngười đã động viên, quan tâm hết mực đến em trong suốt quá trình thực hiện đồ án Đó lànhững động lực thúc đẩy em cố gắng hơn, quyết tâm hơn, để cuối cùng em có được kếtquả như ngày hôm nay
Em xin gửi lời cảm ơn đến tất cả
Sinh viên thực hiệnNguyễn Uy Danh
Chương I : Giới thiệu về đề tài
Trang 5I.Tóm tắt đề tài đồ án môn học I
1 Giới thiệu các module mạch của đề tài
Đề tài đồ án môn học I của em là : “ Điều khiển ON_OFF tốc độ động cơ DC” Với yêucầu đề tài như trên, hướng thực hiện đề tài của em được tóm tắt như sau:
- Sử dụng vi điều khiển PIC16F877A làm chip điều khiển trung tâm
- Xây dựng bàn phím gồm 13 phím Trong đó:
+1 phím để đồng thời reset vi điều khiển và dừng động cơ DC
+ 10 phím ứng với 10 số từ 0 đến 9 để người dùng nhập tốc độ đặt
+ 1 phím ra lệnh động cơ quay thuận (FORWARD)
+ 1 phím ra lệnh động cơ quay ngược (REVERSE)
- Sử dụng 8 led 7 đoạn Trong đó
+ 4 led dùng để người dùng nhập tốc độ đặt mong muốn
+ 4 led để người dùng quan sát tốc độ đo trực tiếp từ động cơ
- Sử dụng driver cầu H L293D trực tiếp điều khiển chiều quay, đóng ngắt động
cơ DC
- Đối tượng điều khiển là động cơ DC có gắn encoder đồng trục
- Ngoài ra, trên mạch còn có các linh kiện khác để thực hiện truyền tín hiệu giữa
vi điều khiển trung tâm với các thiết bị hiển thị nói trên
Tất cả các module mạch trên sẽ được em trình bày rõ trong các phần tiếp theo của đề tài
2 Sơ đồ nguyên lý kết nối các module trong mạch
Trang 63 Cách vận hành mạch
+ Bước 1: ta sẽ nhập tốc độ đặt từ bàn phím Tốc độ đặt này gồm có 4 chữ số, sẽ hiệnlên thông qua 4 led Ta phải nhấn đủ 4 con số thì mạch mới hoạt động được, nếu khôngnhấn đủ mạch sẽ “treo đó”, chờ người dùng nhấn số tiếp Nếu nhập sai tốc độ, ta có thểnhấn phím reset để nhập tốc độ lại từ đầu Nếu nhấn nhầm sang các phím RESERVE hoặcFORWARD trước khi nhập đủ 4 số ở phần cài đặt tốc độ thì người dùng hoàn toàn có thểnhấn lại mà không ảnh hưởng đến kết quả
+ Bước 2: ta nhấn tiếp RESERVE hay FORWARD cho động cơ chạy theo ý muốn.Trong quá trình động cơ quay, vi điều khiển sẽ nhận liên tục nhận xung phát ra từencoder, tính toán ra tốc độ và so sánh với tốc độ đặt ban đầu để ra quyết định ON_OFFđộng cơ Tốc độ nhận về sẽ được so sánh với tốc độ đặt cứ 1ms một lần Ngoài ra cứ 1sthì vi điều khiển sẽ cập nhật tốc độ thực của động cơ, thể hiện ra 4 led 7 đoạn để ngườidùng có thể theo dõi và đánh giá
Trang 7II Các yêu cầu của đề tài
1 Thông qua đề tài, làm quen với cách thức điều khiển đối tượng động cơ
2 Tìm hiểu thực tế các linh kiện, các loại IC, hoạt động của các loại cảm biến…
3 Thiết kế, thi công mạch điều khiển và mạch động lực điều khiển động cơ DC
4 Viết chương trình cho vi điều khiển PIC16F877A thực hiện thành công theo yêucầu đề ra
5 Đánh giá về sai số ,chất lượng hệ thống điều khiển
6 Tìm hiểu các hướng phát triển của đề tài, nâng cao chất lượng của hệ thống
Trang 8Chương II : Giới thiệu về các linh kiện, phần tử sử dụng trong mạch
I Vi điều khiển PIC16F877A
1 Khái quát về vi điều khiển PIC16F877A
1.1.Sơ đồ chân và sơ đồ nguyên lý của PIC16F877A
Sơ đồ chân
Sơ đồ nguyên lý
Trang 10PORTA gồm có 6 chân Các chân của PortA, ta lập trình để có thể thực hiện đượcchứ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ủaPIC16F877A, ở 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ầnmề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 ở địachỉ 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ốnchân nào là output thì ta clear bit tương ứng chân đó trong thanh ghi TRISA Điều nàyhoàn toàn tương tự đối với các PORT còn lại
Ngoà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 sangDigital
- 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)
PORTB
PORTB có 8 chân Cũng như PORTA, các chân PORTB cũng thực hiện được 2 chứcnăng : input và output Hai chức năng trên được điều khiển bới thanh ghi TRISB Khimuố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ằngchương trình
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ềukhiển của thanh ghi TRISC tương tự như hai thanh ghi trên
Trang 11Ngoà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
PORTD
PORTD có 8 chân Thanh ghi TRISD điều khiển 2 chức năng input và output củaPORTD tương tự như trên PORTD cũng là cổng xuất dữ liệu của chuẩn giao tiếp songsong PSP (Parallel Slave Port)
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ủaPORTE có ngõ vào analog Bên cạnh đó PORTE còn là các chân điều khiển của chuẩngiao tiếp PSP
1.4 Tại sao sử dụng PIC16F877A mà không dùng 8051 cho đề tài
Trong chương trình đào tạo của Trường Đại Học Bách Khoa, em được học và thínghiệm trên kit của vi điều khiển 8051 Họ vi điều khiển 8051 là một họ vi điều khiểnđiển hình, phổ biến, dễ sử dụng và lập trình, rất phù hợp với sinh viên mới bắt đầu làmquen đến lập trình cho vi điều khiển Tuy nhiên, cũng trong quá trình nghiên cứu và thínghiệm với các chip điều khiển thuộc họ 8051 ( điển hình là 89C51, 89052…), em nhậnthấy nó có những nhược điểm cơ bản sau đây :
- Bộ nhớ Ram nội có dung lượng thấp , chỉ có 128 bytes Điều nàý gây trở ngại lớn khithực hiện các dự án lớn với vi điều khiển 8051 Để khắc phục ta phải mở rộng thêm làmhạn chế số chân dành cho các ứng dụng của vi điều khiển
- Số lượng các bộ giao tiếp với ngoại vi được tích hợp sẵn trong 8051 ít, không có các
bộ ADC, PWM, truyền dữ liệu song song… Khi muốn sử dụng các chức năng này, taphải sử dụng thêm các IC bên ngoài, gây tốn kém và khó thực hiện vì dễ bị nhiễu nếukhông biết cách chống nhiễu tốt
Trang 12- Ngoài ra còn một số hạn chế khác như số lượng Timer của 8051 ít, chỉ có 2 Timer.Chính điều này làm cho giải thuật khi viết chương trình gặp khó khăn.
Những nhược điểm căn bản trên của 8051, em đã quyết định không dùng vi điều khiểnnày cho đề tài “điều khiển tốc độ động cơ” của mình
Với kỳ vọng dựa trên nền tản kiến thức tiếp thu được khi học vi điều khiển 8051, emrất muốn tự bản thân tìm hiểu một họ vi điều khiển mới mạnh hơn, đầy đủ tính năng hơn
để trước mắt là phuc vụ tốt cho đồ án , luận văn, sau nữa là cho các dự án trong tương lainếu em có dịp sử dụng vi điều khiển trong dự án của mình
Trong quá trình tím kiếm một họ vi điều khiển mới thõa yêu cầu như em đã trình bàytrên Em nhận thấy PIC của hãng Microchip là một lựa chọn lý tưởng Chỉ cần xem xétqua các port và chức năng của các port mà em đã trình bày ở mục 1.3, ta cũng dễ dàngnhận ra những ưu điểm vượt trội của vi điều khiển này so với 8051
Giá của PIC16F877A mà em mua trên thị hiện trường là 50000 đồng, mắc hơn 2 lầngiá một con chip họ 8051 Việc sử dụng PIC16F877A trong một đề tài không lớn như đềtài “điều khiển tốc độ động cơ” có thể là một lãng phí Tuy nhiên với mục đích nâng caokiến thức, nâng cao khả năng tự tìm tòi ,học hỏi qua các kênh thông tin giáo dục khácnhau, nhằm phục vụ mục đích lâu dài sau này, thì đây là một sự lựa chọn hoàn toàn xácđáng Và trên thực tế, trong một thời gian tương đối ngắn, em đã nắm vững được nhữngmãng kiến thức cơ bản nhất để sử dụng nó tốt trong đề tài của mình
Trên là toàn bộ nguyên do tại sao em chọn vi điều khiển PIC16F877A cho đề tài đồ ánmôn học I của mình
Ở phần tiếp theo của báo cáo đồ án môn học I em sẽ đi sâu giới thiệu những phần mà em
đã nghiên cứu được để phục vụ cho việc thực hiện đồ án của mình
2 Tìm hiểu về vi điều khiển PIC16F877A
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 GeneralInstrument đặt tên cho con vi điều khiển đầu tiên của họ Hãng Micrchip tiếp tục pháttriể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
Trang 13PIC16F887A 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
- 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ượngvớ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
Trang 14Sơ đồ khối vi điều khiển 16F877A
Trang 15Để 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
Trang 16Bộ 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.
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 chungGPR 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ươngtrì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ườngxuyên được sử dụng (như thanh ghi STATUS) sẽ được đặt ở tất cả các bank để thuận tiệntrong 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ảmlệnh chương trình
Trang 17Sơ đồ bộ nhớ dữ liệu của PIC16F877ADự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
Trang 18ta 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ệusau) cũng chứa ở bank0
- Bank1 gồm các ô nhớ có địa chỉ từ 80h đến FFh Các thanh ghi dùng chung có địachỉ từ A0h đến Efh Các thanh ghi TRISA, TRISB, TRISC, TRISD, TRISE cũng đượcchứ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ảikhai báo đúng bank chứa thanh ghi đó Nếu thanh ghi nào mà 4 bank đều chứa thì khôngcần phải chuyển bank
2.2.3 Một vài thanh ghi chức năng đặc biệt SFR
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 trongPORTB, 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 viRB0/INT và ngắt khi thay đổi trạng thái tại các chân của PORTB
Trang 19Thanh 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
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
Trang 202.3 Thanh ghi W(work) và tập lệnh của PIC16F877A
2.3.1 Thanh ghi W
Đây là thanh ghi rất đặc biệt trong PIC16F877A Nó có vai trò tương tự như thanh ghiAccummulator 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àyqua 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 tathự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 takhông thể nào tiến hành một phép tính toàn trực tiếp nào giữa 2 thanh ghi với nhau hoặcgiữ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ênquan đế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ẽkhông phải tốn 8 bit để lưu đị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 choPIC16F877A
Trang 21Sơ đồ khối của Timer0Cũng giống như 8051, Timer0 của 16F877A cũng có 2 chức năng : định thời và đếmxung 2 chức năng trên có thể được lựa chọn thông qua bit số 5 TOCS của thanh ghiOPTION
Ngoà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 “dunglượng” của Timer0 Bộ prescaler này có thể được điều chỉnh bởi các 3 bit PS2:PS0 trongthanh 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ùythuộ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 xungclock 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